Comment créer des fichiers PDF en Python
Je travaille sur un projet qui prend des images de l'utilisateur, puis crée un fichier PDF qui contient toutes ces images.
Existe-t-il un moyen ou un outil de le faire en Python? Par exemple pour créer un fichier PDF (ou eps, ps) à partir d'image1 + image 2 + image 3 - > fichier PDF?
13 réponses
Voici mon expérience après avoir suivi les conseils sur cette page.
PyPDF ne peut pas intégrer des images dans des fichiers. Il ne peut que diviser et fusionner. (Source: Ctrl + F à travers sa page de documentation ) Ce qui est génial, mais pas si vous avez des images qui ne sont pas déjà intégrées dans un PDF.
PyPDF2 ne semble pas avoir de documentation supplémentaire sur pyPDF.
-
ReportLab est très vaste. (Userguide) Cependant, avec un peu de Ctrl + F et grepping à travers sa source, j'ai eu ceci:
- tout d'Abord, télécharger le programme d'installation de Windows et source
-
Ensuite, essayez ceci sur la ligne de commande 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()
Tout ce dont j'avais besoin est d'obtenir un tas d'images dans un PDF, afin que je puisse vérifier leur apparence et les imprimer. Ce qui précède est suffisant pour atteindre cet objectif.
ReportLab est génial, mais bénéficierait d'inclure helloworlds comme ci-dessus en bonne place dans son documentation.
Je suggère Pdfkit. (installation guide de)
Il crée des fichiers pdf à partir de fichiers html. Je l'ai choisi pour créer un pdf en 2 étapes à partir de ma pile pyramidale Python:
- Rendu côté serveur avec des modèles mako avec le style et le balisage que vous voulez pour votre document pdf
- exécution de la méthode
pdfkit.from_string(...)
en passant le html rendu en tant que paramètre
De cette façon, vous obtenez un document pdf avec le style et les images prises en charge.
Vous pouvez l'installer comme suit :
-
En utilisant pip
pip install pdfkit
- vous devrez également installer wkhtmltopdf (sur Ubuntu).
Vous pouvez essayer this (Python-for-PDF-Generation) ou vous pouvez essayer PyQt , qui prend en charge l'impression au format pdf.
Python pour la Génération de PDF
Le format de Document Portable (PDF) vous permet de créer des documents qui se ressemblent exactement sur chaque plate-forme. Parfois, un document PDF doit être généré dynamiquement, cependant, et cela peut être tout un défi. Heureusement, il y a des bibliothèques qui peuvent aider. Cet article examine l'un de ceux pour Python.
Lire la suite à http://www.devshed.com/c/a/Python/Python-for-PDF-Generation/#whoCFCPh3TAks368.99
Je l'ai fait un peu en PyQt et cela fonctionne très bien. Qt a un support étendu pour les images, les polices, les styles, etc. et tous ceux-ci peuvent être écrits dans des documents pdf.
Je crois que matplotlib a la capacité de sérialiser des graphiques, du texte et d'autres objets dans un document pdf.
J'utilise rst2pdf pour créer un fichier pdf, car je suis plus familier avec RST qu'avec HTML. Il prend en charge l'intégration de presque tous les types d'images raster ou vectorielles.
, Il nécessite reportlab, mais j'ai trouvé reportlab n'est pas si simple à utiliser (au moins pour moi).
Fpdf est python (aussi). Et souvent utilisé. Voir recherche PyPI / pip. Mais peut - être qu'il a été renommé de pyfpdf à fpdf. À partir de caractéristiques: Prise en charge PNG, GIF et JPG (y compris la transparence et le canal alpha)
Voici une solution qui ne fonctionne qu'avec les paquets standard. matplotlib
a un backend PDF pour enregistrer les chiffres au format PDF. Vous pouvez créer des figures avec des sous-parcelles, où chaque sous-parcelle est l'une de vos images. Vous avez toute liberté pour jouer avec la figure: ajouter des titres, jouer avec la position, etc. Une fois votre chiffre terminé, enregistrez au format PDF. Chaque appel à savefig
créera une autre page de PDF.
Exemple ci-dessous trace 2 images côte à côte, à la page 1 et à la page 2.
from matplotlib.backends.backend_pdf import PdfPages
import 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()
Cela dépend du format de vos fichiers image, mais pour un projet ici au travail, j'ai utilisé l'outil tiff2pdf dans LibTIFF de RemoteSensing.org . Fondamentalement, juste utilisé subprocess pour appeler tiff2pdf.exe avec l'argument approprié pour lire le genre de tiff que j'avais et sortir le genre de pdf que je voulais. Si ce ne sont pas des tiffs, vous pouvez probablement les convertir en tiffs en utilisant PIL, ou peut-être trouver un outil plus spécifique à votre type d'image (ou plus générique si les images seront diverses) comme ReportLab mentionné ci-dessus.
, Vous pouvez effectivement essayer xhtml2pdf http://flask.pocoo.org/snippets/68/
Rinohtype prend en charge l'intégration D'images PDF, PNG et JPEG (nativement) et d'autres formats bitmap (lorsque Pillow est installé).
(divulgation Complète: je suis l'auteur de rinohtype)
Fpdf fonctionne bien pour moi. Beaucoup plus simple que ReportLab et vraiment gratuit. Fonctionne avec UTF-8.