2016-05-16 1 views
0

ich ein Skript verwenden, die eine Eingabe pdf auf einem anderen überlagert, die im Wesentlichen ein Briefkopf ist. Ich bin mir jedoch nicht sicher, wie der Prozess automatisiert werden kann, damit viele Dateien einzeln verarbeitet werden können, ohne vorher zu wissen, wie die Datei benannt wird. Ich benutze Python 2.7.für mögliche unbekannte Dateinamen erlauben in einem Python-Skript verarbeitet werden

from pyPdf import PdfFileWriter, PdfFileReader 


output = PdfFileWriter() 
input1 = PdfFileReader(file("example.pdf", "rb")) 

# add page 1 from input1 to output document, unchanged 
output.addPage(input1.getPage(0)) 

# add page 2 from input1, but first add a watermark from another pdf: 
page2 = input1.getPage(0) 
watermark = PdfFileReader(file("template.pdf", "rb")) 
page2.mergePage(watermark.getPage(0)) 

output.addPage(page2) 


# finally, write "output" to document-output.pdf 
outputStream = file("example.pdf", "wb") 
output.write(outputStream) 
outputStream.close() 
+0

Wäre es möglich, für Sie im Dateinamen als Eingabe zu füttern, anstatt es hartzucodieren? – jackwise

+0

Das hat funktioniert! – jhan11

Antwort

0

Vielen Dank für alle Beiträge. Dies ist, was ich am Ende mit:

from pyPdf import PdfFileWriter, PdfFileReader 
import os, sys, glob, shutil 

path = glob.glob ('p:\letter2pdf\processing\*.pdf') 
template = 'p:/letter2pdf/processing/template/template.pdf' 
dest1 = 'p:\letter2pdf\output' 
dest2 = 'p:\letter2pdf\processing' 

for files in sorted(path): 

    output = PdfFileWriter() 
    input1 = PdfFileReader(file(files,"rb")) 

    print "title = %s" % (input1.getDocumentInfo().title) 

# add page 1 from input1 to output document, unchanged 
    output.addPage(input1.getPage(0)) 

#add a watermark from another pdf: 
    page2 = input1.getPage(0) 
    watermark = PdfFileReader(file (template, "rb")) 
    page2.mergePage(watermark.getPage(0)) 



# finally, write "output" to document-output.pdf 
    outputStream = file(input1.getDocumentInfo().title, "wb") 
    output.write(outputStream) 
    outputStream.close() 
0

Ihr Problem scheint eine einfache Lösung mit Befehlszeilenargumenten zu haben.

Sie können das Modul sys importieren und sys.argv verwenden, um die Liste der Befehlszeilenargumente zu erhalten. Es gibt ein Tutorial, das mit 2.7 unter link funktionieren sollte. sys.argv ist ein Array und sys.argv [1] ist das erste übergebene Argument, da sys.argv [0] der ausführbare Name ist.

in der Befehlszeile können Sie ausführen, wie:

python your_program.py file_name_to_work_with.pdf 

Es ist möglich, Befehlszeilenargumente mit IDLE einzufügen, wenn Sie das verwenden. Wenn Sie wissen möchten, wie Sie einen Kommentar hinterlassen.

+0

Ich sehe Ihre Frage auch nach dem Ausführen Ihres Codes mit mehreren Dateien. Es gibt viele Möglichkeiten, dies zu tun. Zum Beispiel können Sie eine variable Anzahl von Befehlszeile args übergeben, die jeweils der Name einer Datei auf Ihrem Programm sein würde und haben Ihr Programm verarbeiten sie mit einer Schleife alle die Länge sys.argv Inspektion. –

+0

landete ich einen anderen Weg gehen, aus irgendeinem Grund, wenn ich versucht hatte, mit sys.argv ich immer einen Fehler immer sagen, es aus irgendeinem Grund außer Reichweite war. – jhan11

0

Sie werden wahrscheinlich von mit so etwas wie argparse

argparse bietet Ihnen sehr felxible Manipulation am sichersten Befehlszeilenparameter zum Implementieren einer Steuerschnittstelle für Skripts.

$ python your_program.py -t <template> -i <input1> <input2>