`
zzc1684
  • 浏览: 1224557 次
  • 性别: Icon_minigender_1
  • 来自: 广州
文章分类
社区版块
存档分类
最新评论

spring mvc + jasperreports + ireport问题集锦

阅读更多
环境:
       jasperreports 5.0.0
        ireport 5.1.0



1.IReport使用自带的Adobe中文字体会出现所有字会堆叠在一起问题
  解决方法:安装自定义字体(如:windows下的字休,C:\Windows\Fonts)
  工具-选项-Fonts,如下图:


2.报表的动态对象变量($V)、参数($P)、字段($F)都要先增加后再使用


3.Detail是做数据循环使用的,只能放字段$F(这个针对Spring生成HTML预览<非导出>),否则不能显示。(在IReport中Preview时不会出这种问题)

4.在动态填充数据时,图片路径做为参数时,不能用png格式图片(可能是jasperreports 版本问题)

5.动态加载图片问题
  问题描述:当在IReport中用image控件时,如果想要图片根据所传参数动态加载,做如下图设置:

这里当你Preview时logoUrl用本地、网络路径都可以(如demo.jpg、C:\demo.jpg、http: \\ireport.test.com\images\demo.jpg)但是当在Spring生成HTML预览时图片不显示,调试一看程序总是去找 IReport编译过的img_0_0_1

解决方法:将上图的Is Lazy勾选上,如下图:



这时要注意的是,当再
Preview的时候,参数logoUrl必须用网络路径(如:http:\\ireport.test.com\images\demo.jpg)
 
1.在生成pdf时全空白

问题描述:在DEMO中生成html与pdf一切正常,但放入生产环境就出这个问题,demo与生产环境的唯一不同就是生 产环境使用的是流输出
解决方法:修改报表的属性,将When No Date 选项改为All sections, No Detial(如果detial用数据,就不会出现这种情况)


2.JavaBean数据不能绑定
问题描述:与一的情况一样,也是由于流方式数据绑定方式的问题
解决方法:

复制代码
1
2
JRDataSource jrDataSource = new JRBeanCollectionDataSource(beanData);
byte[] pdfStream = JasperRunManager.runReportToPdf(fileInputStream, parameters, jrDataSource);
要单独绑定jrDataSource,不能做为parameters传递
 
描述:在生成PDF时,如果对打开PDF后默认样式进设更改(如:缩放比例、是否显示缩略图等)

有两种方案:


第一种:采用JS(前面也提到过),推荐理由:比较简单,如下:

复制代码
1
script.append("\r\nthis.zoom=125");//缩放125%显示文档

第二种:用IText工具包

复制代码
1
2
3
4
5
//设置PDF缩放比例
PdfWriter writer = stamp.getWriter();
PdfAction ac = PdfAction.gotoLocalPage(1, new
PdfDestination(PdfDestination.XYZ, -1, -1, 1.25f), writer);//缩放125%显示文档
writer.setOpenAction(ac);

完整小例:

复制代码
1
2
3
4
5
6
PdfReader pdf = new PdfReader("abc.pdf");
PdfStamper stp = new PdfStamper(pdf, new FileOutputStream("abcout.pdf"));
PdfWriter writer = stp.getWriter();
PdfAction ac = PdfAction.gotoLocalPage(1, new PdfDestination(PdfDestination.XYZ, -1, -1, 0.1f), writer);
writer.setOpenAction(ac);
stp.close();
更多设置详见PdfWriter文档,如:PdfWriter.PageModeUseThumbs打开显示缩略图等

参考文档:
http://api.itextpdf.com/itext/com/itextpdf/text/pdf/class-use/PdfName.html
http://api.itextpdf.com/itext/com/itextpdf/text/pdf/PdfDestination.html
http://api.itextpdf.com/itext/com/itextpdf/text/pdf/PdfWriter.html

实列参考:
http://java360.blogspot.jp/2012/07/itext.html
 

spring mvc + jasperreports + ireport如何对输出的二进制文件进行缩放设置

问题描述:这个与导出PDF文件不同,不能用导出的方式来设置缩放比例,如图:


未设置前:

自动缩放:



设置后:

缩放125%



如果想让页面打开后按自已想要的缩放比例进行显示则在请求URL后加上如下对数:


复制代码
1
#page=1,2,3&zoom=125,0,612
page:页码,要进行缩放的页码
zoom:缩放比例(125),左上解的坐标(0,612)

如何快速获取以上参数:
在URL请求不加参数状态下点击“当前视图(得制或在新窗口打开)”,如图:


之后,就会在请求URL后自动加上以上参数,然后根据需要进行值的修改。
 

jasperreports+ireport web打印解决方案

web client 打印通常有以下几种方式:


1.第三方控件


    使用简单,但是都是收费(部分功能免费)而且是非开源的,对于日常用的话Lodop打印控件就够用了,且是非完全免费中最好的(功能限制是最少的)
   
2.利用PDF打印(推荐

  
使用也同样比较简单,直接输入pdf文件,然后利用pdf的打印功能,但我们的需求一般都是自动打印,而不是局限于先预览再打印,如何解决这一问题:    在jasperreportsanswers中找到这样一个问题how to add silent printing ireport PDF?其中提到了itext,在jasperreports中也有此包:iText-2.1.7.js2.jar(这里可能重新打包了,官方最新包为itextpdf-5.4.4.jar)


复制代码
1
2
3
4
5
6
7
8
PdfWriter writer = PdfWriter.getInstance(document, baos);
writer.setViewerPreferences( PdfWriter.HideMenubar | PdfWriter.HideToolbar | PdfWriter.HideWindowUI );
document.open();
                    
writer.addJavaScript(
"this.print({bUI: false,bSilent: false,bShrinkToFit: true});" +
"\r\n" +
"this.closeDoc();"

这里借助iText和Adobe AcrobatJavascript支持,可以实现PDF文档的自动打印,其中Silent printing也说明了pdf的自动打印方式:


复制代码
1
this.print({bUI: false, bSilent: true, bShrinkToFit: true});
主要就是在pdf中加入这句JS代码,其中各参数意义在AcroJSGuide(文档)或Acrobat JavaScript Scripting Reference(API)中的 Printing PDF Documents/Document Object->Documents Methods-> print

完整代码:

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
@RequestMapping(value = "/printed")
public void printed(HttpServletRequest request, HttpServletResponse response)
    throws IOException, ServletException, DocumentException{
                
    ServletContext context = request.getSession().getServletContext();
    try
    {
        //获得模板
        String reportFileName = context.getRealPath("/WEB-INF/reports/demo-report.jasper");
        File reportFile = new File(reportFileName);
        if (!reportFile.exists())
            throw new JRRuntimeException("文件 demo-report.jasper不能找到.");
              
        //设置模板中需要的参数
        Map<String, Object> parameters = new HashMap<String, Object>();
        parameters.put("parameters1", "K12013102900001");
        parameters.put("parameters2", "中文");
        parameters.put("logoUrl", context.getRealPath("/WEB-INF/reports/demo.jpg"));
                                 
        //读取模板文件
        FileInputStream fileInputStream = new FileInputStream(reportFile);
                         
        //将模板转成PDF
        byte[] pdfStream = JasperRunManager.runReportToPdf(fileInputStream, parameters);
                 
        //输出流
        PdfReader reader = new PdfReader(pdfStream);
                         
        ByteArrayOutputStream bos = new ByteArrayOutputStream(pdfStream.length);
        try {
                //给pdf加上脚本实现自动打印
                StringBuffer script = new StringBuffer();
                script.append("this.print({bUI:false,bSilent:true,bShrinkToFit:false});");
                                 
                PdfStamper stamp = new PdfStamper(reader, bos);
                stamp.setViewerPreferences(PdfWriter.HideMenubar | PdfWriter.HideToolbar | PdfWriter.HideWindowUI);
                stamp.addJavaScript(script.toString());
                stamp.close();
                             
            } catch (DocumentException e) {
                logger.error(e.getMessage(), e.getCause());
            }
                         
        //输出pdf
        byte[] bytes = bos.toByteArray();
        if (bytes != null && bytes.length > 0){
             response.setContentType("application/pdf");
             response.setContentLength(bytes.length);
             ServletOutputStream ouputStream = response.getOutputStream();
             try{
                 ouputStream.write(bytes, 0, bytes.length);
                 ouputStream.flush();
             }
             finally{
                 if (ouputStream != null){
                     try
                        {
                        ouputStream.close();
                     }
                    catch (IOException ex)
                     {
                    }
                 }
             }
        }
                         
    }
    catch (JRException e)
    {
        e.printStackTrace();
    }
}

这里会遇到中文字体问题请参见:http://bbs.apiusage.com/read/248

扩展阅坊:
AcroJSGuide(文档)  AcroJSGuide.pdf
                   Acrobat JavaScript Scripting Reference(API)AcroJSGuide.pdf
                  Digital Signatures for PDF documentsdigitalsignatures20130304.pdf
                   itext api

                   itext 所有包下载地址

                  其中Digital Signatures for PDF documents中有许多实列代码可供参考


3.利用flash打印

  
官方只是有显示例子,但去掉了打印功能

5.applet打印(只针对JAVA程序)

  
官方DEMO怎么也没调出来,预览可以,但打印无反应也不报错(总之applet有各种各样的问题)
 

【续】 jasperreports+ireport web打印解决方案

前续文章:
1. jasperreports+ireport web打印解决方案
2.spring mvc + jasperreports + ireport如何对导出PDF进行默认显示设置(setting zoom size Itext)
3.spring mvc + jasperreports + ireport如何对输出的二进制文件进行缩放设置

问题描述:


上面三篇都提到与打印有关的事项,但一直都是用虚拟打印机测试,未真正实际打印输出过,就在真正用打印机输出时,问题出来了,chrome、 firefox打出来的不清晰,但chrome要比firefox好很多,如果要求不高的话那样就可以了(我这里用的是“复写纸”),如果是激光打印机的 话,打印出来的效果完全可以了


问题原因:


firefox:本身内置PDF 查看器,采用的是PDF.JS,对中、日、韩编码支持不好


chrome本身也内置PDF 查看器“Chrome PDF Viewer”


如果是在线浏览PDF文件,不需要再安装什么PDF阅读器了,但我本身就安装了Adobe Reader(这就使得浏览器有了相应的PDF插件)、 Adobe Acrobat,即使这样,浏览器也是默认使用自已的PDF查看器


既然找到了问题,那就是如何解决问题了:


firefox:
修改默认PDF查看器:
参见:http://support.mozilla.org/zh-CN/kb/disable-built-pdf-viewer-and-use-another-viewer
  1. 点击 Firefox 窗口顶部的 Firefox 按钮并选择 选项
  2. 选择 应用程序 面板。
  3. 在列表中找到便携式文档格式 (PDF)并单击以选中它。
  4. 点击该项右侧的动作列的下拉箭头,然后选择您想使用的 PDF 查看器。




5.点击确定按钮关闭“选项”窗口

注意:之前因我安装了Adboe Acrobat破解版导致这个插件怎么都无法更新,卸载后重装或不装


chrome:
1.在地址栏中输入 chrome:plugins
2.找到Chrome PDF Viewer,点停用






至此再打印,就完全用我们所选用的PDF阅读器打印了,完全清晰可见。


注:有些JS,如缩放不起作用,也是由于浏览器自带的PDF阅读器的问题,但也不是所有的JS用了我们自已安装的PDF查看器就能执行,如 this.closeDoc() 在 web中查看PDF文档肯写也不会有作用的
 

jasperreports+irepor 生成pdf不能输出中文问题

问题描述:在用jasperreports+irepor 生成pdf时,所有显示中文的地方都是空白
解决方法:

在制作报表模板时无论是参数、字段还是静态文本都有以下三个属性:

 
Pdf font name :STSong-Light //简体宋体

Pdf Embedded : 勾选

Pdf Encoding : UniGB-UCS2-H (Chinese Simplified)
按以上红色字体进行设置即可,但这里还需要一个包iTextAsian.jar
分享到:
评论

相关推荐

    spring mvc 整合ireport

    **Spring MVC 整合 iReport 知识点详解** 在Java Web开发中,Spring MVC作为主流的MVC框架,提供了一种优雅的方式来处理业务逻辑和视图展示。iReport则是一个用于设计JasperReports报表的强大工具。将两者整合,...

    Spring MVC整合IReport生成PDF及中文不显示、乱码解决

    本篇文章将详细讲解如何在Spring MVC项目中整合IReport来生成PDF,并解决可能出现的中文不显示和乱码问题。 首先,我们需要了解Spring MVC的基本概念。Spring MVC是Spring框架的一部分,它提供了一个模型-视图-控制...

    struts+spriing+hibernate+ireport

    Struts、Spring、Hibernate 和 iReport 是经典的Java企业级开发技术栈,它们分别在MVC架构、依赖注入、持久化层以及报表生成方面扮演着重要角色。以下是对这些技术的详细解释: **Struts** Struts是Apache软件基金...

    spring MVC Web应用中集成Jasper报表工具

    总结来说,Spring MVC结合JasperReports可以实现高效的数据可视化,通过自定义数据源、报表渲染和iReport设计,开发者能够创建满足业务需求的报表系统。在整个过程中,关键在于理解报表数据源的构建、报表的填充和...

    Spring3 MVC with Japer Report Demo

    《Spring3 MVC与JasperReport整合实战》 在IT领域,Spring MVC作为Spring框架的一部分,是用于构建Web应用程序的强大工具,而JasperReport则是一款功能丰富的报表生成库,支持多种格式,如PDF、HTML、Excel等。本...

    Jasperreports6+spring5

    本文将深入探讨如何将JasperReports 6版本与Spring 5框架进行整合,尤其考虑到Spring Web 5已经移除了对JasperView的支持,这使得整合过程与以往有所不同。 首先,我们需要了解JasperReports 6的关键特性。它提供了...

    springmvc+mybatis+extjs+ireport项目源码

    **SpringMVC** 是Spring框架的一部分,主要用于构建Web应用程序的模型-视图-控制器(MVC)架构。它提供了一个灵活的请求处理机制,将业务逻辑与用户界面分离,提高了代码的可维护性和可测试性。SpringMVC通过...

    SpringMVC与iReport(JasperReports) 5.6整合开发实例

    在本教程中,我们将学习如何在一个简单的Spring MVC Web应用中集成Jasper报表工具。教程涵盖的技术点有:报表自定义数据源的使用;报表渲染、呈现的配置与实现;iReport报表设计器的使用(报表模板设计)等

    springmvc+jasperReport5.6.0

    Spring MVC + JasperReport 5.6.0 是一个强大的组合,用于在Java应用程序中生成复杂的报表。Spring MVC作为Spring框架的一部分,是构建Web应用程序的首选模型-视图-控制器架构,而JasperReport则是一个开源的报表...

    SpringMVC与iReport(JasperReports) 5.6整合开发实例 v2

    在本教程中,我们将学习如何在一个简单的Spring MVC Web应用中集成Jasper报表工具。教程涵盖的技术点有:报表自定义数据源的使用;报表渲染、呈现的配置与实现;iReport报表设计器的使用(报表模板设计)等

    ireport与java 桌面应用,web应用

    - "iReport+JasperReports教程.pdf"则可能是针对ireport和JasperReports的综合教程,适合初学者入门。 掌握ireport和JasperReports,对于提升Java应用的报表功能和用户体验至关重要。通过深入学习和实践,开发者...

    springMVC+ireport导出excl

    首先,SpringMVC是Spring框架的一部分,它是一个轻量级的、基于模型-视图-控制器(MVC)设计模式的Web开发框架。SpringMVC提供了处理HTTP请求、转发、重定向、视图渲染等能力,使得开发者可以更加专注于业务逻辑,而...

    SpringMVC+iReport多张报表连续输出案例

    首先,SpringMVC是Spring框架的一部分,它是一个基于模型-视图-控制器(MVC)设计模式的Web应用框架。SpringMVC通过将业务逻辑、控制逻辑和视图分离,提供了良好的可扩展性和灵活性。在本案例中,SpringMVC作为后端...

    java+ireport报表开发实例

    例如,将其嵌入到Spring MVC的视图中,或者通过JavaMail发送报表作为附件。 **9. 性能优化** 对于大数据量的报表,考虑使用懒加载、分页和缓存策略来提高性能。此外,JasperServer是JasperReports提供的一个报表...

    springMVC + ireport子报表(含jar包)

    SpringMVC 是 Spring 框架的一部分,主要用于构建 MVC(Model-View-Controller)模式的 Web 应用程序,提供了一种灵活的控制层实现。iReport 则是一款用于设计 JasperReports 报表的开源工具,支持创建复杂的报告...

    jasperreports实例

    例如,在一个Spring MVC应用中,可以创建一个Controller处理报表请求,调用上述编译和渲染的方法,最后将生成的文件作为响应内容返回。 **五、标签关联** 在本实例的标签中,"java report 实例 ireport"揭示了这个...

    完整的web+ireport报表源代码

    这个服务器可能是基于Spring、Struts或其它MVC框架构建的,通过Servlet、JSP和JavaBean来实现业务逻辑。在前端,可能使用HTML、CSS和JavaScript构建用户界面,与后端通过AJAX进行异步通信,使得用户无需刷新页面就能...

Global site tag (gtag.js) - Google Analytics