desarrollo-web-br-bd.com

¿Existe una herramienta de línea de comandos para convertir archivos html a pdf?

Me gustaría instalar una herramienta de línea de comandos dentro de una imagen de Docker para convertir rápidamente archivos * html en * archivos pdf.

Me sorprende que no haya una herramienta Unix para hacer algo como esto.

20
EB2127

pandoc es una gran herramienta de línea de comandos para la conversión de formatos de archivo.

La desventaja es para PDF salida, necesitará LaTeX. El uso es

pandoc test.html -t latex -o test.pdf

Si no tiene instalado LaTeX, le recomiendo htmldoc .


Citado de Creando un PDF

Por defecto, pandoc usará LaTeX para crear el PDF, lo que requiere que se instale un motor LaTeX.

Alternativamente, pandoc puede usar ConTeXt, pdfroff o cualquiera de los siguientes motores HTML/CSS a PDF, para crear un PDF: wkhtmltopdf, weasyprint o prince. Para hacer esto, especifique un archivo de salida con una extensión .pdf, como antes, pero agregue la opción --pdf-engine o -t context, -t html o -t ms a la línea de comando (-t html se establece de manera predeterminada en - -pdf-engine = wkhtmltopdf).

27

También puede probar wkhtmltopdf , el uso y la instalación son bastante sencillos.

15
guitarman

weasyprint es una opción. Un posible inconveniente es que necesitará python en su máquina.

Instalar:

pip install weasyprint

Convertir:

weasyprint in.html out.pdf
6
shiftas

He estado usando con éxito la rama 1.8 de HTMLDOC durante años. Lo puse en un sistema comercial que desde entonces ha generado cientos de miles de informes desde 2003.

No es súper versátil, pero es muy eficiente y confiable. Está limitado a un conjunto básico de fuentes PostScript.

No es compatible con CSS, sino que utiliza una directiva especial de comentarios HTML establecida para controlar PDF aspectos específicos.

El código fuente no es demasiado difícil de leer y editar si necesita agregar recursos personalizados, si se siente cómodo con C. Está compilado con GCC o Visual Studio, dependiendo de su plataforma de destino.

Tenga en cuenta que el HTML no necesita estar en un archivo. Puede generarlo dinámicamente desde una URL, php o aspx, etc. También puede conectarlo en su servidor web para generar un archivo PDF dinámicamente.

En mi caso de uso, genera un archivo PDF desde una página asp que luego se adjunta a un correo electrónico, en lugar de enviar el HTML a la impresora y la máquina de relleno de cartas; es una especie de cola de impresión .

1
birdwes

También hay un programa html2ps, y luego puede convertir fácilmente el archivo PostScript a pdf. Utilicé esto hace varios años, y el IIRC hizo un trabajo bastante bueno en un manual grande.

1
jamesqf

PhantomJS puede hacer el trabajo por usted. Tiene funcionalidad de línea de comando y funciona de forma inmediata. Se le pedirá que escriba una función Javascript simple para decirle qué hacer. El sitio tiene una guía de inicio rápido y hay muchos artículos en línea para ayudarlo. El uso es generalmente el siguiente:

phantomjs configFile.js htmlFile.html output.pdf

Aquí hay un script de muestra para generar un retrato A4 PDF tomado de aquí , guárdelo como su configFile.js

var page = require('webpage').create(),
    system = require('system'),
    fs = require('fs');

page.paperSize = {
    format: 'A4',
    orientation: 'portrait',
    margin: {
        top: "1.5cm",
        bottom: "1cm"
    },
    footer: {
        height: "1cm",
        contents: phantom.callback(function (pageNum, numPages) {
            return '' +
                '<div style="margin: 0 1cm 0 1cm; font-size: 0.65em">' +
                '   <div style="color: #888; padding:20px 20px 0 10px; border-top: 1px solid #ccc;">' +
                '       <span>REPORT FOOTER</span> ' +
                '       <span style="float:right">' + pageNum + ' / ' + numPages + '</span>' +
                '   </div>' +
                '</div>';
        })
    }
};

page.settings.dpi = "96";

page.content = fs.read(system.args[1]);

var output = system.args[2];

window.setTimeout(function () {
    page.render(output, {format: 'pdf'});
    phantom.exit(0);
}, 2000);
1
The Betpet