HTML y CSS a PDF en JavaScript

Sé que hay un montón de bibliotecas, pero ninguna parece coincidir exactamente con mi escenario. Así que espero obtener algún consejo aquí...

tecnologías: estoy usando Node.js en Express.js para el back-end y html/css/js para el front-end. El soporte del navegador es IE8 y superior, Chrome, FF y otros navegadores modernos.

Lo que debo hacer es: tener un botón "a pdf" para que el usuario haga clic, lo que luego convertiría una parte del DOM a pdf. Este fragmento de html de DOM se genera dinámicamente cuando el back-end realiza llamadas API a otra aplicación. El CSS es estático.

Aparte de estos, tengo mucha libertad para hacer lo que quiera, siempre que no tenga que enviar datos de texto sin cifrar a terceros, etc.

¿Alguna forma recomendada de hacerlo?


Actualización: buscando en wkhtmltopdf

preguntado el 27 de julio de 12 a las 20:07

¿Qué bibliotecas has encontrado y por qué no coinciden con tu caso? -

bueno, por ejemplo, jspdf se ve muy bien, pero no acepta CSS -

2 Respuestas

Básicamente, esto es lo que terminé haciendo.

console.log("before");
fs.writeFile(html_filename, html, function (err) {
  if (err) {res.writeHead(400); res.end("" + err); return;}

  console.log("wrote html fine; now converting");
  exec('wkhtmltopdf ' + html_filename + ' ' + pdf_filename, function (err, stdout, stderr) {
    if (err) {res.writeHead(400); res.end("" + err); return;}

    console.log("converted; now reading");
    fs.readFile(pdf_filename, function (err, data) {
      if (err) {res.writeHead(400); res.end("" + err); return;}

      console.log("read fine; now serving");
      res.writeHead(200, {"content-type" : "application/pdf"});
      res.end(data);
    });
  });
});

En mi opinión, es un poco feo, ya que requiere crear un archivo, luego convertirlo y luego servirlo, y finalmente eliminar los dos. Sospecho problemas de escalabilidad aquí. También parece que wkhtmltopdf no funciona bien con osx. Sin embargo, no hay tal problema en Linux.

Respondido 01 ago 12, 01:08

Pruebe wkhtmltopdf. Puede ver fácilmente la implementación actual del controlador para Ruby on Rails y aplicarlo a node y express. Básicamente, llama a una aplicación de línea de comandos y se convertirá a PDF utilizando su CSS de impresión.

Respondido 31 Jul 12, 02:07

He estado tratando de hacer que wkhtmltopdf funcione, pero tengo problemas importantes. - Max

Actualmente, cuando ejecuto wkhtmltopdf, ya sea manualmente desde la terminal o desde el nodo, aparece un nuevo proceso en mi base de mac y tengo que hacer clic en él para continuar. De lo contrario, simplemente se cuelga. - Max

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.