2009-03-23 47 views
5

Estoy usando el conjunto de herramientas reportlab en Python para generar algunos informes en formato PDF. Quiero utilizar algunas partes predefinidas de documentos ya publicados en formato PDF para incluirlos en el archivo PDF generado. ¿Es posible (y cómo) lograr esto en el banco de informes o en la biblioteca de Python?Cómo incluir una página en PDF en un documento PDF en Python

Sé que puedo usar algunas otras herramientas como PDF Toolkit (pdftk) pero estoy buscando una solución basada en Python.

Respuesta

6

Actualmente estoy usando PyPDF para leer, escribir y combinar PDF existentes y ReportLab para generar contenido nuevo. Usar los dos paquetes parecía funcionar mejor que cualquier otro paquete que pude encontrar.

+0

Sí, me gusta este paquete. El primer ejemplo es lo que quiero, lo intentaré. – Jiri

1

Hay un complemento para ReportLab — PageCatcher.

+0

Ok, esta parece ser la herramienta correcta. Lamentablemente está en la versión comercial de ReportLab Toolkit y no puedo usarlo directamente. Estoy usando la versión de código abierto. Y no hay precios, parece que tengo que negociar algún precio con ReportLab antes de la descarga. – Jiri

2

Si desea colocar páginas de PDF existentes en sus documentos de Reportlab, recomiendo pdfrw. A diferencia de PageCatcher, es gratis.

Lo he usado para varios proyectos donde necesito agregar códigos de barras, etc. a documentos existentes y funciona muy bien. Hay un par de examples en la página del proyecto de cómo usarlo con Reportlab.

Un par de cosas a tener en cuenta sin embargo:

Si la fuente de PDF contiene errores (debido al programa de origen siguiendo el PDF spec imperfectamente por ejemplo), pdfrw puede fallar a pesar de que algo como Adobe Reader no tiene problemas evidentes leyendo el PDF. pdfrw actualmente no es muy tolerante a fallas.

Además, pdfrw funciona por ser completamente independiente del contenido real de la página PDF que está colocando. Entonces, por ejemplo, no podría usar pdfrw inspeccionar una página para ver si contiene una cierta cadena de texto en la esquina inferior derecha. Sin embargo, si no hace tiene que hacer algo así, debería estar bien.

Cuestiones relacionadas