簡體   English   中英

使用 FileOutputStream 創建 UTF-8 PDF 文件

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM