结合两个PDF页面

  1. 加载PDF文件:通过PdfReader类加载两个PDF文件,一个是底.pdf,另一个是顶.pdf

  2. 创建PDF写入器:实例化PdfWriter类,用于写入最终的输出PDF文件。

  3. 获取页面对象:访问每个PDF文件的第一页,分别命名为tree_pagelegend_page

  4. 调整顶图页面的MediaBox

    • 首先获取底图页面的媒体框(mediabox)。
    • 将顶图页面的媒体框调整为与底图页面相同宽度,但右侧额外增加了3000个单位,可能使页面超出原尺寸。
  5. 缩小顶图页面:顶图页面被缩放至原大小的35%,实现尺寸的减小。

  6. 平移顶图页面:应用变换使顶图页面在X轴上移动,移动的距离等于底图页面右边界减去170个单位。

  7. 合并页面:经过变换的顶图页面被合并到底图页面之上。

  8. 添加页面并保存输出:合并后的页面被添加到PdfWriter实例中,然后将整个文档写入名为结果.pdf的新文件中。

这个脚本有效地将两个页面结合在一起,顶图页面被调整大小、位置,并叠加在底图页面上,形成一个复合的PDF页面

from pypdf import PdfReader, PdfWriter, Transformation
from pypdf.generic import RectangleObject

# 加载底图和顶图PDF文件
tree_pdf = PdfReader(open('底.pdf', 'rb'))
legend_pdf = PdfReader(open('顶.pdf', 'rb'))

# 初始化PDF写入器,用于创建新的PDF文件
output_writer = PdfWriter()

# 获取底图的第一页
base_page = tree_pdf.pages[0]

# 获取顶图的第一页
overlay_page = legend_pdf.pages[0]

# 使用底图页面的媒体框尺寸来调整顶图页面的尺寸
# 这样做是为了确保顶图页面与底图页面的尺寸匹配
base_media_box = base_page.mediabox
overlay_page.mediabox = RectangleObject((base_media_box.left, base_media_box.bottom, base_media_box.right + 3000, base_media_box.top))

# 缩小顶图页面的尺寸,缩放比例为0.35
# 这使得顶图页面在合并到底图页面上时不会占据过多空间
overlay_page.scale_by(0.35)

# 定义平移变换,将顶图页面在X轴方向上移动
# 移动的距离等于底图页面右边界减去170单位
translation = Transformation().translate(tx=base_media_box.right - 170)

# 应用平移变换到顶图页面
overlay_page.add_transformation(translation)

# 合并顶图页面到底图页面上
# 这一步将顶图页面的内容叠加到底图页面相应的位置上
base_page.merge_page(overlay_page)

# 将合并后的页面添加到输出的PDF写入器中
output_writer.add_page(base_page)

# 写入最终的PDF文件
# '结果.pdf'是输出文件名
with open('结果.pdf', 'wb') as output_stream:
    output_writer.write(output_stream)

  • 13
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值