4

我正在尝试更改一个简单的 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 中没有正确显示。

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

谢谢你看

4

2 回答 2

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

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

除了带有/Differences的/Encoding字典很可能是将编码设置为@Xinwang 已经阐明的最简单方法之外,我想指出您可能还有一些其他问题:并非所有字符都可能在/Helvetica或任何其他核心标准 14 字体!

参照。ISO 32000-1规范;第 9.6.2.2 节列出了符合标准的 PDF 查看器必须具有的核心字体,详细信息请参阅附件 D。在该附件中,您读到:

D.2,“拉丁字符集和编码”,描述了 Adob​​e 标准拉丁文本字体的整个字符集。此字符集应支持 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 查看器,但主要的一个就足够了,您可能只需添加/Encoding字典和/Differences就可以了!

于 2013-06-12T07:45:35.847 回答
3

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

  1. 重新编码 Tj 命令中的字符串。
  2. 自己制作字体(非常复杂)。
于 2013-06-11T18:20:10.657 回答