Editar * existente * PDF em um navegador

eu tenho uma aplicação web que está recebendo atualmente uma representação base64 de um PDF do servidor. Posso usar o pdf do Mozilla.js para mostrar isto num <canvas> e comutar através das páginas com uma lista.

de acordo com tudo o que consegui encontrar e pode Mozilla pdf.js modificar PDFs?, não é possível editar o PDF com pdf.js.

encontrei jsPDF e enquanto eu sou capaz de pegar a tela e fazer um .toDataURL() com ela para cada página e construir um novo documento PDF com ele, mas há duas questões:

  1. o PDF recém-gerado será apenas uma série de imagens em cada página, então qualquer texto no PDF original será apenas uma imagem depois de eu terminar com ele.
  2. eu gerar um novo PDF com jsPDF e, em seguida, enviar a base64 dele de volta para pdf.js para exibi-lo na tela. Algo acontece entre estes passos onde as imagens das páginas são mal dimensionadas, de modo que cada página ocupa cerca de 3/4 da tela após cada novo PDF alterar. Não consegui que mantivesse o mesmo tamanho / escala.

JsPDF não parece ter uma maneira de carregar um PDF existente, só cria novos. pdfmake e PDFKit também parecem que só criam novos ficheiros PDF.


Então a minha pergunta: Há alguma coisa que permita ver um pdf (de base64) e fazer alterações? Idealmente, eu observaria as mudanças na tela, então desenharia essa mudança para a página pdf. Quando feito, exporta isso para uma string base64 para enviar de volta para o servidor.

Author: Community, 2017-05-19

3 answers

Resposta Rápida-Não e é bastante improvável que você vai encontrar uma solução cross-browser. É muito improvável que você vai encontrar uma solução PDF-perfeito. É melhor pensar em ter os usuários editar HTML e gerar o PDF no servidor.

O formato PDF é brilhante e diabólico ao mesmo tempo. Brilhante por causa de sua portabilidade, mas diabólica por causa da estrutura interna e mecanismos de armazenamento. Não há nenhum 'DOM' amigável como com HTML. Se estivéssemos a começar para desenvolver um formato de documento portátil, não seria PDF que escolheríamos. Mas o PDF atualmente tem muito impulso para ser jogado fora, ponto final. Os telespectadores mais jovens devem estar a perguntar-se como é que este formato maníaco entrou na sua posição de liderança no mercado e de onde veio. Bem, quando os fundadores do PDF estavam estabelecendo o projeto, antes do XML, JSON, HTML e até mesmo a Internet, eles não estavam trabalhando com o compartilhamento de documentos de hoje em mente. Estavam a trabalhar num melhor maneira de codificar as instruções de impressão-o conceito de driver de impressora PostScript. Estes nunca foram esperados para ser editado antes que a impressora os consumisse, e eles eram inúteis para qualquer outro propósito. Em seguida, alguém notou o que você poderia interpretar as instruções de desenho PostScript para uma tela, e, posteriormente, alguém viu o potencial fantástico para empregar isso como um conceito de exibição de dispositivo transportável, cross. E aqui estamos nós.

De volta à pergunta-para editar um PDF em qualquer uma forma de GUI significativa, você precisa desempacotar o PDF e renderizar os componentes (imagens, texto formatado, páginas) para o dispositivo de exibição; em seguida, permitir que as pessoas para mexer com o layout; em seguida, re-embalar o PDF. Você teria que fazer isso perfeitamente em linha com os padrões PDF caso contrário você pode encontrar os consumidores a jusante de seu crash arquivo PDF editado ou são incapazes de rendê-lo. Você teria que atender para os vários níveis padrão Acrobat, e os atalhos e inchaços que o pacote de edição (palavra, Ilustrador, InDesign) vendedores chuck no arquivo PDF; camadas, miniaturas, etc.

Então chegamos às cores. Tenha uma leitura do spec PDF e você vai ver que há uma série de opções colorspace que o produtor original PDF pode decidir usar. Você teria que interpretar estes para uma cor razoável do dispositivo na tela e para trás, etc.

E depois fontes. Os tipos de letra podem ser subconjuntos incorporados, ou não. Para manter a fidelidade com o PDF você terá que realizar os glifos como vetor gráficos na sua superfície de desenho na escala definida no PDF. Isto significa, na maioria das vezes, utilizar algum tipo de biblioteca de tipo dependente da plataforma-plataforma cruzada complicada. Além disso, o fato de que você vai precisar licenciar as fontes para uso apropriado, que pode ser caro para as fontes que a maioria das pessoas querem usar para olhar hip e profissional.

Dadas as características de camadas, escala e rotação em PDF, você provavelmente estaria olhando para uma tela html como a superfície de desenho. Qualquer um que conheça te dirá que no mundo da tela você está praticamente por conta própria para funções do tipo de processamento de texto.

