it-swarm.com.de

Wie erstellen? PDF Dateien in Python

Ich arbeite an einem Projekt, das einige Bilder vom Benutzer übernimmt und dann eine PDF -Datei erstellt, die alle diese Bilder enthält.

Gibt es eine Möglichkeit oder ein Werkzeug, um dies in Python zu tun? Z.B. eine PDF -Datei (oder eps, ps) aus image1 + image 2 + image 3 -> PDF -Datei erstellen?

156
Stephen T.

Ich schlage vor, pyPdf . Es funktioniert wirklich schön. Ich habe vor einiger Zeit auch einen Blogbeitrag geschrieben. Sie finden ihn hier .

41
Geo

Hier ist meine Erfahrung, nachdem ich die Hinweise auf dieser Seite befolgt habe.

  1. pyPDF kann keine Bilder in Dateien einbetten. Es kann nur spalten und zusammenführen. (Quelle: Strg + F über die Dokumentationsseite ) Was großartig ist, aber nicht, wenn Sie Bilder haben, die noch nicht in eine PDF-Datei eingebettet sind.

  2. pyPDF2 scheint keine zusätzliche Dokumentation über pyPDF zu haben.

  3. ReportLab ist sehr umfangreich. ( Userguide ) Jedoch mit ein wenig Strg + F und durch die Quelle grepping, habe ich Folgendes bekommen:

    • Zuerst den Windows Installer herunterladen und source
    • Versuchen Sie es dann in der Python-Befehlszeile:

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

Ich brauche nur ein paar Bilder in eine PDF-Datei, damit ich sie überprüfen und drucken kann. Dies reicht aus, um dieses Ziel zu erreichen.

ReportLab ist großartig, würde aber davon profitieren, wenn die oben genannten Welten prominent in die Dokumentation aufgenommen werden.

137
Evgeni Sergeev

Ich schlage Pdfkit vor. (installation guide )

Es erstellt PDF aus HTML-Dateien. Ich habe es ausgewählt, um aus meinem Python Pyramid-Stack in 2 Schritten ein PDF zu erstellen:

  1. Server-seitiges Rendern mit Mako-Vorlagen mit dem gewünschten Stil und Markup für Ihr PDF-Dokument
  2. Ausführen der pdfkit.from_string(...)-Methode durch Übergeben der gerenderten HTML-Datei als Parameter

Auf diese Weise erhalten Sie ein PDF-Dokument mit unterstützten Stilen und Bildern.

Sie können es wie folgt installieren: 

  • mit pip

    pip install pdfkit

  • Sie müssen auch wkhtmltopdf ( on Ubuntu ) installieren.
26
eton_ceb

Sie können this (Python-for-PDF-Generation) oder PyQt ausprobieren, das das Drucken in pdf ..__ unterstützt.

Python für die Generierung von PDF

Mit dem Portable Document Format (PDF) können Sie Dokumente erstellen, die auf jeder Plattform genau gleich aussehen. Manchmal muss ein PDF -Dokument jedoch dynamisch generiert werden, und dies kann eine ziemliche Herausforderung sein. Zum Glück gibt es Bibliotheken, die helfen können. Dieser Artikel untersucht eine davon für Python.

Weitere Informationen finden Sie unter http://www.devshed.com/c/a/Python/Python-for-PDF-Generation/#whoCFCPh3TAks368.99

14
gruszczy

Ich habe das in PyQt ziemlich viel gemacht und es funktioniert sehr gut. Qt bietet umfassende Unterstützung für Bilder, Schriftarten, Stile usw. und alle diese können in PDF-Dokumente geschrieben werden.

6
Allen

Hier ist eine Lösung, die nur mit den Standardpaketen funktioniert. matplotlib hat ein Backend PDF, um Zahlen in PDF zu speichern. Sie können Figuren mit Subplots erstellen, wobei jedes Subplot eines Ihrer Bilder ist. Sie haben die volle Freiheit, sich mit der Figur zu beschäftigen: Hinzufügen von Titeln, Spielen mit Positionen usw. Wenn Ihre Figur fertig ist, speichern Sie sie als PDF. Bei jedem Aufruf von savefig wird eine weitere PDF-Seite erstellt.

