gpt4 book ai didi

java - iText PdfDictionary 编码问题?

转载 作者:行者123 更新时间:2023-11-30 06:23:43 25 4
gpt4 key购买 nike

当我创建一个 PDF 文件时,我使用以下代码将一些信息附加到它以使其对我的程序可读:

        PdfDictionary dictionary = new PdfDictionary();

PdfObject object;
PdfName index;

ArrayList<String> content = getCompactData(document);

for (int i = 0; i < content.size(); i++)
{
object = new PdfString(content.get(i));
index = new PdfName(Integer.toString(i+1));

dictionary.put(index, object);
}

writer.getExtraCatalog().putAll(dictionary);

当我打开程序时,我使用这段代码来提取数据:

                PdfDictionary dictionary = reader.getCatalog();

PdfName index;
PdfObject line;

ArrayList<String> data = new ArrayList<String>();

for (int i = 1; i < dictionary.size()-2; i++)
{
index = new PdfName(Integer.toString(i));
line = dictionary.getAsString(index);
data.add(line.toString());
}

除了一个小细节外,一切都很好。由于某些原因,诸如 čšđćž 之类的字符未正确传递到进程。一旦我尝试提取数据,我的程序就会变得困惑并且无法识别这些字母。

几点说明:

  1. 我的工作区编码是UTF-8
  2. 使用我的程序时,我可以毫无问题地输入这些字母,它们会正确显示。
  3. 我使用我知道支持这些字符的自定义 .ttf (truetype) 字体
  4. 我尝试在我提供的保存代码的最后一行之后打印出目录的内容,一切都被正确打印出来。
  5. 我还尝试在打开代码的第一个目录之前的一行打印出目录的内容,字符不显示。

所以我不知道哪里会出错。你呢?

最佳答案

您错误地使用了 PdfString 类。而不是

object = new PdfString(content.get(i));

使用

object = new PdfString(content.get(i), PdfObject.TEXT_UNICODE);

而不是

data.add(line.toString());

使用

data.add(line.toUnicodeString());

一些背景信息:

您使用的构造函数尝试使用 PDFDocEncoding:

/**
* Constructs a <CODE>PdfString</CODE>-object containing a string in the
* standard encoding <CODE>TEXT_PDFDOCENCODING</CODE>.
*
* @param value the content of the string
*/
public PdfString(String value)

您的字符 čšđćž 不存在于该编码中。

另一个构造函数允许您选择 UTF-16BE 编码:

/**
* Constructs a <CODE>PdfString</CODE>-object containing a string in the
* specified encoding.
*
* @param value the content of the string
* @param encoding an encoding
*/
public PdfString(String value, String encoding)

对于字符提取,toString 只返回内部表示,而 toUnicodeString 关心编码:

/**
* Returns the Unicode <CODE>String</CODE> value of this
* <CODE>PdfString</CODE>-object.
*
* @return A <CODE>String</CODE>
*/
public String toUnicodeString()

关于java - iText PdfDictionary 编码问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18104750/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com