PDF压缩库/工具

2024-02-12

我正在开发一个项目来减小 PDF 的大小并对其进行压缩。我想知道市场上是否有任何非常好的工具/库(.NET)。 我确实尝试了一些工具,例如 Onstream Compression,但结果并不令人满意。


一些额外的(兆)字节可以很容易地从 PDF 中挤出。例如,是一个众所周知的“PDF32000_2008.pdf”优化够不够?文件大小为8,995,189字节。它使用对象和外部参照流,(几乎)没有图像,一切都紧凑。或者不是吗?

看一个页面字典:

Dict:9 [1 0 R]
.   /Annots Array:3
.   /Contents Stream:3 [2 0 R]
.   /CropBox Array:4
.   /MediaBox Array:4
.   /Parent Dict:4 [124248 0 R]
.   /Resources Dict:4
.   /Rotate 0 (Number)
.   /StructParents 2 (Number)
.   /Type Page (Name)

Rotate 0是默认的,为什么会有这个?什么是CropBox那里有什么用?它默认为MediaBox,并且本文档中没有页面包含CropBox以外MediaBox。为什么是MediaBox那里?它是可继承的,所有页面的大小相同,因此将其移动到页面树根!有 756 页,即冗余(或无用)信息被复制了 756 次。

看一下典型的Annotation字典:

Dict:6 [3548 0 R]
.   /A Dict:2
.   .   /S URI (Name)
.   .   /URI http://www.iso.org/iso/iso_catalogue/... (String)
.   /Border Array:3
.   .   [0] 0 (Number)
.   .   [1] 0 (Number)
.   .   [2] 0 (Number)
.   /Rect Array:4
.   .   [0] 82.14 (Number)
.   .   [1] 576.8 (Number)
.   .   [2] 137.1 (Number)
.   .   [3] 587.18 (Number)
.   /StructParent 3 (Number)
.   /Subtype Link (Name)
.   /Type Annot (Name)

