Generación de archivos PDF con JavaScript


Estoy tratando de convertir datos XML en archivos PDF desde una página web y esperaba poder hacerlo completamente dentro de JavaScript. Necesito ser capaz de dibujar texto, imágenes y formas simples. Me encantaría poder hacer esto completamente en el navegador.

Author: Xufox, 2009-04-12

6 answers

Acabo de escribir una biblioteca llamada jsPDF que genera archivos PDF usando solo Javascript. Todavía es muy joven, y pronto agregaré características y correcciones de errores. También tengo algunas ideas para soluciones en navegadores que no admiten URI de datos. Está licenciado bajo una licencia liberal del MIT.

Me encontré con esta pregunta antes de empezar a escribirla y pensé en volver y hacerle saber:)

Generar archivos PDF en Javascript

Ejemplo crear un "Hola World " PDF file.

// 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>
 349
Author: James Hall,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-05-28 12:18:46

Otra biblioteca javascript que vale la pena mencionar es pdfmake.

El soporte del navegador no parece ser tan fuerte como jsPDF, ni parece haber una opción para las formas, pero las opciones para formatear el texto son más avanzadas que las opciones disponibles actualmente en jsPDF.

 100
Author: mg1075,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-05-07 12:13:18

Mantengo PDFKit, que también alimenta pdfmake (ya mencionado aquí). Funciona tanto en el nodo como en el navegador, y soporta un montón de cosas que otras bibliotecas no hacen:

  • Incrustación de fuentes subconjuntos, con soporte para unicode.
  • Muchas cosas de diseño de texto avanzado (columnas, saltos de página, saltos de línea unicode completos, texto enriquecido básico, etc.).
  • Trabajando en más fuentes para tipografía avanzada (ligaduras OpenType/AAT, sustitución contextual, sucesivamente.). Próximamente: consulte la rama fontkit si está interesado.
  • Más cosas gráficas: gradientes, etc.
  • Construido con herramientas modernas como browserify y streams. Utilizable tanto en el navegador como en el nodo.

Echa un vistazo http://pdfkit.org / para un tutorial completo para ver por ti mismo lo que PDFKit puede hacer. Y para un ejemplo de qué tipos de documentos se pueden producir, echa un vistazo a los documentos como un PDF generado a partir de algunos archivos Markdown usando PDFKit en sí: http://pdfkit.org/docs/guide.pdf .

También puedes probarlo interactivamente en el navegador aquí: http://pdfkit.org/demo/browser.html .

 46
Author: devongovett,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-02-05 03:35:12

Otro proyecto interesante es texlive.js .

Permite compilar (La)TeX a PDF en el navegador.

 7
Author: Kpym,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-05-30 13:39:01

Puede usar este servicio gratuito agregando un enlace que crea pdf desde cualquier url (por ejemplo, http://www.phys.org):

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

 2
Author: numbtongue,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-04-22 01:57:36

Incluso si pudiera generar el PDF en memoria en JavaScript, todavía tendría el problema de cómo transferir esos datos al usuario. Es difícil para JavaScript simplemente enviar un archivo al usuario.

Para obtener el archivo al usuario, debería hacer un envío del servidor para que el navegador abra el diálogo guardar.

Dicho esto, realmente no es demasiado difícil generar archivos PDF. Solo lee las especificaciones.

 -15
Author: Frank Krueger,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-04-12 23:21:16