我有一个PDF文件,我想将其转换为PS文件,然后执行以下命令
# file d00137-001
/var/spool/cups/d00137-001: PDF document, version 1.4
# gs -dBATCH -dNOPAUSE -q -sDEVICE=ps2write -sOutputFile=d00130 d00137-001
然后,我看到很多错误输出:
**** Error: File has an unbalanced >> (close dictionary).
Output may be incorrect.
**** Error: obj definition followed by multiple tokens, attempting to recover.
Output may be incorrect.
**** Error: obj definition followed by multiple tokens, attempting to recover.
...... /* Skip 11 lines of the same output */
**** Error: Tf refers to a resource key with an invalid value type: marktype. Assuming resource key: F7 is a font name.
Output may be incorrect.
**** Error: Tf refers to a resource key with an invalid value type: marktype. Assuming resource key: F7 is a font name.
Output may be incorrect.
...... /* Skip 11 lines of the same output */
# file d00130
/var/spool/cups/d00130: PostScript document text conforming DSC level 3.0, Level 2
# ls -l d00130 d00137-001
-rw-r--r-- 1 root root 203745 3月 15 14:27 d00130
-rw-r----- 1 root lp 6565 3月 15 14:27 d00137-001
但是当我通过证据查看或通过HP打印机进行打印时,我看到d00130是空白文档。 PDF文件格式是否存在问题,还是需要调整命令参数?但是可以打开原始PDF文件进行查看或打印。
非常感谢。
如果您需要原始的PDF文件,可以留下您的电子邮件,我会发送给您。
再次感谢。
答案 0 :(得分:0)
我认为这个问题是gs找不到我使用的中文字体。
这似乎很有可能。如果Ghostscript找不到字体,则它将使用替代品替换丢失的字体。根据多种因素,它将选择它认为合适的字体。我不会声称无法克服它,而是会出错,但是对我来说似乎不太可能。
此字体路径为/usr/share/fonts/truetype/yozo/yzdwkj6.ttf,我尝试添加它 /usr/share/ghostscript/9.22/Resource/Init/cidfmap的字体,
好,所以它不是 Font ,也不是 CIDFont ,两者之间存在显着差异。
但PDF文件具有 在下面的行:/ BaseFont / Yozo Kai。我该怎么做,说明信息是>两字字体?
我假设您的意思是2字节编码。答案是您只需要添加一个名为“ Yozo Kai”的CIDFont。但是,...在字体名称中使用空格是一个非常糟糕的主意,因为空格是PostScript和PDF中的定界符,因此您在上面发布的行在技术上是无效的。
PDF文件实际上不是创建包含键/BaseFont
和值/Yozo Kai
的字典,而是创建包含键/BaseFont
和值/Yozo
并带有键的字典。备用字符串Kai
留在身边。这意味着字典中没有偶数个条目,因此是非法的。在这种情况下发生的确切情况尚不确定。
请注意,由于我没有#查看PDF文件,因此我按原样说了这句话,但这是错误消息:
****错误:文件的不平衡>>(关闭词典)。 输出可能不正确。
我是正确的,条目的数量甚至没有,因此Ghostscript吃掉了结尾>>
,然后抱怨,因为它找不到结尾的字典标记。
如果我使用以下脚本描述此字体,则打印驱动程序将 输出过滤器日志失败。
/ Yozo Kai << / FileType / TrueType / Path pssystemparams / GenericResourceDir get(/usr/share/fonts/truetype/yozo/yzdwkj6.ttf) concatstrings / CSI [(GB1)5] >>;
同样的原因,您不能创建一个包含这样的空格的名称,因为空格是分隔符。在PostScript(cidfmap的定义方式)中,您可以执行以下操作:
(Yozo Kai) cvn <</FileType...... ...../CSI [(GB1) 5] >> ;
请注意,我仍然对您在其中的路径感到怀疑,因为这会将Ghostscript通用资源目录与“ usr / share / ...”串联在一起,这对我来说似乎不太正确。我怀疑您只是想/Path (/usr/share/fonts/truetype/yozo/yzdwkj6.ttf)
。
但是真正的问题是(或似乎是)您的PDF文件已损坏。在名称中嵌入带空格的字体的正确方法是:
/BaseFont /Yozo#20Kai
也就是说,您将不可用的字符(在这种情况下为空格)替换为转义字符“#”,然后在其后跟描述您要使用的ASCII字符的字节,然后继续。对于具有多字节编码名称的字体,您必须对所有“不可打印的”字符代码使用转义代码。
由于您的PDF文件没有遵循从根本上被破坏的规则,因此您应联系用于制作PDF文件的软件的创建者,并告知他们存在错误。纠正此问题的唯一方法是重新制作PDF文件。