Cara membuat file PDF dengan Python [ditutup]

156

Saya sedang mengerjakan proyek yang mengambil beberapa gambar dari pengguna dan kemudian membuat file PDF yang berisi semua gambar ini.

Apakah ada cara atau alat untuk melakukan ini dengan Python? Misalnya untuk membuat file PDF (atau eps, ps) dari image1 + image 2 + image 3 -> file PDF?

Stephen T.
sumber
47
Jika ragu, awali apa pun yang Anda cari oleh py;-)
mjv
8
Trik pencarian SO lainnya: [language or tag] some_keyword seperti pada [python] PDFatau[python] PDF image
mjv
Bagi mereka yang datang ke sini menggunakan matplolib: stackoverflow.com/questions/17788685/…
David Parks
Saya menurunkan pertanyaan ini karena jawaban yang diterima adalah jawaban yang salah ....
boatcoder

Jawaban:

39

Saya sarankan pyPdf . Ini bekerja sangat bagus. Saya juga menulis posting blog beberapa waktu lalu, Anda dapat menemukannya di sini .

Geo
sumber
7
Garpu PyPDF2 saat ini terletak di sini .
Edmond Burnett
98
Perhatikan bahwa pypdf hanya memotong / menempel / dll. Konten pdf yang ada - Anda tidak dapat menambahkan teks atau gambar ke pdf.
drevicko
3
pyPDF2 bukan untuk membuat dokumen PDF baru, 4cs
michelek
160

Ini pengalaman saya setelah mengikuti petunjuk di halaman ini.

  1. pyPDF tidak dapat menanamkan gambar ke file. Itu hanya dapat dibagi dan bergabung. (Sumber: Ctrl + F melalui halaman dokumentasinya ) Bagus, tetapi tidak jika Anda memiliki gambar yang belum tertanam dalam PDF.

  2. pyPDF2 tampaknya tidak memiliki dokumentasi tambahan di atas pyPDF.

  3. ReportLab sangat luas. ( Userguide ) Namun, dengan sedikit Ctrl + F dan melihat-lihat sumbernya, saya mendapatkan ini:

    • Pertama, unduh pemasang dan sumber Windows
    • Kemudian coba ini di baris perintah 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()

Yang saya butuhkan adalah memasukkan banyak gambar ke dalam PDF, sehingga saya bisa memeriksa bagaimana mereka melihat dan mencetaknya. Di atas cukup untuk mencapai tujuan itu.

ReportLab hebat, tetapi akan mendapat manfaat dari menyertakan helloworlds seperti di atas secara jelas dalam dokumentasinya.

Evgeni Sergeev
sumber
13
Saya harus mengatakan reportlab adalah yang terbaik untuk generasi PDF yang saya coba, pasti yang paling lengkap. Namun, ini juga sedikit lebih rumit. blog.pythonlibrary.org/2010/03/08/... blog.pythonlibrary.org/2010/09/21/…
Jose Salvatierra
1
Ini persis apa yang saya cari
Maarten
@ JoseSalvatierra Terima kasih Jose ... ini sangat mudah. Terima kasih atas tautan blognya.
Arindam Roychowdhury
33

Saya menyarankan Pdfkit . ( panduan instalasi )

Ini menciptakan pdf dari file html. Saya memilihnya untuk membuat pdf dalam 2 langkah dari tumpukan Python Pyramid saya:

  1. Rendering sisi server dengan template mako dengan gaya dan markup yang Anda inginkan untuk dokumen pdf Anda
  2. Menjalankan pdfkit.from_string(...)metode dengan melewatkan html yang diberikan sebagai parameter

Dengan cara ini Anda mendapatkan dokumen pdf dengan gaya dan gambar yang didukung.

Anda dapat menginstalnya sebagai berikut:

  • menggunakan pip

    pip install pdfkit

  • Anda juga perlu menginstal wkhtmltopdf ( di Ubuntu ).
eton_ceb
sumber
14

Anda dapat mencoba ini (Python-untuk-PDF-Generasi) atau Anda dapat mencoba PyQt , yang memiliki dukungan untuk mencetak ke pdf.

