Java iTextPDF不显示XMLWorkerHelper中的日文字符

Java iTextPDF不显示XMLWorkerHelper中的日文字符,java,pdf,itext,Java,Pdf,Itext,我正在尝试使用iTextPDF的XMLWorkerHelper生成一个PDF文件。最初,我使用ApacheVelocity模板生成HTML代码(因此使用XMLWorkerHelper),但对于这个问题,我只提供一个简单的HTML行,其中包含日语字符 public class iTextJapChars { /** * @param args * @throws IOException */ public static void main(String[] args) throws IO

我正在尝试使用iTextPDF的XMLWorkerHelper生成一个PDF文件。最初,我使用ApacheVelocity模板生成HTML代码(因此使用XMLWorkerHelper),但对于这个问题,我只提供一个简单的HTML行,其中包含日语字符

public class iTextJapChars {

/**
 * @param args
 * @throws IOException 
 */
public static void main(String[] args) throws IOException {
    // TODO Auto-generated method stub
    FileOutputStream fos = new FileOutputStream("iTextJapChars.pdf");
    (new iTextJapChars()).generate(fos);
    fos.close();
    System.out.println("done!");
}

public void generate(OutputStream os) throws IOException
{
    // create a document
    Document document = new Document();

    try
    {
        String content = "<html><head></head><body><div><p>begin てすと end</p></div></body></html>";
        InputStream stream = new ByteArrayInputStream(content.getBytes("UTF-8"));
        System.out.println(content);
        System.out.println(Charset.defaultCharset());

        // create a writer with an output stream passed as an argument
        PdfWriter writer = PdfWriter.getInstance(document, os);
        document.addTitle("身 元 保 証 書");
        document.addAuthor("れお");
        document.addSubject("");
        document.addKeywords("iText, PDF");
        document.addCreator("test.iTextPDF.generate() using iText");

        document.open(); // open the document now

        XMLWorkerHelper.getInstance().parseXHtml(writer, document, stream);

    }
    catch (DocumentException de) { throw new IOException(de.getMessage()); }
    finally { document.close(); } // close the document
}
公共类iTextJapChars{
/**
*@param args
*@抛出异常
*/
公共静态void main(字符串[]args)引发IOException{
//TODO自动生成的方法存根
FileOutputStream fos=新的FileOutputStream(“iTextJapChars.pdf”);
(新的iTextJapChars())。生成(fos);
fos.close();
System.out.println(“完成!”);
}
public void generate(OutputStream os)引发IOException
{
//创建文档
文档=新文档();
尝试
{
String content=“开始 てすと 结束

”; InputStream=新的ByteArrayInputStream(content.getBytes(“UTF-8”); 系统输出打印项次(内容); System.out.println(Charset.defaultCharset()); //使用作为参数传递的输出流创建编写器 PdfWriter writer=PdfWriter.getInstance(文档,操作系统); 文件。添加标题(“身 元 保 証 書"); document.addAuthor(“れお"); 文件。添加主题(“”); document.addKeywords(“iText,PDF”); document.addCreator(“test.iTextPDF.generate(),使用iText”); document.open();//现在打开文档 XMLWorkerHelper.getInstance().parseXHtml(编写器、文档、流); } catch(DocumentException de){抛出新的IOException(de.getMessage());} 最后{document.close();}//关闭文档 }
问题是,我无法使生成的PDF文件显示日语字符。它只显示空白。以下是需要注意的事项:

  • CentOS 6.4
  • iTextPDF 5.4.3
  • XMLWorker 5.4.1
  • AdobeReader9.5.5
希望您能在这里帮助我,因为我已经在网上搜索了一个多星期了,我无法使用XMLWorkerHelper获得任何解决方案。如果我遗漏了任何信息,或者我提到了错误的信息,请告诉我,以便我可以更新。任何帮助都将不胜感激

非常感谢。

试试这个

XMLWorkerHelper.getInstance().parseXHtml(writer, document, stream,Charset.forName("ISO-8859-1"));

尝试以下逻辑,它应该会工作

XMLWorkerHelper.getInstance().parseXHtml(writer, document, stream, Charset.forName("UTF-8"));
请检查Adobe Reader 9.5.5是否能够使用红色日语字符,如果无法从“”安装语言支持

Adobe Reader将采用操作系统/计算机中的显示语言。下面给出的链接将显示为windows 7设置的语言

您没有定义
FontProvider
,因此XML工作者只能使用标准的Type 1字体
Helvetica
,而该字体不知道如何绘制中文、日文、韩文等字符。请定义
FontProvider
,并确保提供适当的字体程序。您好,布鲁诺爵士,非常感谢您的帮助即时回复。很荣幸。我现在正试图定义一个FontProvider来让它工作。我正在运行CSSResolver等。一旦它工作了,我会更新你的。非常感谢!嗨,布鲁诺爵士,很遗憾,我仍然无法让它工作。我在这方面相当新,我不知道我必须使用什么函数。我的示例是ad导致我声明
CSSResolver
CssAppliers
htmlipelinecontext
PdfWriterPipeline
htmlipeline
CssResolverPipeline
XMLWorker
。这些代码几乎没有让我在生成的PDF上显示日文字符。会吗非常感谢您向我展示一个文档,我可以在其中定义
FontProvider
以使其工作?或者任何可能有帮助的文档。提前感谢!我没有这样的示例,因为(1)我不是编写XML Worker的人;编写XML Worker的开发人员只在付费票务系统上可用,以及(2)我没有时间写关于XML Worker的新文档,因为我有太多其他事情要做。很抱歉,您必须自己做实验或询问其他人…注意到了,Bruno爵士。感谢您花时间回复。我最衷心的感谢。感谢您的回复SAN3,但它仍然没有回复日本字符rs.将尝试Bruno爵士提到的解决方案。再次感谢!正如在问题的评论中已经提到的,OP问题的一个重要原因是他没有使用非默认字体。默认字体Helvetica根本不包含日文字符的字形。不过,在解决了这个问题后,您建议正确提供对流进行编码可能有助于使代码正常工作。