2010-02-12 43 views
127

Tôi đang làm việc trên một dự án có một số hình ảnh từ người dùng và sau đó tạo tệp PDF chứa tất cả những hình ảnh này.Cách tạo tệp PDF bằng Python

Có cách nào hay bất kỳ công cụ nào để thực hiện việc này bằng Python? Ví dụ. thế nào để tạo một tệp PDF (hoặc eps, ps) từ image1 + image 2 + image 3 -> tệp PDF?

+39

Khi nghi ngờ, tiền tố bất cứ điều gì bạn đang tìm kiếm bởi 'py' ;-) – mjv

+8

Một lừa SO tìm kiếm:' [ngôn ngữ hoặc thẻ] some_keyword' như trong '[python] PDF' hoặc '[python] PDF image' – mjv

+0

Đối với những người đến đây bằng cách sử dụng matplolib: http://stackoverflow.com/questions/17788685/python-saving-multiple-figures-into-one-pdf-file –

Trả lời

45

Tôi đề nghị pyPdf. Nó hoạt động thực sự tốt đẹp. Tôi cũng đã viết một bài đăng blog một số trước đây, bạn có thể tìm thấy nó here.

+5

Một nhánh hiện tại của PyPDF2 được đặt tại đây (https://github.com/mstamy2/PyPDF2). –

+56

Lưu ý rằng pypdf chỉ cắt/dán/etc .. nội dung pdf hiện có - bạn không thể thêm văn bản hoặc hình ảnh vào pdf. – drevicko

+59

Làm thế nào trên trái đất này là câu trả lời được chấp nhận ... – bugmenot123

13

Bạn có thể thử this (Python-cho-PDF-Generation) hoặc bạn có thể thử PyQt, có hỗ trợ in tới pdf.

Python cho PDF hệ

Các Portable Document Format (PDF) cho phép bạn tạo các tài liệu trông giống hệt nhau trên mọi nền tảng. Đôi khi, một tài liệu PDF cần phải được tạo động, tuy nhiên, và đó có thể là một thách thức. May mắn thay, có những thư viện có thể giúp đỡ. Bài viết này xem xét một trong số đó cho Python.

Đọc thêm tại http://www.devshed.com/c/a/Python/Python-for-PDF-Generation/#whoCFCPh3TAks368.99

1

Tùy thuộc vào định dạng tệp hình ảnh của bạn, nhưng đối với dự án ở đây tại nơi tôi đã sử dụng công cụ tiff2pdf trong LibTIFF từ RemoteSensing.org. Về cơ bản chỉ được sử dụng subprocess để gọi tiff2pdf.exe với các đối số thích hợp để đọc các loại tiff tôi đã có và đầu ra các loại pdf tôi muốn. Nếu họ không phải là tiffs bạn có thể chuyển đổi chúng sang tiffs bằng cách sử dụng PIL, hoặc có thể tìm thấy một công cụ cụ thể hơn cho loại hình ảnh của bạn (hoặc chung chung hơn nếu hình ảnh sẽ được đa dạng) như ReportLab đã đề cập ở trên.

6

Tôi đã làm điều này khá một chút trong PyQt và nó hoạt động rất tốt. Qt có hỗ trợ rộng rãi cho hình ảnh, phông chữ, kiểu, v.v. và tất cả những thứ đó có thể được viết ra các tài liệu pdf.

+0

Wow, Qt trông thật tuyệt vời. Họ nói rằng họ ủng hộ 15 plaforms, inc. Windows, Mac OS X, Linux, Android, iOS, Windows RT cộng với các Hệ điều hành thời gian thực này - INTEGRITY QNX VxWorks http://www.qt.io/qt-framework/. Và, vì tôi là một fan hâm mộ python, tôi thích "PyQt kết hợp tất cả các ưu điểm của Qt và Python. Một lập trình viên có tất cả sức mạnh của Qt, nhưng có thể khai thác nó với sự đơn giản của Python." Http: // www .riverbankcomputing.co.uk/software/pyqt/intro – AnneTheAgile

4

Tôi tin rằng matplotlib có khả năng sắp xếp đồ họa, văn bản và các đối tượng khác vào tài liệu pdf.

+0

Có, bạn có thể. [Câu trả lời SO này] (http://stackoverflow.com/a/12939210/420867) có một số liên kết tốt về cách thực hiện. – drevicko

102

Đây là kinh nghiệm của tôi sau khi làm theo các gợi ý trên trang này.

  1. pyPDF không thể nhúng hình ảnh vào tệp. Nó chỉ có thể tách và hợp nhất. (Nguồn: Ctrl + F qua số documentation page) Điều này thật tuyệt vời, nhưng không phải nếu bạn có hình ảnh chưa được nhúng trong PDF.

  2. pyPDF2 dường như không có bất kỳ tài liệu bổ sung nào trên đầu trang của pyPDF.

  3. Báo cáoLab rất rộng.(Userguide) Tuy nhiên, với một chút Ctrl + F và grepping qua nguồn của nó, tôi nhận điều này:

    • Thứ nhất, download the Windows installersource
    • Sau đó thử này trên Python dòng lệnh:

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

Tất cả những gì tôi cần là đưa một loạt hình ảnh vào PDF để tôi có thể kiểm tra cách chúng in và in chúng. Ở trên là đủ để đạt được mục tiêu đó.

Báo cáoLab là tuyệt vời, nhưng sẽ được hưởng lợi từ việc bao gồm các thế giới helloworld như trên nổi bật trong tài liệu của nó.

+6

Tôi phải nói reportlab là tốt nhất cho thế hệ PDF mà tôi đã thử, chắc chắn là hoàn chỉnh nhất. Tuy nhiên, nó cũng phức tạp hơn một chút. http://www.blog.pythonlibrary.org/2010/03/08/a-simple-step-by-step-reportlab-tutorial/ http://www.blog.pythonlibrary.org/2010/09/ 21/reportlab-bảng-tạo-bảng-in-pdfs-với-python/ –

+1

Đây chính xác là những gì tôi đang tìm kiếm –

-6

fpdf hoạt động tốt cho tôi. Đơn giản hơn nhiều so với ReportLab và thực sự miễn phí. Làm việc với UTF-8.

+2

Liên kết/Mô tả: http://www.fpdf.org/ FPDF là một lớp PHP cho phép để tạo các tệp PDF với PHP thuần túy, có nghĩa là không cần sử dụng thư viện PDFlib. F từ FPDF là viết tắt của Miễn phí: bạn có thể sử dụng nó cho bất kỳ loại sử dụng và sửa đổi nó cho phù hợp với nhu cầu của bạn. FPDF có những ưu điểm khác: chức năng cấp cao. Dưới đây là danh sách các tính năng chính: Lựa chọn đơn vị đo lường, định dạng trang và lề, Quản lý đầu trang và chân trang, Tự động ngắt trang, ngắt dòng tự động và văn bản, Hỗ trợ hình ảnh (JPEG, PNG và GIF), Màu sắc, Liên kết, Hỗ trợ TrueType, Type1 và mã hóa, nén trang – AnneTheAgile

+9

Không phải là rất có liên quan xem xét câu hỏi là về Python, không phải PHP – KingRadical

5

Tôi sử dụng rst2pdf để tạo tệp pdf, vì tôi quen thuộc hơn với RST so với HTML. Nó hỗ trợ nhúng hầu như bất kỳ loại hình ảnh raster hoặc vector nào.

Yêu cầu reportlab, nhưng tôi thấy báo cáo không thẳng tiến để sử dụng (ít nhất là đối với tôi).

17

Tôi đề xuất Pdfkit.

Nó tạo pdf từ các tệp html. Tôi đã chọn nó để tạo pdf trong 2 bước từ Python Pyramid tôi ngăn xếp:

  1. Rendering server-side với các mẫu mako với phong cách và đánh dấu bạn muốn cho bạn tài liệu pdf
  2. Thi pdfkit.from_string(...) phương pháp bằng cách truyền render html làm thông số

Bằng cách này, bạn sẽ nhận được tài liệu pdf có kiểu và hình ảnh được hỗ trợ.

Bạn có thể cài đặt nó như sau:

  • sử dụng pip

    pip install pdfkit

  • Bạn cũng sẽ cần phải cài đặt wkhtmltopdf (on Ubuntu).
+6

Tại sao điều này lại bị giảm? Giải thích sẽ là tốt đẹp ... – Zvika

3

fpdf là python (quá). Và thường được sử dụng. Xem tìm kiếm PyPI/pip. Nhưng có thể nó đã được đổi tên từ pyfpdf thành fpdf. Từ các tính năng: Hỗ trợ PNG, GIF và JPG (bao gồm cả độ trong suốt và kênh alpha)

+0

Câu trả lời của bạn không rõ ràng, nhưng chắc chắn của PyereDF pFPject https://pyfpdf.readthedocs.io/en/latest/ –

2

Đây là giải pháp chỉ hoạt động với các gói tiêu chuẩn. matplotlib có một chương trình phụ trợ PDF để lưu số liệu vào PDF. Bạn có thể tạo một số liệu với các ô con, trong đó mỗi subplot là một trong những hình ảnh của bạn. Bạn có toàn quyền tự do để gây rối với con số: Thêm tiêu đề, chơi với vị trí, vv Sau khi con số của bạn được thực hiện, lưu vào PDF. Mỗi cuộc gọi tới savefig sẽ tạo một trang PDF khác.

Ví dụ bên dưới vẽ 2 hình ảnh song song, trên trang 1 và trang 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() 
+0

trong bài kiểm tra của tôi, mã tạo ra một trang với 2 hình ảnh – constructor

+0

phiên bản cập nhật của mã có thể được tìm thấy trong https://github.com/constructor-igor/TechSugar/blob/master/pythonSamples/tips/pdf-writer.py – constructor

0

rinohtype hỗ trợ nhúng PDF, PNG và JPEG hình ảnh (natively) và các định dạng bitmap khác (khi Gối được cài đặt).

(Họ và tiết lộ: Tôi là tác giả của rinohtype)

Các vấn đề liên quan