Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/325.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java iText PdfDictionary编码问题?_Java_Pdf_Character Encoding_Itext - Fatal编程技术网

Java iText PdfDictionary编码问题?

Java iText PdfDictionary编码问题?,java,pdf,character-encoding,itext,Java,Pdf,Character Encoding,Itext,创建PDF文件时,我会使用以下代码将一些信息附加到该文件中,以使其对我的程序可读: PdfDictionary dictionary = new PdfDictionary(); PdfObject object; PdfName index; ArrayList<String> content = getCompactData(document); for (int i = 0; i < c

创建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=new PdfDictionary();
PdfObject对象;
PdfName指数;
ArrayList内容=getCompactData(文档);
对于(int i=0;i
打开程序时,我使用以下代码提取数据:

                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());
                }
PdfDictionary dictionary=reader.getCatalog();
PdfName指数;
PDF对象线;
ArrayList数据=新的ArrayList();
对于(int i=1;i
除了一个小细节,一切都很好。由于某些原因,诸如šđćž之类的字符没有正确地传递给进程。一旦我试图提取数据,我的程序就会混乱,无法识别字母

几点注意:

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

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

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

    而不是

    data.add(line.toString());
    
    使用

    一些背景资料:

    您使用的构造函数尝试使用pdfdocencode

    /**
     * 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
    只返回内部表示,而
    ToInocDestring
    关心编码:

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

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

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

    而不是

    data.add(line.toString());
    
    使用

    一些背景资料:

    您使用的构造函数尝试使用pdfdocencode

    /**
     * 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
    只返回内部表示,而
    ToInocDestring
    关心编码:

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

    谢谢,成功了!另外,您可能还想写一封信,将
    PdfObject
    更改为
    PdfString
    谢谢,这很有效!另外,您可能还希望编写将
    line
    PdfObject
    更改为
    PdfString