将此pdf转换为图像(png或jpg)后缺少文本,但没有任何错误日志。
使用ImageMagick: 转换-密度150-质量100“ d:/t/pdf/fp.pdf” -alpha删除“ d:/t/pdf/5/fp.png”
使用Ghostscript(使用9.23和9.25版进行测试): gswin64 -dSAFER -dBATCH -dNOPAUSE -r300 -dTextAlphaBits = 4 -dGraphicsAlphaBits = 4 -sDEVICE = jpeg -sOutputFile = D:\ t \ pdf \ 123.jpg D:\ t \ pdf \ fp.pdf
任何人都知道原因以及如何解决它?谢谢。
答案 0 :(得分:1)
使用了两个CIDFonts(STSong-Light和AdobeKaitiStd-Regular),但未嵌入。这意味着必须使用替代字体。通过Ghostscript运行时,将产生以下记录:
GPL Ghostscript GIT PRERELEASE 9.26 (2018-09-13)
Copyright (C) 2018 Artifex Software, Inc. All rights reserved.
This software comes with NO WARRANTY: see the file PUBLIC for details.
Processing pages 1 through 2.
Page 1
Can't find CID font "AdobeKaitiStd-Regular".
Attempting to substitute CID font /Adobe-GB1 for /AdobeKaitiStd-Regular, see doc
/Use.htm#CIDFontSubstitution.
The substitute CID font "Adobe-GB1" is not provided either. attempting to use fa
llback CIDFont.See doc/Use.htm#CIDFontSubstitution.
Loading a TT font from %rom%Resource/CIDFSubst/DroidSansFallback.ttf to emulate
a CID font Adobe-GB1 ... Done.
Can't find CID font "AdobeKaitiStd-Regular".
Attempting to substitute CID font /Adobe-GB1 for /AdobeKaitiStd-Regular, see doc
/Use.htm#CIDFontSubstitution.
Can't find CID font "AdobeKaitiStd-Regular".
Attempting to substitute CID font /Adobe-GB1 for /AdobeKaitiStd-Regular, see doc
/Use.htm#CIDFontSubstitution.
Loading NimbusSans-Regular font from %rom%Resource/Font/NimbusSans-Regular... 71
35536 5791889 4867288 3488798 3 done.
Can't find CID font "STSong-Light".
Attempting to substitute CID font /Adobe-GB1 for /STSong-Light, see doc/Use.htm#
CIDFontSubstitution.
Loading NimbusMonoPS-Regular font from %rom%Resource/Font/NimbusMonoPS-Regular..
. 10713600 9353422 4987912 3610458 3 done.
**** Error: Executing Do inside a text block, attempting to recover
Output may be incorrect.
>>showpage, press <return> to continue<<
因此您可以看到替换了两种字体,然后是一个更具体的问题。您的PDF文件在文本块内执行了图像运算符,这是非法的。但是对我来说,输出显然是正确的。
[编辑] 这里有一些奇怪的行为。我昨晚下载了64位发行版代码并尝试了该方法,但确实看到了错误。反向频道成绩单包含以下内容:
Can't find CID font "AdobeKaitiStd-Regular".
Attempting to substitute CID font /Adobe-GB1 for /AdobeKaitiStd-Regular, see doc
/Use.htm#CIDFontSubstitution.
Loading NimbusSans-Regular font from %rom%Resource/Font/NimbusSans-Regular... 77
20460 6369217 2670672 1276767 3 done.
**** Error: can't process embedded font stream,
attempting to load the font using its name.
Output may be incorrect.
**** Error reading a content stream. The page may be incomplete.
Output may be incorrect.
Loading NimbusMonoPS-Regular font from %rom%Resource/Font/NimbusMonoPS-Regular..
. 11808228 10439970 2690872 1310356 3 done.
**** Error: Executing Do inside a text block, attempting to recover
Output may be incorrect.
**** Error: File did not complete the page properly and may be damaged.
Output may be incorrect.
Page 2
关键部分是“无法处理嵌入式字体流...。”这就是您的文本丢失的原因。
当我使用Git存储库的当前HEAD运行相同的命令行时,没有看到此错误,并且文件运行完毕。因此,看来这是一个已修复的错误。
您有两个选择;
1)如果您不介意构建代码,请克隆我们的Git存储库,打开Visual Studio解决方案文件,让VS将其更新为您的版本,然后构建Ghostscript。使用该二进制文件。
2)正如您已经发现的,不要使用SAFER。我应该警告您,这是潜在的危险设置。只要您正在处理自己创建的文件,就可以了,但是请不要使用此设置来处理来自不受信任来源的随机文件,这可能会使您容易受到攻击。
[编辑2]
这是第三个选项。从9.25开始,我们开始在Windows中交付Resource文件,就像在Linux中一样。我怀疑,如果您将-I“ c:/ program files / gs / gs9.25 / Resource / Init”添加到命令行的开头,即使-dSAFER为true,它也可以工作。
BTW在遇到问题时引用反向通道中的消息很有用,虽然可能不会告诉您太多信息,但是它对PostScript开发人员来说是有用的信息。
答案 1 :(得分:-1)
当我删除参数-dSAFER
时,丢失的文本又回来了。我不明白为什么;我在Ghostscript文档中找不到原因。
这是我的最终命令行:
gswin64 -dBATCH -dNOPAUSE -r150 -sDEVICE=jpeg -sOutputFile=D:\t\pdf\6\fp%03d.jpg D:\t\pdf\fp.pdf