PDFdictionary and unicode (and Java)



我有一个文本编辑程序。它将创建的文档导出为PDF。

它还将一系列字符串保存到PDFDictionary中,使其能够重新打开创建的文档。

对于PDF和我的程序中的字体,我使用BookAntiqua,从我的Win7系统中提取.ttf。它可以毫无问题地显示软管字体。

然而,我有一个问题。我的用户将使用的字符将是šdjčćž和ŠderČßž。

当我第一次在程序中输入它们时,它们会正确显示。当我将其保存为PDF并用Adobe Reader打开时,它们会正确显示。然而,当我将PDF加载回我的程序时,它们要么显示为⎕,要么根本不显示。

我想问题出在我填充PDFDictionary的方式上。我试着做一些类似string.replace("Ž", "/u017D");string.replace("Đ", "u017D");的事情,但无济于事。从eclipse打开我的PDF,我注意到它并没有像这样保存"ž":"/u0017D",而是像这样保存,而且其他一些有问题的字母也不见了(在PDFDictionary中,所有这些)。

我想知道的是如何将例如字符"ž"打印到PDFDictionary中,这种方式一旦被我的程序读取,就会在例如JTextArea中显示为字符"Ž"。

编辑:所有PDF处理都是用iText完成的!

代码:

保存时:

PDFobject = new PdfString("šđčćž ŠĐČĆŽ");
PDFName index =  new PdfName("1");
dictionary.put(index, object);

打开(加载)时:

PDFName index = new PdfName("1");
PDFObject line = dictionary.get(index);
String string = line.toString();
JTextArea abc= new JTextArea();
abc.setText(string);

如果把一行改成这样:PDFobject = new PdfString("šđčćž ŠĐČĆŽ", "UTF-8");,我仍然会得到一些随机的胡言乱语作为输出。。。

您需要正确地对字符进行编码。Unicode是Java和PDF共享的标准。我建议您将文本明确编码为UTF-8,这样两者都可以处理它

(IDE)编辑器使用编码,java编译器使用编码。两者都必须设置为相同的编码。我使用UTF-8进行国际支持。然后编译后的java(.class,.jar)在内部使用Unicode。

确保正确编码的另一种方法是使用类似u017D的Unicode转义。

iText有自己的编码。然后是必须能够显示字符的字体。iText可以使用PDF自己的字体之一,也可以使用嵌入式字体(使用的子集会增加PDF的大小)。

没有答案,但我认为您需要查看iText API、DocumentFont、charExists,例如使用createFont中的字符编码或类似内容。

最新更新