2017-01-01 22 views
2

私は生成されたpdfに問題があります。生成されたpdfファイルは4ページあり、2ページの既存のpdfを使用しています。私はpyPD2reportlabを使ってテキストを書く必要があります。テキストは同じページに2回印刷されます

私はgetPage()メソッドを使用すると、マージ前にページコピーを作成すると思っていましたが、何らかの理由で同じページが使用され、何度かテキストが印刷されました。

どうすれば避けることができますか?

私のコード

packet = io.BytesIO() 
can = canvas.Canvas(packet) 
can.drawString(0,0, "Print on page 1") 
can.showPage() 
can.drawString(200,200, "Print on page 2") 
can.showPage() 
can.drawString(0,0, "Print on page 3") 
can.showPage() 
can.drawString(200,200, "Print on page 4") 
can.save() 

new_pdf = PdfFileReader(packet) 

path_of_two_page_pdf = 'overview.pdf' 
existing_pdf = PdfFileReader(file(path_of_two_page_pdf, "rb")) 

output = PdfFileWriter() 
for pi in range(4): 
    page = existing_pdf.getPage(pi % 2) 
    page.mergePage(new_pdf.getPage(pi)) 
    output.addPage(page) 

outputStream = file("NEW_PDF.pdf", "wb") 
output.write(outputStream) 
outputStream.close() 
+0

私は詳細を見ることができるように入力ファイルにリンクできますか? –

+0

@ B8vrede私はなぜこのdownvoteが表示されません。 2ページのPDFがあれば良いでしょう(各ページに異なる文字列を描きます)。 – Zety

+0

しかし、私はその部分を修正したので、私はdownvoteを削除しました – B8vrede

答えて

1

問題はgetPage()はなく、実際に完全に新しいページのページへのポインタを返すということです。したがって、mergePage()が適用されると、それを既存のpdfにマージします。

最も簡単な回避策は次のようになります。つまり、最初の空白のページを作成して、上に他のページをマージすることを使用することです:代わりにcreateBlankPageを使用して、完全に独立した空白のページを作成する、

for pi in range(2*2): 
    # By doing this we will always create a blank page with the same size as the last page of the existing_pdf 
    new_page = PageObject.createBlankPage(pdf=existing_pdf) 

    # Merge the pages onto the blank page 
    new_page.mergePage(existing_pdf.getPage(pi % 2)) 
    new_page.mergePage(new_pdf.getPage(pi)) 

    # Add the new page to the output 
    output.addPage(new_page) 

ワンノートoutput.addBlankPageを使用することもできますが、これは手動でページサイズを設定する必要がありますが、これは理想的ではない場合があります。そのため、createBlankPagepdfキーワードが使用されます。これは、指定されたpdfの最後のページにページサイズを設定します。 addBlankPage上記@ B8vrede mensionedとして

0

を用いるので、代わりA4サイズを指定する(新規作成されたページへの参照を返す)私はaddBlankPageと呼ばれる別個の空白ページを作成することができます。

from reportlab.lib.pagesizes import A4 


for pi in range(4): 
    new_page = output.addBlankPage(*A4) 
    new_page.mergePage(existing_pdf.getPage(pi % 2)) 
    new_page.mergePage(new_pdf.getPage(pi)) 
関連する問題