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

PDF规范:如何指定核心字体的编码?,pdf,pdf-generation,Pdf,Pdf Generation,我正在尝试将一个简单的原始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

我正在尝试将一个简单的原始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
%PDF-1.4
10 obj
endobj
20 obj
endobj
30 obj
endobj
40 obj
endobj
50 obj
endobj
60 obj
流动
BT/F1 24 Tf 100 100 Td Tj ET
尾流
endobj
外部参照
0 7
0000000000 65535 f
000000000 900万n
000000005600000N
00000001100000N
0000000 212 00000n
0000000 250百万n
0000000 317 00000n
拖车
起始外部参照
406
%%EOF
BT/F1 24 Tf 100 100 Td(ąęėįąįžė)Tj ET一行在这里指定了带有win-1257编码字符的文本流。问题是,这些字符在PDF中没有正确显示


如何更改此文档以正确显示字符?有没有简单的方法来设置编码?我怀疑使用
/Difference
应该是最简单的方法。其他解决方案包括:

  • 在Tj命令中对字符串重新编码
  • 自己制作字体(非常复杂)
  • 因此,该标准不要求PDF查看器提供您的ą的单个字形表示

    不过,该表中有一个glyph,可以与aglyph组合使用,以构建ą

    a a
    á aacute
    â acircumflex
    ä adieresis
    æ ae
    à agrave
    å aring
    ã atilde
    
    ˛ ogonek
    
    因此,您可能需要在内容流中使用两个字符,a˛,以显示ą,甚至可能需要对它们之间的距离进行一些更正

    你所有的特殊角色的情况都是相似的

    因此,为了使您的PDF文件中包含Helvetica的ą(或您的任何其他特殊角色),以便在所有观众中正确显示,您可能需要更改内容流


    话虽如此,Adobe Helvetica字体似乎知道一个名为“aogonek”的字形;因此,如果您不关心所有的PDF查看器,但是主要的查看器就足够了,那么您可能只需要添加/Encoding字典和/Differences

    如果OP自己也创建了“原始PDF”,那么重新编码也应该很容易。但从本质上讲,这三项是选项。我曾尝试使用iconv将UTF-8转换为CP1257(在PHP中),但输出结果并不像预期的那样感谢解释。我最终得出了同样的结论,adobe的标准字体根本没有我需要的字形,尽管我的系统上的Helvetica字体支持各种有趣的字符。
    ˛ ogonek