2010-05-27 15 views
10

पर छवि को एक विशिष्ट समन्वय स्थान पर मौजूदा पीडीएफ फ़ाइल पर एक छवि कैसे रख सकता हूं। पीडीएफ एक पेज के साथ एक ड्राइंग शीट का प्रतिनिधित्व करता है। छवि स्केल की जाएगी। मैं ReportLab की जांच कर रहा हूं लेकिन जवाब नहीं मिल रहा है। धन्यवाद।पीडीएफ

+0

क्या छवि हमेशा एक ही स्थान पर होती है? –

+0

हां, यह मूल रूप से निचले बाएं कोने के पास एक टिकट है। –

+0

क्या नीचे पर्याप्त उत्तर है? यदि नहीं तो इसके साथ क्या गलत है? – theheadofabroom

उत्तर

11

http://pybrary.net/pyPdf/:

from pyPdf import PdfFileWriter, PdfFileReader 

output = PdfFileWriter() 
input1 = PdfFileReader(file("document1.pdf", "rb")) 
watermark = PdfFileReader(file("watermark.pdf", "rb")) 

page4.mergePage(watermark.getPage(0)) 

# finally, write "output" to document-output.pdf 
outputStream = file("document-output.pdf", "wb") 
output.write(outputStream) 
outputStream.close() 

मुझे लगता है कि यह watermark तरह है, बेहतर विचार

+0

धन्यवाद यह ठीक काम करता है, सिर्फ दस्तावेज़ों से PdfFileReader.getPage() और PdfFileWriter.addPage() विधियों को चेक किया। –

+0

कृपया ऊपर मेरी टिप्पणी देखें। – Auston

+0

ऐसा लगता है कि पीईपीडीएफ अब और नहीं रखा गया है, न ही घोषित निरंतर साइट। लंबे समय तक अन्य समाधान क्या मौजूद है? – lalebarde

-2