Não é impossível, mas é difícil.

Os componentes que rendem o PDF a um ecrã estão em grande parte a actuar como controladores de impressão, obedecendo servilmente às instruções de desenho PDF, e geralmente a gerar um raster ou, por vezes, um gráfico SVG. Esta é uma rua de Sentido Único-eles lêem e desenham, mas não há sentido de 'pegas' para os objetos desenhados. Sem pegas significa sem manipulação, e estes tipos certamente têm pouca intenção de deixar você modificar e escrever de volta.

Você vai encontrar muitos produtos' save to pdf'. Quando do lado do cliente eles estarão inclinados para pegar um conjunto de pixels e jogar um gráfico raster em um arquivo com o mais fino verniz da definição de 'PDF' enrolado em torno dele. Onde eles são baseados em servidor, então eles podem ser bastante poderosos - há uma abundância de ferramentas como Aspose, e ABCPDF que realmente oferecem algum lado do servidor de wrangling PDF - mas isso não é o que você está procurando em seu OP.

Resumo-assunto muito complicado. Se alguma coisa emergir como um potencial, provavelmente terá muitas restrições em termos dos recursos PDF cobertos e, portanto, restrições sobre o que ele pode editar com segurança.

Se está à procura de edição online de documentos que são exportados como PDF, então uma forma de seguir em frente é manter uma versão html da fonte do documento e fazer com que o utilizador edite isto com TinyMCE, CKEditor, etc, então use uma das ferramentas do lado do servidor para levar o gravado source HTML e renderizar para PDF. Ferramentas como ABCPDF rendem HTML fielmente permitem adicionar imagens, cabeçalhos e rodapés, números de páginas, etc.

Esta é uma resposta pragmática para a sua necessidade (assumida), embora ainda tenha alguns compromissos em termos de questões de tipo de letra (licencing), dificuldade de editores baseados em browser, estranheza total do HTML estabelecido por alguns componentes de edição HTML, etc. Mas é viável.

Pensamentos finais-repensar o alcance do que você precisa. Se edição em HTML e convert to PDF at server is usable for you it is a well-trodden path and you will find both free and commercial components for client and server to support it.

Editar: Se você precisa anotar o PDF então as coisas são muito mais fáceis. No servidor, você precisa gerar imagens de páginas do documento, enviá-las para o cliente, exibe para o usuário, permite que o usuário marca-los, captura as coordenadas das anotações de volta para o servidor e usar um servidor-lado PDF biblioteca de renderização the annotations into the PDF. É alcançável, embora requer vários skillsets para o lado do servidor PDF para manipulação de imagem e apresentação do lado do cliente e captura de anotações.

 10
Author: Vanquished Wombat, 2017-08-17 13:04:15

Porque outras perguntas do SO estão sendo direcionadas aqui, e considerando o quão rápido a tecnologia web avança( por exemplo WASM), eu estou fornecendo a seguinte resposta. Embora PDFNetJS foi capaz de fazer tudo isso quando a pergunta foi originalmente feita.

Uma vez que o requisito de "editar" foi clarificado para ser "{[[4]}basicamente o que é necessário é que os usuários abram uma seção PDF, realce ou círculo previamente carregado, e então salvar essas anotações para o PDF de volta no servidor." e " não é necessário editar ou manipular o conteúdo do documento.", então sim, isso é completamente possível em qualquer navegador moderno em qualquer dispositivo moderno.

PDFTron PDFNet SDK pode fazer tudo isto. Um visualizador de documentos completo, fora da caixa, é fornecido, com suporte de anotações completas. Também é possível realmente editar o PDF (alterar/substituir texto, redact, extrair/adicionar/substituir imagens, e muito mais). Não só os arquivos PDF são suportados diretamente do lado cliente, mas também são DOCX, PPTX, XLSX, PNG e JPG. Os arquivos podem ser carregados localmente ou remotamente, e não há necessidade de codificação/decodificação lento base64.

Demo: http://www.pdftron.com/webviewer

Amostras: http://www.pdftron.com/documentation/web/samples/universal-samples

A questão original era também o suporte para Siebel e " PDFNetJS tenta recuperar um .mem file, que é alguns dados binários. Isto não pode ser servido pela aplicação que estou usando (Siebel) para que não me parece que isto seja uma opção.".

O .o ficheiro mem é para o PNaCl, Que É só para o Chrome, e isto pode ser desactivado. PDFTron para web supports WASM and even emscripten, one of which, if not both, should then be compatible with Siebel.

 2
Author: Ryan, 2018-07-06 05:28:35

Para referência futura:

Encontrei duas bibliotecas, que lhe permitem editar PDFs existentes no navegador para certos extends. O segundo ainda não está documentado, por isso não sei exactamente o que faz. Pode ser a solução para esse problema no futuro.

 1
Author: allinonemovie, 2018-06-01 19:13:01