PDFdictionary和unicode(和Java)

时间:2012-09-22 13:30:37

标签: java pdf unicode itext

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

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

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

但是,我有一个问题。我的用户将使用的字符通常是šđčćž和ŠĐČĆŽ。

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

我想问题就在于我填充PDFDictionary的方式。我试图做string.replace("Ž", "/u017D");string.replace("Đ", "\u017D");之类的事情,但它没有帮助。 从eclipse打开我的PDF,我发现不是像这样保存“Ž”:“/ u0017D”它仍然像“Ž”一样保存,并且其他一些有问题的字母丢失了(在PDFDictionary中,所有这些)。 / p>

我想知道的是如何打印例如以我的程序读取的方式将PDF格式的字符“Ž”显示在PDF文件中。 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");,我仍会得到一些随机的乱码作为输出......

2 个答案:

答案 0 :(得分:2)

您需要正确编码字符。 Unicode是Java和PDF共享的标准。我建议将文本显式编码为UTF-8,以便两者都能处理它。

答案 1 :(得分:2)

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

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

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

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