2016-05-16 7 views
0

私は入力PDFを本質的にレターヘッドであるものに重ねるスクリプトを使用しています。しかし、私は、プロセスが自動化されて、ファイルが何の名前になるのかを事前に知らなくても、一度に1つずつ処理されるようにする方法が不明です。私はPython 2.7を使用しています。未知のファイル名をPythonスクリプトで処理できるようにする

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

ファイル名をハードコードするのではなく、入力として入力することは可能でしょうか? – jackwise

+0

これがうまくいったのです! – jhan11

答えて

0

ありがとうございました。 これは私が使用し終わったものです:

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

問題は、コマンドライン引数で簡単に解決できるようです。

sysモジュールをインポートし、sys.argvを使用してコマンドライン引数のリストを取得できます。このlinkの2.7で動作するチュートリアルがあります。 sys.argvは配列で、sys.argv [1]はsys.argv [0]が実行可能ファイル名であるために渡す最初の引数です。あなたはそれを使用している場合には、IDLEでコマンドライン引数を挿入することが可能です

python your_program.py file_name_to_work_with.pdf 

:あなたのように実行できるコマンドラインから

。あなたがコメントを残す方法を知る必要がある場合。

+0

あなたの質問は、複数のファイルでコードを実行することについても尋ねてきます。これを行うには多くの方法があります。たとえば、プログラムにファイル名を指定し、sys.argvの長さを検査するループを使用してすべてのプログラムを処理させるコマンドライン引数の可変数を渡すことができます。 –

+0

私はsys.argvを使用しようとしたときに何らかの理由で別のルートに行きましたが、何らかの理由で範囲外だったというエラーが発生しました。 – jhan11

0

おそらくargparseはあなたの非常にfelxible操作を提供していますargparse

のようなもので最も安全になりますスクリプト用の制御インターフェースを実装するためのコマンド行パラメーター。

$ python your_program.py -t <template> -i <input1> <input2> 
関連する問題