Python untuk

Pembuatan PDF . Portable Document Format (PDF) memungkinkan Anda membuat dokumen yang terlihat persis sama di setiap platform. Namun, terkadang dokumen PDF perlu dibuat secara dinamis, dan itu bisa menjadi tantangan. Untungnya, ada perpustakaan yang bisa membantu. Artikel ini membahas salah satunya untuk Python.

Baca lebih lanjut di http://www.devshed.com/c/a/Python/Python-for-PDF-Generation/#whoCFCPh3TAks368.99

gruszczy
sumber
Tautan tidak berfungsi lagi.
Robert Koch
9

Ini adalah solusi yang hanya berfungsi dengan paket standar. matplotlibmemiliki backend PDF untuk menyimpan angka ke PDF. Anda dapat membuat angka dengan sub-plot, di mana setiap sub-plot adalah salah satu gambar Anda. Anda memiliki kebebasan penuh untuk mengacaukan gambar: Menambahkan judul, bermain dengan posisi, dll. Setelah angka Anda selesai, simpan ke PDF. Setiap panggilan ke savefigakan membuat halaman lain dari PDF.

Contoh di bawah ini plot gambar 2 berdampingan, di halaman 1 dan halaman 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()
Anton Schwaighofer
sumber
dalam pengujian saya, kode menghasilkan satu halaman dengan 2 gambar
konstruktor
versi terbaru dari kode dapat ditemukan di github.com/constructor-igor/TechSugar/blob/master/pythonSamples/…
constructor
7

Saya telah melakukan ini cukup banyak di PyQt dan itu bekerja dengan sangat baik. Qt memiliki dukungan luas untuk gambar, font, gaya, dll dan semua itu dapat dituliskan ke dokumen pdf.

Allen
sumber
1
Wow, Qt terlihat luar biasa. Mereka mengatakan mereka mendukung 15 plaform, inc. Windows, Mac OS X, Linux, Android, iOS, Windows RT plus Sistem Operasi Real-Time ini - INTEGRITAS QNX VxWorks qt.io/qt-framework . Dan, karena saya penggemar python, saya suka "PyQt menggabungkan semua keunggulan Qt dan Python. Seorang programmer memiliki semua kekuatan Qt, tetapi mampu mengeksploitasinya dengan kesederhanaan Python." Riverbankcomputing.co.uk / software / pyqt / intro
AnneTheAgile
7

Saya percaya bahwa matplotlib memiliki kemampuan untuk membuat serial gambar, teks dan objek lain ke dokumen pdf.

Andrea
sumber
Ya kamu bisa. Jawaban SO ini memiliki beberapa tautan bagus tentang cara melakukannya.
drevicko
7

fpdf adalah python (juga). Dan sering digunakan. Lihat pencarian PyPI / pip. Tapi mungkin itu diganti namanya dari pyfpdf ke fpdf. Dari fitur: PNG, GIF dan dukungan JPG (termasuk transparansi dan saluran alfa)

mirek
sumber
1
Jawaban Anda tidak jelas, tetapi tentu saja Anda adalah PyFPDF pfoject pyfpdf.readthedocs.io/en/latest
Wojciech Kaczmarek
Semua kebingungan dalam penamaan sangat disayangkan. Jawaban ini dan komentar dari @WojciechKaczmarek benar-benar layak mendapat lebih banyak upvote dan perhatian. PyFPDF adalah port python dari pustaka PDF yang sering digunakan awalnya ditulis dalam PHP.
Ideogram
6

Saya menggunakan rst2pdf untuk membuat file pdf, karena saya lebih akrab dengan RST daripada dengan HTML. Ini mendukung penyematan hampir semua jenis gambar raster atau vektor.

Ini membutuhkan reportlab , tetapi saya menemukan reportlab tidak begitu mudah untuk digunakan (setidaknya untuk saya).

ismailsunni
sumber
3

