excel - 删除使用 pdfTk 创建的 pdf 中的多个嵌入字体

标签 excel pdf ghostscript embedded-fonts pdftk

有没有办法从 pdf 文件中删除多次嵌入的字体?

这是我的场景:

1) 一个程序生成多个单页 pdf 报告(查询数据库、将信息放在 Excel 模板上并以 pdf 格式导出格式化信息)

2) pdftk 将单页 pdf 合并到一个文件中。

一切正常,但生成的 pdf 的大小非常大:事实上,我注意到字体被嵌入多次(与页面数一样多:所有页面都是从同一个 excel 开始生成的)模板,字体嵌入在单个 pdf 文件中,而 pdftk 只是粘合 pdf)。有没有办法只保留每种嵌入字体的一份副本?

我尝试在从 excel->pdf 导出时将字体仅嵌入到第一页中:文件的大小急剧减小,但其他页面似乎无法访问嵌入的字体。

谢谢, 亚历山德罗

最佳答案

您可以尝试使用 Ghostscript “修复”您的 pdftk 连接的 PDF(但使用最新版本,例如 9.05)。在许多情况下,Ghostscript 能够将许多子集字体合并为更少的字体。

该命令如下所示:

gswin32c.exe ^
    -o output.pdf ^
    -sDEVICE=pdfwrite ^
    -dPDFSETTINGS=/prepress ^
     input.pdf

检查

pdffonts.exe  output.pdf
pdffonts.exe  input.pdf 

每个文件中有多少个不同字体子集的实例(pdffonts.exe 可作为小 here 的一部分使用 package of commandline tools )。

但不要提示这个过程的“速度慢”——Ghostscript 确实会完全解释所有 PDF 输入文件来完成其任务,而 pdftk 文件串联是一个简单得多的过程......

<小时/>

更新:

您可以使用 Ghostscript 来合并输入的 PDF 文件,而不是 pdftk。这可能会避免您在对 pdftk 合并文件进行后验 Ghostscript“修复”时遇到的问题。请注意,这将比“哑”pdftk 合并慢得多。然而,结果可能会让您更满意,尤其是在字体处理和文件大小方面。

这将是一个可能的命令:

gswin32c.exe ^
    -o output.pdf ^
    -sDEVICE=pdfwrite ^
    -dPDFSETTINGS=/prepress ^
     input.pdf

您可以向 Ghostscript CLI 添加更多选项,以便对合并和优化过程进行更精细的控制。

最后你必须在两个极端之间做出决定:

  • 与“快速”pdftk 生成大型输出文件相比
  • “缓慢”gswin32c.exe (Ghostscript) 生成精益输出文件。

如果您能发布一些合并过程的两种方法的一些结果(执行时间和生成的文件大小),我会很感兴趣...

<小时/>

更新 2:抱歉,我之前的版本包含拼写错误。
它不是 -sPDFSETTINGS=...,但它必须是 -dPDFSETTINGS=...(用 d 代替 s)。

<小时/>

更新3:

由于您的源文件是由模板制作的 Excel 工作表(通常不会使用很多不同的字体),因此您可以尝试使用一种技巧来确保 Ghostscript 具有所有所需的字体字形- 稍后合并 PDF:

  • 对于每种字体和字样(标准、斜体、粗体、粗斜体),将一个表格单元添加到模板工作表的打印区域左上角
  • 使用 ASCII 字母表中的所有可打印字符和标点符号填充此表格单元格: 0123456789ABCD...XYZabc...xyz:-_;°%&$§")({}[] 等。
  • 将单元格(和字体大小)设置为您想要或需要的小值,以免干扰您的整体布局。使用白色设置单元格中字符的格式(以便它们在最终的 PDF 中不可见)。

此方法有望确保您的每个 PDF 都使用相同的字形子集,从而避免您在使用 Ghostscript 合并文件时遇到的问题。 (请注意,如果您使用 Arial 和 Arial-Italic,则必须创建 2 个这样的单元格:一个使用标准 Arial 字体格式化,另一个使用斜体字体。)

关于excel - 删除使用 pdfTk 创建的 pdf 中的多个嵌入字体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10626977/

相关文章:

Ghostscript PDF 转 PNG : output is always 595x842 (A4)

php - 向现有 PDF 添加边距和裁剪标记

java - 传递字符串对象时使用 apache poi 格式化日期

arrays - 用于计算百分位数的条件数组

python - 使用 PDFMiner (Python) 处理在线 pdf 文件。对网址进行编码?

pdf - 用于按元数据管理文件的建议开源 CMS?

excel - 生成 N 个随机数,其总和为常数 K - Excel

vba - Excel:在 "kx + m"文本字符串中查找 k 和 m

css - 类 CSS 定义内的元素未使用 ITextSharp (5.5.1) XHTML 应用于 PDF

php - 检查 php imagick 中的 ghostscript 支持?