Estoy trabajando en un proyecto que toma algunas imágenes del usuario y luego crea un archivo PDF que contiene todas estas imágenes.
¿Hay alguna forma o herramienta para hacer esto en Python? Por ejemplo, para crear un archivo PDF (o eps, ps) desde imagen1 + imagen 2 + imagen 3 -> archivo PDF?
Tenga en cuenta que pypdf solo corta / pega / etc. contenido PDF existente: no puede agregar texto o imágenes a un pdf.
drevicko
3
pyPDF2 no es para crear nuevos documentos PDF, 4cs
michelek
160
Aquí está mi experiencia después de seguir las sugerencias en esta página.
pyPDF no puede incrustar imágenes en archivos. Solo puede dividirse y fusionarse. (Fuente: Ctrl + F a través de su página de documentación ) Lo cual es genial, pero no si tiene imágenes que aún no están incrustadas en un PDF.
pyPDF2 no parece tener ninguna documentación adicional además de pyPDF.
ReportLab es muy extenso. ( Guía del usuario ) Sin embargo, con un poco de Ctrl + F y grepping a través de su fuente, obtuve esto:
Luego intente esto en la línea de comando de Python:
from reportlab.pdfgen import canvas
from reportlab.lib.units import inch, cm
c = canvas.Canvas('ex.pdf')
c.drawImage('ar.jpg',0,0,10*cm,10*cm)
c.showPage()
c.save()
Todo lo que necesitaba era obtener un montón de imágenes en un PDF, para poder comprobar cómo se ven e imprimirlas. Lo anterior es suficiente para lograr ese objetivo.
ReportLab es excelente, pero se beneficiaría de incluir helloworlds como el anterior en su documentación.
Puede probar esto (Python-for-PDF-Generation) o puede probar PyQt , que tiene soporte para imprimir en pdf.
Python para la generación de PDF
El formato de documento portátil (PDF) le permite crear documentos que se ven exactamente iguales en todas las plataformas. Sin embargo, a veces es necesario generar un documento PDF de forma dinámica, y eso puede ser todo un desafío. Afortunadamente, hay bibliotecas que pueden ayudar. Este artículo examina uno de esos para Python.
Aquí hay una solución que funciona solo con los paquetes estándar. matplotlibtiene un backend PDF para guardar figuras en PDF. Puede crear figuras con subtramas, donde cada subtrama es una de sus imágenes. Tiene total libertad para meterse con la figura: Agregar títulos, jugar con la posición, etc. Una vez que su figura esté lista, guárdela en PDF. Cada llamada a savefigcreará otra página de PDF.
El siguiente ejemplo muestra 2 imágenes una al lado de la otra, en la página 1 y en la página 2.
from matplotlib.backends.backend_pdf importPdfPagesimport matplotlib.pyplot as plt
from scipy.misc import imread
import os
import numpy as np
files =["Column0_Line16.jpg","Column0_Line47.jpg"]def plotImage(f):
folder ="C:/temp/"
im = imread(os.path.join(folder, f)).astype(np.float32)/255
plt.imshow(im)
a = plt.gca()
a.get_xaxis().set_visible(False)# We don't need axis ticks
a.get_yaxis().set_visible(False)
pp =PdfPages("c:/temp/page1.pdf")
plt.subplot(121)
plotImage(files[0])
plt.subplot(122)
plotImage(files[1])
pp.savefig(plt.gcf())# This generates page 1
pp.savefig(plt.gcf())# This generates page 2
pp.close()
He hecho esto bastante en PyQt y funciona muy bien. Qt tiene un amplio soporte para imágenes, fuentes, estilos, etc. y todos pueden escribirse en documentos PDF.
Wow, Qt se ve increíble. Dicen que admiten 15 plataformas, inc. Windows, Mac OS X, Linux, Android, iOS, Windows RT más estos sistemas operativos en tiempo real: INTEGRITY QNX VxWorks qt.io/qt-framework . Y, como soy un fanático de Python, me gusta "PyQt combina todas las ventajas de Qt y Python. Un programador tiene todo el poder de Qt, pero puede explotarlo con la simplicidad de Python". Riverbankcomputing.co.uk / software / pyqt / intro
AnneTheAgile
7
Creo que matplotlib tiene la capacidad de serializar gráficos, texto y otros objetos en un documento pdf.
Sí tu puedes. Esta respuesta SO tiene algunos buenos enlaces sobre cómo hacerlo.
drevicko
7
fpdf es python (también). Y de uso frecuente. Ver PyPI / pip search. Pero tal vez fue renombrado de pyfpdf a fpdf. De las características: compatibilidad con PNG, GIF y JPG (incluida transparencia y canal alfa)
Toda la confusión en el nombramiento es realmente una pena. Esta respuesta y el comentario de @WojciechKaczmarek realmente merecen más votos a favor y atención. PyFPDF es un puerto de Python de una biblioteca PDF de uso frecuente originalmente escrita en PHP.
Ideograma
6
Uso rst2pdf para crear un archivo pdf, ya que estoy más familiarizado con RST que con HTML. Admite incrustar casi cualquier tipo de imágenes ráster o vectoriales.
Requiere reportlab , pero descubrí que reportlab no es tan fácil de usar (al menos para mí).
Depende de en qué formato estén sus archivos de imagen, pero para un proyecto aquí en el trabajo utilicé la herramienta tiff2pdf en LibTIFF de RemoteSensing.org . Básicamente, solo utilicé el subproceso para llamar a tiff2pdf.exe con el argumento apropiado para leer el tipo de tiff que tenía y generar el tipo de pdf que quería. Si no son tiffs, probablemente podría convertirlos en tiffs usando PIL, o tal vez encontrar una herramienta más específica para su tipo de imagen (o más genérica si las imágenes serán diversas) como ReportLab mencionado anteriormente.
Enlace / Descripción: fpdf.org FPDF es una clase PHP que permite generar archivos PDF con PHP puro, es decir, sin usar la biblioteca PDFlib. F de FPDF significa Gratis: puede usarlo para cualquier tipo de uso y modificarlo para satisfacer sus necesidades. FPDF tiene otras ventajas: funciones de alto nivel. Aquí hay una lista de sus características principales: elección de unidad de medida, formato de página y márgenes, gestión de encabezado y pie de página, salto de página automático, salto de línea automático y justificación de texto, soporte de imagen (JPEG, PNG y GIF), colores, enlaces, TrueType, Type1 y soporte de codificación, compresión de página
AnneTheAgile
12
No es muy relevante considerando que la pregunta era sobre Python, no PHP
KingRadical
1
¿Por qué todo este voto negativo? fpdf está disponible también para python. pip install fpdf works
user1981924
1
fpdf podría haber comenzado con php. Pero hay un puerto de Python que funciona muy bien. Así que creo que esta es una respuesta muy relevante que merece más votos positivos que negativos. (No estoy seguro de la situación cuando esta respuesta se publicó inicialmente)
Sumudu
3
rinohtype admite la incrustación de imágenes PDF, PNG y JPEG (de forma nativa) y otros formatos de mapa de bits (cuando Pillow está instalado).
¡Oye! Corríjame si me equivoco, pero parece que es una herramienta bastante poderosa y, a diferencia de muchos, muchos otros enumerados aquí no es un contenedor de Python para una biblioteca php / ruby / perl / pyqt4 / other crap.
Mikaelblomkvistsson
3
Si está familiarizado con LaTex, puede considerar pylatex
Una de las ventajas de pylatex es que es fácil controlar la calidad de la imagen. Las imágenes en su pdf serán de la misma calidad que las imágenes originales. Al usar Reportlab, experimenté que las imágenes se comprimían automáticamente y que la calidad de la imagen se reducía.
La desventaja de pylatex es que, dado que se basa en LaTex, puede ser difícil colocar las imágenes exactamente donde desea en la página. Sin embargo, descubrí que usar el argumento de posición en la clase Figura, y a veces Subfigura, da resultados suficientemente buenos.
Código de ejemplo para crear un pdf con una sola imagen:
Además de instalar pylatex (pip install pylatex), debe instalar LaTex. Para Ubuntu y otros sistemas Debian puede ejecutar sudo apt-get install texlive-full. Si está utilizando Windows, recomendaría MixTex
py
;-)[language or tag] some_keyword
como en[python] PDF
o[python] PDF image
Respuestas:
Sugiero pyPdf . Funciona muy bien También escribí una publicación de blog hace un tiempo, puedes encontrarla aquí .
fuente
Aquí está mi experiencia después de seguir las sugerencias en esta página.
pyPDF no puede incrustar imágenes en archivos. Solo puede dividirse y fusionarse. (Fuente: Ctrl + F a través de su página de documentación ) Lo cual es genial, pero no si tiene imágenes que aún no están incrustadas en un PDF.
pyPDF2 no parece tener ninguna documentación adicional además de pyPDF.
ReportLab es muy extenso. ( Guía del usuario ) Sin embargo, con un poco de Ctrl + F y grepping a través de su fuente, obtuve esto:
Luego intente esto en la línea de comando de Python:
Todo lo que necesitaba era obtener un montón de imágenes en un PDF, para poder comprobar cómo se ven e imprimirlas. Lo anterior es suficiente para lograr ese objetivo.
ReportLab es excelente, pero se beneficiaría de incluir helloworlds como el anterior en su documentación.
fuente
Sugiero Pdfkit . ( guía de instalación )
Crea pdf desde archivos html. Lo elegí para crear pdf en 2 pasos desde mi pila Python Pyramid:
pdfkit.from_string(...)
Método de ejecución pasando el html representado como parámetroDe esta forma obtienes un documento pdf con estilo e imágenes compatibles.
Puede instalarlo de la siguiente manera:
usando pip
pip install pdfkit
fuente
Puede probar esto (Python-for-PDF-Generation) o puede probar PyQt , que tiene soporte para imprimir en pdf.
Python para la generación de PDF
El formato de documento portátil (PDF) le permite crear documentos que se ven exactamente iguales en todas las plataformas. Sin embargo, a veces es necesario generar un documento PDF de forma dinámica, y eso puede ser todo un desafío. Afortunadamente, hay bibliotecas que pueden ayudar. Este artículo examina uno de esos para Python.
Más información en http://www.devshed.com/c/a/Python/Python-for-PDF-Generation/#whoCFCPh3TAks368.99
fuente
Aquí hay una solución que funciona solo con los paquetes estándar.
matplotlib
tiene un backend PDF para guardar figuras en PDF. Puede crear figuras con subtramas, donde cada subtrama es una de sus imágenes. Tiene total libertad para meterse con la figura: Agregar títulos, jugar con la posición, etc. Una vez que su figura esté lista, guárdela en PDF. Cada llamada asavefig
creará otra página de PDF.El siguiente ejemplo muestra 2 imágenes una al lado de la otra, en la página 1 y en la página 2.
fuente
He hecho esto bastante en PyQt y funciona muy bien. Qt tiene un amplio soporte para imágenes, fuentes, estilos, etc. y todos pueden escribirse en documentos PDF.
fuente
Creo que matplotlib tiene la capacidad de serializar gráficos, texto y otros objetos en un documento pdf.
fuente
fpdf es python (también). Y de uso frecuente. Ver PyPI / pip search. Pero tal vez fue renombrado de pyfpdf a fpdf. De las características: compatibilidad con PNG, GIF y JPG (incluida transparencia y canal alfa)
fuente
Uso rst2pdf para crear un archivo pdf, ya que estoy más familiarizado con RST que con HTML. Admite incrustar casi cualquier tipo de imágenes ráster o vectoriales.
Requiere reportlab , pero descubrí que reportlab no es tan fácil de usar (al menos para mí).
fuente
De hecho, puede probar xhtml2pdf http://flask.pocoo.org/snippets/68/
fuente
Depende de en qué formato estén sus archivos de imagen, pero para un proyecto aquí en el trabajo utilicé la herramienta tiff2pdf en LibTIFF de RemoteSensing.org . Básicamente, solo utilicé el subproceso para llamar a tiff2pdf.exe con el argumento apropiado para leer el tipo de tiff que tenía y generar el tipo de pdf que quería. Si no son tiffs, probablemente podría convertirlos en tiffs usando PIL, o tal vez encontrar una herramienta más específica para su tipo de imagen (o más genérica si las imágenes serán diversas) como ReportLab mencionado anteriormente.
fuente
fpdf me funciona bien. Mucho más simple que ReportLab y realmente gratis. Funciona con UTF-8.
fuente
rinohtype admite la incrustación de imágenes PDF, PNG y JPEG (de forma nativa) y otros formatos de mapa de bits (cuando Pillow está instalado).
(Divulgación completa: soy el autor de rinohtype)
fuente
Si está familiarizado con LaTex, puede considerar pylatex
Una de las ventajas de pylatex es que es fácil controlar la calidad de la imagen. Las imágenes en su pdf serán de la misma calidad que las imágenes originales. Al usar Reportlab, experimenté que las imágenes se comprimían automáticamente y que la calidad de la imagen se reducía.
La desventaja de pylatex es que, dado que se basa en LaTex, puede ser difícil colocar las imágenes exactamente donde desea en la página. Sin embargo, descubrí que usar el argumento de posición en la clase Figura, y a veces Subfigura, da resultados suficientemente buenos.
Código de ejemplo para crear un pdf con una sola imagen:
Además de instalar pylatex (pip install pylatex), debe instalar LaTex. Para Ubuntu y otros sistemas Debian puede ejecutar
sudo apt-get install texlive-full
. Si está utilizando Windows, recomendaría MixTexfuente