2009-09-10 30 views
27

Soy desarrollador de PHP y en uno de mis proyectos necesito convertir algunos documentos HTML (de 30 a 50 páginas) en documentos PDF.Conversión de HTML a PDF (no PDF a HTML) usando PHP

Mi búsqueda ha encontrado las siguientes soluciones posibles. Entre ellos se encuentran algunas bibliotecas de PHP y algunas aplicaciones de línea de comandos. Cada uno tiene sus propias ventajas y desventajas.

bibliotecas PHP:

  1. FPDF (se necesita más esfuerzo para convertir)
  2. TCPDF (se necesita más esfuerzo para convertir)
  3. html2fpdf http://html2fpdf.sourceforge.net
  4. html2pdf http://html2pdf.fr/
  5. DOMPDF http://code.google.com/p/dompdf/ (comparado con otro, funciona bien)

Para cada biblioteca, tengo problemas como:

  1. tarda mucho tiempo (más de cinco minutos para convertir 30 páginas HTML)
  2. Requiere demasiados recursos (memoria y tiempo)

    (I establecer los siguientes parámetros en php.ini:

    max_execution_time = 600
    memory_limit = 250M

    pero las cosas aún no funcionan.)

  3. Necesita que las páginas HTML estén bien formateadas (p. no faltan cerca tags)

Todos estos trabajos cuando intento para convertir documentos HTML simples (cinco o menos páginas con poca CSS)

aplicaciones de línea de comandos

Todos los comandos las aplicaciones de línea funcionan perfectamente y muy rápido en comparación con las bibliotecas anteriores, pero solo cuando las ejecuto directamente en la consola. Cuando trato de usarlos en PHP con exec() o system(), me dan errores.

