[英]Use FileOutputStream to Create a UTF-8 PDF File
我正在使用 JasperReports 和 DynamicReports 和這段 java 代碼來創建一個包含 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);
下有很多代碼行jasperBuilder.toPdf(outHtml);
我已經追蹤了,但在這些行中,我的 utf-8 字符沒有被消除。 所以我猜魔鬼在outHtml = new FileOutputStream(path);
我設法解決了它。 這是字體和編碼問題。 剛剛按照教程here ,但將<pdfEncoding>UTF-8</pdfEncoding>
更改為<pdfEncoding>Identity-H</pdfEncoding>
<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>
現在我要解決另一個挑戰,使字體 URL 相對!
FileOutputStream
與寫入其中的“東西”完全無關。 它只是寫入字節。 如果字符被消除或損壞,那么這是由生成要寫入流的字節引起的。
在這種情況下,我的錢將用於您在運行此代碼之前配置/使用jasperBuilder
對象的方式。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.