簡體   English   中英

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM