繁体   English   中英

在将 pdf 与 PyPDF2 合并时添加页码

[英]Adding page number while merge a pdf with PyPDF2

我正在将信息单元 (.PDF) 合并成一个单一的 PDF。 为了定义完整的手册,我需要使用许多过滤器中的许多变量(您可以只选择每个过滤器中的一个),请看:葡萄牙语的手动生成器

我的主要问题基本上是在合并时向 PDF 添加页码,我在这里这里使用代码,但没有成功我使用的简化代码是:

from PyPDF2 import PdfFileWriter, PdfFileReader
import io
from reportlab.pdfgen import canvas
from reportlab.lib.pagesizes import A4

print(var1.get(), var2.get(), var3.get(), var4.get(), var5.get(), var6.get())
merger.append(Modelo) #filter one
merger.append(Escada) #filter two
output = open('ModeloMerg.pdf', 'wb')
merger.write(output)

pdf = PdfFileReader('ModeloMerg.pdf')

packet = io.BytesIO()
can = canvas.Canvas(packet, pagesize=A4)
can.drawString(10, 100, "Page" + str(15)) #just a random test number
can.save()
packet.seek(0)

watermark = PdfFileReader(packet)
watermark_page = watermark.getPage(0)



for page in range(pdf.getNumPages()):

    pdf_page = pdf.getPage(page)
    pdf_page.mergePage(watermark_page)
    pdf_writer.addPage(pdf_page)

with open('out.pdf', 'wb') as fh:
    pdf_writer.write(fh)

我知道这很旧,但我想出了一个解决方案,可以帮助将来遇到这个问题的人。 这不是最有效的,但这只是一个例子。

我使用 FPDF 和 PyPDF2 的组合来完成添加页码。 如果您已经在合并文档,您可能可以修改我的简单示例以提高效率,但我这样做是因为我希望页码的文本是“第 [x] 页中的 [x]”。

如果您不想列出总页码,则可以简化它。

import os
import PyPDF2
from fpdf import FPDF


class NumberPDF(FPDF):
    def __init__(self, numberOfPages):
        super(NumberPDF, self).__init__()
        self.numberOfPages = numberOfPages

    # Overload Header
    def header(self):
        pass

    # Overload Footer
    def footer(self):
        self.set_y(-15)
        self.set_font('Arial', 'I', 8)
        self.cell(0, 10, f"Page {self.page_no()} of {self.numberOfPages}", 0, 0, 'C')


# Grab the file you want to add pages to
inputFile = PyPDF2.PdfFileReader("original.pdf")
outputFile = "originalWithPageNumbers.pdf"

# Create a temporary numbering PDF using the overloaded FPDF class, passing the number of pages
# from your original file
tempNumFile = NumberPDF(inputFile.getNumPages())

# Add a new page to the temporary numbering PDF (the footer function runs on add_page and will 
# put the page number at the bottom, all else will be blank
for page in range(inputFile.getNumPages()):
    tempNumFile.add_page()

# Save the temporary numbering PDF
tempNumFile.output("tempNumbering.pdf")

# Create a new PDFFileReader for the temporary numbering PDF
mergeFile = PyPDF2.PdfFileReader("tempNumbering.pdf")

# Create a new PDFFileWriter for the final output document
mergeWriter = PyPDF2.PdfFileWriter()

# Loop through the pages in the temporary numbering PDF
for x, page in enumerate(mergeFile.pages):
    # Grab the corresponding page from the inputFile
    inputPage = inputFile.getPage(x)
    # Merge the inputFile page and the temporary numbering page
    inputPage.mergePage(page)
    # Add the merged page to the final output writer
    mergeWriter.addPage(inputPage)

# Delete the temporary file
os.remove("tempNumbering.pdf")

# Write the merged output
with open(outputFile, 'wb') as fh:
    mergeWriter.write(fh)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM