'小 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 文件。