本文档中有数千(也许 > 10'000?)链接注释。/Typekey 是可选的,为什么它在那里?它们是不可见的矩形,您认为它们的放置精度与点数无关吗?将其舍入为整数。

看一下典型页面内容流的片段,显示运算符的文本:

[(w)7(ed)-6( b)21(u)1(t shal)-6(l no)-6(t b)-6(e)1( ed)-6(ite)-6(d)1( un)-6(less the typef)23(aces wh)-6(ich )]TJ

字距调整小于一些价值几乎是看不见的。这value可能会有争议,这就像 JPEG 压缩质量级别 - 有些人可以接受,有些人则不同意。我认为非常保守的估计(即保留大部分质量),一般人看不到效果,就是可以省略绝对值小于10的字距调整。 (当然,必须注意保持合理性)。 (我什至没有提到有文件分数字距调整精确到小数点后 3-6 位!但不在这个文件中)

并且,通过上述优化,文件大小变为7,982,478字节。减少了一兆字节。这当然不是限制,也许还有其他隐藏得更好的优化来源。

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

PDF压缩库/工具 的相关文章

  • 如何使用PDFBOX确定文本的人工粗体样式、人工斜体样式和人工轮廓样式

    我正在使用 PDFBox 来验证 pdf 文档 检查 PDF 中存在的以下类型的文本有一定要求 人工粗体样式文本 人造斜体样式文本 人工轮廓样式文本 我在 PDFBOX api 列表中进行了搜索 但找不到此类 api 任何人都可以帮助我并告
  • 使用 Poppler Qt4 C++

    我需要在我的应用程序中使用 pdf 查看器库 我使用 C 和 QT 我下载了Poppler http poppler freedesktop org 和代码示例Poppler Qt4 界面库 http people freedesktop
  • 使用 iText 某些 pdf 文件水印不显示

    我们公司使用 iText 在一些 pdf 表格上标记一些水印文本 不是图像 我注意到 95 的表格可以正确显示水印 大约 5 则不能 我测试了一下 复制了2个原始pdf文件 一个被标记为ok 另一个不ok 然后通过一个小程序进行测试 结果相
  • 我认为 *.DDS 文件应该能够快速加载?

    好的 所以我正在尝试权衡使用各种不同纹理压缩技术的利弊 我 99 999 的时间都在使用 DirectX 为 Windows 机器编写 2D 精灵游戏 到目前为止 我已经研究了带有 alpha 修剪的纹理打包 SpriteSheets 这似
  • 如何使用 PDFBox 创建转到*上一视图*的链接?

    通过使用 PDFBox 可以轻松创建指向特定页面或页面视图的链接PDPageDestination 例如 以下代码将创建一个转到第 9 页的链接 PDAnnotationLink link new PDAnnotationLink PDPa
  • 从选定位置导入 Python 模块

    假设我有三个脚本 Main py 包含所有导入 1 py 随机脚本 2 py 随机脚本 pyinstaller F onedir Main py 80mb pyinstaller F onedir 1 py 80mb pyinstaller
  • Python PIL 由于某种原因无法打开 PDF

    所以我的程序能够打开 PNG 但不能打开 PDF 所以我这样做只是为了测试 但它仍然无法打开 甚至是一个简单的 PDF 我不知道为什么 from PIL import Image with Image open r Adams K a pd
  • 如何将 RTF 文件转换为 pdf 文件?

    如何将 RTF 文件转换为 PDF 文件 我有 adobe PDF 打印机 我应该使用它吗 如果是这样 我如何以编程方式访问它 您可以使用 PDF 打印机 但仍有一些问题需要解决 为了处理跨多个页面的文本 您需要本文 http msdn m
  • Internet Explorer 8 + 放气

    我有一个非常奇怪的问题 我真的希望有人能给出答案 因为我不知道还能去哪里问 我正在用 C 编写一个 cgi 应用程序 它由 Apache 执行并输出 HTML 代码 我自己在 C 应用程序中压缩 HTML 输出 因为我的 Web 主机由于某
  • 如何让 PDF 内容(由 Spring MVC 控制器方法提供)显示在新窗口中

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

    我正在尝试使用以下 python 代码将元数据写入 pdf 文件 from Foundation import from Quartz import url NSURL fileURLWithPath test pdf pdfdoc PDF
  • Grails 渲染 PDF 文件

    我正在尝试在网页中呈现 PDF 文件 但使用以下语法时 我得到了一个奇怪的字符组合 render file new File path to file pdf fileName myPdfFile pdf 有谁知道除了上面的行之外我还需要添
  • 如何在java中压缩/解压tar.gz文件

    谁能告诉我在java中压缩和解压缩tar gzip文件的正确方法我一直在搜索 但我能找到的最多的是zip或gzip 单独 我写了一个包装器公共压缩 http commons apache org compress called jarchi
  • 以编程方式识别 PDF 文件中的扫描文本 [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我有一个 PDF 文件 其中包含我们需要导入数据库的数据 这些文件似乎是打印的字母数字文本的 pdf
  • 无法在 Angular 10 中的“pdf-viewer”=>“ng2-pdf-viewer”中显示 blob url

    我有一个 API 它将上传的文件作为 blob 返回 当我尝试绑定时src如果使用 blob URL 则它不会显示任何内容 但是 当我尝试绑定直接 URL 时 它可以显示 PDF 文件 这是我下面给出的代码 我的 TS 代码 downloa
  • 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
  • 使用cmd批处理文件获取pdf中的页数

    我可以看到使用 C PHP 和其他语言获取 pdf 中的页数有很多问题 但我想知道使用批处理文件或 cmd 是否有一种简单的方法来获取页数 Using pdftk http www accesspdf com pdftk pdftk my
  • 主目录 不允许下载媒体

    尝试将 PDF 文件保存在下载目录中 但之后getExternalStoragePublicDirectory在 Android Q 后完全弃用 无法将文件保存在 DCIM 或 Pictures 文件夹之外的任何其他位置 因为尝试在此处保存
  • 如何在.NET中使用java.util.zip.Deflater解压缩放气流?

    之后我有一个转储java util zip Deflater 可以确认它是有效的 因为 Java 的Inflater打开它很好 并且需要在 NET中打开它 byte content ReadSample sampleName var inp
  • 十六进制字符串的运行长度编码(包括换行符)

    我正在使用以下方法实现游程长度编码GZipStreamC winforms 应用程序中的类 数据以一系列由换行符分隔的字符串形式提供 如下所示 FFFFFFFF FFFFFEFF FDFFFFFF 00FFFFFF 在压缩之前 我将字符串转

随机推荐

  • Swing Worker 模态对话框不会关闭

    我有一个 SwingWorker 线程 它启动一个模式对话框 从侦听启动的 StateValue 的属性更改侦听器 并且 swing 工作线程继续执行其工作 但是 看起来 did 方法没有被调用 因为它是在 EDT 上调用的 但 swing
  • Numpy 数组到 TFrecord

    我正在尝试通过张量流对象检测 API 训练自定义数据集 数据集包含 40k 训练图像和标签 采用 numpy ndarray 格式 uint8 训练数据集形状 2 40000 23456 和标签形状 1 0 3 我想为此数据集生成 tfre
  • 如何升级pip3?

    I want to use python3 5 for development but many times when I install the module for python 3 5 it always fails The term
  • 派生类型中的可变长度数组

    我主要使用 Python 进行科学编程 并没有大量的 Fortran 90 95 经验 对于我的一个项目 我想定义一个派生类型并为该类型重载一堆运算符 至关重要的是 我希望派生类型的变量之一成为可变长度的数组 至少 我在代码的不同部分需要两
  • 删除 tar 生成的尾随空字符

    我正在尝试压缩一些文件并通过 php passthru 命令将它们传递给用户 问题是 尽管 tar 文件应该只有 2k 大小 但它始终是 10240 有趣的数字对吗 所以我把它分解为 sh 4 1 tar czf test wc c 102
  • iPhone 上针对 RTL 语言的翻转布局

    这是我的问题 我已将我的应用程序本地化为阿拉伯语 它实际上与常规本地化略有不同 因为我有不同的目标 每种语言一个 在模拟器上 由于自动布局和约束的前导 尾随部分 视图被正确翻转 但我似乎无法在设备上获得相同的结果 AutoLayout RT
  • bash 创建带有序列号的目录

    我正在创建一个在 OS X 上运行的脚本 该脚本将由新手用户经常运行 因此希望通过每次创建一个新的目录结构并在最后一个上使用 n 1 来保护目录结构 target001下一次运行创建target002 到目前为止我有 lastDir fin
  • 重置按钮处理点击后执行 Javascript 操作

    如何立即执行某项操作after an
  • EF Core 查询存储过程映射到类型

    我有一个项目需要查询数据库并将结果返回到 Web api 有几个由数据库管理员即时创建的存储过程 它们有一个 UI 用于创建存储过程的定义及其名称 而 Web API 服务仅调用该 SP 并应返回结果 根据下面的代码 我无法将返回对象获取到
  • 我在 for 循环中使用 let 关键字给出了语法错误:意外的标识符

    我在 for 循环中使用 let 关键字 如下所示 for let methd1 in servUrl let methd methd1 for let pth1 in servUrl methd let pth pth1 app meth
  • 有没有办法使用 cron 重新启动 pm2 进程,但前提是它尚未运行?

    我想通过 PM2 重新启动我的 Node Js 应用程序 pm2 restart app js 使用 crontab 但仅当应用程序尚未运行时 例如 如果我的服务器崩溃并重新启动并且 pm2 没有重新启动 即使它正在运行 上面的命令也会重新
  • TensorFlow的map_fn仅在CPU上运行

    我在尝试获取 TensorFlow 时遇到了一个奇怪的问题map fn在我的 GPU 上运行 这是一个最小的损坏示例 import numpy as np import tensorflow as tf with tf Session as
  • Log4net 日志记录不适用于并行线程

    我在随机数上使用基本的 Parallel Foreach 循环来使用 log4net 记录数字本身 这是我在并行线程上记录 5000 条消息的代码 Logger logger new Logger var numbers Enumerabl
  • Javascript 中是否按顺序执行相等的超时?

    假设我这样做 setTimeout foo 0 setTimeout bar 0 我可以确定 foo 会在 bar 之前开始执行吗 如果我使用 1 10 或 100 的超时值代替 0 会怎么样 简单的实验表明 在超时值相等的情况下 超时目标
  • XElement 添加一个 xmlns

    我正在使用 Linq to XML 创建一个新的 XML 文件 我从现有的 XML 文件中获取该文件的某些部分 我为此使用以下代码 var v2 new XDocument new XDeclaration 1 0 utf 16 new X
  • 使用 Mongoose 更新 _id = :id 的记录

    我正在尝试使用 Mongoose 更新现有记录 插入可以 但更新不行 这是我的片段 app post submit function req res var my visit new models visits date req body
  • 在 RedShift 中将值拆分为多行

    如何将字段 例如 CSV 字符串 拆分为多行的问题已经得到解答 将值拆分为多行 https stackoverflow com questions 13159526 split values over multiple rows 然而 这个
  • 如何在Java Web应用程序中动态设置会话超时?

    我需要为我的用户提供一个 Web 界面来更改会话超时间隔 因此 不同安装的 Web 应用程序的会话超时时间可能不同 但它们的会话超时时间不同 web xml不可能不同 有没有办法以编程方式设置会话超时 以便我可以使用 例如ServletCo
  • Greasemonkey 中未定义“文档”

    不到十分钟前 我决定为 Greasemonkey 编写第一个剧本 我对此的经验为零 另外 我的 JavaScript 有点生疏了 因为自从我上次用它编写代码以来已经有一段时间了 但我不明白为什么 Greasemonkey 给我这个错误 Li
  • PDF压缩库/工具

    我正在开发一个项目来减小 PDF 的大小并对其进行压缩 我想知道市场上是否有任何非常好的工具 库 NET 我确实尝试了一些工具 例如 Onstream Compression 但结果并不令人满意 一些额外的 兆 字节可以很容易地从 PDF