पायथन में पीडीएफ फाइलें कैसे बनाएं [बंद]


156

मैं एक ऐसी परियोजना पर काम कर रहा हूं जो उपयोगकर्ता से कुछ छवियां लेती है और फिर एक पीडीएफ फाइल बनाती है जिसमें ये सभी छवियां होती हैं।

क्या पायथन में ऐसा करने का कोई तरीका या कोई उपकरण है? जैसे छवि 1 + छवि 2 + छवि 3 -> पीडीएफ फाइल से एक पीडीएफ फाइल (या ईपीएस, पीएस) बनाने के लिए?


47
जब संदेह हो, तो उपसर्ग जो भी आप खोज रहे हैं; py;-)
mjv

8
एक और एसओ खोज चाल: [language or tag] some_keyword के रूप में [python] PDFया[python] PDF image
mjv

Matplolib का उपयोग करने वाले लोगों के लिए: stackoverflow.com/questions/17788685/…
डेविड पार्क्स

मैंने इस प्रश्न को
अस्वीकार

जवाबों:


39

मैं pyPdf का सुझाव देता हूं । यह वास्तव में अच्छा काम करता है। मैंने कुछ समय पहले एक ब्लॉग पोस्ट भी लिखा था, आप इसे यहाँ पा सकते हैं ।


7
PyPDF2 का एक वर्तमान कांटा यहां स्थित है
एडमंड बर्नेट

98
ध्यान दें कि pypdf केवल कट / पेस्ट / / आदि .. मौजूदा पीडीएफ सामग्री - आप एक पीडीएफ में पाठ या चित्र नहीं जोड़ सकते।
drevicko

3
pyPDF2 नए पीडीएफ दस्तावेज़ बनाने के लिए नहीं है, 4cs
michelek

160

इस पृष्ठ पर संकेत का अनुसरण करने के बाद यहां मेरा अनुभव है।

  1. pyPDF फ़ाइलों में छवियों को एम्बेड नहीं कर सकता है। यह केवल विभाजित और विलय कर सकता है। (स्रोत: Ctrl + F इसके प्रलेखन पृष्ठ के माध्यम से ) जो महान है, लेकिन यदि आपके पास ऐसी छवियां हैं जो पहले से ही एक पीडीएफ में एम्बेडेड नहीं हैं।

  2. pyPDF2 pyPDF के शीर्ष पर कोई अतिरिक्त दस्तावेज़ नहीं लगता है।

  3. रिपोर्टलैब बहुत व्यापक है। ( Userguide ) हालांकि, Ctrl + F की थोड़ी मात्रा और इसके स्रोत के माध्यम से grepping के साथ, मुझे यह मिला:

मुझे बस एक पीडीएफ में छवियों का एक गुच्छा प्राप्त करना है, ताकि मैं देख सकूं कि वे कैसे दिखते हैं और उन्हें प्रिंट करते हैं। उपरोक्त उस लक्ष्य को प्राप्त करने के लिए पर्याप्त है।

रिपोर्टलैब बहुत अच्छा है, लेकिन इसके दस्तावेज में प्रमुखता से नर्कवासियों को शामिल करने से लाभ होगा।


13
मुझे कहना होगा कि रिपोर्टलैब पीडीएफ पीढ़ी के लिए सबसे अच्छा है जो मैंने कोशिश की है, निश्चित रूप से सबसे पूर्ण। हालाँकि, यह थोड़ा अधिक जटिल है। blog.pythonlibrary.org/2010/03/08/… blog.pythonlibrary.org/2010/09/21/…
जोस

1
यह वही था जो मैं देख रहा था
Maarten

@JoseSalvatierra जोस धन्यवाद ... यह वास्तव में आसान है। ब्लॉग लिंक के लिए धन्यवाद।
अरिंदम रॉयचौधरी

33

मैं Pdfkit का सुझाव देता हूं । (इंस्टॉलेशन गाइड )

यह HTML फ़ाइलों से पीडीएफ बनाता है। मैंने इसे अपने पायथन पिरामिड स्टैक से 2 चरणों में पीडीएफ बनाने के लिए चुना:

  1. स्टाइल और मार्कअप के साथ सर्वर-साइड को रेंडर करना जो आप अपने लिए चाहते हैं पीडीएफ डॉक्यूमेंट
  2. pdfkit.from_string(...)पैरामीटर के रूप में प्रदान किए गए HTML को पारित करके निष्पादन की विधि

इस तरह से आपको स्टाइल और समर्थित छवियों के साथ एक पीडीएफ दस्तावेज़ मिलता है।

आप इसे इस प्रकार स्थापित कर सकते हैं:

  • पाइप का उपयोग करना

    pip install pdfkit

  • आपको wkhtmltopdf ( उबंटू पर ) स्थापित करने की भी आवश्यकता होगी ।

14

आप इसे (Python-for-PDF-Generation) आज़मा सकते हैं या आप PyQt को आज़मा सकते हैं , जिसमें PDF को प्रिंट करने का समर्थन है।

