首页 > 编程问答 >在Python中调整pdf页面大小

在Python中调整pdf页面大小

时间:2024-07-24 04:46:53浏览次数:12  
标签:python pdf pypdf

我正在使用 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)

在这个代码中:

  1. crop_and_resize_pdf 函数 接收输入 PDF 文件名、输出 PDF 文件名、要裁剪的页面索引、裁剪后的宽度以及新的页面宽度作为输入。
  2. 它使用 PyPDF2 打开输入 PDF 并提取指定的页面。
  3. 它计算裁剪后的区域并将页面的 mediaBox 设置为裁剪后的尺寸。
  4. 它使用 reportlab 创建一个新的 PDF,其页面大小是你想要的。
  5. 它将裁剪后的页面绘制到新创建的 PDF 的画布上。
  6. 最后,它将这个新创建的页面保存到输出 PDF 文件中。

这个脚本使用 reportlab 库来帮助设置新的页面大小,并使用 PyPDF2 来处理 PDF 的裁剪。确保你安装了这两个库:

pip install PyPDF2 reportlab

这个方法创建了一个新的 PDF 文件,其中包含裁剪后的页面,并调整了页面大小以适应裁剪后的内容。

标签:python,pdf,pypdf
From: 6536552

相关文章

  • 如何使用 python 更改资源管理器窗口中的路径?
    没有人知道如何在不使用python打开新实例的情况下更改资源管理器窗口中的当前路径吗?例如,如果用户使用C:\Users\User打开资源管理器窗口。然后我必须将该路径更改为C:\Windows\System32例如。提前致谢。很遗憾,无法直接使用Python更改现有文件资源管理器窗口的......
  • python 以及将数组传递给函数的问题
    我需要求解一些常微分方程$\frac{dy}{dx}=f(x)=x^2ln(x)$并继续在限制0之间创建数组xpt。<=xpt<=2因为我必须小心xpt=0,所以我将函数定义如下deff(x):ifx<=1.e-6:return0.else:returnnp.square(x)*np.log(x)我的调用程序读取Np......
  • 如果 Python 脚本正在使用文件夹,如何在文件资源管理器中进行更改时防止 Windows 的“
    我有一个简单的脚本,显示在QTreeView中的QListView中选择的目录的内容,我想添加打开文件资源管理器的功能,以让用户编辑目录内的内容。但是,添加新的文件夹和文件可以,但删除或移动文件夹或文件会提示“文件夹正在使用”错误:此操作无法完成,因为该文件已在另一个程......
  • 如何使用 Python API 获取每个模型的活跃用户列表、最后登录信息
    我想通过PythonAPI获取我的dbt项目的所有模型中的活动或非活动用户列表。这可能吗?我尝试列出模型,但无法获取用户信息,如用户名、项目、以及上次活动或上次登录。不幸的是,dbt本身并不跟踪你所寻找的用户活动数据(最后登录、活跃用户等)。dbt的主要功能是转换数据,而不......
  • Python tkinter 窗口不断关闭,我不知道为什么
    我正在尝试制作一个有趣的小程序,其中每小时左右就会有一只毛茸茸的动物走过屏幕。我有一个主窗口,它启动一个循环,每小时左右播放一次动画/声音,但是在口袋妖怪第一次完成行走后,整个程序就会结束。我认为这可能与我设置tkinter窗口的方式有关,但我无法弄清楚。我认为在这里包含......
  • 用于自动访问 MongoDB Atlas CLI 的 Python 脚本
    我想编写一个Python脚本,以便普通用户可以访问他的数据库并从他的终端执行CRUD操作。我正在查看官方文档,但我有点迷失。有人可以给我指点基本教程来开始吗?当然,以下是如何构建Python脚本来访问MongoDBAtlasCLI的基本教程:先决条件:MongoDBAtlas......
  • Python实现简单学生登陆系统
     代码:importhashlibclassStudent:def__init__(self,username,password):#初始化学生对象,存储用户名和加密后的密码self.username=usernameself.password=hashlib.sha256(password.encode()).hexdigest()defcheck_passwo......
  • python猜数字游戏
    好的,下面是一个简单的小游戏代码示例,使用Python编写。这个游戏是一个猜数字游戏,玩家需要猜一个1到100之间的随机数。importrandomdefguess_number_game():print("欢迎来到猜数字游戏!")print("我已经想好了一个1到100之间的数字,请你猜一猜。")secret_num......
  • 【Python正则表达式】:文本解析与模式匹配
    文章目录1.正则表达式2.re模块3.修饰符3.元字符3-1字符匹配元字符3-2重复次数限定元字符3-3字符集合匹配元字符3-4分组元字符3-5边界匹配元字符3-6字符类别匹配元字符4.技巧4-1贪婪与非贪婪5.案例1.正则表达式正则表达式面向什么样的问题?1、判断一个字......
  • 仅需增加2行代码,Python量化策略速度提升20+倍!
    今天分享一个Python量化策略加速的小技巧,不用修改原有代码,只需在原有代码里新增2行,策略执行速度便可能提高20+倍,正文开始~现如今,无论是入门量化投资,还是做数据分析、机器学习和深度学习,Python成为了首选编程语言,直观的原因就是容易上手和资源丰富,但Python有个根深蒂固的标签,......