วิธีสร้างไฟล์ PDF ใน Python [ปิด]


156

ฉันกำลังทำงานในโครงการที่รับภาพบางส่วนจากผู้ใช้แล้วสร้างไฟล์ PDF ที่มีภาพเหล่านี้ทั้งหมด

มีวิธีใดหรือเครื่องมือใดในการทำเช่นนี้ใน Python เช่นการสร้างไฟล์ PDF (หรือ eps, ps) จาก image1 + image 2 + image 3 -> ไฟล์ PDF?


47
เมื่อสงสัยให้นำหน้าสิ่งที่คุณกำลังค้นหาโดยpy;-)
mjv

8
ดังนั้นเคล็ดลับการค้นหาอื่น ๆ : [language or tag] some_keyword เป็นใน[python] PDFหรือ[python] PDF image
MJV- สนาม

สำหรับผู้ที่มาที่นี่โดยใช้ matplolib: stackoverflow.com/questions/17788685/…
David Parks

ฉันลงคะแนนคำถามนี้เพราะคำตอบที่ยอมรับคือคำตอบที่ผิด ....
boatcoder

คำตอบ:


39

ผมขอแนะนำให้pyPdf มันใช้งานได้ดีจริงๆ ฉันยังเขียนบล็อกโพสต์ขณะที่บางคนที่ผ่านมาคุณสามารถค้นหาได้ที่นี่


7
ส้อมปัจจุบันของ PyPDF2 ตั้งอยู่ที่นี่
Edmond Burnett

98
โปรดทราบว่า pypdf เพียงตัด / วาง / ฯลฯ เนื้อหา PDF ที่มีอยู่ - คุณไม่สามารถเพิ่มข้อความหรือรูปภาพใน pdf
drevicko

3
pyPDF2 ไม่ได้ใช้สำหรับสร้างเอกสาร PDF ใหม่ 4cs
michelek

160

นี่คือประสบการณ์ของฉันหลังจากทำตามคำแนะนำในหน้านี้

  1. pyPDF ไม่สามารถฝังภาพลงในไฟล์ได้ มันสามารถแยกและรวมเท่านั้น (ที่มา: Ctrl + F ผ่านหน้าเอกสารประกอบ ) ซึ่งยอดเยี่ยม แต่ไม่ใช่ถ้าคุณมีภาพที่ไม่ได้ฝังอยู่ใน PDF

  2. pyPDF2ดูเหมือนจะไม่มีเอกสารประกอบเพิ่มเติมที่ด้านบนของ pyPDF

  3. ReportLab กว้างขวางมาก ( Userguide ) อย่างไรก็ตามด้วย Ctrl + F และ grepping ผ่านแหล่งที่มาของมันฉันได้รับ:

สิ่งที่ฉันต้องการคือการทำให้รูปภาพเป็นไฟล์ PDF เพื่อให้ฉันสามารถตรวจสอบว่าพวกเขาดูและพิมพ์อย่างไร ข้างต้นก็เพียงพอที่จะบรรลุเป้าหมายนั้น

ReportLab นั้นยอดเยี่ยม แต่จะได้รับประโยชน์จากการรวมเอา helloworld ดังที่กล่าวไว้ในเอกสาร


13
ฉันต้องบอกว่า reportlab นั้นดีที่สุดสำหรับการสร้าง PDF ที่ฉันได้ลองมาแล้วและสมบูรณ์ที่สุดแน่นอน อย่างไรก็ตามมันก็ซับซ้อนกว่าเล็กน้อย blog.pythonlibrary.org/2010/03/08/… blog.pythonlibrary.org/2010/09/21/
Jose Salvatierra

1
นี่คือสิ่งที่ฉันกำลังมองหา
มาร์เทน

@JoseSalvatierra ขอบคุณ Jose ... นี่มันง่ายจริงๆ ขอบคุณสำหรับลิงค์บล็อก
Arindam Roychowdhury

33

ผมขอแนะนำให้Pdfkit ( คู่มือการติดตั้ง)

มันสร้าง pdf จากไฟล์ html ฉันเลือกที่จะสร้าง pdf ใน 2 ขั้นตอนจาก Python Pyramid stack ของฉัน:

  1. แสดงฝั่งเซิร์ฟเวอร์ด้วยเทมเพลต mako ที่มีสไตล์และมาร์กอัปที่คุณต้องการสำหรับเอกสาร pdf
  2. ดำเนินการpdfkit.from_string(...)วิธีการโดยการส่ง html ที่แสดงผลเป็นพารามิเตอร์

วิธีนี้คุณจะได้รับเอกสาร PDF พร้อมสไตล์และรูปภาพที่รองรับ

คุณสามารถติดตั้งได้ดังนี้:

  • ใช้ pip

    pip install pdfkit

  • คุณจะต้องติดตั้ง wkhtmltopdf ( บน Ubuntu )

14

