jasperReport實現頁面巢狀pdf預覽
net.sf.jasperreports.engine.JasperExportManager.exportReportToPdfStream(InputStream arg0, OutputStream arg1) 能夠實現匯出pdf到輸出流,但是因為JasperExportManager的exportReportToPdfStream沒有設計字型,導致有時候實現不了粗體的功能。
檢視JasperExportManager.exportReportToPdfStream的原始碼就明白了:
public static void exportReportToPdfStream(JasperPrint jasperPrint, OutputStream outputStream)
throws JRException
{
JRPdfExporter exporter = new JRPdfExporter();
exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);
exporter.setParameter(JRExporterParameter.OUTPUT_STREAM, outputStream);
exporter.exportReport();
}
因此我們可以自己寫一段程式碼代替JasperExportManager.exportReportToPdfStream,如下
JRPdfExporter exporter = new JRPdfExporter();
Map fontsMap = new HashMap();
fontsMap.put(new FontKey("宋體", true, false), new PdfFont("STSong-Light", "UniGB-UCS2-H", true, true, false));
exporter.setParameter(JRExporterParameter.FONT_MAP, fontsMap);
exporter.setParameter(JRExporterParameter.OUTPUT_STREAM, out);
exporter.exportReport();
整個實現頁面巢狀pdf預覽的程式碼如下:
Map ireportMap = new HashMap();
ireportMap.put("clientNo", "D000000925");
ireportMap.put("clientName", "測試客戶");
ireportMap.put("barCode", "CS0100000002333");
ireportMap.put("barCodeStr", "C S 0 1 0 0 0 0 0 0 0 2 3 3 3");
ireportMap.put("ImagePath", request.getRealPath("images/logo_print.jpg"));
ClassLoader classLoader = RiskConfirmController.class.getClassLoader();
OutputStream out = null;
try {
out = response.getOutputStream(); // 獲取頁面輸出流
response.setContentType("application/pdf; charset=utf-8"); // 設定頁面型別及編碼
response.setDateHeader("Expires", 0); // 清除頁面快取
//risk_controler_confirm.jasper riskcontrolerconfirm
response.setHeader("Content-Disposition", "inline;filename="+ URLEncoder.encode("risk_controler_confirm.pdf", "utf-8")); // 設定檔名
JasperPrint jPrint = JasperFillManager.fillReport(classLoader.getResourceAsStream("risk_controler_confirm.jasper"),ireportMap, new JREmptyDataSource()); // 模板填充資料
JRDesignReportFont jrfont = new JRDesignReportFont();
//JasperExportManager.exportReportToPdfStream(jPrint, out); // 生成PDF輸出流
JRPdfExporter exporter = new JRPdfExporter();
Map fontsMap = new HashMap();
fontsMap.put(new FontKey("宋體", true, false), new PdfFont("STSong-Light", "UniGB-UCS2-H", true, true, false));
exporter.setParameter(JRExporterParameter.FONT_MAP, fontsMap);
exporter.setParameter(JRExporterParameter.JASPER_PRINT, jPrint);
exporter.setParameter(JRExporterParameter.OUTPUT_STREAM, out);
exporter.exportReport();
if (out != null){
out.flush();
}