के लिए मैनुअल देखते हैं, के बाद से अपने मौजूदा पीडीएफ, यह करने के लिए सबसे आसान तरीका है:

  1. पीडीएफ को .doc या .odt में कनवर्ट करें (http://www.zamzar.com/ देखें)
  2. परिवर्तित फ़ाइल में छवियां जोड़ें हालांकि आप चाहते हैं । पीडीएफ फाइल आगे हमेशा संपादित करने के लिए स्रोत .doc फ़ाइल का बैकअप रखने की जरूरत है, ताकि परिवर्तन हो सकता है:
  3. PDF में नहीं बदला वापस

पी एस (OpenOffice और LibreOffice आसान pdfs को बचाने के लिए बनाता है) आसानी से किया गया, बहुत अधिक रूपांतरण फ़ाइल की गुणवत्ता पर बुरा प्रभाव पड़ता है।

6

मैंने रिपोर्टलाब (http://www.reportlab.com/software/opensource/rl-toolkit/download/) और pyPDF (http://pybrary.net/pyPdf/) को सीधे बिना किसी छवि को सम्मिलित करने के लिए संयुक्त किया पीडीएफ सामने उत्पन्न करने के लिए:

from pyPdf import PdfFileWriter, PdfFileReader 
from reportlab.pdfgen import canvas 
from StringIO import StringIO 


# Using ReportLab to insert image into PDF 
imgTemp = StringIO() 
imgDoc = canvas.Canvas(imgTemp) 

# Draw image on Canvas and save PDF in buffer 
imgPath = "path/to/img.png" 
imgDoc.drawImage(imgPath, 399, 760, 160, 160) ## at (399,760) with size 160x160 
imgDoc.save() 

# Use PyPDF to merge the image-PDF into the template 
page = PdfFileReader(file("document.pdf","rb")).getPage(0) 
overlay = PdfFileReader(StringIO(imgTemp.getvalue())).getPage(0) 
page.mergePage(overlay) 

#Save the result 
output = PdfFileWriter() 
output.addPage(page) 
output.write(file("output.pdf","w")) 
19

इसकी गया 5 साल, मैं इन उत्तरों कुछ टीएलसी की जरूरत है। यहां एक पूरा समाधान है।

निम्नलिखित अजगर के साथ परीक्षण किया जाता है 2.7

निर्भरता स्थापित

pip install reportlab 
pip install pypdf2 

जादू

from reportlab.pdfgen import canvas 
from PyPDF2 import PdfFileWriter, PdfFileReader 

# Create the watermark from an image 
c = canvas.Canvas('watermark.pdf') 

# Draw the image at x, y. I positioned the x,y to be where i like here 
c.drawImage('test.png', 15, 720) 

# Add some custom text for good measure 
c.drawString(15, 720,"Hello World") 
c.save() 

# Get the watermark file you just created 
watermark = PdfFileReader(open("watermark.pdf", "rb")) 

# Get our files ready 
output_file = PdfFileWriter() 
input_file = PdfFileReader(open("test2.pdf", "rb")) 

# Number of pages in input document 
page_count = input_file.getNumPages() 

# Go through all the input file pages to add a watermark to them 
for page_number in range(page_count): 
    print "Watermarking page {} of {}".format(page_number, page_count) 
    # merge the watermark with the page 
    input_page = input_file.getPage(page_number) 
    input_page.mergePage(watermark.getPage(0)) 
    # add page from input file to output document 
    output_file.addPage(input_page) 

# finally, write "output" to document-output.pdf 
with open("document-output.pdf", "wb") as outputStream: 
    output_file.write(outputStream) 

संदर्भ कार्य करें:

pypdf की नई घर: http://mstamy2.github.io/PyPDF2/

Reportlab डॉक्स: http://www.reportlab.com/apis/reportlab/2.4/pdfgen.html

Reportlab पूरा उपयोगकर्ता गाइड: https://www.reportlab.com/docs/reportlab-userguide.pdf

+2

जबकि आप उत्तर को अद्यतित कर रहे हैं, [pdfrw] (https://github.com/pmaupin/pdfrw/) लाइब्रेरी भी [वॉटरमार्क] (https://github.com/pmaupin/pdfrw/blob /master/examples/watermark.py) एक बहुत ही समान फैशन में, और दूसरी तरफ भी जा सकता है - आपको पूर्व-मौजूदा पीडीएफ का उपयोग करने की इजाजत देता है जैसे कि वे पीडीएफ में छवियां (उन्हें रास्टरराइज किए बिना) थे [आप रिपोर्टलैब के साथ निर्मित करते हैं) ] (https://github.com/pmaupin/pdfrw/blob/master/examples/rl1/platypus_pdf_template.py)। अस्वीकरण: मैं पीडीएफडब्ल्यू लेखक हूं ... –

+0

आह अच्छा, मैं इसे ध्यान में रखूंगा –

0

यह वही पिछले जवाब करने के लिए मेरे लिए काम किया

from PyPDF2 import PdfFileWriter, PdfFileReader 

def watermarks(temp, watermar,new_file): 
    template = PdfFileReader(open(temp, 'rb')) 
    wpdf = PdfFileReader(open(watermar, 'rb')) 
    watermark = wpdf.getPage(0) 

    for i in xrange(template.getNumPages()): 
     page = template.getPage(i) 
     page.mergePage(watermark) 
     output.addPage(page) 

     with open(new_file, 'wb') as f: 
      output.write(f) 
1

Thx है। पाइथन 3.4

# -*- coding: utf-8 -*- 
from io import BytesIO 
from PyPDF2 import PdfFileWriter, PdfFileReader 
from reportlab.pdfgen import canvas 
from reportlab.lib.pagesizes import A4 

def gen_pdf(): 
    # there are 66 slides (1.jpg, 2.jpg, 3.jpg...) 
    path = 'slades/{0}.jpg' 
    pdf = PdfFileWriter() 

    for num in range(1, 67): # for each slide 
     # Using ReportLab Canvas to insert image into PDF 
     imgTemp = BytesIO() 
     imgDoc = canvas.Canvas(imgTemp, pagesize=A4) 
     # Draw image on Canvas and save PDF in buffer 
     imgDoc.drawImage(path.format(num), -25, -45) 
     # x, y - start position 
     # in my case -25, -45 needed 
     imgDoc.save() 
     # Use PyPDF to merge the image-PDF into the template 
     pdf.addPage(PdfFileReader(BytesIO(imgTemp.getvalue())).getPage(0)) 

    pdf.write(open("output.pdf","wb")) 


if __name__ == '__main__': 
    gen_pdf()