Beispiel unten: 2 Bilder nebeneinander, auf Seite 1 und Seite 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()
5

Ich glaube, dass matplotlib die Fähigkeit besitzt, Grafiken, Text und andere Objekte zu einem PDF-Dokument zu serialisieren.

5
Andrea

Ich benutze rst2pdf , um eine PDF-Datei zu erstellen, da ich mit RST besser vertraut bin als mit HTML. Es unterstützt das Einbetten fast aller Arten von Raster- oder Vektorbildern.

Es erfordert reportlab , aber ich habe festgestellt, dass reportlab nicht so einfach zu bedienen ist (zumindest für mich).

5
ismailsunni

fpdf ist auch Python. Und oft benutzt. Siehe PyPI/Pip-Suche. Aber vielleicht wurde es von pyfpdf in fpdf umbenannt. Funktionen: PNG-, GIF- und JPG-Unterstützung (einschließlich Transparenz und Alphakanal)

4
mirek

Sie können tatsächlich xhtml2pdf http://flask.pocoo.org/snippets/68/ ausprobieren.

1
zeroc00l

fpdf funktioniert gut für mich. Viel einfacher als ReportLab und wirklich kostenlos. Funktioniert mit UTF-8.

1
mfs

rinohtype unterstützt das eingebettete Einbetten von PDF-, PNG- und JPEG-Bildern (nativ) und andere Bitmap-Formate (wenn Pillow installiert ist).

(Vollständige Offenlegung: Ich bin der Autor von rinohtype)

1
Brecht Machiels

Es hängt davon ab, in welchem ​​Format sich Ihre Bilddateien befinden, aber für ein Projekt hier bei der Arbeit habe ich das Tool tiff2pdf in LibTIFF von RemoteSensing.org ..__ verwendet um die Art von TIFF zu lesen, die ich hatte, und die Art von PDF auszugeben, die ich wollte. Wenn es sich nicht um TIFF-Dateien handelt, können Sie sie möglicherweise mithilfe von PIL in TIFF-Dateien umwandeln oder ein spezifischeres Tool für Ihren Bildtyp (oder generischer, wenn die Bilder unterschiedlich sind), wie das oben genannte ReportLab.

1
Tofystedeth

Wenn Sie mit LaTex vertraut sind, möchten Sie vielleicht pylatex in Betracht ziehen.

Einer der Vorteile von Pylatex ist die einfache Kontrolle der Bildqualität. Die Bilder in Ihrem PDF haben dieselbe Qualität wie die Originalbilder. Bei der Verwendung von Reportlab habe ich festgestellt, dass die Bilder automatisch komprimiert und die Bildqualität reduziert wurde. 

Der Nachteil von Pylatex ist, dass es schwierig sein kann, Bilder genau dort zu platzieren, wo Sie sie auf der Seite haben möchten, da sie auf LaTex basiert. Ich habe jedoch herausgefunden, dass die Verwendung des Positionsarguments in der Figure-Klasse und manchmal auch von Subfigure gute Ergebnisse liefert.

Beispielcode zum Erstellen eines PDFs mit einem einzelnen Bild:

from pylatex import Document, Figure

doc = Document(documentclass="article")
with doc.create(Figure(position='p')) as fig:
fig.add_image('Lenna.png')

doc.generate_pdf('test', compiler='latexmk', compiler_args=["-pdf", "-pdflatex=pdflatex"], clean_tex=True)

Zusätzlich zur Installation von pylatex (pip install pylatex) müssen Sie LaTex installieren. Für Ubuntu und andere Debian-Systeme können Sie Sudo apt-get install texlive-full ausführen. Wenn Sie Windows verwenden, würde ich empfehlen MixTex

0
Chepe