`

IReport配合pdfjs或者pdfObject预览打印pdf

阅读更多

        弄了好些天终于把IReport配合pdfjs(html5编写的,兼容ie9+)或者pdfObjec(能兼容ie7+,但是Chrome,FireFox兼容不好)预览打印pdf的功能了,简单总结如下:

  • 存在子报表的.jrxml无法通过工具ireport-designer工具生成的,应该怎么转换成.jasper?  只有通过调用原生态的 JasperCompileManager.compileReportToFile 方法下可以转换

 

 public static void main(String[] args) {
        try {
            JasperCompileManager.compileReportToFile
                    ("E:\\work\\workspace\\bssspace\\ctg-itrdc\\ctg-itrdc-order\\ctg-itrdc-order-service\\src\\main" +
                                    "\\resources\\jasper\\template\\report1_main.jrxml",
                            "E:\\work\\workspace\\bssspace\\ctg-itrdc\\ctg-itrdc-order\\ctg-itrdc-order-service\\src" +
                                    "\\main\\resources\\jasper\\template\\report1_main.jasper");
            JasperCompileManager.compileReportToFile
                    ("E:\\work\\workspace\\bssspace\\ctg-itrdc\\ctg-itrdc-order\\ctg-itrdc-order-service\\src\\main" +
                                    "\\resources\\jasper\\template\\report_new_subreport1.jrxml",
                            "E:\\work\\workspace\\bssspace\\ctg-itrdc\\ctg-itrdc-order\\ctg-itrdc-order-service\\src" +
                                    "\\main\\resources\\jasper\\template\\report_new_subreport1.jasper");
        } catch (JRException e) {
            e.printStackTrace();
        }
    }
  • 相对应的pdfjs和pdfObjecr,请查看附件上传
  • 由于pdfjs是html5编写的第三方插件,所以不用借助PDFreader展示只需要在viewer.html加入:
<script type="text/javascript" src="../js/jquery/1.8.0/jquery-1.8.0.min.js"></script>
<script type="text/javascript" src="../js/pdfjs/compatibility.js"></script>
<link rel="resource" type="application/l10n" href="../js/pdfjs/viewer.properties"/>
<script type="text/javascript" src="../js/pdfjs/l10n.js"></script>
<script src="../js/pdfjs/viewer.js"></script>
<script src="../js/pdfjs/build/pdf.js"></script>
<script src="../js/pdfjs/debugger.js"></script>
<link rel="stylesheet" type="text/css" href="../js/pdfjs/viewer.css" />
<script type="text/javascript">

	var DEFAULT_URL = contextPath + "/receipt/outPutStream?custOrderId=100";//application/pdf类型
</script>

 把相对应的  viewer.js中的

 

var DEFAULT_URL = 'compressed.tracemonkey-pldi-09.pdf'; 替换掉

  • 如果是使用pdfObject的话,相对应的js的如下
<script src="<%=contextPath%>/js/pdfobject.js" type="text/javascript"></script>
<script type="text/javascript">
$(function(){
	
	//设置PDF文件的URL地址
// 	var pdfUrl = contextPath+"/modules/order/receipt/SpringMVC.pdf";//application/pdf类型
	
	var pdfUrl = contextPath+"/receipt/outPutStream?orderId=100";//application/pdf类型
//  	var pdfUrl = contextPath+"/receipt/exportPdf?orderId=100";//application/pdf类型
	//设置PDF预览DIV的长度和宽度
	var w = $(document).width();
	var h = $(document).height();
	$("#pdfDiv").css("width", w).css("height", h);

	//构造PDF对象
	var pdfObj = new PDFObject({ url: pdfUrl,	
		pdfOpenParams: {
		navpanes: 1,
		view: "FitV",
		pagemode: "thumbs"
	}
});
	var obj = pdfObj.embed("pdfDiv");
    if (!obj) {
//     	if(pdfObj.hasReaderActiveX()) {
			$('#pdfDiv').hide();
			window.location = pdfUrl;
//     	}
	};
})
</script>
</head>
<body>
  <div id="pdfDiv" >对不起,您还没有安装PDF阅读器软件呢,为了方便预览PDF文档,请选择安装!下载地址:
  <a href="http://dlsw.baidu.com/sw-search-sp/soft/31/12612/AdbeRdr11000_zh_CN11.0.0.379.1410747856.exe">AdbeRdr</a>安装后请重启</div>	
</body>
 

 

  • 静态文件替换成后台输出的outputstream的字节流即可;如下
   /**
     * 输出pdf
     * @return
     */
    @RequestMapping("/outPutStream")
    @ResponseBody
    public void outPutStream(HttpServletRequest request, HttpServletResponse response) {
        OutputStream outputStream = null;
        try {
            outputStream = response.getOutputStream();
            response.setContentType("application/pdf;charset=UTF-8");
            String orderId = request.getParameter("orderId");
            System.out.println("orderID:" + orderId);
            String fileName = System.currentTimeMillis() + ".pdf";
            response.setHeader("Content-Disposition", "attachment; filename=" + fileName);
            Map<String, Object> paramMap = new HashMap<>();
            byte[] data = new byte[4096];
            JRDataSource jrDataSource = new JRBeanCollectionDataSource(JavaBeanPerson.getList());
            InputStream inputStream = getClass().getResourceAsStream("/jasper/template/spring_report.jasper");
            JasperReport jasperReport = (JasperReport) JRLoader.loadObject(inputStream);
            JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, paramMap, jrDataSource);
            data = JasperExportManager.exportReportToPdf(jasperPrint);
            outputStream.write(data);
            outputStream.flush();
        } catch (Exception ex) {
            logger.error("生成回执流异常", ex);
            ex.printStackTrace();
        } finally {
            try {
                outputStream.close();
            } catch (IOException e) {
                logger.error("文件流关闭异常", e);
                e.printStackTrace();
            }
        }
    }
  •  中间填充数据的时候需要2个jar包  iTextAsian.jar   iText-5.0.5.jar  可以查看附件下载;

 

  •  spring_report.jrxml     spring_report.jasper   查看附件receipt_jasper.rar下载
  • JavaBeanPerson 测试数据
import java.util.ArrayList;
import java.util.List;

/**
 * 
 * 功能说明:iReport测试bean: Person实体类
 *
 * @author caizhilin
 * 
 * @Date 2015年5月28日 下午5:20:40
 *
 *
 * 版本号  |   作者   |  修改时间   |   修改内容
 *
 */
public class JavaBeanPerson {
    private String name;    // 姓名
    private String sex;     // 性别
    private int    age;     // 年龄
    private String hometown; // 籍贯
    private String phone;   // 电话号码
                             
    public JavaBeanPerson() {
    }
    
    public JavaBeanPerson(String name, String sex, int age, String hometown, String phone) {
        this.name = name;
        this.sex = sex;
        this.age = age;
        this.hometown = hometown;
        this.phone = phone;
    }
    
      set  get 方法 。。。。
    
    public static List<JavaBeanPerson> getList() {
        List<JavaBeanPerson> list = new ArrayList<JavaBeanPerson>();
        list.add(new JavaBeanPerson("Lily", "female", 22, "Hubei", "10086"));
        list.add(new JavaBeanPerson("Macro", "male", 33, "Beijing", "13800000000"));
        list.add(new JavaBeanPerson("Andy", "male", 44, "HongKong", "13812345678"));
        list.add(new JavaBeanPerson("Linder", "female", 28, "Guangxi", "18677778888"));
        list.add(new JavaBeanPerson("Jessie", "female", 26, "Gansu", "18219177720"));
        return list;
    }
}
  •  
  • 下图是pdfjs效果:

  • 下图是pdfObject的效果



 

  • 大小: 80.7 KB
  • 大小: 61.2 KB
分享到:
评论
1 楼 knightjames 2017-11-20  
能不能把源码发一下,谢谢

相关推荐

    ireport最全打印归纳

    iReport 最全打印归纳 iReport 是一个基于 Java 语言编写的报表引擎,用户可以按照它制定的规则编写一个 XML 文件,生成各种格式的文件,包括 PDF、HTML、XML、XLS、CSV 等。iReport 是报表的设计部分,界面设计是...

    iReport生成pdf打印的实例代码

    iReport生成pdf打印的实例代码 iReport是一款功能强大且广泛应用的报表工具,它允许开发者快速生成各种格式的报表,例如PDF、Excel、Word等。在本篇实例代码中,我们将学习如何使用iReport生成PDF打印的实例代码。 ...

    ireport导出pdf文件中文问题

    本文将深入探讨"ireport导出pdf文件中文问题"这一主题,以及如何解决这类问题。 首先,我们要理解这个问题出现的原因。在Java环境中,iReport使用了iText库来生成PDF文件。iText是一个功能强大的PDF库,但默认情况...

    iReport 4.0.1 + JasperReport 导出Html和PDF报表例子源码

    iReport 4.0.1是该工具的一个较早版本,但仍然包含了丰富的功能,例如条件样式、表达式编辑器、预览功能等。 导出报表到HTML和PDF是两个常见的需求。HTML格式便于在网络上传播和查看,而PDF格式则适合打印或保存为...

    SpringBoot+iReport打印(单张和多张)报表(包含模设计板样板与代码实现)案例

    本案例是SpringBoot结合iReport做的打印,直接在浏览器上面显示PDF,建议在Eclipse+Maven上部署运行,启动方式与SpringBoot启动方式一样,特别注意:如果你使用的SpringBoot版本比较新,相关jar包会有所不同。

    ireport jar包,可解决PDF不显示

    总的来说,"ireport jar包,可解决PDF不显示"这个问题的解决方案在于添加支持中文的jar包,这样ireport在生成PDF报表时就能正确显示中文内容,避免出现乱码或者无法显示的问题。对于使用ireport进行报表开发的开发者...

    ireport输出pdf报表例子.rar

    PDF(Portable Document Format)是一种通用的文件格式,常用于保留文档的原始格式和布局,方便跨平台查看和打印。在JasperReports中,通过调用`JasperExportManager.exportReportToPdf()`方法,可以将报表转换为...

    ireport操作手册(中文).pdf

    ### iReport操作手册知识点概述 #### 一、iReport简介 - **定义**: iReport是一款由Jaspersoft公司开发的开源报表设计工具,主要用于创建基于Java的报表。 - **功能特点**: - 支持多种数据源,如JDBC、XML、CSV等...

    jsp打印 ireport 报表,SQL2008数据库

    index.jsp传参给print.jsp打印pdf报表。相关字段在ireport中需要设置下面三个属性。pdf font name is now deprecaded:stsong-light,pdf embedded:勾选,pdf encoding:unigb-ucs2-h(chinese simplified).否则PDF会...

    ireport客户端打印

    3. **预览与打印**:设计完成后,用户可以直接在iReport中预览报表,也可以选择打印或者导出为不同格式,如PDF、HTML、Excel等。 4. **源码分析**:对于开发者,理解iReport的源码有助于深入学习其工作原理,进行...

    Java Jsp 调用ireport动态模板打印

    - 有两种常见的展示方式:预览(`JasperViewer`)和导出(如PDF、Excel等格式)。 - 对于热敏单打印,通常需要将报表转换成适合打印机的格式,例如位图,然后通过Java的`PrintService` API进行打印。 4. **热敏单...

    ireport的打印功能

    标题:"ireport的打印功能" 知识点详述: ### 一、ireport打印功能概览 #### 1. 基本步骤与所需组件 - **jar包需求**:`jasperreports-1.2.5.jar`是实现ireport打印功能不可或缺的核心组件,确保其已正确集成至...

    ireport导出pdf和word文档实例

    - PDF是一种常用于打印和在线阅读的文档格式,具有良好的跨平台兼容性。 - 在`iReport`中,设计完成后,选择“文件”-&gt;“导出”,然后选择"JasperPrint to PDF"选项,设置好导出参数,即可生成PDF文件。 4. **...

    ireport报表制作步骤详解.pdf

    5. **预览与测试**:利用iReport内置的预览功能检查报表的效果,并进行必要的调整。 6. **导出报表**:完成设计后,可以将报表模板保存为`.jrxml`文件,供后续编程使用。 #### 四、程序实现代码 使用iReport设计的...

    使用报表开发工具Ireport生成Pdf报表的总结.zip

    PDF格式适合打印和分发,因为它能保持原始设计的布局和格式。 6. **集成到Java项目**:在实际的Java应用中,通常会使用JasperReports API来动态生成报表。通过调用`JasperFillManager.fillReport()`和`...

    ireport宋体显示异常jar包

    ireport宋体显示异常,加粗失效,字体变形,加入此jar即可解决

    国产报表Ireport,pdf打印输出中文

    Ireport是一款广泛使用的报表设计工具,尤其在Java环境下,它能够与JasperReports库紧密配合,生成各种复杂的报表格式,包括PDF。然而,在处理中文字符时,可能会遇到显示问题,这主要是由于编码格式不匹配或字体...

    ireport利用jsp导出excel&pdf;报表源代码

    【标题】:“ireport利用jsp导出excel&pdf;报表源代码” 【描述】:“本人验证过的jsp代码,ireport导出pdf excel报表” 在Java Web开发中,生成各种类型的报表是常见的需求,例如用于数据分析、业务统计或者数据...

Global site tag (gtag.js) - Google Analytics