Crystal report使用Java为日语字符发布PDF字体
我使用crystal report生成不同格式的文件(pdf、excel、word)。发送电子邮件时导出的.rpt文件。我在以PDF附件形式发送电子邮件时遇到问题。日语字符显示为方框。当我作为Excel或Word附件发送时,我能够看到日文字符 为了解决这个问题,我在谷歌上搜索了一下,发现这是crystal report导出为PDF时的字体问题,我们需要为日文字符提供“MS哥特式”字体。我在“crystal reposrt designer”的某个特定领域尝试了同样的方法,现在效果很好 但这并不是我想要的解决方案,因为有数千个报告(.rpt文件),每个报告中都有许多字段,所以对每个报告中的每个字段都这样做是不可行的 所以我想在我的java代码for.pdf文件中以编程方式实现它Crystal report使用Java为日语字符发布PDF字体,java,asp.net,crystal-reports,crystal-reports-server,Java,Asp.net,Crystal Reports,Crystal Reports Server,我使用crystal report生成不同格式的文件(pdf、excel、word)。发送电子邮件时导出的.rpt文件。我在以PDF附件形式发送电子邮件时遇到问题。日语字符显示为方框。当我作为Excel或Word附件发送时,我能够看到日文字符 为了解决这个问题,我在谷歌上搜索了一下,发现这是crystal report导出为PDF时的字体问题,我们需要为日文字符提供“MS哥特式”字体。我在“crystal reposrt designer”的某个特定领域尝试了同样的方法,现在效果很好 但这并不是
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();
}
我仍然在用那些方块来代替日本汉字。我需要帮助。我认为modify方法需要一些更改。我认为这不会以编程方式工作。在我们公司,我们还得出结论,我们必须改变报告的字体-( 此外,我不建议它以编程的方式进行。每种字体都是不同的。当我获取一份报告并将所有字段从“Tahoma”更改为“Verdana”时,这些字段会被替换,变为长、重叠等等。 同样的情况也可能发生在这里
也许你不必更改所有千份报告。也许只有那些包含日语字符的字段并且经常使用的报告。是的,这是正确的,所有报告的字体都会更改,而不管语言如何。我还告诉我的客户使用“crystal report server”更改他们希望使用日文/中文字符的任何特定字段的字体。因为我没有找到不进行代码更改的任何其他解决方案,如果代码更改,那么这就是问题所在。