2016-06-18 4 views
0

Я пытаюсь сделать некоторую программу на python, чтобы манипулировать презентациями в формате PDF. Профессор использует динамический переход на клик, так что одна страница имеет несколько переходов по кликам. Я хочу напечатать эти презентации, но у меня около 5000 страниц. Поэтому я хочу использовать только последнюю страницу перехода на переход, поэтому я уменьшу количество страниц до 500. Я использую модуль PyPDF2, но он не делает допустимого pdf-файла. Вот код:Модуль PyPDF не делает действительного pdf-файла

from pyPdf import PdfFileWriter, PdfFileReader 
import os,sys 

pdful = raw_input("Uneti ime fajla:") 
output = PdfFileWriter() 
input1 = PdfFileReader(open(pdful, "rb")) 

m = [] 
f = True 
print ("Uneti strane koje zelite da zadrzite.String 0 kraj unosa:\n") 

while f: 
    l = int(raw_input("Uneti broj stranice:")) 
    if l == 0: 
     f = not f 
    else: m.append(l-1) 

for i in range(len(m)): 
    strana = input1.getPage(int(m[i])) 

    output.addPage(strana) 

outputStream = file("Mat8.pdf","wb") 
output.write(outputStream) 
# string writings are in Serbian, but that's not so important. Program should take input from user: name of file to manipulate, and pages that should copy. 
+0

Не используйте 'File', чтобы открыть файл, используйте' open' функцию вместо этого. Также вы, вероятно, хотите закрыть выходной файл, чтобы убедиться, что записи были завершены, поставив 'outputStream.close()' в конце. – Bakuriu

ответ

0

from pyPdf import PdfFileWriter, PdfFileReader pyPdf прекращается уже и сменяет PyPDF2. Я не уверен в Python 2, но в Python 3 вы должны import PyPDF2.

  1. Не нужно import os, sys. Однако вы можете позвонить python3 xyz.py some_arg в bash, если вы использовали sys.argv. Таким образом sys.argv[1] == some_arg
  2. Вместо этого я предпочел бы использовать карты, если вам не нужно читать ввод по строкам. Например,

    print ("Uneti strane koje zelite da zadrzite.String 0 kraj unosa:\n") 
    m = map (lambda x: int(x) - 1, raw_input("Uneti broj stranice:").split()) 
    
  3. Вместо петли while. Кроме того, итерации над объектами вместо индексов.

    for page_number in m: 
        strana = input1.getPage(page_number) 
        output.addPage(strana) 
    
  4. Наконец, используйте with заключать файловые операции. Python автоматически обработает закрытие файла, чтобы вы не забыли сделать это.

    with open (pdful, 'wb') as outputStream: 
        output.write(outputStream) 
    
+0

Я очень новичок в python, но когда эта функция карты закончится? – NenadPantelicSI

+0

'split' превращает' alpha beta gamma'' в '[" alpha "," beta "," gamma "]'. 'map' применяет' lambda' к каждому элементу сращиваемого ввода. Поскольку 'input' работает только в одной строке,' map' применяется только к этой строке ввода. – MarcoXerox

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