私は+あなたと同じケースです。私は私の解決策を説明します。私はPdfFileReader('filename.pdf', 'rb')
でpdfsを開いていませんが、merge(pdfs_content_array
)の配列にpdfsコンテンツを渡しています。その後、私は合併と私の出力を準備しています(生成されたファイルをローカルに保存したくないので、Mergedコンテンツをどこかに保存するためにBytesIOを使わなければなりません)。calc_page_sum
はページ番号の結果を比較するために必要です。最も重要な部分はcalc_page_sum += PdfFileReader(bytes_content).getNumPages()
なので、PdfFileReaderでバイト内容を開いてページ番号を取得します。その後、私は合併を追加しています... merger.append,bytes_content
私は、私のバイト出力にマージを書いており、それをcalc_page_sumと比較しています。それでおしまい。
from PyPDF2 import PdfFileMerger, PdfFileReader
import io
[...]
def merge_the_pdfs(self,pdfs_content_array,output_file):
merger = PdfFileMerger()
output = io.BytesIO()
calc_page_sum = 0
for content in pdfs_content_array:
bytes_content = io.BytesIO(content)
calc_page_sum += PdfFileReader(bytes_content).getNumPages()
yield self.application.cpupool.submit(merger.append,bytes_content)
merger.write(output)
if not calc_page_sum == PdfFileReader(output).getNumPages():
return None
return output.getValue()
希望するとこれが役に立ちます。
セカンドバージョン:
from PyPDF2 import PdfFileMerger, PdfFileReader
import io
import sys
filename1 = 'test.pdf'
filename2 = 'test1.pdf'
merger = PdfFileMerger()
output = io.BytesIO()
calc_page_sum = 0
filesarray = [filename1,filename2]
for singlefile in filesarray:
calc_page_sum += PdfFileReader(singlefile, 'rb').getNumPages()
merger.append(PdfFileReader(singlefile, 'rb'))
merger.write(output)
print(calc_page_sum)
print(PdfFileReader(output).getNumPages())
if calc_page_sum == PdfFileReader(output).getNumPages():
print("It worked")
merger.write("merging-test.pdf")
sys.exit()
print("Didn't worked")
sys.exit()
たぶん、ページ数を維持し、周りにそれを渡すあなたの合併オブジェクト、ラッパーを作成します。 –
はい、これはオプションです。 PdfFileWriterとは異なり、PdfFileMergerはgetNumPages()のようなメソッドを持っていないようで、この機能を実装するためにラッパーオブジェクトを作成する必要があるようです。 – arbitguy