पीडीएफ जनरेशन के लिए पायथन

पोर्टेबल डॉक्यूमेंट फॉर्मेट (पीडीएफ) आपको ऐसे दस्तावेज़ बनाने देता है जो हर प्लेटफ़ॉर्म पर बिल्कुल एक जैसे लगते हैं। हालांकि, कभी-कभी एक पीडीएफ दस्तावेज़ को गतिशील रूप से उत्पन्न करने की आवश्यकता होती है, और यह काफी चुनौती हो सकती है। सौभाग्य से, ऐसे पुस्तकालय हैं जो मदद कर सकते हैं। यह लेख पायथन के लिए उनमें से एक की जांच करता है।

Http://www.devshed.com/c/a/Python/Python-for-PDF-Generation/#whoCFCPh3TAks368.99 पर और पढ़ें


लिंक अब काम नहीं करता है।
राबर्ट कोच

9

यहां एक समाधान है जो केवल मानक पैकेजों के साथ काम करता है। matplotlibपीडीएफ के आंकड़ों को बचाने के लिए एक पीडीएफ बैकएंड है। आप सबप्लॉट्स के साथ एक आंकड़ा बना सकते हैं, जहां प्रत्येक उपप्लॉट आपकी छवियों में से एक है। आपको फिगर के साथ खिलवाड़ करने की पूरी आजादी है: टाइटल जोड़ना, पोजीशन से खेलना आदि। एक बार जब आपका फिगर हो जाए तो पीडीएफ में सेव करें। प्रत्येक कॉल savefigपीडीएफ का एक और पेज बनाएगी।

पृष्ठ 1 और पृष्ठ 2 पर, नीचे दिए गए उदाहरणों के साथ-साथ प्लॉट 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 में छवियों, फोंट, शैलियों, आदि के लिए व्यापक समर्थन है और उन सभी को पीडीएफ दस्तावेजों के लिए लिखा जा सकता है।


1
वाह, क्यूटी अद्भुत लग रहा है। वे कहते हैं कि वे 15 पट्टिकाओं, इंक का समर्थन करते हैं। विंडोज, मैक ओएस एक्स, लिनक्स, एंड्रॉइड, आईओएस, विंडोज आरटी प्लस ये रियल-टाइम ऑपरेटिंग सिस्टम- INTEGRITY QNX VxWorks qt.io/qt-framework । और, जब से मैं एक अजगर प्रशंसक हूँ, मुझे पसंद है "PyQt Qt और Python के सभी लाभों को जोड़ता है। एक प्रोग्रामर के पास Qt की सारी शक्ति है, लेकिन यह Python की सादगी के साथ इसका फायदा उठाने में सक्षम है।" Riverbankcomputing.co.uk / सॉफ्टवेयर /
pyqt

7

मेरा मानना ​​है कि matplotlib में ग्राफिक्स, टेक्स्ट और अन्य ऑब्जेक्ट्स को पीडीएफ डॉक्यूमेंट को क्रमबद्ध करने की क्षमता है।


हाँ तुम कर सकते हो। यह एसओ जवाब में यह कैसे करना है पर कुछ अच्छे लिंक हैं।
drevicko

7

fpdf अजगर है (भी)। और अक्सर इस्तेमाल किया जाता है। PyPI / पाइप खोज देखें। लेकिन शायद इसका नाम बदलकर pyfpdf से fpdf कर दिया गया। सुविधाओं से: PNG, GIF और JPG समर्थन (पारदर्शिता और अल्फा चैनल सहित)


1
आपका उत्तर स्पष्ट नहीं है, लेकिन आपका निश्चित रूप से PyFPDF pfoject pyfpdf.readthedocs.io/en/latest
Wojciech Kaczmarek

नामकरण में सभी भ्रम वास्तव में एक दया है। इस जवाब और @WojciechKaczmarek द्वारा टिप्पणी वास्तव में अधिक उत्थान और ध्यान देने योग्य है। PyFPDF मूल रूप से PHP में लिखी गई अक्सर उपयोग की जाने वाली पीडीएफ लाइब्रेरी का एक अजगर बंदरगाह है।
६19 ’

6

मैं पीडीएफ फाइल बनाने के लिए rst2pdf का उपयोग करता हूं , क्योंकि मैं HTML की तुलना में RST से अधिक परिचित हूं। यह लगभग किसी भी प्रकार के रेखापुंज या वेक्टर छवियों को एम्बेड करने का समर्थन करता है।

इसके लिए रिपोर्टलैब की आवश्यकता होती है , लेकिन मैंने पाया कि रिपोर्टलैब उपयोग करने के लिए इतना सीधा नहीं है (कम से कम मेरे लिए)।



3