Las siguientes son las aplicaciones de línea de comandos y sus errores cuando los ejecute en PHP:

  1. html2pdf (http://www.tufat.com/s_html2ps_html2pdf.htm)

    html2pdf: 11380): Gtk-ADVERTENCIA **: no puede pantalla abierta:: 0.0
    No protocolo especificado

  2. wkhtmltopdf

    Cargando página: 10%
    Cargando página: 33%
    Cargando la página: 100%
    espera de redireccionamiento
    páginas salida
    QPainter :: begin(): devuelto falso
    QPainter :: begin(): devuelto f alse
    QPainter :: save: Pintor no está activo
    QPainter :: escala: Pintor no está activo
    QPainter :: setRenderHint: Pintor debe estar activa para establecer consejos representación
    QPainter :: setBrush: Pintor no está activo
    QPainter: : pluma: El pintor no está activo
    QPainter :: setPen: Pintor no está activo

  3. HtmlToPdf (http://www.ultrashareware.com/html-to-pdf.htm)

Así que ahora estoy buscando ayuda. ¿Alguien puede responder:

¿Qué biblioteca PHP funcionaría bien en mi caso?

¿Por qué ocurren estos errores en las aplicaciones de línea de comandos?

+0

El error "Gtk-WARNING **: no se puede abrir la pantalla:: 0.0" es porque la aplicación utiliza el sistema de ventanas. Supongo que el error se produce porque la aplicación intenta abrir el PDF después de su generación. – rogeriopvl

+0

no, no abre pdf después de la generación. Pero abre una pequeña ventana mientras la usa en la consola. –

+0

Debido a que hay muchas preguntas similares a esta, pero no exactamente iguales, decidí intentar recopilar una lista completa de convertidores de HTML a PDF en una pregunta wiki de la comunidad http://stackoverflow.com/questions/3178448/list- of-html-to-pdf-converters – rjmunro

Respuesta

7

En cuanto wkhtmltopdf:

  • Esta cosa funciona extraordinariamente rápido y también puede manejar todo tipo de HTML/CSS que lanzar en él, así que cuando se necesita velocidad, se debe considerar seriosly se . Pasamos a utilizarlo recientemente en nuestra compañía y nuestra publicación en PDF obtuvo un enorme impulso de velocidad.

  • Al menos en Linux necesita que se instalen las bibliotecas XOrg; los servidores generalmente no las tienen, por lo que ese podría ser su problema.

+0

No funciona bien con tablas multipágina – andho

+0

No, no es así. Solo tiene que manejar este tipo de problema con css: http://stackoverflow.com/questions/1763639/how-to-deal-with-page-breaks-when-printing-a-large-html-table – Carlos2W

0

Pero, ¿qué pasa si va a utilizar cualquier servicio en línea y enviar su contenido HTML a través de HTTP? Por supuesto, la mayoría de ellos no son gratuitos.

+0

puede sugerir cualquier servicio en línea y su URL/enlace –

+0

http://www.freepdfconvert.com es gratuito, como su nombre lo sugiere. Automatizar su uso puede no ser lo más fácil de hacer, por otro lado, pero puede tomar un archivo cargado o una URL. – Julian

+0

Y esto podría tomar un tiempo para crear un gran conjunto de PDF. –

0

Una posibilidad: que tiene la secuencia de comandos de forma automática:

  1. Tome la página web
  2. Abrir la página en un navegador web
  3. Tome un screencap de esa página
  4. convertirlo en un archivo PDF

paso 4 es fácil - hay muchas librerías de PHP/cmdline que te permitirán poner imágenes en un pdf o convertirlas (ej., Fp df.)

Para los pasos 1-3 ... podría intentar consultar el código desde aquí: http://browsershots.org/. No estoy seguro de si sería relevante, parece que requiere mucha configuración. Tal vez su arquitectura podría funcionar?

+0

pero, ¿qué pasa con enlaces o etiquetas de anclaje en páginas html? –

+3

Esa es una solución terrible. Convertirá todo el texto en gráficos de mapa de bits.Utilizará screen css en lugar de print css. Solo mostrará la mayor parte de la página que pueda caber en una captura de pantalla. Hay muchas formas de hacerlo mejor. Por favor no hagas esto! – rjmunro

0

Un par de preguntas y sugerencias:

  • lo que realmente necesita que convierte a PDF? ¿Por qué? En algunos casos, sería mejor quedarse con HTML.
  • ¿Está actualizando el hardware del servidor que genera el PDF? Le pregunté esto porque si todas las bibliotecas que ha probado tardan demasiado en crear, entonces su única opción podría ser actualizar el servidor.
  • Es posible que desee resolver el problema con el error de línea de comando. Si da los resultados más rápidos, entonces encuentre un trabajo alrededor de eso.
+0

¿conoces alguna aplicación de línea de comando aparte de las mencionadas en cuestión? –

+0

Para PHP, solo he usado dompdf, y solo tengo que imprimir un promedio de 3 páginas por llamada. El único otro generador de PDF que he usado es JasperReports, pero creo que es solo para Java. Tal vez podrías hacer todo el seguimiento de la pila del error que estás obteniendo de la línea de comando. – Randell

1

¿Usted ha intentado Prince?

+2

hmmmmmm? ¡pero es caro, costó USD 495! –

+2

DocRaptor.com usa Prince como motor (para obtener los mismos resultados asombrosos), pero es mucho más económico (gratis para planes pequeños). – Julie

+2

Hmm. Su historial de respuestas sugeriría que tiene algún tipo de interés en este servicio Julie. ¿Qué tal una revelación completa? –

0

Hay muchos solución para convertir HTML a PDF, puedo sugerir el uno por https://grabz.it.

Tienen una API de PHP flexible que puede ser utilizada por cronjobs o directamente desde la página web de PHP.

Si quieres probarlo, al principio usted debe conseguir una app key + secret de autorización y el development free SDK

Aquí es un ejemplo de una implementación básica.

//First init 
include("GrabzItClient.class.php"); 

// Create the GrabzItClient class 
// Replace "APPLICATION KEY", "APPLICATION SECRET" values for your account! 
$grabzIt = new GrabzItClient("Application Key", "Application Secret"); 

// To take a PDF screenshot 
$grabzIt->URLToPDF("http://www.google.com"); 

// To save in case public callback handler is available 
$grabzIt->Save("http://www.example.com/handler.php"); 
// OR To save in case public callback handler is not available, 
// it's a synchonous method can be usedthe will force your application to wait 
// while the screenshot is created 
$filepath = "images/result.jpg"; 
$grabzIt->SaveTo($filepath);  

Es posible conseguir otros tipos de imágenes tales como image screenshot and etc.