2017-07-17 3 views
1

私はPyPDF2を使ってpdfファイルを分割したいと思う。PyPDF2 split pdf by

ネットのすべての例では、あまりにも困難または働くか、常にエラーを与えていないです「はAttributeError: 『PdfFileWriter』オブジェクトが属性 『ストリーム』を持っていない」

誰かがそれを助けることはできますか? 3ページの3つの異なるファイルにseparete one pdfが必要です。

私はそれから始めている:

pdfFileObj = open(r"D:\BPO\act.pdf", 'rb') 
pdfReader = PyPDF2.PdfFileReader(pdfFileObj) 
pdfWriter = PyPDF2.PdfFileWriter() 
pdfWriter.addPage(pdfReader.getPage(0)) 

しかし、次に何をすべきか分からない:(

EDIT#1

はsplitingのためのループを行う試すでした私は問題があります:PdfFileWriterは、3つのファイルを1つのページ、2つ目、2つ目、3つ目の3つにします。コードに誤りがあります:

act_sub_pages_name = ['p01.pdf', 'p02.pdf', 'p03.pdf'] 
with open(r"D:\BPO\act.pdf", 'rb') as act_mls: 
    reader = PdfFileReader(act_mls) 
    writer = PdfFileWriter() 
    if reader.numPages == 3: 
     counter = 0 
     for x in range(3): 
      path = '\\'.join(['D:\\BPO\\act sub pages', act_sub_pages_name[counter]]) 
      counter += 1 
      writer.addPage(reader.getPage(x)) 
      with open(path, 'wb') as outfile: writer.write(outfile) 

悪い英語が苦手です。

EDIT#2

私のソリューションポール・ルーニーの答えで応じて:すべてが正常に動作しますが、それは少し難しい機能で

act_pdf_file = 'D:\\BPO\\act.pdf' 
act_sub_pages_name = ['p01.pdf', 'p02.pdf', 'p03.pdf'] 

def pdf_splitter(index, src_file): 
    with open(src_file, 'rb') as act_mls: 
     reader = PdfFileReader(act_mls) 
     writer = PdfFileWriter() 
     writer.addPage(reader.getPage(index)) 
     out_file = os.path.join('D:\\BPO\\act sub pages', act_sub_pages_name[index]) 
     with open(out_file, 'wb') as out_pdf: writer.write(out_pdf) 

for x in range(3): pdf_splitter(x, act_pdf_file) 

+0

pypdfを使用しますか、他の選択肢はありますか? –

+0

もしそれらがpython 3.6.1とコンパイルされていれば – Acamori

答えて

4

PdfFileWriterwriteメソッドを使用してファイルに書き込むことができます。

入力ファイルのページをループしたり、新しいライターオブジェクトを作成したり、1つのページを追加することができます。おそらくインクリメンタルなファイル名に書き出しますか?

+0

はい、分割後、私はact1、act2、act3のように各ファイルの新しい名前が必要です。 – Acamori

0

この種のタスクにはxpdfというツールを使用しましたが、本当にうまく機能します。 hereをダウンロードできます。

これはPythonから呼び出せるコマンドラインユーティリティです。あなたのパスに追加されていることを確認して、コマンドラインから呼び出すことができます。ここで

あなたがsubprocessを使用して、のpythonからそれをインタフェースすることができます方法は次のとおりです。あなたはページのリストを取得しますので、

import subprocess 

text, _ = subprocess.Popen('pdftotext -fixed 0 -clip D:\\BPO\\act.pdf', 
          shell=True, 
          stdout=subprocess.PIPE).communicate() 

pages = text.decode('latin-1').split('\f') 

ページは、改ページ文字で区切られます。

+0

ありがとう!それを使用しようとします。 – Acamori