2016-06-18 16 views
0

Ich versuche, ein Programm in Python zu machen, um meine PDF-Beamer-Präsentationen zu manipulieren. Professor verwenden auf Klick dynamischen Übergang, so dass eine Seite mehrere Klickübergänge hat. Ich möchte diese Präsentationen drucken, aber ich habe rund 5000 Seiten. Daher möchte ich nur die letzte Klick-Übergangsseite verwenden, so dass ich die Anzahl der Seiten auf ungefähr 500 reduzieren werde. Ich benutze das PyPDF2-Modul, aber es macht keine gültige PDF-Datei. Hier ist der Code:PyPDF-Modul erstellt keine gültige PDF-Datei

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

Verwenden 'file' nicht eine Datei zu öffnen, anstatt die' open'-Funktion verwenden. Wahrscheinlich möchten Sie auch die Ausgabedatei schließen, um sicherzustellen, dass die Schreibvorgänge abgeschlossen wurden, indem Sie am Ende "outputStream.close()" setzen. – Bakuriu

Antwort

0

from pyPdf import PdfFileWriter, PdfFileReader pyPdf unterbrochen bereits und ist es gelungen durch PyPDF2. Ich bin mir nicht sicher über Python 2, aber in Python 3 sollten Sie import PyPDF2.

  1. Keine Notwendigkeit zu import os, sys. Sie können jedoch python3 xyz.py some_arg in bash aufrufen, wenn Sie sys.argv verwendet haben. Auf diese Weise sys.argv[1] == some_arg
  2. Ich würde lieber Karten stattdessen verwenden, solange Sie nicht Zeile für Zeile lesen müssen. Zum Beispiel

    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. Anstelle der while Schleife. Iterieren Sie auch über Objekte statt über Indizes.

    for page_number in m: 
        strana = input1.getPage(page_number) 
        output.addPage(strana) 
    
  4. Schließlich verwenden with Dateioperationen zu umschließen. Python wird automatisch das Schließen der Datei übernehmen, damit Sie das nicht vergessen.

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

Ich bin sehr neu in Python, aber wenn diese Map-Funktion endet? – NenadPantelicSI

+0

'split' turns' "alpha beta gamma" 'in' ["alpha", "beta", "gamma"] '. 'map' wendet das' lambda' auf jedes Element der gespleißten Eingabe an. Da 'input' nur auf einer Zeile arbeitet, gilt' map' nur für diese Eingabezeile. – MarcoXerox