在 pypdf2 中使用 PdfFileMerger() 后的页数
Page count after using PdfFileMerger() in 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() 执行合并后确定页数。如果不出意外,我想知道页数是否非零。维护一个计数器来执行此操作会很麻烦,因为我正在执行跨多个功能的合并并且更喜欢更优雅的解决方案。
我 +- 和你一样。我将解释我的解决方案。我没有使用 PdfFileReader('filename.pdf', 'rb')
打开 PDF,而是将 pdf 内容传递到数组中以进行合并 (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()
也许你可以尝试使用以下
if len(merger.pages) > 0
你的情况
if (test for non-zero file size)
我正在尝试使用 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() 执行合并后确定页数。如果不出意外,我想知道页数是否非零。维护一个计数器来执行此操作会很麻烦,因为我正在执行跨多个功能的合并并且更喜欢更优雅的解决方案。
我 +- 和你一样。我将解释我的解决方案。我没有使用 PdfFileReader('filename.pdf', 'rb')
打开 PDF,而是将 pdf 内容传递到数组中以进行合并 (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()
也许你可以尝试使用以下
if len(merger.pages) > 0
你的情况
if (test for non-zero file size)