我正在尝试使用PyPDF2中的PdfFileMerger()来合并pdf文件(参见代码)。
from PyPDF2 import PdfFileMerger, PdfFileReader
[...]
merger = PdfFileMerger()
if (some condition):
merger.append(PdfFileReader(file(filename1, 'rb')))
merger.append(PdfFileReader(file(filename2, 'rb')))
if (test for non-zero file size):
merger.write("output.pdf")但是,我的merge命令受到某些条件的限制,可能不会生成合并的pdf文件。我想知道如何在使用PdfFileMerger()执行合并后确定页数。如果没有其他问题,我想知道页数是否是非零。维护一个计数器来做这件事会很麻烦,因为我正在执行跨多个函数的合并,并且我更喜欢更优雅的解决方案。
发布于 2016-08-31 18:28:09
我和你的情况是一样的。我将解释我的解决方案。我不会用PdfFileReader('filename.pdf', 'rb')打开PDFs,但我会在合并(pdfs_content_array)的数组中传递pdfs内容。然后,我准备合并并输出(不想将生成的文件保存在本地,所以我必须使用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()发布于 2018-11-23 00:53:37
也许您可以尝试使用以下代码
if len(merger.pages) > 0根据你的情况
if (test for non-zero file size)https://stackoverflow.com/questions/39238648
复制相似问题