Itu tergantung pada format apa file gambar Anda, tetapi untuk proyek di sini di tempat kerja saya menggunakan alat tiff2pdf di LibTIFF dari RemoteSensing.org . Pada dasarnya hanya menggunakan subproses untuk memanggil tiff2pdf.exe dengan argumen yang sesuai untuk membaca jenis tiff yang saya miliki dan menampilkan jenis pdf yang saya inginkan. Jika itu bukan tiff, Anda mungkin bisa mengubahnya menjadi tiff menggunakan PIL, atau mungkin menemukan alat yang lebih spesifik untuk jenis gambar Anda (atau lebih umum jika gambarnya akan beragam) seperti ReportLab yang disebutkan di atas.

Tofystedeth
sumber
3

fpdf bekerja dengan baik untuk saya. Jauh lebih sederhana daripada ReportLab dan benar-benar gratis. Bekerja dengan UTF-8.

mfs
sumber
2
Tautan / Deskripsi: fpdf.org FPDF adalah kelas PHP yang memungkinkan untuk menghasilkan file PDF dengan PHP murni, artinya tanpa menggunakan perpustakaan PDFlib. F dari FPDF adalah singkatan Gratis: Anda dapat menggunakannya untuk segala jenis penggunaan dan memodifikasinya sesuai dengan kebutuhan Anda. FPDF memiliki kelebihan lain: fungsi tingkat tinggi. Berikut adalah daftar fitur utamanya: Pilihan satuan ukuran, format halaman dan margin, manajemen halaman header dan footer, Pemutusan halaman otomatis, Pemutusan baris otomatis dan pembenaran teks, Dukungan gambar (JPEG, PNG dan GIF), Warna, Tautan, TrueType, Type1 dan dukungan pengkodean, kompresi halaman
AnneTheAgile
12
Tidak terlalu relevan mengingat pertanyaannya adalah tentang Python, bukan PHP
KingRadical
1
mengapa semua ini downvoting? fpdf tersedia juga untuk python. pip install fpdf works
user1981924
1
fpdf mungkin sudah dimulai dengan php. Tetapi ada port python yang bekerja dengan sangat baik. Jadi saya pikir ini adalah jawaban yang sangat relevan yang pantas mendapatkan lebih banyak suara daripada suara turun. (Saya tidak yakin dengan situasi ketika jawaban ini awalnya diposting)
Sumudu
3

rinohtype mendukung penyematan gambar PDF, PNG dan JPEG (asli) dan format bitmap lainnya (ketika Bantal diinstal).

(Pengungkapan penuh: Saya adalah penulis rinohtype)

Brecht Machiels
sumber
1
Hei! Perbaiki saya jika saya salah, tetapi sepertinya alat ini cukup kuat dan tidak seperti banyak, banyak lainnya yang tercantum di sini bukan pembungkus python untuk php / ruby ​​/ perl / pyqt4 / perpustakaan omong kosong acient lainnya.
Mikaelblomkvistsson
3

Jika Anda terbiasa dengan LaTex, Anda mungkin ingin mempertimbangkan pylatex

Salah satu kelebihan pylatex adalah mudahnya mengontrol kualitas gambar. Gambar dalam pdf Anda akan memiliki kualitas yang sama dengan gambar aslinya. Saat menggunakan reportlab, saya mengalami bahwa gambar dikompresi secara otomatis, dan kualitas gambar berkurang.

Kerugian pylatex adalah, karena didasarkan pada LaTex, mungkin sulit untuk menempatkan gambar tepat di tempat yang Anda inginkan pada halaman. Namun, saya telah menemukan bahwa menggunakan argumen posisi di kelas Gambar, dan kadang-kadang Subfigure, memberikan hasil yang cukup baik.

Kode contoh untuk membuat pdf dengan gambar tunggal:

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)

Selain menginstal pylatex (pip install pylatex), Anda perlu menginstal LaTex. Untuk Ubuntu dan sistem Debian lain yang dapat Anda jalankan sudo apt-get install texlive-full. Jika Anda menggunakan Windows, saya akan merekomendasikan MixTex

larsjr
sumber