คุณสามารถลองนี้ (งูใหญ่สำหรับรูปแบบไฟล์ PDF-Generation) หรือคุณสามารถลองPyQtซึ่งได้รับการสนับสนุนสำหรับการพิมพ์เพื่อ pdf

Python สำหรับการสร้าง PDF รูป

แบบเอกสารพกพา (PDF) ช่วยให้คุณสร้างเอกสารที่มีลักษณะเหมือนกันทุกแพลตฟอร์ม อย่างไรก็ตามในบางครั้งเอกสาร PDF จำเป็นต้องสร้างขึ้นแบบไดนามิกและอาจเป็นเรื่องที่ค่อนข้างท้าทาย โชคดีที่มีห้องสมุดที่สามารถช่วยเหลือได้ บทความนี้ตรวจสอบหนึ่งในนั้นสำหรับ Python

อ่านเพิ่มเติมได้ที่http://www.devshed.com/c/a/Python/Python-for-PDF-Generation/#whoCFCPh3TAks368.99


ลิงก์ใช้งานไม่ได้อีกต่อไป
Robert Koch

9

นี่คือโซลูชันที่ใช้งานได้กับแพ็คเกจมาตรฐานเท่านั้น matplotlibมีแบ็กเอนด์ PDF เพื่อบันทึกตัวเลขเป็น PDF คุณสามารถสร้างตัวเลขด้วยรูปแบบย่อยโดยที่แต่ละรูปแบบย่อยเป็นหนึ่งในภาพของคุณ คุณมีอิสระอย่างเต็มที่ที่จะยุ่งกับตัวเลข: การเพิ่มชื่อเล่นกับตำแหน่งเป็นต้นเมื่อร่างของคุณเสร็จแล้วให้บันทึกเป็น PDF การเรียกแต่ละครั้งไปยังsavefigจะสร้างหน้าอื่นของ PDF

ตัวอย่างด้านล่างแปลง 2 ภาพเคียงข้างกันในหน้า 1 และหน้า 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()

ในการทดสอบของฉันรหัสสร้างหน้าเดียวที่มี 2 ภาพ
สตรัค

เวอร์ชันที่อัปเดตของรหัสสามารถพบได้ในgithub.com/constructor-igor/TechSugar/blob/master/pythonSamples/…
สร้าง

7

ฉันทำสิ่งนี้ค่อนข้าง PyQt และทำงานได้ดีมาก Qt ได้รับการสนับสนุนอย่างกว้างขวางสำหรับรูปภาพแบบอักษรลักษณะ ฯลฯ และทั้งหมดสามารถเขียนลงในเอกสาร pdf


1
ว้าว Qt ดูน่าอัศจรรย์ พวกเขาบอกว่าพวกเขาสนับสนุน 15 แผ่น, inc Windows, Mac OS X, Linux, Android, iOS, Windows RT บวกเหล่านี้แบบ Real-Time Systems- ปฏิบัติการ QNX INTEGRITY VxWorks qt.io/qt-framework และเนื่องจากฉันเป็นแฟนงูหลามฉันชอบ "PyQt รวมข้อดีทั้งหมดของ Qt และ Python โปรแกรมเมอร์มีพลังทั้งหมดของ Qt แต่สามารถใช้ประโยชน์จาก Python ได้อย่างเรียบง่าย" riverbankcomputing.co.uk / software / pyqt / intro
AnneTheAgile


7

fpdf เป็น python (ด้วย) และมักใช้ ดู PyPI / การค้นหา pip แต่อาจถูกเปลี่ยนชื่อจาก pyfpdf เป็น fpdf จากคุณสมบัติ: รองรับ PNG, GIF และ JPG (รวมถึงความโปร่งใสและช่องอัลฟา)


1
คำตอบของคุณไม่ชัดเจน แต่แน่นอนว่า PyRPDF pfoject pyfpdf.readthedocs.io/th/ ล่าสุดของคุณ
Wojciech Kaczmarek

ความสับสนทั้งหมดในการตั้งชื่อเป็นที่น่าเสียดายจริงๆ คำตอบและความคิดเห็นนี้โดย @WojciechKaczmarek จริงๆสมควรได้รับ upvotes และความสนใจมากขึ้น PyFPDF เป็นพอร์ตหลามของไลบรารี PDF ที่ใช้บ่อยที่เขียนด้วยภาษา PHP
Ideogram

6

ฉันใช้rst2pdfเพื่อสร้างไฟล์ pdf เนื่องจากฉันคุ้นเคยกับ RST มากกว่ากับ HTML รองรับการฝังภาพแรสเตอร์หรือเวกเตอร์เกือบทุกชนิด

ต้องใช้reportlabแต่ฉันพบว่า reportlab ไม่ได้ใช้งานตรงไปตรงมา (อย่างน้อยสำหรับฉัน)



3

