Android PDF Writer(APW)波兰语字符编码
在用于创建PDF文件的Android PDF Write(APW)(链接到库:)中,我遇到了波兰语字符的问题。我正在寻找解决方案或调整库修复此问题 波兰语字符集(请注意波兰语为拉丁语2): 在XObjectImageClass中,我从:Android PDF Writer(APW)波兰语字符编码,android,pdf,Android,Pdf,在用于创建PDF文件的Android PDF Write(APW)(链接到库:)中,我遇到了波兰语字符的问题。我正在寻找解决方案或调整库修复此问题 波兰语字符集(请注意波兰语为拉丁语2): 在XObjectImageClass中,我从: public static String ENCODING = "ISO-8859-1"; 致: 在标准字体中,我添加了: public static final String ISO8859_2 = "ISO8859-2"; 我试着把这个组合放进去: my
public static String ENCODING = "ISO-8859-1";
致:
在标准字体中,我添加了:
public static final String ISO8859_2 = "ISO8859-2";
我试着把这个组合放进去:
mypdf.setFont(StandardFonts.SUBTYPE,StandardFonts.COURIER,StandardFonts.ISO8859_2);
outputToFile("my.pdf",pdfcontent,"ISO-8859-2");
它还不起作用。请帮助我在库中添加其他调整,以便正确运行波兰语字符。Android PDF Write(APW)仅用于在预定义编码中使用标准的14种字体(MacRomanEncoding、MacExpertEncoding或WinAnsiEncoding),请参见下文
如果您查找这些编码的定义(附录D.2拉丁字符集和编码以及附录D.4专家集和MacExpertEncoding中),您将看到您的字符“至少不是全部,我只是取样)不存在于这些编码中
此外,PDF查看器只需提供给定编码中的标准14字体(请参阅中的第9.6.2.2节标准1型字体(标准14字体))。因此,您不能指望PDF查看器能够可靠地使用这些字体显示您的字符
因此,如果您需要这些字符,您必须扩展APW以允许不同的字体和编码,或者切换到不同的PDF创建库。
只有标准的14种字体
我在上面声称:
Android PDF Write(APW)仅用于使用标准的14种字体
这是因为在类页面中使用以下代码生成字体词典
public void setFont(String subType, String baseFont) {
IndirectObject lFont = mDocument.newIndirectObject();
mDocument.includeIndirectObject(lFont);
lFont.setDictionaryContent(" /Type /Font\n /Subtype /" + subType + "\n /BaseFont /" + baseFont + "\n");
mPageFonts.add(lFont);
}
public void setFont(String subType, String baseFont, String encoding) {
IndirectObject lFont = mDocument.newIndirectObject();
mDocument.includeIndirectObject(lFont);
lFont.setDictionaryContent(" /Type /Font\n /Subtype /" + subType + "\n /BaseFont /" + baseFont + "\n /Encoding /" + encoding + "\n");
mPageFonts.add(lFont);
}
正如您看到的,只创建了条目类型、子类型、基本字体,以及可选的编码。如果在中查找第9节文本中与字体相关的子部分,您将看到,对于标准14字体以外的字体,需要更多条目
因此,APW仅正确支持标准的14种字体
仅预定义编码(MacRomanEncoding,MacExpertEncoding,或WinansionCodeing)
我在上面声称:
Android PDF Write(APW)仅用于。。。预定义的编码(MacRomanEncoding,MacExpertEncoding,或WinansionCodeing)
正如您在上面引用的代码中所看到的,如果选择了编码,则可以使用“\n/encoding/”+encoding+“\n”
,并且前面的“/”
表示编码是一个PDF名称,而不是PDF字典
根据规范
编码名称或
词典
(可选)字体字符编码的规范(如果不同)
从它的内置编码。编码值应为
预定义编码的名称(MacRomanEncoding,
MacExpertEncoding,或WinAnsionCodeing,如附件所述
D) 或一个编码字典,该字典应规定与
字体的内置编码或指定的预定义编码(请参阅
9.6.6,“字符编码”)
(表111–类型1字体词典中的条目-)
这只允许宏编码,
MacExpertEncoding,或winansioncoding。(由于PDF查看器自带用于标准14种字体的单独字体程序,您不能依靠内置编码以任何可靠的方式帮助您。)您是否确保您的波兰字符在WIN_ANSI_编码中表示?关于APW,你还应该考虑提到的bug。
mypdf.setFont(StandardFonts.SUBTYPE,StandardFonts.COURIER,StandardFonts.ISO8859_2);
outputToFile("my.pdf",pdfcontent,"ISO-8859-2");
public void setFont(String subType, String baseFont) {
IndirectObject lFont = mDocument.newIndirectObject();
mDocument.includeIndirectObject(lFont);
lFont.setDictionaryContent(" /Type /Font\n /Subtype /" + subType + "\n /BaseFont /" + baseFont + "\n");
mPageFonts.add(lFont);
}
public void setFont(String subType, String baseFont, String encoding) {
IndirectObject lFont = mDocument.newIndirectObject();
mDocument.includeIndirectObject(lFont);
lFont.setDictionaryContent(" /Type /Font\n /Subtype /" + subType + "\n /BaseFont /" + baseFont + "\n /Encoding /" + encoding + "\n");
mPageFonts.add(lFont);
}