合并 PDF 文件

2023-12-27

是否可以使用 Python 合并单独的 PDF 文件?

假设是这样,我需要进一步扩展一下。我希望循环遍历目录中的文件夹并重复此过程。

我可能会碰碰运气,但是否有可能排除每个 PDF 中包含的页面(我的报告生成总是会创建一个额外的空白页面)。


您可以使用pypdf https://github.com/py-pdf/pypdfs PdfMerger https://pypdf.readthedocs.io/en/stable/modules/PdfMerger.html class.

文件串联

您可以简单地连接 https://en.wikipedia.org/wiki/Concatenation文件通过使用append https://pypdf.readthedocs.io/en/latest/modules/PdfMerger.html#pypdf.PdfMerger.append method.

from pypdf import PdfMerger

pdfs = ['file1.pdf', 'file2.pdf', 'file3.pdf', 'file4.pdf']

merger = PdfMerger()

for pdf in pdfs:
    merger.append(pdf)

merger.write("result.pdf")
merger.close()

如果需要,您可以传递文件句柄而不是文件路径。

文件合并

如果您想要更细粒度的合并控制,可以使用merge https://pypdf.readthedocs.io/en/latest/modules/PdfMerger.html#pypdf.merger.PdfMerger.merge的方法PdfMerger,它允许您在输出文件中指定插入点,这意味着您可以将页面插入文件中的任何位置。这append方法可以被认为是merge其中插入点是文件末尾。

e.g.

merger.merge(2, pdf)

在这里,我们将整个 PDF 插入到输出中,但在第 2 页。

页面范围

如果您希望控制从特定文件附加哪些页面,您可以使用pages的关键字参数append and merge,传递一个元组形式(start, stop[, step])(就像常规的range功能)。

e.g.

merger.append(pdf, pages=(0, 3))    # first 3 pages
merger.append(pdf, pages=(0, 6, 2)) # pages 1,3, 5

如果您指定了无效范围,您将得到一个IndexError.

Note:另外,为了避免文件保持打开状态,PdfMerger当合并文件写入后,应调用 close 方法。这可确保及时关闭所有文件(输入和输出)。遗憾的是PdfMerger没有作为上下文管理器实现,所以我们可以使用with关键字,避免显式关闭调用并获得一些简单的异常安全性。

您可能还想查看pdfly cat https://github.com/py-pdf/pdfly由 pypdf 开发人员提供的命令。您可以完全避免编写代码的需要。

pypdf 文档还includes https://pypdf.readthedocs.io/en/stable/user/merging-pdfs.html一些演示合并的示例代码。

PyMuPdf

另一个可能值得一看的图书馆是PyMuPdf https://github.com/pymupdf/PyMuPDF。合并同样简单。

从命令行:

python -m fitz join -o result.pdf file1.pdf file2.pdf file3.pdf

并从代码中

import fitz

result = fitz.open()

for pdf in ['file1.pdf', 'file2.pdf', 'file3.pdf']:
    with fitz.open(pdf) as mfile:
        result.insert_pdf(mfile)
    
result.save("result.pdf")

有很多选项,详细信息在项目中wiki https://github.com/pymupdf/PyMuPDF/wiki.

注意:在旧版本的 PyMuPDF 中insert_pdf was insertPDF

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

