如何修复 PDF 文件并嵌入丢失的字体
Posted
技术标签:
【中文标题】如何修复 PDF 文件并嵌入丢失的字体【英文标题】:How to repair a PDF file and embed missing fonts 【发布时间】:2012-10-03 04:43:58 【问题描述】:我使用pdftk
修复损坏的PDF 文件中的一些故障,但我遇到了pdftk
未解决的另一个问题(或者至少我不知道该怎么做)。
我的 PDF 文件包含基于 TrueType
字体的文本,但在创建 PDF 期间未嵌入字体。现在我想将所需的字体嵌入到现有文件中。
是否有命令行工具(如pdftk
)通过提供TTF
文件的路径来嵌入缺失的字体?
【问题讨论】:
【参考方案1】:您可以使用 Ghostscript 来嵌入缺失的字体。像这样运行命令:
gs \
-o file-with-embedded-fonts.pdf \
-sDEVICE=pdfwrite \
-dEmbedAllFonts=true \
-sFONTPATH="/path/to/ttf;/other/path/to/ttf" \
input-without-embedded-fonts.pdf
另请参阅此答案:
How do I embed fonts in an existing PDF?【讨论】:
在win32上,如果你安装了ghostScript,命令可能如下: gswin32c -sFONTPATH=C:\Windows\Fonts -o output-pdf-with-embedded-fonts.pdf -sDEVICE=pdfwrite -dPDFSETTINGS=/prepress input-pdf-where-some-fonts-are-not-embedded.pdf(在您的系统上找到 exe 文件,如果需要,可以将其添加到 PATH -- 环境变量) @Qtax:我认为不需要——这应该是嵌入字体时 Ghostscript 的默认设置。gs
在嵌入字体时默认进行字体子集化(即仅嵌入 PDF 中使用的字体的字形)。可以使用-dSubsetFonts=false
禁用。
这会破坏其中包含表单的 PDF 文件。有谁知道将保留表单的gs
标志?
@Fuhrmanator:FOSS 软件和 PDF 表单——《FOSS 缺失或吸收的重要功能列表》一书中的一长篇......【参考方案2】:
我刚刚遇到了同样的问题(在 Ubuntu 14.04 上),我找到了以下解决方案:
安装 Acrobat Reader 将“打印到文件”打印到后记文件(“foo.ps”)和“高级 -> 打印为图像” 然后在控制台上使用ps2pdf foo.ps foo.pdf
,结果是一个包含嵌入字体和原始内容的文件
中间后记文件 (650KB) 比输入文件 (56KB) 大得多,但生成的 PDF 大小又适中 (82KB)。
我不知道为什么会这样,即,
为什么“打印为图像到文件”似乎创建了图像但也保留了字体信息, 为什么 ps2pdf 会恢复此字体信息,以及 为什么生成的 PDF 中有字体,因为它应该只是一个图像,对吧?。但结果是嵌入了所有字体且大小与原始文件相似的 PDF。
【讨论】:
它只对我有用,只需打印到 ps 文件,而不将其保存为图像。 Some people complain pdf -> ps -> pdf 转换不是要走的路,但你用这篇文章认真地把我的博士论文从厄运中救了出来。 我喜欢你的方法,但在我的情况下改变了它。我不想使用 Acrobat,所以我只是使用 evince(标准 Gnome PDF 阅读器)打印到文件,选择 Post Script(不需要图像选项),然后再次使用 ps2pdf 生成的 pdf。那行得通,我不需要为其他答案(***.com/a/13131101/414075)搜索字体的路径。 直接在损坏的 pdf 上使用 ps2pdf 为我修复字体工作:ps2pdf foo.pdf foo_fixed.pdf
以上是关于如何修复 PDF 文件并嵌入丢失的字体的主要内容,如果未能解决你的问题,请参考以下文章
使用 shadowJar 和 Scala 依赖项时如何修复丢失的 conf 文件?