SDK open source de PDF/EPUB/TXT para leitores web e mobile.
Leia em: English | Portugues (Brasil)
Papyrus e um SDK open source de PDF/EPUB/TXT feito para produtos com documentos pesados. Ele combina uma camada central de estado, engines plugaveis (PDF.js na web, nativo no mobile) e kits de UI para React e React Native.
Suporta PDF, EPUB e TXT. No mobile, EPUB/TXT renderizam via WebView enquanto PDF fica nativo.
Exemplos
- Demo web:
examples/web - React Native:
examples/mobile
Documentacao
- Guia de configuracao
- Event hooks
- Mobile (React Native)
- Release / Publicacao
- FAQ do Papyrus
- SDK PDF Open Source
- SDK EPUB Open Source
- Papyrus vs PDFTron
- Melhor SDK PDF Gratis 2026
Funcionalidades
- Event hooks para pagina, zoom, selecao e anotacoes
- Tipos de documento: PDF, EPUB, TXT
- Busca textual em background com preview
- UI com temas: claro, escuro, sepia, alto contraste
- Arquitetura desacoplada: core, engines e pacotes de UI
Pacotes
| Pacote | Responsabilidade |
|---|---|
@papyrus-sdk/types | Tipos e contratos compartilhados |
@papyrus-sdk/core | Store (Zustand), event bus, search service |
@papyrus-sdk/engine-pdfjs | Adaptador PDF.js para web |
@papyrus-sdk/engine-epub | Adaptador EPUB para web |
@papyrus-sdk/engine-text | Adaptador TXT para web |
@papyrus-sdk/engine-native | Engine nativa (iOS/Android) |
@papyrus-sdk/ui-react | Componentes de UI em React |
@papyrus-sdk/ui-react-native | Componentes de UI em React Native |
@papyrus-sdk/expo-plugin | Plugin Expo para builds nativos |
Inicio rapido (web)
npm install
npm run dev
Abra a URL exibida pelo Vite.
Uso minimo (web)
import { useViewerStore, papyrusEvents } from '@papyrus-sdk/core';
import { PDFJSEngine } from '@papyrus-sdk/engine-pdfjs';
import { PapyrusConfig, PapyrusEventType } from '@papyrus-sdk/types';
import { Viewer, Topbar, SidebarLeft, SidebarRight } from '@papyrus-sdk/ui-react';
const engine = new PDFJSEngine();
const config: PapyrusConfig = {
initialUITheme: 'dark',
initialPage: 1,
sidebarLeftOpen: true
};
useViewerStore.getState().initializeStore(config);
const bootstrap = async () => {
await engine.load('/sample.pdf');
const store = useViewerStore.getState();
store.setDocumentState({
isLoaded: true,
pageCount: engine.getPageCount(),
outline: await engine.getOutline()
});
};
bootstrap();
papyrusEvents.on(PapyrusEventType.DOCUMENT_LOADED, ({ pageCount }) => {
console.log('Loaded pages:', pageCount);
});
// Na sua arvore React:
// <Topbar engine={engine} />
// <SidebarLeft engine={engine} />
// <Viewer engine={engine} />
// <SidebarRight engine={engine} />
Contribuicao
Veja CONTRIBUTING.md.
Licenca
MIT. Veja LICENSE.