2012-07-27 19 views
6

Sé que hay muchas bibliotecas pero ninguna parece coincidir exactamente con mi situación. Así que espero obtener algunos consejos aquí ...HTML y CSS a PDF en JavaScript

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

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

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

Cualquier maneras de hacerlo se recomienda?


Actualización: mirar en wkhtmltopdf

+0

¿Qué bibliotecas ha encontrado y por qué no coinciden con su caso? – Bergi

+0

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

Respuesta

5

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); 
    }); 
    }); 
}); 

OMI Es un poco feo, ya que requiere hacer un archivo y convertirlo, y luego servirlo, y finalmente eliminar los dos. Sospecho que hay problemas de escalabilidad aquí. También wkhtmltopdf parece no jugar bien con osx. Sin embargo, no hay tal problema en Linux.

0

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

+0

He intentado hacer funcionar wkhtmltopdf pero tengo problemas importantes. – Max

+0

Actualmente, cuando ejecuto wkhtmltopdf, ya sea manualmente desde la terminal o desde un nodo, aparece un nuevo proceso en mi Mac Dock y tengo que hacer clic para continuar. De lo contrario, simplemente se bloquea. – Max