So erstellen Sie PDF-Dateien in Python [geschlossen]
156
Ich arbeite an einem Projekt, das einige Bilder vom Benutzer nimmt 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? Zum Beispiel, um eine PDF-Datei (oder eps, ps) aus Bild1 + Bild 2 + Bild 3 -> PDF-Datei zu erstellen?
Eine aktuelle Gabel von PyPDF2 befindet sich hier .
Edmond Burnett
98
Beachten Sie, dass Pypdf nur vorhandene PDF-Inhalte ausschneidet / einfügt / usw. - Sie können einem PDF keinen Text oder Bilder hinzufügen.
Drevicko
3
pyPDF2 ist nicht zum Erstellen neuer PDF-Dokumente, 4cs
michelek
160
Hier ist meine Erfahrung, nachdem ich den Hinweisen auf dieser Seite gefolgt bin.
pyPDF kann keine Bilder in Dateien einbetten. Es kann nur geteilt und zusammengeführt werden. (Quelle: Strg + F über die Dokumentationsseite ) Das ist großartig, aber nicht, wenn Sie Bilder haben, die noch nicht in eine PDF-Datei eingebettet sind.
pyPDF2 scheint keine zusätzliche Dokumentation über pyPDF zu haben.
ReportLab ist sehr umfangreich. ( Userguide ) Mit ein wenig Strg + F und dem Durchsuchen der Quelle habe ich jedoch Folgendes erhalten:
Versuchen Sie dies 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()
Alles, was ich brauchte, war, ein paar Bilder in eine PDF-Datei zu bringen, damit ich überprüfen kann, wie sie aussehen, und sie drucken kann. Das oben Genannte reicht aus, um dieses Ziel zu erreichen.
ReportLab ist großartig, würde aber davon profitieren, Helloworlds wie die oben genannten prominent in seine Dokumentation aufzunehmen.
Sie können versuchen , diese (Python-for-PDF-Generation) oder Sie können versuchen PyQt , die Unterstützung für den Druck zu pdf hat.
Python für die PDF-Generierung
Mit dem Format (Portable Document Format) können Sie Dokumente erstellen, die auf jeder Plattform genau gleich aussehen. Manchmal muss ein PDF-Dokument jedoch dynamisch generiert werden, und das kann eine ziemliche Herausforderung sein. Glücklicherweise gibt es Bibliotheken, die helfen können. Dieser Artikel untersucht eine davon für Python.
Hier ist eine Lösung, die nur mit den Standardpaketen funktioniert. matplotlibverfügt über ein PDF-Backend zum Speichern von Zahlen in PDF. Sie können Figuren mit Nebenhandlungen erstellen, wobei jede Nebenhandlung eines Ihrer Bilder ist. Sie haben die volle Freiheit, mit der Figur herumzuspielen: Titel hinzufügen, mit der Position spielen usw. Sobald Ihre Figur fertig ist, speichern Sie sie als PDF. Bei jedem Aufruf von savefigwird eine weitere PDF-Seite erstellt.
Das folgende Beispiel zeigt 2 Bilder nebeneinander auf Seite 1 und Seite 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()
Ich habe das in PyQt ziemlich oft gemacht und es funktioniert sehr gut. Qt bietet umfassende Unterstützung für Bilder, Schriftarten, Stile usw. und all diese können in PDF-Dokumente geschrieben werden.
Wow, Qt sieht toll aus. Sie sagen, dass sie 15 Plattformen unterstützen, inc. Windows, Mac OS X, Linux, Android, iOS, Windows RT sowie diese Echtzeitbetriebssysteme - INTEGRITY QNX VxWorks qt.io/qt-framework . Und da ich ein Python-Fan bin, mag ich "PyQt kombiniert alle Vorteile von Qt und Python. Ein Programmierer hat die ganze Leistung von Qt, kann sie aber mit der Einfachheit von Python nutzen." Riverbankcomputing.co.uk / software / pyqt / intro
AnneTheAgile
7
Ich glaube, dass matplotlib die Fähigkeit hat, Grafiken, Text und andere Objekte in ein PDF-Dokument zu serialisieren.
Ich verwende 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 fand, dass Reportlab nicht so einfach zu verwenden ist (zumindest für mich).
fpdf ist auch Python. Und oft benutzt. Siehe PyPI / Pip-Suche. Aber vielleicht wurde es von pyfpdf in fpdf umbenannt. Von Funktionen: PNG-, GIF- und JPG-Unterstützung (einschließlich Transparenz und Alphakanal)
Die ganze Verwirrung bei der Benennung ist wirklich schade. Diese Antwort und der Kommentar von @WojciechKaczmarek verdienen wirklich mehr positive Stimmen und Aufmerksamkeit. PyFPDF ist ein Python-Port einer häufig verwendeten PDF-Bibliothek, die ursprünglich in PHP geschrieben wurde.
Es hängt davon ab, in welchem Format Ihre Bilddateien vorliegen, aber für ein Projekt hier bei der Arbeit habe ich das Tool tiff2pdf in LibTIFF von RemoteSensing.org verwendet . Grundsätzlich wurde nur ein Unterprozess verwendet, um tiff2pdf.exe mit dem entsprechenden Argument aufzurufen, um die Art von TIFF zu lesen, die ich hatte, und um die Art von PDF auszugeben, die ich wollte. Wenn es sich nicht um Tiffs handelt, können Sie sie wahrscheinlich mithilfe von PIL in Tiffs konvertieren oder ein Tool finden, das spezifischer für Ihren Bildtyp ist (oder allgemeiner, wenn die Bilder unterschiedlich sind), wie das oben erwähnte ReportLab.
Link / Beschreibung: fpdf.org FPDF ist eine PHP-Klasse, mit der PDF-Dateien mit reinem PHP generiert werden können, dh ohne die PDFlib-Bibliothek zu verwenden. F von FPDF steht für Free: Sie können es für jede Art von Nutzung verwenden und an Ihre Bedürfnisse anpassen. FPDF hat andere Vorteile: Funktionen auf hoher Ebene. Hier ist eine Liste der Hauptfunktionen: Auswahl der Maßeinheit, Seitenformat und -ränder, Verwaltung von Seitenkopf- und Fußzeilen, Automatischer Seitenumbruch, Automatischer Zeilenumbruch und Textausrichtung, Bildunterstützung (JPEG, PNG und GIF), Farben, Links, Unterstützung für TrueType, Type1 und Codierung,
Seitenkomprimierung
12
Nicht sehr relevant, wenn man bedenkt, dass die Frage Python
betraf
1
Warum all diese Abstimmungen? fpdf ist auch für Python verfügbar. pip install fpdf works
user1981924
1
fpdf könnte mit php begonnen haben. Aber es gibt einen Python- Port, der wirklich gut funktioniert. Ich denke, dies ist eine sehr relevante Antwort, die mehr Aufwärtsstimmen als Abwärtsstimmen verdient. (Ich bin nicht sicher über die Situation, als diese Antwort ursprünglich veröffentlicht wurde)
Sumudu
3
rinohtype unterstützt das Einbetten von PDF-, PNG- und JPEG-Bildern (nativ) und anderen Bitmap-Formaten (wenn Pillow installiert ist).
(Vollständige Offenlegung: Ich bin der Autor von rinohtype)
Hallo! Korrigieren Sie mich, wenn ich falsch liege, aber es scheint, dass es ein ziemlich mächtiges Tool ist und im Gegensatz zu vielen anderen, die hier aufgelistet sind, kein Python-Wrapper für eine alte PHP / Ruby / Perl / Pyqt4 / andere Mistbibliothek.
Mikaelblomkvistsson
3
Wenn Sie mit LaTex vertraut sind, sollten Sie Pylatex in Betracht ziehen
Einer der Vorteile von Pylatex besteht darin, dass die Bildqualität leicht gesteuert werden kann. Die Bilder in Ihrem PDF haben die gleiche Qualität wie die Originalbilder. Bei der Verwendung von reportlab habe ich festgestellt, dass die Bilder automatisch komprimiert und die Bildqualität verringert wurden.
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 es auf LaTex basiert. Ich habe jedoch festgestellt, dass die Verwendung des Positionsarguments in der Figure-Klasse und manchmal in Subfigure ausreichend gute Ergebnisse liefert.
Beispielcode zum Erstellen eines PDFs mit einem einzelnen Bild:
Zusätzlich zur Installation von pylatex (pip install pylatex) müssen Sie LaTex installieren. Für Ubuntu und andere Debian-Systeme können Sie ausführen sudo apt-get install texlive-full. Wenn Sie Windows verwenden, würde ich MixTex empfehlen
py
;-)[language or tag] some_keyword
[python] PDF
[python] PDF image
Antworten:
Ich schlage pyPdf vor . Es funktioniert wirklich gut. Ich habe vor einiger Zeit auch einen Blog-Beitrag geschrieben, den Sie hier finden können .
quelle
Hier ist meine Erfahrung, nachdem ich den Hinweisen auf dieser Seite gefolgt bin.
pyPDF kann keine Bilder in Dateien einbetten. Es kann nur geteilt und zusammengeführt werden. (Quelle: Strg + F über die Dokumentationsseite ) Das ist großartig, aber nicht, wenn Sie Bilder haben, die noch nicht in eine PDF-Datei eingebettet sind.
pyPDF2 scheint keine zusätzliche Dokumentation über pyPDF zu haben.
ReportLab ist sehr umfangreich. ( Userguide ) Mit ein wenig Strg + F und dem Durchsuchen der Quelle habe ich jedoch Folgendes erhalten:
Versuchen Sie dies dann in der Python-Befehlszeile:
Alles, was ich brauchte, war, ein paar Bilder in eine PDF-Datei zu bringen, damit ich überprüfen kann, wie sie aussehen, und sie drucken kann. Das oben Genannte reicht aus, um dieses Ziel zu erreichen.
ReportLab ist großartig, würde aber davon profitieren, Helloworlds wie die oben genannten prominent in seine Dokumentation aufzunehmen.
quelle
Ich schlage Pdfkit vor . (Installation Guide )
Es erstellt PDF aus HTML-Dateien. Ich habe es ausgewählt, um PDF in 2 Schritten von meinem Python Pyramid-Stapel zu erstellen:
pdfkit.from_string(...)
Methode durch Übergabe des gerenderten HTML-Codes als ParameterAuf 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
quelle
Sie können versuchen , diese (Python-for-PDF-Generation) oder Sie können versuchen PyQt , die Unterstützung für den Druck zu pdf hat.
Python für die PDF-Generierung
Mit dem Format (Portable Document Format) können Sie Dokumente erstellen, die auf jeder Plattform genau gleich aussehen. Manchmal muss ein PDF-Dokument jedoch dynamisch generiert werden, und das kann eine ziemliche Herausforderung sein. Glücklicherweise gibt es Bibliotheken, die helfen können. Dieser Artikel untersucht eine davon für Python.
Lesen Sie mehr unter http://www.devshed.com/c/a/Python/Python-for-PDF-Generation/#whoCFCPh3TAks368.99
quelle
Hier ist eine Lösung, die nur mit den Standardpaketen funktioniert.
matplotlib
verfügt über ein PDF-Backend zum Speichern von Zahlen in PDF. Sie können Figuren mit Nebenhandlungen erstellen, wobei jede Nebenhandlung eines Ihrer Bilder ist. Sie haben die volle Freiheit, mit der Figur herumzuspielen: Titel hinzufügen, mit der Position spielen usw. Sobald Ihre Figur fertig ist, speichern Sie sie als PDF. Bei jedem Aufruf vonsavefig
wird eine weitere PDF-Seite erstellt.Das folgende Beispiel zeigt 2 Bilder nebeneinander auf Seite 1 und Seite 2.
quelle
Ich habe das in PyQt ziemlich oft gemacht und es funktioniert sehr gut. Qt bietet umfassende Unterstützung für Bilder, Schriftarten, Stile usw. und all diese können in PDF-Dokumente geschrieben werden.
quelle
Ich glaube, dass matplotlib die Fähigkeit hat, Grafiken, Text und andere Objekte in ein PDF-Dokument zu serialisieren.
quelle
Ich verwende 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 fand, dass Reportlab nicht so einfach zu verwenden ist (zumindest für mich).
quelle
fpdf ist auch Python. Und oft benutzt. Siehe PyPI / Pip-Suche. Aber vielleicht wurde es von pyfpdf in fpdf umbenannt. Von Funktionen: PNG-, GIF- und JPG-Unterstützung (einschließlich Transparenz und Alphakanal)
quelle
Sie können xhtml2pdf http://flask.pocoo.org/snippets/68/ ausprobieren.
quelle
Es hängt davon ab, in welchem Format Ihre Bilddateien vorliegen, aber für ein Projekt hier bei der Arbeit habe ich das Tool tiff2pdf in LibTIFF von RemoteSensing.org verwendet . Grundsätzlich wurde nur ein Unterprozess verwendet, um tiff2pdf.exe mit dem entsprechenden Argument aufzurufen, um die Art von TIFF zu lesen, die ich hatte, und um die Art von PDF auszugeben, die ich wollte. Wenn es sich nicht um Tiffs handelt, können Sie sie wahrscheinlich mithilfe von PIL in Tiffs konvertieren oder ein Tool finden, das spezifischer für Ihren Bildtyp ist (oder allgemeiner, wenn die Bilder unterschiedlich sind), wie das oben erwähnte ReportLab.
quelle
fpdf funktioniert gut für mich. Viel einfacher als ReportLab und wirklich kostenlos. Funktioniert mit UTF-8.
quelle
rinohtype unterstützt das Einbetten von PDF-, PNG- und JPEG-Bildern (nativ) und anderen Bitmap-Formaten (wenn Pillow installiert ist).
(Vollständige Offenlegung: Ich bin der Autor von rinohtype)
quelle
Wenn Sie mit LaTex vertraut sind, sollten Sie Pylatex in Betracht ziehen
Einer der Vorteile von Pylatex besteht darin, dass die Bildqualität leicht gesteuert werden kann. Die Bilder in Ihrem PDF haben die gleiche Qualität wie die Originalbilder. Bei der Verwendung von reportlab habe ich festgestellt, dass die Bilder automatisch komprimiert und die Bildqualität verringert wurden.
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 es auf LaTex basiert. Ich habe jedoch festgestellt, dass die Verwendung des Positionsarguments in der Figure-Klasse und manchmal in Subfigure ausreichend gute Ergebnisse liefert.
Beispielcode zum Erstellen eines PDFs mit einem einzelnen Bild:
Zusätzlich zur Installation von pylatex (pip install pylatex) müssen Sie LaTex installieren. Für Ubuntu und andere Debian-Systeme können Sie ausführen
sudo apt-get install texlive-full
. Wenn Sie Windows verwenden, würde ich MixTex empfehlenquelle