合并两个 PDF

2024-04-07

import PyPDF2 
import glob
import os
from fpdf import FPDF
import shutil

class MyPDF(FPDF): # adding a footer, containing the page number
    def footer (self):
        self.set_y(-15)
        self.set_font("Arial", Style="I", size=8)
        pageNum = "page %s/{nb}" % self.page_no()
        self.cell(0,10, pageNum, align="C")


if __name__ == "__main__":
    os.chdir("pathtolocation/docs/") # docs location
    os.system("libreoffice --headless --invisible --convert-to pdf *") # this converts everything to pdf
    for file in glob.glob("*"):
        if file not in glob.glob("*.pdf"):
            shutil.move(file,"/newlocation") # moving files we don't need to another folder

    # adding the cover and footer
    path = open(file, 'wb')
    path2 = open ('/pathtocover/cover.pdf')
    merger = PyPDF2.PdfFileMerger()
    pdf = MyPDF()

    for file in glob.glob("*.pdf"):
        pdf.footer()
        merger.merge(position=0, fileobj=path2)
        merger.merge(position=0, fileobj=path)
        merger.write(open(file, 'wb'))

该脚本转换为 pdf,向 pdf 添加封面和包含页码的页脚,修复了一些内容,现在我最后一次运行它以查看它是否正常工作,它花费了太多时间,没有错误,我做了什么吗错误还是需要那么长时间来合并和添加页脚?我正在处理 3 个文件,它转换它们的速度非常快。

异常输出

convert /home/projects/convert-pdf/docs/sample (1).doc ->
/home/projects/convert-pdf/docs/sample (1).pdf using writer_pdf_Export

所以它正在转换和移动,我认为问题出在这里

   for file in glob.glob("*.pdf"):
        pdf.footer()
        merger.merge(position=0, fileobj=path2)
        merger.merge(position=0, fileobj=path)
        merger.write(open(file, 'wb'))

因为我正在尝试合并position=0 with position=0,但不确定


这实际上作为注释更好,但我想显示代码。您需要在其中添加一些 try 块来捕获任何错误 - 这是您可以做的超级基本的事情。

import PyPDF2 
import glob
import os
from fpdf import FPDF
import shutil

class MyPDF(FPDF): # adding a footer, containing the page number
    def footer (self):
      try:
        self.set_y(-15)
        self.set_font("Arial", Style="I", size=8)
        pageNum = "page %s/{nb}" % self.page_no()
        self.cell(0,10, pageNum, align="C")
      except Exception, err:
        print "Error applying footer: {}".format(err)


if __name__ == "__main__":

  try:
    os.chdir("pathtolocation/docs/") # docs location
    os.system("libreoffice --headless --invisible --convert-to pdf *") # this converts everything to pdf
    for file in glob.glob("*"):
        if file not in glob.glob("*.pdf"):
            shutil.move(file,"/newlocation") # moving files we don't need to another folder

    # adding the cover and footer
    path = open(file, 'wb')
    path2 = open ('/pathtocover/cover.pdf')
    merger = PyPDF2.PdfFileMerger()
    pdf = MyPDF()
  except Exception, err:
    print "error setting up the pdf: {}".format(err)

    for file in glob.glob("*.pdf"):
      try:
        pdf.footer()
        merger.merge(position=0, fileobj=path2)
        merger.merge(position=0, fileobj=path)
        merger.write(open(file, 'wb'))
      except Exception, err:
        print "Error processing glob: {}".format(err)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

合并两个 PDF 的相关文章

