PDF规范:如何指定核心字体的编码?

时间:2013-06-11 17:45:39

标签: pdf pdf-generation

我正在尝试更改简单的RAW PDF文件以使用不同的字体编码(win-1257)。这是文件:

%PDF-1.4
1 0 obj <</Type /Catalog /Pages 2 0 R>>
endobj
2 0 obj <</Type /Pages /Kids [3 0 R] /Count 1>>
endobj
3 0 obj<</Type /Page /Parent 2 0 R /Resources 4 0 R /MediaBox [0 0 500 800] /Contents 6 0 R>>
endobj
4 0 obj<</Font <</F1 5 0 R>>>>
endobj
5 0 obj<</Type /Font /Subtype /Type1 /BaseFont /Helvetica>>
endobj
6 0 obj
<</Length 44>>
stream
BT /F1 24 Tf 100 100 Td (ąčęėį šąčįžė)Tj ET
endstream
endobj
xref
0 7
0000000000 65535 f
0000000009 00000 n
0000000056 00000 n
0000000111 00000 n
0000000212 00000 n
0000000250 00000 n
0000000317 00000 n
trailer <</Size 7/Root 1 0 R>>
startxref
406
%%EOF

BT / F1 24 Tf 100 100 Td(ąčęėįšąčįžė)Tj ET 此处指定带有win-1257编码字符的文本流。问题是,这些字符不会直接显示在PDF中。

如何更改此文档以使字符正确显示?有没有一种简单的方法来设置编码?我怀疑&lt;&lt; / Type / Encoding / Differences 用于重新映射字符,但是,即使我的怀疑是正确的 - 这似乎有点太难了。

感谢您一看

2 个答案:

答案 0 :(得分:3)

使用/Difference应该是最简单的方法。其他解决方案包括:

  1. 在Tj命令中重新编码字符串。
  2. 自己制作字体(非常复杂)。

答案 1 :(得分:3)

5 0 obj<</Type /Font /Subtype /Type1 /BaseFont /Helvetica>>
[...]
BT /F1 24 Tf 100 100 Td (ąčęėį šąčįžė)Tj ET
  

如何更改此文档以使字符正确显示?

除了带 /差异 /编码字典外,最有可能是将@Xinwang设置为编码的最简单方法,我想指出你可能还有一些其他问题:并非所有角色都可能在 / Helvetica 或任何其他核心标准14字体中都有一个关联的字形!

比照。规范ISO 32000-1;第9.6.2.2节命名符合PDF查看器必须具有的核心字体,并参阅附录D了解详细信息。在那个附件中你读到:

  

D.2,“拉丁字符集和编码”,描述了Adobe标准拉丁文字体的整个字符集。该字符集应由Times,Helvetica和Courier字体系列支持,这些字体系列是标准的14种预定义字体之一;

...如果你将D.2中的表格与你的角色选择进行比较,你会发现,例如只有以下小写字母 a

a a
á aacute
â acircumflex
ä adieresis
æ ae
à agrave
å aring
ã atilde

因此,该标准不要求PDF查看器提供±的单个字形表示!

但是,该表中有一个字形,可以与 a 字形结合使用以构建±

˛ ogonek

因此,您可能需要在内容流中使用两个字符 a ˛来显示±,甚至可能需要对它们之间的距离进行一些修正。

所有特殊字符的情况都类似。

因此,对于来自Helvetica的±(或任何其他特殊字符)的PDF,无法在所有观看者上正确显示,您可能需要更改内容流

话虽这么说,Adobe Helvetica字体似乎知道一个名为 aogonek 的字形;因此,如果您不关心所有PDF查看者,但主要人员就足够了,您可以通过 / 添加 /编码词典来解决 /差异