首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在pypdf2中使用PdfFileMerger()后的页数

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

Stack Overflow用户
提问于 2016-08-31 07:40:03
回答 2查看 2.2K关注 0票数 1

我正在尝试使用PyPDF2中的PdfFileMerger()来合并pdf文件(参见代码)。

代码语言:javascript
复制
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()执行合并后确定页数。如果没有其他问题,我想知道页数是否是非零。维护一个计数器来做这件事会很麻烦,因为我正在执行跨多个函数的合并,并且我更喜欢更优雅的解决方案。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 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进行比较。就这样。

代码语言:javascript
复制
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()

希望这能有所帮助!

第二个版本:

代码语言:javascript
复制
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
EN

Stack Overflow用户

发布于 2018-11-23 00:53:37

也许您可以尝试使用以下代码

代码语言:javascript
复制
if len(merger.pages) > 0

根据你的情况

代码语言:javascript
复制
if (test for non-zero file size)
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39238648

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档