2015-07-13 18 views
0

我想將一個長的PDF文檔分成許多部分,例如:第1部分包括第3-14頁,第2部分包括第15-19頁,第3部分包括第20-27頁,使用PyPDF2。如何重置輸出文件?

我編寫了一個循環,將相關頁面從原始PDF中取出並保存爲每個部分的新文檔。唯一的問題是,部分2仍包括從部分1中的所有頁,並且第3部分仍然包括從部件的頁面1 & 2.

我假設我無論如何都必須「復位」輸出= PdfFileWriter(),但如果我把它放到while循環中,我得到一個很長的錯誤信息。

output = PdfFileWriter() 
input = PdfFileReader(open("%s" % pdf, "rb")) 

current_row = 2 

i = sheet.cell(row = current_row, column = 4).value 
j = sheet.cell(row = current_row, column = 5).value 
org = sheet.cell(row = current_row, column = 1).value 
n = sheet.cell(row = current_row, column = 7).value 

while i > 0: 
    while i <= j: 
     p = i-1 
     output.addPage(input.getPage(p)) 
     i += 1 
     print(i, p, j) 
    print org 

    outputStream = file("%s_%s_%s.pdf" % (mysheet, n, org), "wb") 
    output.write(outputStream) 
    outputStream.close() 

    current_row += 1 
    i = sheet.cell(row = current_row, column = 4).value 
    j = sheet.cell(row = current_row, column = 5).value 
    org = sheet.cell(row = current_row, column = 1).value 
    n = sheet.cell(row = current_row, column = 7).value 
+0

重置'output = PdfFileWriter()'確實是解決方案,你得到了什麼錯誤? – franciscod

+0

關閉'outputStream'後,只需將一個新的'PdfFileWriter()'分配給'output'。 – martineau

+0

包括這一行解決了這個問題 - 謝謝!該錯誤消息實際上是由於PDF被加密。這裏的問題是我的代碼生成的PDF都是從原始文檔的第1頁開始的。重置輸出= PdfFileWriter()負責。 –

回答

-1

這就是我試過的。我在我的PDF文件上試過,對此我有明確的頁碼。

from PyPDF2 import PdfFileWriter, PdfFileReader 
pages={'part1':(3,14),'part2':(15,19),'part3':(20,27)} 

for name,offset in pages.items(): 
    op = PdfFileWriter() 
    ip = PdfFileReader(open("result.pdf", "rb")) 
    for i in range(offset[0]-1,offset[1]): 
     op.addPage(ip.getPage(i)) 
    with file(name+'pdf','wb') as f: 
     op.write(f) 

我真的很高興知道我是否可以改進我的答案,因爲我已經在我的系統上嘗試過了。它的工作。

+0

嗨,感謝您的評論 - 不幸的是它並沒有爲我工作,我太多的Python新手能夠告訴你爲什麼不。 –