Java 使用FileOutputStream创建UTF-8 PDF文件

Java 使用FileOutputStream创建UTF-8 PDF文件,java,utf-8,jasper-reports,outputstream,dynamic-reports,Java,Utf 8,Jasper Reports,Outputstream,Dynamic Reports,我在这段java代码中使用JasperReports和DynamicReports来创建一个包含utf-8字符的pdf格式的报告,问题是生成的pdf文件根本不包含utf-8字符,就像它们被替换为“”一样。在使用OutputStream创建utf-8文件时,有什么需要注意的吗 public void toPdf(String path){ OutputStream outHtml; try { outHtml = new FileOu

我在这段java代码中使用JasperReports和DynamicReports来创建一个包含utf-8字符的pdf格式的报告,问题是生成的pdf文件根本不包含utf-8字符,就像它们被替换为“”一样。在使用OutputStream创建utf-8文件时,有什么需要注意的吗

    public void toPdf(String path){
        OutputStream outHtml;
        try {
            outHtml = new FileOutputStream(path);

            jasperBuilder.toPdf(outHtml);
        } catch (Exception e1) {
            logger.error("failed to create PDF", e1);
        }
}
值得注意的是,创建XLS和HTML文件不会遇到这样的问题


注意,
jasperBuilder.toPdf(outHtml)下有很多代码行我已经跟踪过,在这些行中没有我的utf-8字符被删除。所以我猜魔鬼就在
outHtml=newfileoutputstream(path)

A
FileOutputStream
完全不知道写入其中的“内容”。它只写字节。如果字符被删除或损坏,那么这是由生成要写入流的字节的内容引起的


在这种情况下,我的钱就在您在运行此代码之前配置/使用了
jasperBuilder
对象的路上。

我设法解决了它。这是一个字体和编码问题。刚刚学习了教程,但将font.xml中的
UTF-8
更改为
Identity-H

<fontFamilies>
  <fontFamily name="FreeUniversal">
    <normal>/home/moien/tahoma.ttf</normal>
    <bold>/home/moien/tahoma.ttf</bold>
    <italic>/home/moien/tahoma.ttf</italic>
    <boldItalic>/home/moien/tahoma.ttf</boldItalic>
    <pdfEncoding>Identity-H</pdfEncoding>
    <pdfEmbedded>true</pdfEmbedded>
  </fontFamily>
</fontFamilies> 

/home/moien/tahoma.ttf
/home/moien/tahoma.ttf
/home/moien/tahoma.ttf
/home/moien/tahoma.ttf
身份-H
真的

现在我有另一个挑战要解决,使字体URL相对

“UTF-8字符”是什么意思?UTF-8只是一种编码——它可以对所有Unicode字符进行编码。或从reportRight中删除波斯语字符。听起来很值得一看如何配置
jasperBuilder
。这将是关于这一点,而不是
FileOutputStream
。因为我正在使用dynamicreports与jasper合作,现在我正试图弄清楚dynamicreport的同事们在他们的图书馆里做了什么。谢谢你的回复。我不知道该去哪里找。那么我猜jasper的pdf生成器导致了problem@dave-这是可能的。但是(国际海事组织)问题更可能在于您使用Jasper Reports的方式。我相信Jasper Reports能够处理所有有效的Unicode字符。。。正确使用时。我与jasper没有直接关系,我使用动态报告来处理jasper报告生成@dave-再一次,我希望类似的东西能够处理所有有效的Unicode字符。检查您是如何使用它的。将UTF-8替换为Identity-H可以解决问题,但如何:)教程链接已断开。