如何解决严重渲染的PDF文件问题

时间:2013-04-07 02:23:55

标签: pdf

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

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

有没有办法诊断并解决此问题?我在互联网上看到的只是建议做到这一点并做到这一点,这对一些人有所帮助(对我没有帮助)。看起来像是在黑暗中向我射击。

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

修改

一点背景。我正在尝试使用wkhtmltopdf工具将简单的HTML转换为PDF。这是一种绝对的挫败感,因为根据互联网搜索,该工具应该可以正常工作并且做得很好。但事情does not work for me and nothing I do changes this!不幸的是,这个工具似乎是唯一可以将HTML转换为PDF的免费工具。这是一个巨大的无赖。

3 个答案:

答案 0 :(得分:3)

如果您想了解PDF是否有效或有什么问题,可以采取一些常规步骤:

1)在Adobe Acrobat或Adobe Reader中打开它(在桌面平台上,平板电脑设备)。很长一段时间,PDF格式由Acrobat拥有,其软件处理PDF的方式仍然接近黄金标准。但是,有一个警告; Acrobat在处理PDF文件的方式上非常非常智能,它会忽略或主动纠正其他PDF引擎可能出现问题的一些错误......

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

最后一点值得进一步解释。您应该选择符合PDF / A标准的预检规范,因为PDF / A(或PDF for Archival)标准非常挑剔。它的目标是确保PDF文件在50年后仍然可以完全相同的方式读取,并确保它测试文件本身及其中不同组件的所有属性。您可能可以忽略您获得的一些错误(因为其中一些错误将与PDF / A标识不正确的事实相关)但我不会忽略任何其他错误除非< / em>你完全理解他们的意思以及他们为什么不相关。

PS:你能用其他方式提供你的测试文件吗?你认为你在问题中分享的文件是没用的。当我做“下载”时,我得到的PDF文件不包含文本,也没有文字。你看到的那些矩形正好是那个 - 矩形。所以这个PDF呈现得很好 - 这是PDF生成过程(或者你将文件存储在Google文档上的事实 - 我真的不知道那可能做些什么)显然是狂暴的。

答案 1 :(得分:3)

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

3)用自己的眼睛和PDF规范(由Adobe here提供)在文本查看器中检查PDF(第一印象)和(如果手头的问题原因)然后在PDF浏览工具中(用于深入分析)。

这个步骤起初非常麻烦,但经过一段时间后,你会在PDF中学习。

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

答案 2 :(得分:2)

  

&#39;小PDF文件应该显示&#34; Hello World!&#34;&#39;

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

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

pdffonts so-file-#15858199.pdf

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

原始文件是1.570字节。所以这项任务看起来并不过分。

  

&#39;有没有办法诊断并解决此问题?&#39;

使用 qpdf &#34;命令行程序,对PDF文件进行结构化,内容保留转换&#34; ,您可以展开所有包含的流(通常是压缩的):

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

fill 运算符,用于将黑色实际填充到目前构建的(封闭的)路径中。其他行中没有任何内容(我没有详细分析)做任何可能类似于任何字形形状的绘图。

  

&#39;不幸的是,此工具似乎是将HTML转换为PDF的唯一免费工具&#39;

也不正确。

1

假设你的&#34;免费&#34;意为自由和,然后另一种选择是 HTMLDOC

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

2

假设你的&#34;免费&#34;意为免费,如啤酒,那么另一种选择(仅限私人使用)可以是 PrinceXML

PrinceXML在支持HTML文档可能使用的几乎所有CSS功能方面做得非常出色。请参阅its documentation以及PrinceXML生成的the sample PDF files部分内容。