Come creare file PDF in Python [chiuso]


156

Sto lavorando a un progetto che prende alcune immagini dall'utente e quindi crea un file PDF che contiene tutte queste immagini.

Esiste un modo o uno strumento per farlo in Python? Ad esempio per creare un file PDF (o eps, ps) da image1 + image 2 + image 3 -> file PDF?


47
In caso di dubbi, py
aggiungi il

8
Un altro trucco di ricerca SO: [language or tag] some_keyword come in [python] PDFo[python] PDF image
mjv,

Per chi viene qui utilizzando matplotlib: stackoverflow.com/questions/17788685/...
David Parks

Risposte:


39

Suggerisco pyPdf . Funziona davvero bene. Ho anche scritto un post sul blog qualche tempo fa, lo puoi trovare qui .


7
Un fork attuale di PyPDF2 si trova qui .
Edmond Burnett,

98
Nota che il pypdf taglia solo / incolla / ecc. Il contenuto pdf esistente - non puoi aggiungere testo o immagini a un pdf.
drevicko,

3
pyPDF2 non è per la creazione di nuovi documenti PDF, 4cs
michelek,

160

Ecco la mia esperienza dopo aver seguito i suggerimenti in questa pagina.

  1. pyPDF non può incorporare immagini in file. Può solo dividere e unire. (Fonte: Ctrl + F attraverso la sua pagina di documentazione ) Il che è fantastico, ma non se hai immagini che non sono già incorporate in un PDF.

  2. pyPDF2 non sembra avere alcuna documentazione aggiuntiva su pyPDF.

  3. ReportLab è molto esteso. ( Guida utente ) Tuttavia, con un po 'di Ctrl + F e sfogliando la sua fonte, ho ottenuto questo:

    • Innanzitutto, scarica il programma di installazione e l' origine di Windows
    • Quindi prova questo sulla riga di comando di 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()

Tutto ciò di cui avevo bisogno era di mettere un mucchio di immagini in un PDF, in modo da poter controllare come apparivano e stamparle. Quanto sopra è sufficiente per raggiungere questo obiettivo.

ReportLab è eccezionale, ma trarrebbe beneficio dall'includere in modo prominente hellow worlds come sopra nella sua documentazione.


13
Devo dire che reportlab è il migliore per la generazione di PDF che ho provato, sicuramente il più completo. Tuttavia, è anche un po 'più complicato. blog.pythonlibrary.org/2010/03/08/… blog.pythonlibrary.org/2010/09/21/…
Jose Salvatierra

1
Era esattamente quello che cercavo
Maarten,

@JoseSalvatierra Grazie Jose ... è davvero facile. Grazie per il link al blog.
Arindam Roychowdhury,

33

