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

xzv2uavs  于 2023-02-21  发布在  Python
关注(0)|答案(2)|浏览(167)

我正在尝试使用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执行合并后的页数().如果没有别的,我想知道页数是否非零。维护一个计数器来完成这一任务会很麻烦,因为我正在执行跨多个函数的合并,并且希望使用更优雅的解决方案。

nfg76nw0

nfg76nw01#

也许您可以尝试使用以下方法

if len(merger.pages) > 0

你的情况

if (test for non-zero file size)
zf9nrax1

zf9nrax12#

我的情况和你一样。我会解释我的解决方案。我不是用PdfFileReader('filename.pdf', 'rb')打开PDF,而是用数组传递PDF内容以进行合并(pdfs_content_array)。然后准备合并和输出(我不想在本地保存生成的文件,所以我必须使用BytesIO将合并的内容保存到某个地方)比较页码结果需要calc_page_sum,最重要的是:所以我用PdfFileReader打开了字节内容,得到了页码,然后我添加了合并,我把合并写进了字节输出,然后和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()

希望这会有帮助!
第2版:

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()

相关问题