随机推荐

  • GPU编程简介[关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 每个人的桌面上都有一台以显卡 GPU 形式存在的巨大的大规模并行超级计算机 GPU 社区的 hello world 相当于什么 我该做什么 去哪
  • CBC 模式下的 HMAC-SHA256 和 AES-256

    我最近遇到以下代码示例 http code activestate com recipes 576980 authenticated encryption with pycrypto 用于使用 AES 256 CBC 和 SHA 256 H
  • 使用 Spring JPA 和 Hibernate 访问 Session 以启用过滤器

    在 Spring JPA Hibernate 环境中 我需要启用 Hibernate 实体过滤器 所以我应该有权访问 Hibernate Session 对象 但我正在使用 EntityManagerFactory 和 Spring JPA
  • 如何隐藏共享操作提供程序附近的共享操作(使用最多的)图标?

    看图片 如何隐藏 P 图标 表示分享到 Pinterest 它们都在操作栏上 我使用 ActionBarSherlock 如果您愿意保留所有分享历史数据模型 但只是不想要额外的 默认共享活动 icom 答案在使用 ShareActionPr
  • 将 java.sql.Timestamp 转换为 Java 8 ZonedDateTime?

    将 Joda 时间迁移到 Java 8 Joda UserObject user new UserObject user setCreatedAt new DateTime rs getTimestamp columnName 迁移到 Ja
  • 如何确定 C++03 中的类型是否可取消引用?

    In C 03 如何判断一个类型是否T是可解引用的吗 我的意思是 我如何静态地确定是否 t将是一个有效的表达式t类型的T 我的尝试 template
  • GitHub 与现有 GPG 密钥合并失败

    我们有多个 github 存储库 需要对拉取请求进行签名提交 有时 由于警告 提交需要签名 我们无法合并拉取请求 即使提交已签名 看起来创建拉取请求的人可以合并它 Sqash 和合并 即使它只包含 1 次提交 这发生在两个帐户都是拉取请求的
  • 迭代器的性能优势?

    使用迭代器可以提供哪些性能优势 如果有 这似乎是解决许多问题的 正确方法 但它是否会创建更快 更内存敏感的代码 我正在专门用 Python 思考 但不要将答案限制于此 实际上 Python 邮件列表上有一篇关于此的非常好的邮件 迭代器与列表
  • Angular 2:从另一个组件调用现有组件

    我正在使用路由功能使用 Angular 2 创建一个应用程序 并且我有一个由较高路由之一呈现的弹出组件 并且我想在由以下之一呈现的组件中的单击事件上打开它更深层次的路线 例如 假设我有一个基本路由器 其模板包含弹出窗口 Component
  • 使用 C++0x decltype 返回值时返回局部变量或临时变量的地址

    Edit 这确实是编译器的一个bug 我开了一个defect https connect microsoft com VisualStudio feedback details 573330 bad code generated for f
  • PDO 和清理日期/删除 HTML

    我让用户使用此代码更新他们的姓名 dbh connect q dbh gt prepare UPDATE Users SET username name WHERE User ID id LIMIT 1 q gt bindParam id
  • Angular:以可重用/干净的方法将 API 数据转换为新的数据类型

    我正在尝试将 API 响应转换为完全不同的 ViewModel 用于多个组件 a 一种解决方案是直接在 API 代理中映射 管道数据 但是如果我只想要简单的原始 API 数据 那么 API 代理的可重用性不是很好 b 此模型适配器模式可能不
  • .ctp 文件中使用的“o”和箭头符号之间的区别?

    我对模型文件中使用的 o 和 gt 有点困惑 例如 asset Field identified by assetId o String assetId o Customer owner gt Customer custId partici
  • 如何将 500GB SQL 表转换为 Apache Parquet?

    也许这是有详细记录的 但我很困惑如何做到这一点 有很多 Apache 工具 当我创建 SQL 表时 我使用以下命令创建表 CREATE TABLE table name column1 datatype column2 datatype c
  • Linux C++:从 main() 返回是否会导致多线程应用程序终止?

    这个问题看起来可能是重复的 但我找不到 如果我错过了之前的问题 抱歉 在 Java 中 我有大部分经验 如果你的 main 分叉一个线程并立即返回 进程将继续运行 直到进程中的所有 非守护进程 线程都停止 在 C 中 情况似乎并非如此 一旦
  • Spring Cloud 配置服务器不刷新

    我正在设置一个 Spring 云服务器来读取内部 Stash 目录 服务器第一次加载 但如果我更新 git 中的属性 它们不会得到反映 直到我重新启动云服务器 我尝试 POST 到 refresh 端点 我使用的是 Windows 我看到一
  • 使用JMS临时队列进行同步使用是一个好习惯吗?

    如果我们使用 临时队列 的 JMS 请求 回复机制 该代码是否可扩展 截至目前 我们不知道是否会支持每秒 100 个请求 或者每秒 1000 个请求 下面的代码是我正在考虑实现的代码 它以 同步 方式使用 JMS 关键部分是创建 消费者 以
  • @Cachable注解不起作用

    我们在项目中使用 ehcache 进行缓存 import com googlecode ehcache annotations Cacheable Other imports Component public class Authentic
  • 使用 laravel 将 .JSON 文件保存到数据库

    总的来说 我对 Laravel 和 PHP 非常陌生 我所做的大部分工作都与在线教程相关 我知道如何将用户名或密码等单个项目保存到数据库中 但在存储整个文件时我一无所知 这就是我的数据库当前在迁移文件中的格式 public function
  • 合并两个 PDF

    import PyPDF2 import glob import os from fpdf import FPDF import shutil class MyPDF FPDF adding a footer containing the