Cómo convertir un archivo HTML a PDF (con colores)

30

Tengo un archivo HTML que está usando un style.css y tiene colores, ej .:

<font style=BACKGROUND-COLOR:red; color=white>FOO</font>

¿Cómo puedo "exportar" este archivo local en mi Ubuntu 12.04 a un PDF? (El aspecto y el color deben permanecer iguales). Intenté, por ejemplo: Ctrl+ P-> imprimir en PDF, pero no conservó los colores. Intenté htmldoccon la --coloropción ... pero es el mismo problema ...

Sería genial hacer esto a través de la línea de comando.

Gasko Peter
fuente
Relacionado: Conversor de página web a PDF
kenorb

Respuestas:

36

Abra su archivo html en LibreOffice Writer y luego, Fileen el menú, elija export to PDF. Eso es.

Si prefiere la línea de comando, eche un vistazo a Convertir página HTML a PDF con la herramienta de código abierto - Linux / OS X / Windows .

El software se puede instalar usando sudo apt-get install wkhtmltopdf.


fuente
Creo que esto también puede automatizarse en la línea de comando con algunos esfuerzos. :)
gertvdijk
@gertvdijk, eso está más allá de mi competencia. Nunca he usado LibO a través de CLI.
No es esto, wkhtmltopdf, también, pero no tengo ninguna experiencia de ello: cyberciti.biz/open-source/...
Publique wkhtmltopdf como RESPUESTA, resolvió el problema
gasko peter
@gaskopeter, hecho según lo solicitado editando la respuesta.
10

WeasyPrint parece prometedor. Lo intenté wkhtmltopdfy, aunque representa las cosas de una manera aceptable, no lo hace todo correctamente y crea archivos PDF que tardan muchos segundos en abrirse.

Instalar

pip install weasyprint

correr

weasyprint mypage.html out.pdf

Como extra, podría ser útil alterar el CSS si desea que la vista del navegador y el PDF se vean idénticos.

/* For converting to PDF */
body {
  width: 210mm; /* A4 dimension */
}
@page {
  margin:0;
  padding: 0;
}
Pithikos
fuente
Acabo de intentar instalar weasypeaseypero no funcionó ... ¿Tal vez podrías ayudar? :) Primero hice esto: apt-get install python-dev python-pip python-lxml libcairo2 libpango1.0-0 libgdk-pixbuf2.0-0 libffi-dev shared-mime-infoy luego instalé pip pip install weasypeasypero Could not find any downloads that satisfy the requirement weasypeasy
recibí
1
@clarkk mi mal. En realidad es weasyprint. Entoncespip install weasyprint
Pithikos
3
weasyprintes bueno, pero unas 15 veces más lento de wkhtmltopdflo que recuerdo, por lo que no era adecuado para nosotros generar informes a pedido de nuestros clientes. wkhtmltopdfpuede ser persuadido para hacer un buen trabajo incluso para informes complejos ... ¡con un esfuerzo considerable!
Sam Watkins
Impresionante, conserva el CSS y es increíble ..
Aditya ultra
2

Puede intentar usar PhantomJS y algún código, por ejemplo, usando rasterize.js :

phantomjs rasterize.js http://example.com/

O use el html-pdfpaquete NodeJS npm (vea GitHub , instale a través de :)npm install -g html-pdf como se sugiere en el comentario. Uso:

html-pdf http://example.com/ example.pdf
kenorb
fuente
Hay un paquete npm NodeJS listo para usar: html-pdf - Convertidor HTML a PDF que usa phantomjs.
ruvim
No pude instalarlo con npm debido a la falta de phantomjs-prebuild (que no se pudo instalar correctamente debido a los derechos de acceso, incluso con root)
Martin Thoma
2

He probado WeasyPrint como lo sugirieron otros. No se convierte bien en muchas páginas, y en algunas páginas simplemente falla con un error.

El siguiente complemento de Firefox funciona para mí. Firefox 55. Solo dice Windows pero funciona en Ubuntu.

Disparo de fuego

arrebatado
fuente
1

Pruebe Dompdf (verifique el código fuente en GitHub ), que es un conversor de HTML a PDF. Esta biblioteca es muy fácil de usar y también muy fácil de instalar. Con Composer puedes configurarlo bastante rápido.

Requisitos: PHP 5.0+ (se recomienda 5.3+), extensión DOM, extensión GD

Ejemplo de código PHP:

<?php
// somewhere early in your project's loading, require the Composer autoloader
// see: http://getcomposer.org/doc/00-intro.md
require 'vendor/autoload.php';

// disable DOMPDF's internal autoloader if you are using Composer
define('DOMPDF_ENABLE_AUTOLOAD', false);

// include DOMPDF's default configuration
require_once 'vendor/dompdf/dompdf/dompdf_config.inc.php';


$htmlString = '';
ob_start();
include('html_to_dpf.html');
$htmlString .= ob_get_clean();


$dompdf = new DOMPDF();
$dompdf->load_html($htmlString);
$dompdf->render();
$dompdf->stream("sample.pdf");
Jeff
fuente