มันขึ้นอยู่กับรูปแบบไฟล์ภาพของคุณอยู่ใน แต่สำหรับโครงการที่นี่ที่ทำงานผมใช้เครื่องมือ tiff2pdf ใน libtiff จากRemoteSensing.org โดยทั่วไปจะใช้ subprocess เรียก tiff2pdf.exe ด้วยอาร์กิวเมนต์ที่เหมาะสมเพื่ออ่านชนิดของ tiff ที่ฉันมีและเอาท์พุทเป็น pdf ที่ฉันต้องการ หากไม่ใช่ tiffs คุณอาจแปลงเป็น tiffs โดยใช้ PIL หรืออาจค้นหาเครื่องมือที่เฉพาะเจาะจงมากขึ้นกับประเภทรูปภาพของคุณ


3

fpdf ทำงานได้ดีสำหรับฉัน ง่ายกว่า ReportLab และฟรีจริงๆ ทำงานร่วมกับ UTF-8


2
Link / Descrip . : fpdf.org FPDF เป็นคลาส PHP ที่ช่วยให้สามารถสร้างไฟล์ PDF ด้วย PHP ล้วนๆได้โดยไม่ต้องใช้ห้องสมุด PDFlib F จาก FPDF ย่อมาจากฟรี: คุณสามารถใช้เพื่อการใช้งานประเภทใดก็ได้และปรับเปลี่ยนให้เหมาะกับความต้องการของคุณ FPDF มีข้อดีอื่น ๆ : ฟังก์ชั่นระดับสูง นี่คือรายการของคุณสมบัติหลัก: ทางเลือกของหน่วยวัด, รูปแบบหน้าและระยะขอบ, การจัดการส่วนหัวและส่วนท้ายของหน้า, ตัวแบ่งหน้าอัตโนมัติ, ตัวแบ่งบรรทัดอัตโนมัติและการปรับข้อความ, การสนับสนุนรูปภาพ (JPEG, PNG และ GIF), สี, ลิงก์ รองรับ TrueType, Type1 และการเข้ารหัส, การบีบอัดหน้า
AnneTheAgile

12
ไม่เกี่ยวข้องมากนักเมื่อพิจารณาคำถามนี้เกี่ยวกับ Python ไม่ใช่ PHP
KingRadical

1
ทำไม downvoting นี้ทั้งหมด? fpdf มีให้สำหรับ python ด้วย pip ติดตั้ง fpdf ทำงาน
user1981924

1
fpdf อาจเริ่มต้นด้วย php แต่มีพอร์ตหลามซึ่งทำงานได้ดีจริงๆ ดังนั้นฉันคิดว่านี่เป็นคำตอบที่เกี่ยวข้องมากซึ่งสมควรได้รับคะแนนเสียงมากกว่าโหวต (ฉันไม่แน่ใจเกี่ยวกับสถานการณ์เมื่อคำตอบนี้ถูกโพสต์ครั้งแรก)
Sumudu

3

rinohtypeรองรับการฝังภาพ PDF, PNG และ JPEG ( ดั้งเดิม ) และรูปแบบบิตแมปอื่น ๆ (เมื่อติดตั้ง Pillow)

(การเปิดเผยแบบเต็ม: ฉันเป็นผู้แต่ง rinohtype)


1
เฮ้! แก้ไขให้ถูกต้องถ้าฉันผิด แต่ดูเหมือนว่ามันเป็นเครื่องมือที่มีประสิทธิภาพมากและไม่เหมือนกับคนอื่น ๆ อีกมากมายที่อยู่ในรายการนี้ไม่ใช่เสื้อคลุมหลามสำหรับคลังชั่วคราว php / ruby ​​/ perl / pyqt4 / ไลบรารีอึอื่น ๆ
Mikaelblomkvistsson

3

หากคุณคุ้นเคยกับ LaTex คุณอาจต้องการพิจารณาpylatex

ข้อดีอย่างหนึ่งของ pylatex คือสามารถควบคุมคุณภาพของภาพได้ง่าย รูปภาพใน pdf ของคุณจะมีคุณภาพเช่นเดียวกับภาพต้นฉบับ เมื่อใช้ reportlab ฉันพบว่าภาพถูกบีบอัดโดยอัตโนมัติและคุณภาพของภาพลดลง

ข้อเสียของ pylatex ก็คือเนื่องจากเป็นไปตาม LaTex จึงเป็นการยากที่จะวางรูปภาพตรงที่คุณต้องการบนหน้า อย่างไรก็ตามฉันพบว่าการใช้อาร์กิวเมนต์ตำแหน่งในคลาสรูปและบางครั้ง Subfigure ให้ผลลัพธ์ที่ดีพอ

โค้ดตัวอย่างสำหรับการสร้าง pdf ด้วยภาพเดียว:

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)

นอกจากการติดตั้ง pylatex (pip install pylatex) แล้วคุณต้องติดตั้ง LaTex สำหรับ Ubuntu และระบบ Debian อื่น ๆ ที่คุณสามารถเรียกsudo apt-get install texlive-fullใช้ได้ หากคุณใช้ Windows ฉันขอแนะนำMixTex

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.