Gerando arquivos PDF com JavaScript

268

Estou tentando converter dados XML em arquivos PDF a partir de uma página da web e esperava poder fazer isso inteiramente em JavaScript. Preciso desenhar texto, imagens e formas simples. Eu adoraria poder fazer isso inteiramente no navegador.

ameba
fonte

Respostas:

446

Acabei de escrever uma biblioteca chamada jsPDF, que gera PDFs usando apenas Javascript. Ainda é muito jovem, e adicionarei recursos e correções de erros em breve. Também recebi algumas idéias para soluções alternativas em navegadores que não oferecem suporte a URIs de dados. É licenciado sob uma licença liberal do MIT.

Me deparei com essa pergunta antes de começar a escrevê-la e pensei em voltar e informar você :)

Gere PDFs em Javascript

Exemplo: crie um arquivo PDF "Hello World".

// Default export is a4 paper, portrait, using milimeters for units
var doc = new jsPDF()

doc.text('Hello world!', 10, 10)
doc.save('a4.pdf')
<script src="https://cdnjs.cloudflare.com/ajax/libs/jspdf/1.3.5/jspdf.debug.js"></script>

James Hall
fonte
10
Inspirei parcialmente o jsPDF? Eu aprendi sobre o jsPDF no dia em que você o anunciou. Parece ótimo até agora. Acabei optando pelo Prawn, pois é facilmente a melhor biblioteca de geração de PDF disponível para os meus requisitos. Eu ainda adoraria fazer todo o meu trabalho no navegador, pois não tenho certeza de encontrar o Ruby no sistema em que estou implantando. Estou assistindo jsPDF de muito perto. Eu adoraria ajudar, mas meu tempo é muito limitado. Isso pode mudar no futuro.
Ameba
7
Você o inspirou um pouco :), eu estava procurando na internet para ver se ela já existia e vi que algumas pessoas considerariam útil. Deixe-me saber se você gostaria de ajudar. Sou @MrRio no twitter.
726 James Hall
23
Ainda está muito vivo. 0.9.0rc2 Lançado hoje.
James Hall
87
@ JamesHall, gostaria de agradecer por todo o trabalho necessário para escrever isso e pelo licenciamento do MIT para tornar o mundo um lugar melhor quando você poderia comercializá-lo para seu próprio ganho.
Charles Burns
16
Os downvoters podem nos oferecer suas "melhores" idéias ou soluções? Este é um excelente esforço.
Onur Yıldırım
138

Outra biblioteca javascript que vale a pena mencionar é o pdfmake .

O suporte ao navegador não parece ser tão forte quanto o jsPDF, nem parece haver uma opção para formas, mas as opções para formatar o texto são mais avançadas que as opções atualmente disponíveis no jsPDF.

mg1075
fonte
7
Essa resposta deve ser votada muito mais, o pdfmake é muito mais robusto que o jspdf. No entanto, apenas uma observação, é um invólucro em torno da biblioteca PDFKit.
vittore
2
Outra observação: o jspdf não tem suporte ao utf-8 e o pdfmake tem suporte ao utf-8 apenas para fontes padrão.
5306 Leo
"pdfmake.min.js - 0.1.22 - 9 horas atrás" Não está morto, atualizado neste dia.
Zenbeni
Ao comparar os dois playgrounds, para mim parece que o jsPDF é mais voltado para a criação de PDF "gráfico", enquanto o pdfmake é mais voltado para a geração de documentos "simples" bem formatados, parece ter muito mais opções para a formatação genérica de texto.
precisa
Este IE é amigável?
Wildhammer
59

Eu mantenho o PDFKit , que também alimenta o pdfmake (já mencionado aqui). Ele funciona no Node e no navegador e suporta várias coisas que outras bibliotecas não:

  • Incorporando fontes subconjuntos, com suporte para unicode.
  • Muitos recursos avançados de layout de texto (colunas, quebra de página, quebra de linha unicode completa, rich text básico, etc.).
  • Trabalhando em ainda mais fontes para tipografia avançada (ligaduras OpenType / AAT, substituição contextual etc.). Em breve: consulte o ramo do kit de fontes, se você estiver interessado.
  • Mais material gráfico: gradientes, etc.
  • Construído com ferramentas modernas, como browserify e fluxos. Utilizável no navegador e no nó.

Confira http://pdfkit.org/ para um tutorial completo e veja por si mesmo o que o PDFKit pode fazer. E, para um exemplo de que tipos de documentos podem ser produzidos, confira os documentos como um PDF gerado a partir de alguns arquivos do Markdown usando o próprio PDFKit: http://pdfkit.org/docs/guide.pdf .

Você também pode experimentá-lo interativamente no navegador aqui: http://pdfkit.org/demo/browser.html .

devongovett
fonte
Não é uma biblioteca do lado do servidor? Eu acho que a discussão está na biblioteca js do lado do cliente.
Ash Catchem 16/03/2015
10
O PDFKit funciona no Node e no navegador, conforme mencionado na resposta. Veja o link para uma demonstração do navegador.
devongovett
Isso comprime imagens? Estou trabalhando em um aplicativo da Web que funciona de maneira semelhante ao camscanner e estou procurando a criação de PDF por meio de javascript para alavancar a compactação e o formato de várias páginas.
Trevor
@devongovett, você pode ver minha pergunta sobre sua biblioteca?
Ninbit 15/03/19
8

Outro projeto interessante é o texlive.js .

Ele permite que você compile (La) TeX para PDF no navegador.

Kpym
fonte
O exemplo do olá mundo é renderizado com perfeição, mas leva cerca de 30 anos para ser concluído.
Sam Sippe
2

Você pode usar este serviço gratuito adicionando um link que cria pdf a partir de qualquer URL (por exemplo, http://www.phys.org ):

http://freehtmltopdf.com/?convert=http%3A%2F%2Fwww.phys.org&size=US_Letter&orientation=portrait&framesize=800&language=en

boateng
fonte
1
Atualização: Quando fui verificar este serviço do freehtmltopdf.com , ele disse que não estava mais disponível. Parece que foi incrível!
Mark Duiker
verificado agora - funciona. e é incrível, eu uso um serviço em que pago por cada pdf e preciso codificar, esse é um solucionador de problemas.
Sergey Sob
-29

Mesmo se você pudesse gerar o PDF na memória em JavaScript, ainda teria o problema de como transferir esses dados para o usuário. É difícil para o JavaScript simplesmente enviar um arquivo ao usuário.

Para obter o arquivo para o usuário, você deve enviar um servidor para que o navegador abra a caixa de diálogo Salvar.

Com isso dito, realmente não é muito difícil gerar PDFs. Basta ler as especificações.

Frank Krueger
fonte
1
Não é nada difícil, por exemplo, parece funcionar com URIs de dados en.wikipedia.org/wiki/Data_URI_scheme (já fiz isso antes, mas não me lembro se usei URIs de dados).
Björn
58
Você pode criar facilmente arquivos em JavaScript atualmente. (Eu sou do futuro)
Derek朕會功夫
5
É realmente simples hoje em dia .. verificar isso, por exemplo: github.com/ChenWenBrian/FileSaver.js
roy Riojas
9
@FrankKrueger se você excluir sua resposta, você ganhará 6 pontos: P
Kamil Kiełczewski
8
@FrankKreuger, "Vá ler as especificações" quase nunca é a resposta certa para o SO.
Krishnan Venkiteswaran 30/10