25 pontos por GN⁺ 2025-08-16 | 1 comentários | Compartilhar no WhatsApp
  • EmbedPDF é um visualizador de PDF open source que pode ser integrado facilmente a qualquer projeto JavaScript
  • É compatível com vários frameworks de frontend, como React, Vue, Svelte, Preact e Vanilla JS
  • Inclui recursos avançados como anotações, destaque, remoção real de texto (redaction), busca, zoom e rotação
  • Oferece melhor desempenho e extensibilidade com rolagem virtual e arquitetura de plugins
  • Com licença MIT, qualquer pessoa pode usar e contribuir livremente

Visão geral do projeto de visualizador de PDF open source EmbedPDF

  • EmbedPDF é um visualizador de PDF open source e independente de framework, que pode ser incorporado com facilidade em qualquer projeto JavaScript
  • Usa licença MIT e tem como ponto forte a compatibilidade com frameworks de frontend modernos, como React, Vue, Svelte, Preact e Vanilla JS
  • Oferece uma experiência de leitura moderna e uma API amigável para desenvolvedores

Principais recursos

  • Suporte a anotações: oferece vários recursos de anotação, como destaque, notas adesivas, texto livre e tinta
  • Redaction real: ao usar o recurso de redaction, o conteúdo real do documento é removido completamente, oferecendo um recurso de segurança
  • Inclui funções essenciais de manipulação de PDF, como busca, seleção de texto, zoom e rotação
  • Com rolagem suave e virtualizada, é possível visualizar documentos grandes sem perda de desempenho
  • A arquitetura baseada em plugins e os plugins com tree-shaking garantem a exclusão de código desnecessário e facilitam a expansão

Documentação e demo

  • Documentação oficial, guia de instalação, referência de API e exemplos estão disponíveis em https://www.embedpdf.com
  • Na demo ao vivo, é possível enviar arquivos PDF diretamente ou testar os recursos com documentos de exemplo

Open source e licença

  • Com licença MIT, o código-fonte pode ser usado livremente e receber contribuições
  • Inclui o PDFium, e essa parte segue a Apache License 2.0

Comunidade e contribuições

  • A participação da comunidade open source e vários tipos de contribuição são bem-vindos
  • Desenvolvedores podem se comunicar pelo guia de Contributing e pelo Github Discussions

Importância e diferenciais do projeto

  • Como alternativa aos visualizadores de PDF comerciais existentes, qualquer pessoa pode introduzir facilmente um recurso de visualizador de PDF em sistemas internos ou SaaS
  • Seus diferenciais são a alta compatibilidade com diversos frameworks e sua estrutura moderna e modular
  • É um exemplo raro de projeto open source que oferece recursos avançados de processamento de PDF, como redaction