合并 PDF 文件 的相关文章

  • Pandas apply 与 np.vectorize 从现有列创建新列的性能

    我正在使用 Pandas 数据框 并希望创建一个新列作为现有列的函数 我还没有看到关于之间速度差异的很好的讨论df apply and np vectorize 所以我想我会在这里问 熊猫apply 功能很慢 根据我的测量 在一些实验中如下
  • 具有多处理功能的 Python 代码无法在 Windows 上运行

    以下简单的绝对初学者代码在 Ubuntu 14 04 Python 2 7 6 和 Cygwin Python 2 7 8 上运行 100 但在 Windows 64 位 Python 2 7 8 上挂起 我使用另一个片段观察到了同样的情况
  • 编辑 scikit-learn 决策树

    我想编辑 sklearn DecisionTree 例如改变条件或切割节点 叶子等 但似乎没有功能可以做到这一点 如果我可以导出到文件 编辑它以导入 如何编辑决策树 环境 Windows 10 python3 3 sklearn 0 17
  • 子进程改变目录

    我想在子目录 超级目录中执行脚本 我需要首先进入该子目录 超级目录 我无法得到subprocess进入我的子目录 tducin localhost Projekty tests ve python Python 2 7 4 default
  • 将 API 数据存储到 DataFrame 中

    我正在运行 Python 脚本来从 Interactive Brokers API 收集金融市场数据 连接到API后 终端打印出请求的历史数据 如何将数据保存到数据帧中而不是在终端中流式传输 from ibapi wrapper impor
  • 字典中的列表,Python 中的循环

    我有以下代码 TYPES hotmail type hotmail lookup mixed dkim no signatures S Return Path email protected cdn cgi l email protecti
  • Pyspark 数据框逐行空列列表

    我有一个 Spark 数据框 我想创建一个新列 其中包含每行中具有 null 的列名称 例如 原始数据框是 col 1 col 2 col 3 62 45 null 62 49 56 45 null null null null null
  • 在Python中创建一个新表

    我正在尝试从数控机床中提取数据 事件每毫秒发生一次 我需要过滤掉一些用管道 分隔的变量分隔符 PuTTy exe 程序生成的日志文件 我尝试阅读熊猫 但列不在同一位置 df pd read table data log sep 日志文件的一
  • 网页抓取 - 前往第 2 页

    如何访问数据集的第二页 无论我做什么 它都只返回第 1 页 import bs4 from urllib request import urlopen as uReq from bs4 import BeautifulSoup as sou
  • 错误:无法访问文件“$libdir/plpython2”:没有这样的文件或目录

    我正在运行 postgresql 9 4 PostgreSQL 9 4 4 on x86 64 unknown linux gnu compiled by gcc GCC 4 1 2 20070626 Red Hat 4 1 2 14 64
  • 如何使用 Python 多处理避免在分叉进程中加载​​父模块

    当您创建一个Pool使用Python的进程multiprocessing 这些进程将分叉 父进程中的全局变量将显示在子进程中 如下面的问题所述 如何限制多处理进程的范围 https stackoverflow com questions 2
  • 在 matplotlib 中使用 yscale('log') 时缺少误差线

    在某些情况下 当使用对数刻度时 matplotlib 会错误地显示带有误差条的图 假设这些数据 例如在 pylab 内 s 19 0 20 0 21 0 22 0 24 0 v 36 5 66 814250000000001 130 177
  • Python 视频框架

    我正在寻找一个 Python 框架 它将使我能够播放视频并在该视频上绘图 用于标记目的 我尝试过 Pyglet 但这似乎效果不是特别好 在现有视频上绘图时 会出现闪烁 即使使用双缓冲和所有这些好东西 而且似乎没有办法在每帧回调期间获取视频中
  • 为什么“return self”返回 None ? [复制]

    这个问题在这里已经有答案了 我正在尝试获取链的顶部节点getTopParent 当我打印出来时self name 它确实打印出了父实例的名称 然而 当我回来时self 它返回 None 为什么是这样 class A def init sel
  • Spark中的count和collect函数抛出IllegalArgumentException

    当我使用时抛出此异常时 我尝试在本地 Spark 上加载一个小数据集count 在 PySpark 中 take 似乎有效 我试图搜索这个问题 但没有找到原因 看来RDD的分区有问题 有任何想法吗 先感谢您 sc stop sc Spark
  • 如何在C++中列出Python模块的所有函数名称?

    我有一个 C 程序 我想导入一个 Python 模块并列出该模块中的所有函数名称 我该怎么做 我使用以下代码从模块中获取字典 PyDictObject pDict PyDictObject PyModule GetDict pModule
  • 如何向 SCons 构建添加预处理和后处理操作?

    我正在尝试在使用 SCons 构建项目时添加预处理和后处理操作 SConstruct 和 SConscript 文件位于项目的顶部 预处理动作 生成代码 通过调用不同的工具 gt 不知道在此预处理之后将生成的确切文件 可以创建用于决定生成哪
  • Jupyter Notebook:没有名为 pandas 的模块

    我搜索了其他问题 但没有找到任何有帮助的内容 大多数只是建议您使用 conda 或 pip 安装 pandas 在我的 jupyter 笔记本中 我试图导入 pandas import pandas as pd 但我收到以下错误 Modul
  • 最小硬币找零问题——回溯

    我正在尝试用最少数量的硬币解决硬币找零问题 采用回溯法 我实际上已经完成了它 但我想添加一些选项 按其单位打印硬币数量 而不仅仅是总数 这是我下面的Python代码 def minimum coins coin list change mi
  • SQLAlchemy:避免声明式样式类定义中的重复

    我正在使用 SQLAlchemy 并且我的对象模型中的许多类具有相同的两个属性 id 和 整数和主键 以及名称 字符串 我试图避免在每个类中声明它们 如下所示 class C1 declarative base id Column Inte

