簡體   English   中英

使用 Java 的日文字符的水晶報表 PDF 字體問題

[英]Crystal report PDF font issue for japanese characters using Java

我正在使用水晶報表生成不同格式的文件(pdf、excel、word)。 我在發送電子郵件時導出的 .rpt 文件。 我在以 PDF 附件形式發送電子郵件時遇到問題。 日文字符顯示為方框。 當我作為 Excel 或 Word 附件發送時,我能夠看到日文字符。

對於解決方案,我在谷歌搜索並得知這是水晶報表導出為 PDF 時的字體問題,我們需要為日文字符提供“MS Gothic”字體。 我在“水晶reposrt設計師”中為特定領域嘗試了同樣的事情,現在效果很好。

但這不是我想要的解決方案,因為那里有數千個報告(.rpt 文件),並且每個字段都有很多,因此對每個報告中的每個字段都這樣做是不可行的。

所以我想在我的 java 代碼中以編程方式進行。pdf 文件。

private void exportReport(HttpSession session, HttpServletRequest req, ReportClientDocument rptDoc, String sReport)
        throws Exception
    {
        String sExportType = req.getParameter("cmbExportTypes");
        
        if (sReport == null)
            sReport = (String) session.getValue("selected_report");
            
        sReport = Util.removeEndingChar(sReport, ".rpt");
        
        String sExtension = "";
        
        if (sExportType.toLowerCase().indexOf("word") != -1)
            sExtension = ".doc";
        else if (sExportType.toLowerCase().indexOf("excel") != -1)
            sExtension = ".xls";
        else if (sExportType.toLowerCase().indexOf("pdf") != -1)
            sExtension = ".pdf";
        else if (sExportType.toLowerCase().indexOf("rtf") != -1)
            sExtension = ".rtf";
        else if (sExportType.toLowerCase().indexOf("report") != -1)
            sExtension = ".rpt";
            
        String sFileName = sReport + sExtension;
        FileType file = new FileType(-1, sFileName, false);
        
        FieldObject fieldObject = new FieldObject();
        IFontColor fontColor = fieldObject.getFontColor();
        IFont iFont = fontColor.getIFont();
        iFont.setName("MS Gothic");
        iFont.setSize(9.5f);
        
        //rptDoc.getReportDefController().getReportObjectController().modify(fieldObject ,fieldObject);
        
        // 07/03/2012 EA: PR #15087  -- Support Crystal Reports 2008 SP5
        InputStream  byteIS = rptDoc.getPrintOutputController().export(ReportExportFormat.from_string(sExportType));
        EmailAttachment attachment = new EmailAttachment(byteIS, file.type, sFileName);
        session.putValue("report_attachment", attachment);
        
        rptDoc.close();
    }

我仍然用那些方盒代替日文字符。 需要幫忙。 我認為修改方法需要一些更改。

我認為這不會以編程方式工作。 在我們公司,我們也得出結論,我們必須更改報告中的字體。 :-(

另外我不建議它以編程方式進行。 每種字體都不一樣。 當我進行報告並將所有字段從“Tahoma”更改為“Verdana”時,這些字段會移位、變長、重疊等等。 同樣的情況也可能發生在這里。

也許您不必更改所有數千份報告。 也許只有那些包含帶有日文字符的字段並且經常使用的字段。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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