1 comentários

 
GN⁺ 2025-08-16
Comentários do Hacker News
  • O trabalho realmente importante está sendo feito no PDFium; vale lembrar que o PDFium é um projeto que o Google adquiriu da Foxit e continuou desenvolvendo por conta própria, e hoje ele é usado no Chrome (não estou menosprezando o trabalho em discussão, só mencionando que não se trata de um parser de PDF totalmente reescrito do zero)
    • Acho que muitos visualizadores de PDF, inclusive produtos comerciais, são construídos sobre o PDFium
  • Fico curioso sobre o motivo de terem desenvolvido este projeto mesmo já existindo o Mozilla PDF.js https://github.com/mozilla/pdf.js (não é uma crítica; há inúmeros motivos para recriar algo que já existe, então é só curiosidade)
    • O objetivo principal era criar um visualizador de PDF que os desenvolvedores possam integrar facilmente em seus sites; em alguns casos de uso, o PDF.js é difícil ou complexo de customizar e estender
    • Quando é preciso fazer marcação em PDF (anotações, formas, comentários), as opções que vêm à cabeça são construir isso por conta própria ou usar um editor de PDF por assinatura bastante caro; ouvi dizer que equipes que integraram o Apryse sentem bastante o peso do custo mesmo só para oferecer suporte básico de edição de PDF
    • Mesmo numa olhada rápida, dá para ver que há recursos diferentes dos produtos existentes, como comentários de anotação
    • Se você abrir o documento de demonstração em um iPad ou iPhone, verá que o recurso de Print Preview só funciona em dispositivos desktop
    • Ao ver 402 issues abertas, dá para imaginar a enorme complexidade do PDF e o esforço necessário para lidar com todos esses recursos
  • Já fiz um side project com visualizador de PDF embutido; a primeira versão usava pdf.js, mas engasgava ao dar zoom rapidamente e era difícil manter o foco, então implementei eu mesmo com C++ pdfium e renderização Metal; dá para ver no vídeo de demonstração; usei uma abordagem de tiling para equilibrar memória e desempenho; eu não imaginava que o pdfium teria esse nível de desempenho também em WebAssembly, e, na verdade, desenvolver UI na web é mais confortável do que em C++
    • Sinceramente, a demo parece muito mais rápida e suave; a interação de zoom está realmente muito bem implementada; vendo isso, até me deu vontade de voltar a mexer no meu projeto para tentar melhorar o desempenho
  • Estou usando pdf.js (17 MB, 158 páginas, muitas imagens, ambiente Windows) e compartilho alguns problemas que encontrei nos testes
    • Os links não funcionam
    • Os favoritos aparecem, mas não funcionam
    • No Firefox, não dá para selecionar texto
    • No Chrome, o clique do meio do mouse (usado para rolagem) acaba acionando seleção de texto
    • No pdf.js a rolagem é aceitável, mas neste produto, ao rolar, a tela fica borrada por centenas até milhares de milissegundos, com perda severa de qualidade; ao pular várias páginas com a tecla End e similares, só aparece uma tela branca
    • No FF, seta para cima/baixo, Page Up/Down, Home/End não funcionam (esquerda/direita funcionam)
  • Testei rapidamente e, no Firefox, o recurso de anotação simplesmente não funcionou, enquanto no Chrome confirmei que todos os recursos de anotação, como sublinhado e destaque, funcionam normalmente
    • Ainda não consegui testar as anotações no Firefox, então obrigado por avisar; que bom que no Chrome está funcionando sem problemas, e pretendo verificar isso em breve
  • Gostaria de saber se há suporte para editar outline embutido (anotações); sempre foi um dos recursos de que mais senti falta em visualizadores/editores de PDF, e toda vez que recebo um PDF sem outline percebo como isso faz falta
  • Na combinação Linux + Firefox, as ferramentas de anotação/redação no demo não funcionam de jeito nenhum, enquanto no Chromium, na mesma máquina, funcionam bem
    • Acabei de corrigir o problema que ocorria no Firefox; agora os recursos de anotação e redação estão funcionando normalmente tanto em Linux + Firefox quanto em Chromium
  • A documentação também é excelente, e gostei especialmente do conceito de biblioteca React headless; dá para acoplar UI e funcionalidades customizadas com facilidade; quão difícil é destacar/sublinhar automaticamente certos termos e, ao clicar ou passar o mouse, exibir um componente customizado?
    • Dá para fazer isso de forma bem simples; essa funcionalidade já existe; é possível renderizar diretamente o selectionMenu e componentes customizados em AnnotationLayer; se quiser se aprofundar mais, entre em contato pelo canal no Discord
  • O produto parece impressionante; minha dúvida é como vocês pretendem sustentar o desenvolvimento de um visualizador de PDF gratuito tão cheio de recursos; estão planejando recursos enterprise, hospedagem de PDF ou outro modelo de monetização?
    • A resposta para tudo isso é “sim”; o visualizador de PDF no lado do cliente continuará gratuito sob licença MIT, mas recursos adicionais como hospedagem de PDF e análise/controle de acesso para empresas serão oferecidos como serviços pagos
  • No geral funciona bem, mas ao mudar a ferramenta de redação para o modo de visualização (com a linha vermelha ainda ativa), a redação continuava ativada e não dava para rolar a página; resolveu com um refresh
    • Ótimo feedback, vamos corrigir isso em breve; no mobile, desativar a rolagem no modo de redação é um comportamento intencional por causa da conveniência na seleção precisa de áreas, mas ao mudar para a aba de visualização o modo de redação deveria ser encerrado sem falta; obrigado por encontrar isso