Suggerisco Pdfkit . ( guida all'installazione )

Crea pdf da file html. L'ho scelto per creare pdf in 2 passaggi dal mio stack Python Pyramid:

  1. Rendering lato server con modelli mako con lo stile e il markup che desideri per il tuo documento pdf
  2. Esecuzione del pdfkit.from_string(...)metodo passando l'html renderizzato come parametro

In questo modo ottieni un documento pdf con stile e immagini supportate.

Puoi installarlo come segue:

  • usando pip

    pip install pdfkit

  • Dovrai anche installare wkhtmltopdf ( su Ubuntu ).

14

Puoi provare questo (Python-for-PDF-Generation) o puoi provare PyQt , che ha il supporto per la stampa in pdf.

Python per la generazione di PDF

Il Portable Document Format (PDF) ti consente di creare documenti che sembrano esattamente gli stessi su ogni piattaforma. A volte, tuttavia, un documento PDF deve essere generato in modo dinamico e ciò può rappresentare una vera sfida. Fortunatamente, ci sono librerie che possono aiutare. Questo articolo esamina uno di quelli per Python.

Maggiori informazioni su http://www.devshed.com/c/a/Python/Python-for-PDF-Generation/#whoCFCPh3TAks368.99


Il collegamento non funziona più.
Robert Koch,

9

Ecco una soluzione che funziona solo con i pacchetti standard. matplotlibha un backend PDF per salvare i dati in PDF. Puoi creare figure con sottotrame, in cui ogni sottotrama è una delle tue immagini. Hai la massima libertà di scherzare con la figura: aggiungere titoli, giocare con la posizione, ecc. Una volta terminata la figura, salvare in PDF. Ogni chiamata a savefigcreerà un'altra pagina di PDF.

L'esempio seguente mostra 2 immagini affiancate, a pagina 1 e pagina 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()

nel mio test, il codice genera una singola pagina con 2 immagini
costruttore

la versione aggiornata del codice è disponibile in github.com/constructor-igor/TechSugar/blob/master/pythonSamples/…
costruttore

7

L'ho fatto parecchio in PyQt e funziona molto bene. Qt ha un ampio supporto per immagini, caratteri, stili, ecc. E tutti possono essere scritti in documenti pdf.


1
Wow, Qt sembra incredibile. Dicono di supportare 15 plaforms, inc. Windows, Mac OS X, Linux, Android, iOS, Windows RT e questi sistemi operativi in ​​tempo reale - INTEGRITY QNX VxWorks qt.io/qt-framework . E, poiché sono un fan di Python, mi piace "PyQt combina tutti i vantaggi di Qt e Python. Un programmatore ha tutto il potere di Qt, ma è in grado di sfruttarlo con la semplicità di Python." Riverbankcomputing.co.uk / software / pyqt / intro
AnneTheAgile

7

Credo che matplotlib abbia la capacità di serializzare grafica, testo e altri oggetti in un documento pdf.


Si, puoi. Questa risposta SO ha alcuni buoni collegamenti su come farlo.
drevicko,

7

fpdf è python (anche). E spesso usato. Vedi ricerca PyPI / pip. Ma forse è stato rinominato da pyfpdf in fpdf. Dalle funzionalità: supporto PNG, GIF e JPG (inclusi trasparenza e canale alfa)


1
La tua risposta non è chiara, ma certamente sei PyFPDF pyject pyfpdf.readthedocs.io/en/latest
Wojciech Kaczmarek

Tutta la confusione nella denominazione è davvero un peccato. Questa risposta e il commento di @WojciechKaczmarek meritano davvero più voti e attenzione. PyFPDF è una porta Python di una libreria PDF spesso usata originariamente scritta in PHP.
Ideogramma

6

Uso rst2pdf per creare un file pdf, poiché ho più familiarità con RST che con HTML. Supporta l'incorporamento di quasi tutti i tipi di immagini raster o vettoriali.

Richiede reportlab , ma ho scoperto che reportlab non è così semplice da usare (almeno per me).



3

Dipende dal formato in cui si trovano i tuoi file di immagini, ma per un progetto qui al lavoro ho usato lo strumento tiff2pdf in LibTIFF da RemoteSensing.org . Fondamentalmente ho usato solo un sottoprocesso per chiamare tiff2pdf.exe con l'argomento appropriato per leggere il tipo di tiff che avevo e produrre il tipo di pdf che volevo. Se non sono TIFF, potresti probabilmente convertirli in TIFIF usando PIL, oppure potresti trovare uno strumento più specifico per il tuo tipo di immagine (o più generico se le immagini saranno diverse) come ReportLab menzionato sopra.


3

fpdf funziona bene per me. Molto più semplice di ReportLab e davvero gratuito. Funziona con UTF-8.


2
Link / Descrip . : fpdf.org FPDF è una classe PHP che consente di generare file PDF con PHP puro, vale a dire senza utilizzare la libreria PDFlib. F di FPDF sta per Free: puoi usarlo per qualsiasi tipo di utilizzo e modificarlo in base alle tue esigenze. FPDF ha altri vantaggi: funzioni di alto livello. Ecco un elenco delle sue caratteristiche principali: scelta dell'unità di misura, formato e margini della pagina, gestione dell'intestazione e piè di pagina, interruzione automatica della pagina, interruzione di riga automatica e giustificazione del testo, supporto delle immagini (JPEG, PNG e GIF), colori, collegamenti, TrueType, Type1 e supporto codifica, compressione pagina
AnneTheAgile

12
Non molto rilevante considerando la domanda su Python, non su PHP
KingRadical,

1
perché tutto questo downvoting? fpdf è disponibile anche per Python. pip install fpdf funziona
user1981924

1
fpdf potrebbe essere iniziato con php. Ma c'è una porta Python che funziona davvero bene. Quindi penso che questa sia una risposta molto pertinente che merita più voti positivi che negativi. (Non sono sicuro della situazione in cui questa risposta è stata inizialmente pubblicata)
Sumudu

3

rinohtype supporta l'incorporamento di immagini PDF, PNG e JPEG (nativamente) e altri formati bitmap (quando è installato Pillow).

(Informativa completa: sono l'autore di rinohtype)


1
Hey! Correggimi se sbaglio, ma sembra che sia uno strumento abbastanza potente e, a differenza di molti, molti altri elencati qui non sono un wrapper in pitone per una libreria acuta php / ruby ​​/ perl / pyqt4 / other crap.
Mikaelblomkvistsson,

3

Se hai familiarità con LaTex potresti prendere in considerazione pylatex

Uno dei vantaggi di pylatex è che è facile controllare la qualità dell'immagine. Le immagini nel tuo pdf saranno della stessa qualità delle immagini originali. Durante l'utilizzo di reportlab, ho riscontrato che le immagini venivano compresse automaticamente e la qualità delle immagini ridotta.

Lo svantaggio di pylatex è che, poiché si basa su LaTex, può essere difficile posizionare le immagini esattamente dove si desidera sulla pagina. Tuttavia, ho scoperto che l'uso dell'argomento position nella classe Figure, e talvolta Sottofigura, dà risultati abbastanza buoni.

Codice di esempio per la creazione di un pdf con una singola immagine:

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)

Oltre all'installazione di pylatex (pip install pylatex), è necessario installare LaTex. Per Ubuntu e altri sistemi Debian è possibile eseguire sudo apt-get install texlive-full. Se stai usando Windows, consiglierei MixTex

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.