pdf 添加页脚

复制代码
import PyPDF2
from PyPDF2 import PdfWriter, PdfReader
from reportlab.pdfgen import canvas
from reportlab.lib.pagesizes import letter
import io
from reportlab.pdfbase import pdfmetrics
from reportlab.pdfbase.ttfonts import TTFont
from reportlab.lib.styles import getSampleStyleSheet
from reportlab.platypus import Paragraph

# 注册字体(假设使用Arial字体,可替换为其他字体文件路径)
pdfmetrics.registerFont(TTFont('Arial', 'Arial.ttf'))


def add_footer(input_pdf_path, output_pdf_path):
    """
    函数功能:给指定的PDF文件添加页脚,并将结果保存为新的PDF文件。
    参数:
    - input_pdf_path:输入的PDF文件路径,即要添加页脚的原始PDF文件路径。
    - output_pdf_path:输出的PDF文件路径,添加页脚后生成的新PDF文件将保存到此处。
    """
    packet = io.BytesIO()
    # 创建一个新的PDF对象用于绘制页脚(这里使用reportlab库来绘制内容)
    can = canvas.Canvas(packet, pagesize=letter)
    footer_text = "123"
    # 获取页面数量的循环,这里假设最多100页,实际应用中可根据情况调整
    for page_num in range(1, 100):
        # 使用reportlab的Paragraph类来绘制页脚文本,可灵活设置格式和位置
        styles = getSampleStyleSheet()
        # 获取正文样式
        normal_style = styles['Normal']
        # 设置字体大小为12(可根据需求调整大小)
        normal_style.fontSize = 8
        # 创建Paragraph对象,包含当前页脚文本
        p = Paragraph(footer_text.format(page_num), normal_style)
        # 为Paragraph对象设置宽度和高度,避免出现属性缺失问题
        width, height = letter
        p.wrap(width, height)
        # 设置文本位置,横坐标为50,纵坐标为30(单位是点,可根据实际需求调整位置)
        p.drawOn(can, 50, 30)

        # 以下是使用drawString方法绘制文本的方式(更简单直接,也可按需选择使用)
        # can.setFont('Arial', 12)  # 设置字体为Arial,大小为12(可替换字体及调整大小)
        # can.drawString(50, 30, footer_text.format(page_num))  # 设置文本位置及绘制文本

        can.showPage()
    can.save()

    packet.seek(0)
    new_pdf = PdfReader(packet)
    existing_pdf = PdfReader(open(input_pdf_path, 'rb'))
    output = PdfWriter()
    num_pages = len(existing_pdf.pages)
    for i in range(num_pages):
        page = existing_pdf.pages[i]
        page.merge_page(new_pdf.pages[i % len(new_pdf.pages)])
        output.add_page(page)

    with open(output_pdf_path, 'wb') as output_stream:
        output.write(output_stream)
复制代码

 

posted @   淋哥  阅读(15)  评论(0编辑  收藏  举报
努力加载评论中...
点击右上角即可分享
微信分享提示