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?

149
demandé sur Stephen T. 2010-02-12 18:12:44

13 réponses

Je suggère pyPdf. Il fonctionne vraiment bien. J'ai aussi écrit un billet de blog il y a quelque temps, vous pouvez le Trouver ici.

40
répondu Geo 2014-02-14 11:55:24

Voici mon expérience après avoir suivi les conseils sur cette page.

  1. 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.

  2. PyPDF2 ne semble pas avoir de documentation supplémentaire sur pyPDF.

  3. 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.

121
répondu Evgeni Sergeev 2013-10-05 16:20:40

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:

  1. Rendu côté serveur avec des modèles mako avec le style et le balisage que vous voulez pour votre document pdf
  2. 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).
23
répondu eton_ceb 2018-09-29 20:12:52

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

13
répondu gruszczy 2013-08-09 11:46:47

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.

6
répondu Allen 2010-02-12 16:39:51

Je crois que matplotlib a la capacité de sérialiser des graphiques, du texte et d'autres objets dans un document pdf.

5
répondu Andrea 2013-04-01 16:35:39

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).

5
répondu ismailsunni 2015-12-01 11:29:07

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)

4
répondu mirek 2015-12-11 09:44:08

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()
4
répondu Anton Schwaighofer 2016-03-04 14:03:56

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.

1
répondu Tofystedeth 2010-02-12 16:19:51

, Vous pouvez effectivement essayer xhtml2pdf http://flask.pocoo.org/snippets/68/

1
répondu zeroc00l 2016-09-29 05:38:22

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)

0
répondu Brecht Machiels 2017-08-26 12:49:25

Fpdf fonctionne bien pour moi. Beaucoup plus simple que ReportLab et vraiment gratuit. Fonctionne avec UTF-8.

-4
répondu mfs 2014-03-09 18:44:07