2016-06-18 6 views
0

私はpdfビーマーのプレゼンテーションを操作するためにPythonでいくつかのプログラムを作ろうとしています。教授はクリックダイナミックトランジションを使用するので、1ページにはいくつかのクリックトランジションがあります。私はこれらのプレゼンテーションを印刷したいが、私は約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

代わりに 'open'機能を使用し、ファイルを開くために' file'を使用しないでください。また、 'outputStream.close()'を最後に置いて書き込みが完了したことを確認するために、出力ファイルを閉じたいと思うかもしれません。 – Bakuriu

答えて

0

from pyPdf import PdfFileWriter, PdfFileReader pyPdfはすでに廃止されており、PyPDF2で成功しています。私はPython 2についてはわかりませんが、Python 3ではimport PyPDF2にしてください。

  1. import os, sysは不要です。しかし、sys.argvを使用した場合は、python3 xyz.py some_argをbashで呼び出すことができます。この方法で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'は1行だけで動作するので、' map'はその入力行にのみ適用されます。 – MarcoXerox

関連する問題