यह इस बात पर निर्भर करता है कि आपकी छवि फाइलें किस प्रारूप में हैं, लेकिन यहां एक परियोजना के लिए मैंने रिमोटसिंजिंग ओआरजी से LibTIFF में tiff2pdf टूल का उपयोग किया । मूल रूप से सिर्फ उपप्रकार का उपयोग करने के लिए tiff2pdf। यदि वे टिफ नहीं हैं, तो आप संभवतः उन्हें पीआईएल का उपयोग करके टिफ़ में परिवर्तित कर सकते हैं, या हो सकता है कि आपकी छवि प्रकार (या यदि चित्र विविध होंगे) की तरह एक उपकरण और देखें, जैसा कि ऊपर बताए गए रिपोर्टलैब में है।


3

fpdf मेरे लिए अच्छा काम करता है। रिपोर्टलैब की तुलना में बहुत सरल और वास्तव में मुफ्त। UTF-8 के साथ काम करता है।


2
Link / Descrip .: fpdf.org FPDF एक PHP क्लास है जो पीडीएफ फाइलों को शुद्ध PHP के साथ जनरेट करने की अनुमति देता है, यानी PDFlib लाइब्रेरी का उपयोग किए बिना। एफपीडीएफ से एफ मुफ्त में खड़ा है: आप इसे किसी भी तरह के उपयोग के लिए उपयोग कर सकते हैं और इसे अपनी आवश्यकताओं के अनुरूप संशोधित कर सकते हैं। FPDF के अन्य फायदे हैं: उच्च स्तर के कार्य। यहां इसकी मुख्य विशेषताओं की एक सूची दी गई है: माप इकाई, पृष्ठ प्रारूप और मार्जिन, पृष्ठ शीर्ष लेख और पाद प्रबंधन, स्वचालित पृष्ठ विराम, स्वचालित पंक्ति विराम और पाठ का औचित्य, छवि समर्थन (JPEG, PNG और GIF), रंग, लिंक, की पसंद ट्रू टाइप, टाइप 1 और एन्कोडिंग सपोर्ट, पेज कम्प्रेशन
एनी.इगाइल

12
इस सवाल पर विचार करने के लिए बहुत प्रासंगिक नहीं कि पायथन के बारे में, PHP नहीं
KingRadical

1
यह सब क्यों घट रहा है? fpdf भी अजगर के लिए उपलब्ध है। पाइप स्थापित fpdf कार्य
user1981924

1
fpdf की शुरुआत php से हुई होगी। लेकिन एक अजगर बंदरगाह है जो वास्तव में अच्छी तरह से काम करता है। इसलिए मुझे लगता है कि यह एक बहुत ही प्रासंगिक जवाब है जो नीचे वोट से अधिक वोट के लायक है। (मैं उस स्थिति के बारे में निश्चित नहीं हूं जब यह उत्तर शुरू में पोस्ट किया गया था)
सुमुदु

3

rinohtype एम्बेडिंग पीडीएफ, पीएनजी और जेपीईजी छवियों (मूल रूप से) और अन्य बिटमैप स्वरूपों (जब तकिया स्थापित होता है) का समर्थन करता है।

(पूर्ण प्रकटीकरण: मैं रेनोहाइप का लेखक हूं)


1
अरे! अगर मैं गलत हूं तो मुझे सुधारो, लेकिन ऐसा लगता है कि यह काफी शक्तिशाली उपकरण है और कई लोगों के विपरीत, यहां सूचीबद्ध कई अन्य लोग एनास्टिक पीएचपी / माणिक / पर्ल / पीकॉट 4 / अन्य बकवास लाइब्रेरी के लिए अजगर आवरण नहीं है।
Mikaelblomkvistsson

3

यदि आप LaTex से परिचित हैं तो आप pylatex पर विचार कर सकते हैं

पायलेटेक्स के फायदों में से एक यह है कि छवि गुणवत्ता को नियंत्रित करना आसान है। आपके पीडीएफ में चित्र मूल छवियों के समान गुणवत्ता वाले होंगे। रिपोर्टलैब का उपयोग करते समय, मैंने अनुभव किया कि चित्र स्वचालित रूप से संपीड़ित थे, और छवि गुणवत्ता कम हो गई।

पाइलेटेक्स का नुकसान यह है कि, चूंकि यह LaTex पर आधारित है, इसलिए छवियों को उस स्थान पर रखना मुश्किल हो सकता है जहां आप पृष्ठ पर चाहते हैं। हालांकि, मैंने पाया है कि चित्रा वर्ग में स्थिति तर्क का उपयोग करना, और कभी-कभी सबफिगर, अच्छे पर्याप्त परिणाम देता है।

एक छवि के साथ एक पीडीएफ बनाने के लिए उदाहरण कोड:

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)

पाइलटेक्स (पाइल इंस्टॉल पाइलटेक्स) को स्थापित करने के अलावा, आपको लैटेक्स को स्थापित करने की आवश्यकता है। उबंटू और अन्य डेबियन सिस्टम के लिए आप चला सकते हैं sudo apt-get install texlive-full। यदि आप विंडोज का उपयोग कर रहे हैं तो मैं मिक्सटेक्स की सिफारिश करूंगा

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.