python适合网站开发吗,网站建设先做后,网站图片上的分享怎么做,网站建设代码问题1: JasperReport打印出来的整个pdf文件为空白文件#xff1b; 问题2#xff1a;JasperReport定义变量后打印PDF变量为null#xff1b;
问题1原因是因为缺少数据源JRDataSource
JasperFillManager.fillReport(jasperReport, params,new JREmptyDataSource());如果你打印…问题1: JasperReport打印出来的整个pdf文件为空白文件 问题2JasperReport定义变量后打印PDF变量为null
问题1原因是因为缺少数据源JRDataSource
JasperFillManager.fillReport(jasperReport, params,new JREmptyDataSource());如果你打印的jrxml文件单纯是一些文本没有数据那么你需要在fillReport 函数传入一个空的数据源如果没有数据源生成的PDF就是空白的如下图 问题2原因是把field 和 parameter 搞混了如果只是参数那么你就定义成parameter如果是数据信息就定义成字段即可
小提示如果你需要将数据进行打印出来那么定义成field此时你的数据就是数据源JRDataSource datasource new JRBeanCollectionDataSource(dataList);
最后附上相关源码
//主函数
public static void main(String[] args){String str /Documents/work/ccount_4.jrxml; //jrxml文件地址MapString, Object params new HashMap();params.put(tenantName,ccccccc); //封装变量tenantNamepdfByJrxml(str,params); //PDF文件生成逻辑}//Jasper生产PDF文件public static String pdfByJrxml(String jrxmlPath, MapString, Object params) {try {InputStream resourceAsStream new FileInputStream(jrxmlPath);JasperDesign jasperDesign JRXmlLoader.load(resourceAsStream);JasperReport jasperReport JasperCompileManager.compileReport(jasperDesign);//fillReport 重点是这个方法如果没有数据那么需要制定空的数据源否则生成的PDF是空白的JasperPrint jasperPrint JasperFillManager.fillReport(jasperReport, params,new JREmptyDataSource());byte[] bytes JasperExportManager.exportReportToPdf(jasperPrint);testWriteLocalFile(bytes); //将PDF文件输出到本地} catch (Exception e) {logger.error(generate pdf error{}, e);}}//本地生成PDF文件public static void testWriteLocalFile(byte[] bytes){BufferedOutputStream bos null;FileOutputStream fos null;File file;String filePath /xxx/Documents/work/;try {File dir new File(filePath);if(!dir.exists()dir.isDirectory()){//判断文件目录是否存在dir.mkdirs();}file new File(filePathd.pdf);fos new FileOutputStream(file);bos new BufferedOutputStream(fos);bos.write(bytes);} catch (Exception e) {e.printStackTrace();} finally {if (bos ! null) {try {bos.close();} catch (IOException e1) {e1.printStackTrace();}}if (fos ! null) {try {fos.close();} catch (IOException e1) {e1.printStackTrace();}}}}