在pypdf2中使用PdfFileMerger()后的页数

时间:2016-08-30 23:40:03

标签: python pypdf pypdf2

我试图在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")

但是,我的合并命令受某些条件的限制,结果可能是没有生成合并的pdf文件。我想知道如何使用PdfFileMerger()执行合并后确定页数。如果没有别的,我想知道页数是否为非零。维护一个计数器来执行此操作会很麻烦,因为我正在执行多个功能的合并,并且更喜欢更优雅的解决方案。

2 个答案:

答案 0 :(得分:1)

我是+ - 与你的情况相同。我会解释我的解决方案。我没有用PdfFileReader('filename.pdf', 'rb')打开pdf,但是我将pdfs内容传递给数组中的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()

答案 1 :(得分:0)

也许您可以尝试使用以下

if len(merger.pages) > 0

根据您的情况

if (test for non-zero file size)