我的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
PARTIALLY唯一有效的方法是执行以下操作:
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 它们之间只有以下文字有区别:
Courier 10 Pitch
LM Mono 9
Nachlieli CLM
不同之处在于输出文件中的文字更粗糙。 (输入更清晰)。为了看到差异,将两个PDF文档并排放置,每个文档的缩放比例为100%。使用Ubuntu的默认Document Viewer
或Okular
时,差异很明显。
文本的其余部分是相同的
确实输入的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。
Screenshot显示输入(前GS)和输出(后GS)之间的差异。使用软件Document Viewer 3.10
(或Evince)。
答案 0 :(得分:1)
没有字体格式不是问题。类型1C只是CFF格式,它(或多或少)是类型1字体的更紧凑的表示。
您不知道您使用的操作系统,也不知道Ghostscript的版本。
如果没有例子,就无法告诉你任何事情。请将输入文件发布到我们可以查看的地方,然后我们可以帮助您。
转换为1C类型是一件简单的事情,不会影响字体的清晰度'因为两者都是矢量形式。您不会从pdfwrite中获取类型1字体,所有类型1字体都将转换为CFF(类型1C)。
NachlieliCLM未嵌入的原因是设置了EmbedAllFonts = false,而非子集并使用默认编码。需要嵌入子集输入字体,因为它几乎总是使用自定义编码,因此您无法简单地使用原始字体。
我怀疑,但在没有看到输入的情况下无法证明您的问题是由于某些PDF生成应用程序使用的命名约定不佳造成的。该子集不是唯一的,导致名称冲突。 LibreOffice是这里的罪魁祸首。
最近认为该问题得到了解决(我们现在另外使用PDF对象编号和字体名称),但由于我不知道您使用的是什么版本的Ghostscript,我无法说明是否&# 39;可能是问题所在。然而,这通常会导致不正确的字符,而不是“锐度”的损失。这很可能是由渲染图像引起的。
正如我所说,发布一个(小)示例输入文件以及从Ghostscript和pdfwrite获得的结果,可能会说更多。