Generazione di file PDF con JavaScript


268

Sto cercando di convertire i dati XML in file PDF da una pagina Web e speravo di poterlo fare interamente all'interno di JavaScript. Devo essere in grado di disegnare testo, immagini e forme semplici. Mi piacerebbe poterlo fare interamente nel browser.

Risposte:


446

Ho appena scritto una libreria chiamata jsPDF che genera PDF usando solo Javascript. È ancora molto giovane e presto aggiungerò funzionalità e correzioni di bug. Sono state inoltre fornite alcune idee per soluzioni alternative nei browser che non supportano gli URI dei dati. È concesso in licenza con una licenza MIT liberale.

Mi sono imbattuto in questa domanda prima di iniziare a scriverla e ho pensato di tornare e farti sapere :)

Genera PDF in Javascript

Esempio creare un file 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>


10
Ho parzialmente ispirato jsPDF? Ho saputo di jsPDF il giorno in cui l'hai annunciato. Finora sembra fantastico. Ho finito per andare con Prawn in quanto è facilmente la migliore libreria di generazione PDF disponibile per le mie esigenze. Mi piacerebbe ancora fare tutto il mio lavoro nel browser poiché non sono sicuro che avrò Ruby sul sistema su cui sto implementando. Sto guardando jsPDF molto da vicino. Mi piacerebbe dare una mano, ma il mio tempo è molto limitato. Ciò potrebbe cambiare in futuro.
ameba,

7
Lo hai ispirato in qualche modo :), mi guardavo intorno su Internet per vedere se esisteva già e ho visto che alcune persone lo avrebbero trovato utile. Fammi sapere se vuoi dare una mano. Sono @MrRio su Twitter.
James Hall,

23
È ancora molto vivo. 0.9.0rc2 Rilasciato oggi.
James Hall,

87
@JamesHall, vorrei ringraziarti per tutto il lavoro necessario per scrivere questo, e per il MIT che lo autorizza a rendere il mondo un posto migliore in cui avresti potuto commercializzarlo per il tuo guadagno.
Charles Burns,

16
I downvoter possono offrirci idee o soluzioni "migliori"? Questo è uno sforzo eccellente.
Onur Yıldırım,

138

Un'altra libreria javascript degna di nota è pdfmake .

Il supporto del browser non sembra essere forte come jsPDF, né sembra esserci un'opzione per le forme, ma le opzioni per la formattazione del testo sono più avanzate di quelle attualmente disponibili in jsPDF.


7
Questa risposta dovrebbe essere molto più votata, pdfmake è molto più robusto di jspdf. Tuttavia, solo una nota a margine, è un wrapper per la libreria PDFKit.
vittore,

2
un'altra nota a margine, jspdf non ha il supporto utf-8 e pdfmake ha il supporto utf-8 solo per i caratteri predefiniti.
Leo,

"pdfmake.min.js - 0.1.22 - 9 ore fa" Non è morto, aggiornato oggi.
zenbeni,

Dal confronto tra i due campi da gioco, per me sembra che jsPDF sia più mirato alla creazione di PDF "grafici", mentre pdfmake è più mirato alla generazione di documenti "semplici" ben formattati, sembra avere molte più opzioni per la formattazione generica del testo.
cslotty,

Questo IE è amichevole?
Wildhammer,

59

Io sostengo PDFKit , che ha anche poteri pdfmake (già accennato qui). Funziona sia in Node che nel browser e supporta un sacco di cose che altre librerie non:

  • Incorporamento di caratteri sotto settati, con supporto per Unicode.
  • Un sacco di elementi avanzati di layout del testo (colonne, interruzione di pagina, interruzione di riga unicode completa, rich text di base, ecc.).
  • Lavorare su ancora più elementi per la tipografia avanzata (legature OpenType / AAT, sostituzione contestuale, ecc.). Prossimamente: vedi il ramo di fontkit se sei interessato.
  • Altre cose grafiche: gradienti, ecc.
  • Costruito con strumenti moderni come browserify e stream. Utilizzabile sia nel browser che nel nodo.

Dai un'occhiata a http://pdfkit.org/ per un tutorial completo per vedere di persona cosa può fare PDFKit. E per un esempio di quali tipi di documenti possono essere prodotti, controlla i documenti come PDF generati da alcuni file Markdown usando PDFKit stesso: http://pdfkit.org/docs/guide.pdf .

Puoi anche provarlo interattivamente nel browser qui: http://pdfkit.org/demo/browser.html .


Non è una libreria lato server? Penso che la discussione sia sulla libreria js lato client.
Ash Catchem,

10
PDFKit funziona sia in Nodo che nel browser, come indicato nella risposta. Vedi il link a una demo del browser.
devongovett,

Questo comprime le immagini? Sto lavorando a un'app Web che funziona in modo simile a Camscanner e sto cercando la creazione di PDF tramite JavaScript per sfruttare la compressione e il formato multipagina.
Trevor,

@devongovett puoi leggere la mia domanda sulla tua biblioteca?
ninbit

8

Un altro progetto interessante è texlive.js .

Ti permette di compilare (La) TeX in PDF nel browser.


L'esempio ciao mondo viene visualizzato correttamente, ma richiede circa 30 secondi per essere completato.
Sam Sippe,

2

È possibile utilizzare questo servizio gratuito aggiungendo un collegamento che crea pdf da qualsiasi URL (ad esempio http://www.phys.org ):

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


1
Aggiornamento: quando sono andato a controllare questo servizio freehtmltopdf.com mi ha detto che non era più disponibile. Sembra comunque fantastico!
Mark Duiker,

controllato ora - funziona. ed è fantastico, io uso un servizio in cui pago per ogni pdf e ho bisogno di programmare, questo è un risolutore di problemi.
Sergey Sob,

-29

Anche se tu potessi generare il PDF in memoria in JavaScript, avresti ancora il problema di come trasferire tali dati all'utente. È difficile per JavaScript inviare semplicemente un file all'utente.

Per ottenere il file per l'utente, è necessario eseguire un invio del server per consentire al browser di visualizzare la finestra di dialogo di salvataggio.

Detto questo, non è davvero troppo difficile generare PDF. Leggi le specifiche.


1
Non è affatto difficile, ad esempio sembra funzionare con URI dati en.wikipedia.org/wiki/Data_URI_scheme (l'ho già fatto prima ma non ricordo se ho usato URI dati).
Björn,

58
Al giorno d'oggi puoi facilmente creare file in JavaScript. (Vengo dal futuro)
Derek 朕 會 功夫

5
Al giorno d'oggi è davvero semplice .. controlla questo per esempio: github.com/ChenWenBrian/FileSaver.js
roy riojas

9
@FrankKrueger se elimini la tua risposta, guadagnerai 6 punti: P
Kamil Kiełczewski

8
@FrankKreuger, "Vai a leggere le specifiche" non è quasi mai la risposta giusta su SO.
Krishnan Venkiteswaran,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.