【问题标题】:PDFdictionary and unicode (and Java) [closed]PDFdictionary 和 unicode(和 Java)[关闭]
【发布时间】:2012-09-22 13:30:36
【问题描述】:

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

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

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

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

当我第一次在我的程序中输入它们时,它们会正确显示。当我将其保存为 PDF 并使用 Adob​​e 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");,我仍然会得到一些随机的乱码作为输出...

【问题讨论】:

  • 什么是 PDF 词典?如果不理解您的意思,我认为不可能做出解释。那是你的班级还是图书馆?
  • 它是一个 PDF 对象,是 PDF 的一部分。
  • 那么,当您执行“dictionary.get(index)”时,您得到了哪些确切的字符数组?例如,如果您通过将字符串 "\u017D" 保存到 PDF 文件然后从字典中再次加载它来往返传输,您是否会返回一个单字符串,其中唯一的字符是您输入的那个?或者,换一种说法,您需要先查看要保存和加载的代码点,然后找出它们呈现错误的原因。

标签: java pdf unicode itext


【解决方案1】:

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

【讨论】:

  • 我该怎么做?你能告诉我要使用哪些方法或类(或需要什么)吗?
  • 最好开始阅读有关 Unicode 的内容。我不知道您是如何创建 PDF 的。如果您使用的是 XSL-FO 或 iText,您应该能够做到。它们都支持 Unicode。
  • 我用 iText 创建它...我可以将它保存为 UTF-8,但它没有帮助,虽然它改变了一些输出(一些随机字符)...
  • 我编辑了这个问题。你的技术不起作用,你能在我的伪代码上应用其他可能有效的东西吗?
  • 这不是我的技术;这就是编码需要完成的方式。你做的不对。 docs.oracle.com/javase/tutorial/i18n/text/string.html
【解决方案2】:

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

另一种确保正确编码的方法是使用 Unicode 转义符,例如 \u017D

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

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

【讨论】:

  • +1 用于 IDE 解释,我没有告诉他(忘记了)。它影响PdfString("šđčćž ŠĐČĆŽ");!!!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-09-07
  • 2016-02-05
  • 1970-01-01
  • 2010-09-13
  • 2018-01-04
  • 2016-04-25
相关资源
最近更新 更多