实现批量给pdf文件指定的位置添加电子印章

2023-12-15 22:34:12
# 导入库
import PyPDF2
from PIL import Image
from PyPDF2 import Transformation


# 定义函数
def add_stamp (pdf_path, image_path):
  # 打开PDF文件
  pdf_reader = PyPDF2.PdfReader(pdf_path)
  # 获取总页数
  num_pages = len(pdf_reader.pages)
  # 获取第一页对象
  page = pdf_reader.pages[0]
  # 获取PDF页面的宽度和高度
  pdf_width = page.mediabox.width
  pdf_height = page.mediabox.height
  # 打开图片文件
  image = Image.open (image_path)
  # 获取图片的宽度和高度
  image_width, image_height = image.size
  # # 调整图片大小,使其适合PDF的右下角
  # 这里可以根据需要修改缩放比例和偏移量
  scale = 0.135 # 缩放比例
  offset_x = pdf_width-150 # x轴偏移量
  offset_y = -25 # y轴偏移量
  # # # 计算缩放后的图片宽度和高度
  new_image_width = image_width * scale
  new_image_height = image_height * scale
  # # # 调整图片大小
  # image = image.resize ((int (new_image_width), int (new_image_height)))
  # # # 保存图片为PDF格式
  # image.save ('temp.pdf', 'PDF')
  # # 打开图片的PDF文件
  # image_reader = PyPDF2.PdfReader ('temp.pdf')
  image_reader = PyPDF2.PdfReader('stamp.pdf')
  # # 获取图片的PDF页面对象
  image_page = image_reader.pages[0]

  # 创建一个变换矩阵,用于缩放和平移图片
  op = Transformation().scale(scale).translate(pdf_width - new_image_width - offset_x, offset_y)
  # # 将变换矩阵应用到图片的PDF页面上
  image_page.add_transformation(op)



  # # 创建一个新的PDF文件对象
  pdf_writer = PyPDF2.PdfWriter ()
  # # 遍历每一页PDF
  for i in range(num_pages):
    # 获取PDF页面对象
    page = pdf_reader.pages[i]
    # 将图片合并到PDF页面上
    page.merge_page(image_page)
    # 将合并后的页面添加到新的PDF文件对象中
    pdf_writer.add_page(page)
    # 返回新的PDF文件对象
  return pdf_writer

# 遍历需要处理的PDF文件夹
import os
# 指定PDF文件夹的路径
pdf_folder = 'pdffiles'
# 指定图片文件的路径
image_path = 'test.png'
# 指定输出文件夹的路径
output_folder = 'output'
# 如果输出文件夹不存在,创建一个
if not os.path.exists (output_folder):
  os.mkdir (output_folder)
# 遍历PDF文件夹中的所有文件
for file in os.listdir (pdf_folder):
  # 如果文件是PDF格式
  if file.endswith ('.pdf'):
    # 获取文件的完整路径
    pdf_path = os.path.join (pdf_folder, file)
    # 调用函数,得到一个新的PDF文件对象
    new_pdf = add_stamp (pdf_path, image_path)
    # # 获取输出文件的完整路径
    output_path = os.path.join (output_folder, file)
    # # 打开输出文件
    with open (output_path, 'wb') as out:
    #   # 将新的PDF文件对象写入到输出文件中
      new_pdf.write (out)
    # # 打印提示信息
    print ('{} has been stamped.'.format (file))

文章来源:https://blog.csdn.net/weixin_64974855/article/details/135025930
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。