即使嵌入了字体并且存在/ ToUnicode,PDF也不显示字符

时间:2017-03-12 23:46:26

标签: pdf fonts adobe postscript

我在生成PDF文件时遇到问题。我使用/ ToUnicode字符映射嵌入了字体。然后我将字形ID写成文本流。

奇怪的是:我可以选择并将PDF中的文本复制到其他应用程序中粘贴文本。这适用于每个角色,甚至俄罗斯,希腊等。但是,文本不会显示在屏幕上。

以下是我的PDF结构:

PDF Structure

PDF本身位于:https://drive.google.com/file/d/0B9J8lfyB3w2PX3R3N0dfT0VhRTA/view?usp=sharing

如果我在浏览器(Firefox或Chrome)中查看此PDF文本" Hello"出现。如果我在Adobe Reader或其他文档查看器(如xpdf或Linux文档查看器)中打开此PDF,则字形不会显示。

我已将Encoding设置为Identity-H并创建了一个有效的/ ToUnicode表。我已将Font设置为CIDFontType0 /(FontDescriptor中的CIDFontType0C)。 FontFile3包含字体" Asimov"的.otf文件的完整副本,因为我想嵌入完整的字体。

Linux PDF查看器告诉我嵌入了字体:

Settings

我无法弄清楚文字没有显示的原因。我通过查找字体的字形ID来编写文本。为了让字体显示,我需要做什么?

3 个答案:

答案 0 :(得分:1)

您的(第一个)问题是名为DefaultGray,DefaultRGB和DefaultCMYK的颜色空间的定义和使用,这些名称具有特定含义。

这些空间用于将DeviceGray,DeviceRGB和DeviceCMYK中定义的颜色映射到CIE颜色空间,以便对定义进行颜色管理。您不直接使用Default *颜色空间。文本变得不可见,因为您(实际上)使用相同的颜色空间两次,一次直接使用DefaultCMYK,然后再次将生成的CMYK值映射到CIE,然后再回到RGB(用于显示)。

你应该;

  1. 将颜色空间设置为DeviceCMYK等,而不是DefaultCMYK
  2. 将命名颜色空间调用为DefaultCMYK等
  3. 以外的其他颜色空间

    我也认为,正如Jan Slabon所说,您使用的ICC配置文件有问题。

    最后,看起来字体也被破坏了,所以即使你修复了颜色空间(我通过更改内容流来使用/ DevcieCMYK来完成),文本仍然无法使用Acrobat呈现。

答案 1 :(得分:1)

FontDescriptor中的FontBBox看起来不正确: [0 1327 472912 1327]

472912似乎太大了,但第二个和第四个条目的值相同会表示此字体没有高度。

您可能还需要考虑将Ascent,Descent和CapHeight条目设置为非零值。

答案 2 :(得分:0)

问题是我在保存文档时压缩了字体。无论出于何种原因,您可能无法压缩字体流,或者PDF查看器无法再提取数据。一旦我在PDF上禁用压缩,字体就会再次出现。