代笔保留 PDF 输入的字体



我的ghostscript命令是:

gs 
    -dBATCH -dNOPAUSE 
    -sDEVICE=pdfwrite 
    -dColorConversionStrategy=/LeaveColorUnchanged 
    -dDownsampleMonoImages=false 
    -dDownsampleGrayImages=false 
    -dDownsampleColorImages=false 
    -dAutoFilterColorImages=false 
    -dAutoFilterGrayImages=false 
    -dColorImageFilter=/FlateEncode 
    -dGrayImageFilter=/FlateEncode 
    -sOutputFile=./merge.pdf 
    -f ./page_*.pdf

大多数命令与图像有关。

执行后,我发现字体看起来不如输入文件。
字体之间的区别如下:

输入文件之一的字体:

$ pdffonts page_3.pdf 
name                                 type              encoding         emb sub uni object ID
------------------------------------ ----------------- ---------------- --- --- --- ---------
NachlieliCLM-Bold                    Type 1            Builtin          yes no  yes     62  0
NachlieliCLM-Bold                    Type 1            Custom           yes no  yes     65  0
Courier10PitchBT-Bold                Type 1            Builtin          yes no  yes     70  0
EAAAAA+LiberationSerif               TrueType          WinAnsi          yes yes yes     27  0
NachlieliCLM-Light                   Type 1            Builtin          yes no  yes     75  0
NachlieliCLM-Light                   Type 1            Custom           yes no  yes     78  0
HAAAAA+LiberationSans-Bold           TrueType          WinAnsi          yes yes yes     42  0
IAAAAA+DejaVuSans                    TrueType          WinAnsi          yes yes yes     47  0
JAAAAA+LMMono9-Regular               Type 1            Builtin          yes yes yes     52  0
KAAAAA+LMMonoProp10-Regular          Type 1            Builtin          yes yes yes     37  0
Courier10PitchBT-Roman               Type 1            Builtin          yes no  yes     83  0
MAAAAA+LiberationSerif-Bold          TrueType          WinAnsi          yes yes yes     57  0
NAAAAA+LiberationSerif-Italic        TrueType          WinAnsi          yes yes yes     32  0

输出文件的字体:

$ pdffonts merge.pdf 
name                                 type              encoding         emb sub uni object ID
------------------------------------ ----------------- ---------------- --- --- --- ---------
LQRJGW+LiberationSerif-Bold          TrueType          WinAnsi          yes yes yes     54  0
ZAZOKA+NachlieliCLM-Light            Type 1C           Custom           yes yes yes     42  0
XFXEQZ+LiberationSerif-Italic        TrueType          WinAnsi          yes yes yes     56  0
KBCNYY+LiberationSans-Bold           TrueType          WinAnsi          yes yes yes     44  0
PPEMTT+DejaVuSans                    TrueType          WinAnsi          yes yes yes     46  0
FUVLBK+NachlieliCLM-Bold             Type 1C           Custom           yes yes yes     36  0
OQFKGW+LMMono9-Regular               Type 1C           Custom           yes yes no      48  0
ZFATCB+LMMonoProp10-Regular          Type 1C           Custom           yes yes no      50  0
WIGEDL+Courier10PitchBT-Bold         Type 1C           WinAnsi          yes yes no      38  0
AFLCKO+Courier10PitchBT-Roman        Type 1C           WinAnsi          yes yes no      52  0
QNUNTR+LiberationSerif               TrueType          WinAnsi          yes yes yes     40  0
BLSWAW+DejaVuSansMono                TrueType          WinAnsi          yes yes yes     97  0
HQDKJN+LiberationSerif               TrueType          WinAnsi          yes yes yes     99  0
SCAKLE+LiberationSerif-Italic        TrueType          WinAnsi          yes yes yes    101  0
AGALJA+NachlieliCLM-Bold             Type 1C           Custom           yes yes yes     91  0
PPEMTT+DejaVuSans                    TrueType          WinAnsi          yes yes yes    103  0
TLVEAY+LiberationSans-Bold           TrueType          WinAnsi          yes yes yes     93  0
GLOKSW+NachlieliCLM-Light            Type 1C           Custom           yes yes yes     95  0

部分工作的唯一方法是执行以下操作:

gs 
    -dBATCH -dNOPAUSE 
    -sDEVICE=pdfwrite 
    -dCompressFonts=true 
    -dSubsetFonts=true 
    -dEmbedAllFonts=false 
    -sOutputFile=./merge.pdf 
    -f ./page_*.pdf
