Java 使用FileOutputStream创建UTF-8 PDF文件
我在这段java代码中使用JasperReports和DynamicReports来创建一个包含utf-8字符的pdf格式的报告,问题是生成的pdf文件根本不包含utf-8字符,就像它们被替换为“”一样。在使用OutputStream创建utf-8文件时,有什么需要注意的吗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
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)代码>AFileOutputStream
完全不知道写入其中的“内容”。它只写字节。如果字符被删除或损坏,那么这是由生成要写入流的字节的内容引起的
在这种情况下,我的钱就在您在运行此代码之前配置/使用了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可以解决问题,但如何:)教程链接已断开。