为什么合并 PDF 会使文件大小变大?

2023-12-25

我正在尝试将各种 PDF 拆分在一起。它们的文字不多,偶尔会有图像。举例来说,我有两个 PDF,1.4Mb 和 740kb - 当我将它们合并时,它们会膨胀到 6Mb!

我尝试过脚本化组合和手动附加,结果相同,所以我猜测这是一个根本问题。对为什么会发生这种情况的一些解释会很有用,这样我就可以寻找避免这种情况的方法。是不是颜色模型不匹配?他们的字体很小。


您没有告诉我们您如何组合 PDF,这使得您的问题相当理论化,所以我将给您一个理论上的答案:

Part 1

  • 假设您有一个 10 页、总大小为 1200 KByte 的 PDF 文件。
  • 假设每个页面的内容流大约由 100 KByte 组成。从该内容流中,可以引用共享资源。
  • 假设这 10 个页面共享 200 KByte 的资源:它们共享相同的字体、相同的图像等。

如果您将此 PDF“分解”为 10 个单独的单页 PDF,则每个 PDF 将包含大约 300 KByte:内容流中的 100 KByte + 资源中的 200 KByte(我忽略了拥有 10 个单独的外部参照表和文件预告片的开销)。

  • 如果您将这 10 个独立的单页 PDF 合并起来,就好像这 10 个 PDF 没有任何共同点一样,则总文件大小将为 10 x 300 KByte。即 3000 KByte,是原始 1200 KByte 的两倍多。
  • 如果您将这 10 个单独的单页 PDF 合并在一起,并考虑到它们具有共同的资源(字体、资源等),则总大小将为 (10 x 100 KByte) + 200 KByte。

如果您使用 iText 合并 PDF,则使用PdfCopy将生成 3000 KByte PDF,因为PdfCopy只是尽可能快地复制文档,而不查看文档的内容。如果您想要 1200 KByte PDF,那么您需要使用PdfSmartCopy在这种情况下,您将需要更多内存和 CPU,因为 iText 将检查每个 PDF 并重用原本多余的对象。

Part 2

在您的问题中,您提到您有一个 1.4Mb 和一个 740kb PDF,并且 1.4Mb + 740kb 会产生 6Mb 的 PDF。我的理论示例的第一部分没有解释尺寸的极端增长,所以这是第二部分。

  • 在 PDF 1.0 中,PDF 语法没有被压缩。
  • 从 PDF 1.2 开始,流被压缩,但间接对象和交叉引用流以 ASCII 存储。
  • 从 PDF 1.5 开始,可以在对象流中压缩一系列对象,并且也可以压缩交叉引用表。

假设您的原始 PDF 具有压缩的对象流和压缩的交叉引用表。假设您将这些 PDF 合并为一个更像 PDF 1.4 文档的 PDF。在这种情况下,压缩对象和压缩交叉引用流将不再被压缩,从而导致文件大小变得更大。

Part 3?

可能还有其他原因,具体取决于原始 PDF 的性质以及您用于合并 PDF 的工具。如果上述情况都不适用,您应该澄清。

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