随机推荐

  • 使用 LESS 构建选择器列表

    一般问题 我有媒体查询 我在其中更改某些文本元素 如下所示 body single entry content p body single entry content ul body single entry content ol body
  • Cognito 和 Java - 用户名不能是电子邮件格式,因为用户池是为电子邮件别名配置的

    我创建了 Cognito 用户池 如下所示 settings https i stack imgur com sXf06 png for 允许用户通过电子邮件或用户名登录 并且对于每个用户来说都是唯一的 这是我的帐户 Cognito 实施
  • Jquery 验证删除规则不起作用

    我正在根据输入动态设置验证 在添加验证之前 我要删除规则并添加它是必需的元素 我设置删除规则后 消息不会消失 for var i 0 i lt data length i switch data i FieldName case ADDRE
  • Scala Play 2.1.0 - 资产未出现在 Heroku 上?

    我的应用程序在开发中运行良好 图像显示 但是当部署到 Heroku 时 它们神秘地消失了 代码是 img src routes Assets at myImage png gt Heroku 是否搞砸了 或者我错过了什么 确保您的项目pub
  • Select2 formatResult 获取选项的属性

    使用 在 select2 中获取自定义数据属性 https stackoverflow com questions 22261209 get custom data attribute in select2 with select 我们需要
  • 从 timedelta 中提取分钟 - Python

    我有一个包含 timedelta 的列 我想创建一个额外的列 从 timedelta 列中提取小时和分钟 df time delta hour minute 02 51 21 401000 2h 51min 03 10 32 401000
  • 在哪里可以找到 System.Linq.Dynamic dll?

    我正在到处寻找这个dll 但在任何地方都找不到它 有人知道在哪里可以得到它并可以帮助我吗 谢谢 现在可以通过NuGet https nuget org packages System Linq Dynamic画廊也是
  • Node.js mongodb如何连接到mongo服务器的replicaset

    我在用mongo and node js在一个应用程序中 mongo数据库由两台服务器组成 在给出的例子中http howtonode org express mongodb http howtonode org express mongo
  • 在LUA中调用Rest api端点

    我需要从 Lua 脚本调用 Rest API 端点 我怎样才能做到这一点 例如 我可以通过以下curl命令调用端点 curl X GET H X Parse Application Id ParseAppID H X Parse REST
  • NodeJS - SHA256 密码加密

    我目前正在学习 NodeJS 中的加密和密码安全 我正在使用当前使用 PBKDF2 的当前示例 我想将其切换为使用 SHA256 这可能和 或有意义吗 我该怎么办呢 var crypto require crypto var len 128
  • ACTION_PICK 与 MediaStore.Images.Media.INTERNAL_CONTENT_URI 允许用户选择通过 picasa 同步的图像(不在设备上?)

    我正在运行 ICS 并使用相同 Google 帐户的平板电脑和手机上测试我们的应用程序 如果我在一台设备上拍照 它将显示在另一台设备上 通过 Picasa 同步 奇怪的是 当我执行正常操作时 照片会显示在两个设备上 Intent inten
  • 退出 root conda 环境

    一旦我安装了 miniconda 我就永久处于 root miniconda 环境中 例如 luc montblanc conda info envs conda environments bunnies home luc minicond
  • Imgur API 和 VB.NET 帮助 - Image POST

    我正在尝试将图像发送到 Imgur 的服务器 一切都很顺利 我从解析器中获取了图像的 URL 但是当我尝试在网络浏览器上打开它时 我没有得到图像 只有一个 损坏的图像 图标 我认为这是转换为字节数组的问题 但我不明白 请让我知道 修复我的代
  • 在 Servlet/JSP 中加载属性文件[重复]

    这个问题在这里已经有答案了 我创建了一个jar从我的Java project并想在一个JSP Servlet Project 我正在尝试加载一个属性文件 比如说我的sample propertiesJSP Servlet Project保存
  • 通过Webpack导入模块中的图片

    我的应用程序使用 NodeJs webpack 和 ES2015 我似乎无法弄清楚如何在我的模块中导入图像 以下不起作用 import css image t1 png 编辑 根据 Sitian 的要求 这是我的 webpack 配置 co
  • 隐藏 SSRS 中的列

    我正在使用 SSRS 2012 和 Excel 2010 我想在导出到 Excel 时隐藏一列 在浏览了一些论坛后 似乎最好的方法是转到您正在查找的内容的列或文本框隐藏并在 可见性 隐藏 选项下将 表达式 设置为 IIF Globals R
  • Chicken计划中的命名空间

    命名空间在 Chicken Scheme 中如何工作 我现在正在使用parley鸡蛋 当我定义一个名为例如的函数时read 由于名称冲突而导致错误 实际上 因为我的read覆盖parley s own read 并且以错误的类型调用它 这是
  • 使用 URL swift Alamofire 上传视频

    我需要使用 alamofire 将视频上传到服务器 用户选择视频 我在 didFinishPickingMediaWithInfo 中成功获取 URL 如下所示 func imagePickerController picker UIIma
  • 如何导入无法识别的日期时间格式的 CSV?

    该表如下所示 CREATE TABLE dbo temptable id nvarchar 50 COLLATE SQL Latin1 General CP1 CI AS NOT NULL datetime datetime NOT NUL
  • 合并 PDF 文件

    是否可以使用 Python 合并单独的 PDF 文件 假设是这样 我需要进一步扩展一下 我希望循环遍历目录中的文件夹并重复此过程 我可能会碰碰运气 但是否有可能排除每个 PDF 中包含的页面 我的报告生成总是会创建一个额外的空白页面 您可以