2015-07-13 9 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() 'to' 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, чтобы быть в состоянии сказать вам, почему нет. –

Смежные вопросы