1

我有一个小的 PDF 文件,它应该只显示字符串“Hello World!”。

不幸的是,它显示黑框而不是字符。我想字体有问题,但我不确定。

有没有办法诊断和解决这个问题?我在互联网上看到的只是做这件事和做那件事的建议,这对某些人有帮助,对其他人没有帮助(对我没有任何帮助)。对我来说,这就像在黑暗中拍摄。

这是一个具体的例子。为什么这个 PDF显示黑色方块而不是字符串Hello World

编辑

一点上下文。我正在尝试使用该wkhtmltopdf工具将简单的 HTML 转换为 PDF。这绝对令人沮丧,因为根据互联网搜索,该工具应该可以工作并且做得很好。但是这件事对我不起作用,我所做的任何事情都不会改变这一点!不幸的是,这个工具似乎是唯一将 HTML 转换为 PDF 的免费工具。这是一个巨大的遗憾。

4

3 回答 3

3

如果您想查明 PDF 是否有效或有什么问题,您可以采取一些一般步骤:

1) 在 Adob​​e Acrobat 或 Adob​​e Reader 中打开它(在桌面平台上,而不是平板设备上)。很长一段时间以来,PDF 格式归 Acrobat 所有,他们的软件处理 PDF 的方式仍然接近黄金标准。但是,有一个警告;Acrobat 在处理 PDF 文件的方式上非常非常聪明,它会忽略或主动纠正其他 PDF 引擎可能遇到的一些错误......

2)给自己一个预检工具。这些工具是为图形艺术而发明的,但也有其他应用。流行的例子是 callas pdfToolbox(警告,我隶属于这个供应商!)或您可以在 Adob​​e Acrobat Pro 中找到的“Preflight”插件(实际上也是 callas 技术)。然后专门针对 PDF/A-1b 或 PDF/A-2b 标准进行预检。

最后一点值得更多解释。您应该选择符合 PDF/A 标准的预检配置文件,因为 PDF/A(或用于存档的 PDF)标准非常挑剔。它的目标是确保 PDF 文件在 50 年后仍能以完全相同的方式可读,并确保它测试文件本身和其中不同组件的所有属性。您可能可以忽略您遇到的一些错误(例如,因为其中一些错误与 PDF/A 标识不正确的事实有关)但我不会忽略任何其他错误,除非您完全了解他们的意思以及为什么他们不相关。

PS:您可以通过其他方式提供您的测试文件吗?我认为您在问题中共享的文件没用。当我执行“下载”时,我得到一个不包含文本且没有字体的 PDF 文件。你看到的那些矩形就是那个——矩形。所以这个 PDF 渲染得很好——显然是 PDF 生成过程(或者你将文件存储在 Google 文档上的事实——我真的不知道这可能会做什么)很明显。

于 2013-04-07T09:29:18.510 回答
3

除了 David 的提示(首先使用已知良好的查看器,然后使用一些预检工具),检查过程中还有第三个级别:

3) 亲眼检查 PDF,并在文本查看器中使用 PDF 规范(由 Adob​​e在此处提供)(作为第一印象)和(如果手头问题的原因不是立即可见)然后在PDF 浏览工具(用于深入分析)。

这一步一开始很麻烦,但过了一段时间你就会在 PDF 中学习。

这种 PDF 浏览器工具的一个示例是RUPS,但周围也有其他工具。

于 2013-04-07T10:52:42.613 回答
2

'小 PDF 文件应该显示“Hello World!”'

不正确。您链接到的文件不包含任何可以在屏幕或纸上呈现像素的代码,而人类大脑会将其读取为“Hello World!”。该文件确实只包含导致 12 个黑框的矢量绘图操作。

命令行工具pdffonts不指示文件中使用的任何字体:

pdffonts so-file-#15858199.pdf

什么仍然可能导致您正在寻找的单词的“渲染”:PDF 中包含的一些矢量或像素绘图代码。要了解这一点,您必须查看 PDF 的低级源代码。

原始文件为 1.570 字节。因此,这项任务看起来并不过分庞大。

“有没有办法诊断和解决这个问题?”

使用qpdf,一个“对 PDF 文件进行结构性、内容保留转换的命令行程序”,您可以展开所有包含的流(通常是压缩的):

qpdf --qdf --object-streams=disable so-file-#15858199.pdf qdf-#15858199.pdf

结果文件 ,qdf-#15858199.pdf是 3.875 字节。现在在文本编辑器中打开它。PDF 对象编号 第 6 行(第 66-219 行)包含页面的内容。第 123-194 行仅包含运算符m(moveto)、l(lineto) 和h(closepath)。这些行包含 12 组不同的绘图命令,其中每一组代表您在屏幕上渲染或打印在纸上看到的 12 个黑框之一的路径:

102.400001 12.8000001 m
268.800004 12.8000001 l
268.800004 179.200002 l
102.400001 179.200002 l
102.400001 12.8000001 l
h

第 196 行包含

f

这是实际将黑色填充到迄今为止构造(封闭)路径中的填充运算符。其他行(我没有详细分析)中没有任何绘图可能类似于任何字形的形状。

“不幸的是,这个工具似乎是唯一将 HTML 转换为 PDF 的免费工具”

也不对。

1.

假设您的“免费”与 liberty 一样免费,那么另一种选择是HTMLDOC

HTMLDOC 不支持可以通过 CSS 分配给您的 HTML 输入的特定字体,但它在将一个或多个 HTML 文档转换为包含章节、页码、页眉和页脚等的单个 PDF 书籍方面做得很好。有关所有可用选项,请参阅其完整文档

2.

假设您的“免费”意味着与beer 一样免费,那么另一种选择(仅供私人使用)可能是PrinceXML

PrinceXML 在支持您的 HTML 文档可能使用的几乎所有 CSS 功能方面做得非常好。请参阅其文档以及PrinceXML 生成的一些示例 PDF 文件。

于 2014-04-18T21:12:57.953 回答