我有嵌入不同字体的 PDF。其中之一是彩色表情符号字体。由于某种未知的原因,带有表情符号的字体使我的打印软件崩溃。我发现的唯一方法是使用 gs
-dNoOutputFonts
参数将所有字体转换为轮廓。不幸的是文件变得非常大并且打印速度很慢。
然后我发现有一个 AlwaysOutline 参数应该转换为我想要的仅轮廓字体。
但是那里提供的示例对我没有任何影响:
gs -sDEVICE=pdfwrite -o out.pdf -c "<< /AlwaysOutline [/Calibri (Comic Sans) cvn] >> setdistillerparams" -f input.pdf
无论我如何尝试,我都无法制作出任何特定的字体。
出于测试目的,我使用这些字体制作了 pdf:
# extracted with pdffonts version 22.02.0
name type encoding emb sub uni object ID
------------------------------------ ----------------- ---------------- --- --- --- ---------
CIGRAP+NotoSans CID TrueType Identity-H yes yes yes 526 0
PGJSDK+DejaVuSans CID TrueType Identity-H yes yes yes 534 0
FFCMLR+NotoSansSymbols2 CID TrueType Identity-H yes yes yes 538 0
VMLNYD+NotoSans-Italic CID TrueType Identity-H yes yes yes 542 0
ZBMDWE+NotoSans-Bold CID TrueType Identity-H yes yes yes 546 0
这是 pdfalyze 实用程序的部分输出:
...
╭────────────── ─ ─ │
│ 526. Font /CIGRAP (Type0) │ │
╰─────────────── ─ ─
┌─────────────────────────┬──────────────────┐
│ sub_type │ /Type0 │
│ base_font │ /CIGRAP+NotoSans │
│ flags │ None │
│ bounding_box │ None │
│ /Length properties │ None │
│ total advertised length │ None │
└─────────────────────────┴──────────────────┘
...
然后我使用了这个命令:
gs -sDEVICE=pdfwrite -o out.pdf -c "<< /AlwaysOutline [/CIGRAP+NotoSans] >> setdistillerparams" -f input.pdf
我尝试在建议的命令中使用不同的字体名称:
/CIGRAP+NotoSans
、/NotoSans
、/CIGRAP
、CIGRAP+NotoSans cvn
、CIGRAP cvn
、(CIGRAP+NotoSans) cvn
、...
没有任何帮助。没有错误。输出 PDF 中仍然有所有相同的字体。
对任何人都有效吗?
我做错了什么?
在@KenS的帮助下我解决了我的问题。让我总结一下结果:
尝试最新版本的 Ghostscript。就我而言,它是 9.55 Linux 版本,无法正常工作。编译当前 v10.02.0 (2023-09-13) 有帮助。
某些类型的字体不仅需要声明字体名称,还需要声明字体名称及其 CMap(或编码?),如
Identity-H
。像这样:
gs -sDEVICE=pdfwrite -o out.pdf \
-c "<</AlwaysOutline [/FontName-Identity-H]>> setdistillerparams" \
-f in.pdf
/QXGYNG+CairoFont-0-0
这样的前缀,请使用不带前缀的字体:/CairoFont-0-0
。