我正在使用 python 裁剪 pdf 页面。 一切正常,但如何更改页面大小(宽度)?
这是我的裁剪代码:
input = PdfFileReader(file('my.pdf', 'rb'))
p = input.getPage(1)
(w, h) = p.mediaBox.upperRight
p.mediaBox.upperRight = (w/4, h)
output.addPage(p)
当我裁剪页面时,我也需要调整它们的大小,我该怎么做?
可以使用
PyPDF2
库在 Python 中裁剪 PDF 页面并调整其大小。但是,
PyPDF2
不能直接支持页面大小调整(例如更改宽度)。它主要用于裁剪、合并、拆分和进行简单的转换。
为了实现你想要的结果,你需要使用一个像
reportlab
这样的库来创建一个具有新页面大小的新 PDF,然后将裁剪后的内容放在上面。
以下是如何使用
PyPDF2
和
reportlab
来做到这一点:
from PyPDF2 import PdfFileReader, PdfFileWriter
from reportlab.pdfgen import canvas
from reportlab.lib.units import inch
from io import BytesIO
def crop_and_resize_pdf(input_pdf, output_pdf, page_index, crop_width, new_width):
# 使用 PyPDF2 打开 PDF
input_file = PdfFileReader(open(input_pdf, 'rb'))
page = input_file.getPage(page_index)
# 获取原始页面大小
orig_width, orig_height = page.mediaBox.upperRight
# 裁剪页面
page.mediaBox.upperRight = (crop_width, orig_height)
# 创建一个新的 PDF,其页面大小是你想要的
output_buffer = BytesIO()
c = canvas.Canvas(output_buffer, pagesize=(new_width * inch, orig_height * inch))
# 将裁剪后的页面绘制到新的 PDF 上
c.translate(0, 0) # 设置位置,如果需要可以调整
c.doForm(page.createResource())
c.save()
# 使用 PyPDF2 写入输出 PDF
output_file = PdfFileWriter()
output_file.addPage(PdfFileReader(output_buffer).getPage(0))
with open(output_pdf, 'wb') as f:
output_file.write(f)
# 示例用法
crop_and_resize_pdf("my.pdf", "cropped_and_resized.pdf", 0, 2*inch, 4*inch)
在这个代码中:
-
crop_and_resize_pdf
函数 接收输入 PDF 文件名、输出 PDF 文件名、要裁剪的页面索引、裁剪后的宽度以及新的页面宽度作为输入。 -
它使用
PyPDF2
打开输入 PDF 并提取指定的页面。 -
它计算裁剪后的区域并将页面的
mediaBox
设置为裁剪后的尺寸。 -
它使用
reportlab
创建一个新的 PDF,其页面大小是你想要的。 - 它将裁剪后的页面绘制到新创建的 PDF 的画布上。
- 最后,它将这个新创建的页面保存到输出 PDF 文件中。
这个脚本使用
reportlab
库来帮助设置新的页面大小,并使用
PyPDF2
来处理 PDF 的裁剪。确保你安装了这两个库:
pip install PyPDF2 reportlab
这个方法创建了一个新的 PDF 文件,其中包含裁剪后的页面,并调整了页面大小以适应裁剪后的内容。
标签:python,pdf,pypdf From: 6536552