我是+ - 和你一样。我会解释我的解决方案。我不打开与PdfFileReader('filename.pdf', 'rb')
的PDF文件,但我将pdfs内容传递给数组进行合并(pdfs_content_array
)。然后,我正在准备合并和输出(不想在本地保存生成的文件,因此我必须使用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