$ pdffonts merge.pdf 
name                                 type              encoding         emb sub uni object ID
------------------------------------ ----------------- ---------------- --- --- --- ---------
LQRJGW+LiberationSerif-Bold          TrueType          WinAnsi          yes yes yes     54  0
NachlieliCLM-Light                   Type 1            Custom           no  no  yes     42  0
XFXEQZ+LiberationSerif-Italic        TrueType          WinAnsi          yes yes yes     56  0
KBCNYY+LiberationSans-Bold           TrueType          WinAnsi          yes yes yes     44  0
PPEMTT+DejaVuSans                    TrueType          WinAnsi          yes yes yes     46  0
NachlieliCLM-Bold                    Type 1            Custom           no  no  yes     36  0
EVJWAP+LMMono9-Regular               Type 1C           Custom           yes yes no      48  0
LAKFSN+LMMonoProp10-Regular          Type 1C           Custom           yes yes no      50  0
Courier10PitchBT-Bold                Type 1            WinAnsi          no  no  no      38  0
Courier10PitchBT-Roman               Type 1            WinAnsi          no  no  no      52  0
QNUNTR+LiberationSerif               TrueType          WinAnsi          yes yes yes     40  0
BLSWAW+DejaVuSansMono                TrueType          WinAnsi          yes yes yes     97  0
HQDKJN+LiberationSerif               TrueType          WinAnsi          yes yes yes     99  0
SCAKLE+LiberationSerif-Italic        TrueType          WinAnsi          yes yes yes    101  0
NachlieliCLM-Bold                    Type 1            Custom           no  no  yes     91  0
PPEMTT+DejaVuSans                    TrueType          WinAnsi          yes yes yes    103  0
TLVEAY+LiberationSans-Bold           TrueType          WinAnsi          yes yes yes     93  0
NachlieliCLM-Light                   Type 1            Custom           no  no  yes     95  0

在最后一个情况下 - 字体LMMono9不会更改,但是字体NachlieliCLM更清晰(可能是由于它没有嵌入...)。如您所见,有些字体未嵌入 - 这很糟糕。输出PDF旨在打印和共享,因此字体需要嵌入并高质量。

顺便说一句,我知道旗帜必须如此:

-dCompressFonts=true 
-dSubsetFonts=false 
-dEmbedAllFonts=true 

,但是这些旗帜的字体仍然不清晰。

我已经阅读了许多SO线程和文档,但未能找到解决方案。
我怀疑我需要输出字体为类型Type 1,而不是类型Type 1C,但不确定。


示例:

附有两个文件:input.pdf和output.pdf。
仅在以下文本中,它们之间存在区别:

  • "标题在这里(标题2)" - 字体为 Courier 10 Pitch
  • 子弹"首先"到"第六" - 字体为 LM Mono 9
    (请注意,子弹中其余的句子都很好 - 它不会改变。这意味着只有"第一"字数字的单词是改变的。)
  • 最后/底部(希伯来语)句子 - 字体为 Nachlieli CLM

区别在于,在输出文件中,文本更为总体。(输入更清晰)。为了查看差异,请将两个PDF文档并排放置,每个文件的变焦为100%。使用Ubuntu的默认Document ViewerOkular,差异很明显。其余的文本相同。
确实,输入PDF文件是使用libreoffice 4.2创建的。
输出文件是使用以下命令创建的:

gs 
    -dBATCH -dNOPAUSE 
    -sDEVICE=pdfwrite 
    -dColorConversionStrategy=/LeaveColorUnchanged 
    -dDownsampleMonoImages=false 
    -dDownsampleGrayImages=false 
    -dDownsampleColorImages=false 
    -dAutoFilterColorImages=false 
    -dAutoFilterGrayImages=false 
    -dColorImageFilter=/FlateEncode 
    -dGrayImageFilter=/FlateEncode 
    -sOutputFile=./output.pdf 
    -f ./input.pdf

我正在使用GPL Ghostscript 9.10和Ubuntu 14.04。

屏幕截图显示输入(PER-GS)和输出(后GS)之间的差异。使用软件Document Viewer 3.10(或EVINCE)。

没有字体格式不是问题。1C类型是CFF格式,它(或多或少)是1型字体的更紧凑的表示。

您不说您使用的是哪个操作系统,也不说Ghostscript。

不可能告诉您有关没有示例的事情。请在我们可以查看它的地方发布一个输入文件,然后我们可以为您提供帮助。

转换为1C型是一个简单的物质,并且不会影响字体的"清晰度",因为两者都是向量形式。您不会从pdfwrite中获得1型字体,所有类型1字体均转换为CFF(类型1C)。

nachlieliclm未嵌入的原因是设置了embedallfonts = false,它不是子集,并且使用默认编码。子集输入字体需要嵌入,因为它几乎总是使用自定义编码,因此您不能简单地使用其位置的原始字体。

i 可疑,但无法在没有看到输入的情况下证明您的问题是由于某些PDF生产应用程序使用的命名差差。该子集不是唯一的,导致名称碰撞。libreoffice在这里是已知的罪魁祸首。

最近相信这个问题(我们现在还使用PDF对象号以及字体名称),但是由于我不知道您正在使用哪种版本的ghostscript,所以我不能说这是否可能是问题。但是,通常会导致不正确的字符,而不是"清晰度"的损失,这很可能是由于呈现图像而引起的。

正如我所说,发布一个(小)示例输入文件以及您从ghostscript和pdfwrite获得的结果,并且可能会说更多。

我不知道您的问题是如何当前的导致不陈述和毫无疑问的字符。我解决了将输入使用的所有字体放在特定文件夹中的所有字体,然后用以下参数调用Ghostscript:

gs -sFONTPATH=<my_folder> 
   -dEmbedAllFonts=true 
   -sOutputFile=<my_output>.pdf 
   <my_input>.pdf 

输入和输出PDF之后匹配!顺便说一句:我正在使用GS 9.25.0

进行潮流

最新更新