53 lines
2.1 KiB
Python
53 lines
2.1 KiB
Python
|
import PyPDF2
|
|||
|
from reportlab.lib.units import cm
|
|||
|
from reportlab.pdfgen import canvas
|
|||
|
from io import BytesIO
|
|||
|
|
|||
|
def add_blank_pages_v2(input_pdf_path, output_pdf_path):
|
|||
|
# 打开输入的PDF文件
|
|||
|
with open(input_pdf_path, 'rb') as file:
|
|||
|
pdf_reader = PyPDF2.PdfReader(file)
|
|||
|
pdf_writer = PyPDF2.PdfWriter()
|
|||
|
|
|||
|
total_pages = len(pdf_reader.pages)
|
|||
|
|
|||
|
# 遍历每一页
|
|||
|
for page_num in range(total_pages):
|
|||
|
page = pdf_reader.pages[page_num]
|
|||
|
pdf_writer.add_page(page)
|
|||
|
|
|||
|
# 创建一个内存中的PDF,用于存放带有文本的空白页
|
|||
|
packet = BytesIO()
|
|||
|
# 获取当前页面的宽度和高度
|
|||
|
page_width = float(page.mediabox.width)
|
|||
|
page_height = float(page.mediabox.height)
|
|||
|
# 使用reportlab创建一个新的PDF页面
|
|||
|
c = canvas.Canvas(packet, pagesize=(page_width, page_height))
|
|||
|
|
|||
|
# 计算文本的位置(单位:点,1厘米 ≈ 28.35点)
|
|||
|
x_position = 2.3 * cm
|
|||
|
y_position = page_height - 0.5 * cm # 从顶部开始计算,因此用页面高度减去上边距
|
|||
|
|
|||
|
# 绘制文本,使用 (page_num + 1) 作为索引
|
|||
|
c.setFont("Helvetica", 12) # 设置字体和大小
|
|||
|
c.drawString(x_position, y_position, f"[$$index_mark_{page_num + 1}$$]")
|
|||
|
|
|||
|
# 完成绘制
|
|||
|
c.save()
|
|||
|
|
|||
|
# 将内存中的PDF读入PyPDF2
|
|||
|
packet.seek(0)
|
|||
|
new_pdf = PyPDF2.PdfReader(packet)
|
|||
|
blank_page = new_pdf.pages[0]
|
|||
|
|
|||
|
# 将带有文本的空白页添加到写入器
|
|||
|
pdf_writer.add_page(blank_page)
|
|||
|
|
|||
|
# 将所有页面写入输出的PDF文件
|
|||
|
with open(output_pdf_path, 'wb') as output_file:
|
|||
|
pdf_writer.write(output_file)
|
|||
|
|
|||
|
if __name__ == '__main__':
|
|||
|
input=r'C:\Users\Administrator\Downloads\2024-贵州-贵州省罗甸县 2024 年度广州市协作资金龙坪镇、边阳镇产业路硬化建设项目.pdf'
|
|||
|
output=r'C:\Users\Administrator\Downloads\output.pdf'
|
|||
|
add_blank_pages_v2(input,output)
|