为什么合并 PDF 会使文件大小变大? 的相关文章

  • 将 PDF 存储在 MySQL 数据库中

    我正在开发一个应用程序 我需要创建 PDF 格式的发票 我在用着pdf包 https github com psliwa PdfBundle并且 PDF 文件已正确创建 public function helloAction format
  • 如何在 ionic 应用程序中显示 pdf 文件而无需下载

    我所做的事情 在应用程序浏览器中使用 使用谷歌文档 使用的网页视图 所以我尝试了所有这些方法来使用 ionic 在 Android 设备中显示 pdf 文件 但没有用 我可以在所有这些方法中看到下载按钮 谁能告诉我如何在没有用户下载选项的情
  • 如何让 PDF 内容(由 Spring MVC 控制器方法提供)显示在新窗口中

    我是 Spring MVC 的新手 但它的功能给我留下了深刻的印象 我正在使用 3 1 0 RELEASE 并且我必须显示 PDF 来响应 form form 提交 这是我在控制器中编写的 小 代码 RequestMapping value
  • 在 ionic 中从 Base64 打开 pdf

    因此 我将 Jasper 报告转换为 pdf 然后在 REST 控制器中转换为 base64 我该如何将其传输到我的 ionic 3 应用程序 我研究了 Ionic Native Document Viewer 但为了做到这一点 我需要将文
  • Linux:命令行实用程序将 RTF 转换为 PDF?

    有什么建议可以将 RTF 转换为 PDF 吗 我需要从 LAMP 应用程序执行此操作 因此像 GhostScript 这样的命令行实用程序将是理想的选择 或者 您可以使用 libreoffice 来完成此任务 libreoffice hea
  • 如何使用回形针对多页 pdf 进行缩略图

    我想让 Paperclip 为上传的多页 PDF 文件的每一页创建 2 个缩略图 我正在运行 Paperclip 2 3 1 1 并在我的资产模型中使用它 has attached file asset styles gt medium g
  • 将隐藏(生物识别)数据附加到 pdf 上的数字签名

    我想知道是否可以使用 iText 我用于签名 或 Java 中的其他工具在 pdf 上添加生物识别数据 我会更好地解释一下 在手写板上签名时 我会收集签名信息 例如笔压 签名速度等 我想将这些信息 java中的变量 与pdf上的签名一起存储
  • Bash 脚本 - 迭代 find 的输出

    我有一个 bash 脚本 其中需要迭代 find 命令输出的每一行 但似乎我正在迭代 find 命令中的每个单词 以空格分隔 到目前为止我的脚本看起来像这样 folders find maxdepth 1 type d for i in f
  • C# 3.0 使用MemoryStream将itextsharp pdf保存到数据库

    我正在尝试将 itextsharp 生成的 pdf 文件保存到数据库 但是 到目前为止我还没有成功 我正在使用 Linq to sql 这是代码 MemoryStream ms new MemoryStream Document d new
  • 在 shell 脚本中连接命令字符串

    我正在维护一个现有的 shell 脚本 它将命令分配给 shell 脚本中的变量 例如 MY COMMAND bin command dosomething 然后接下来 它通过执行以下操作将 参数 传递给 MY COMMAND MY ARG
  • Zend 框架 PDF 问题

    又是我 伙计们 我有一个小问题 Create new PDF pdf new Zend Pdf Add new page to the document page pdf gt newPage Zend Pdf Page SIZE A4 p
  • 当我从本地计算机更改为虚拟主机时,从 python 脚本调用 pdftotext 不起作用

    我编写了一个小的 python 脚本来解析 提取 PDF 中的信息 我在本地机器上测试了它 我有 python 2 6 2 和 pdftotext 版本 0 12 4 我正在尝试在我的虚拟主机服务器 dreamhost 上运行它 它有 py
  • 如何将 bash 脚本的整个输出保存到文件

    我正在尝试将 bash 脚本的整个输出保存到文件中 我目前在代码开头有一个参数 ip 地址 如下所示 bin bash USAGE Usage 0
  • 主目录 不允许下载媒体

    尝试将 PDF 文件保存在下载目录中 但之后getExternalStoragePublicDirectory在 Android Q 后完全弃用 无法将文件保存在 DCIM 或 Pictures 文件夹之外的任何其他位置 因为尝试在此处保存
  • 使用 PHP 创建图表并导出为 PDF

    我正在寻找有关使用 PHP 创建图表的建议 我还希望能够将这些图表导出到 PDF 文档 我目前正在使用谷歌图表 但我不喜欢将我的所有信息发送到谷歌的想法 我更喜欢自己的托管解决方案 我见过很多 Flash 解决方案 但我不知道有什么方法可以
  • 如何制作一个 bash 脚本来同时创建 40 个程序实例?

    我是新来的bash and Linux 我编写了一个程序 我想创建多个同时实例 现在 我通过打开 10 个新终端 然后运行该程序 10 次 我运行的命令是php home calculatedata php 使用 bash 脚本执行此操作的
  • 如何判断 Bash 中是否存在文件?

    这会检查文件是否存在 bin bash FILE 1 if f FILE then echo File FILE exists else echo File FILE does not exist fi 我如何只检查文件是否存在not ex
  • 对目录中的所有文件执行命令

    有人可以提供执行以下操作的代码 假设有一个文件目录 所有这些文件都需要通过程序运行 该程序将结果输出到标准输出 我需要一个脚本 该脚本将进入一个目录 对每个文件执行命令 并将输出连接到一个大输出文件中 例如 要在 1 个文件上运行命令 cm
  • 如何在 Linux shell 中将十六进制转换为 ASCII 字符?

    假设我有一个字符串5a 这是 ASCII 字母的十六进制表示Z 我需要找到一个 Linux shell 命令 它将接受一个十六进制字符串并输出该十六进制字符串代表的 ASCII 字符 所以如果我这样做 echo 5a command im
  • 编码员的 PDF 规范:Adobe 还是 ISO?

    我想编写一个可以读取和解码 pdf 文档的应用程序 现在我应该在哪里获取此文件格式的规格 PDF 格式是由 ISO 组织标准化的 但我不清楚哪里是获取此类信息的最可靠来源 什么是开始使用这种文件格式的好来源 您实际上可以使用您提到的两个来源

随机推荐