简介
在企业级应用开发中, 表生成、 表打印下载是其重要的一个环节。在之前的课程中我们已经学习了 表中比较重要的一种:Excel 表。其实除了Excel 表之外,PDF 表也有广泛的应用场景,例如货运详情,货运单等。
目前世面上比较流行的制作PDF 表的工具如下:
- Jasper Report:是一个强大、灵活的 表生成工具,能够展示丰富的页面内容,并将之转换成PDF。Jaspersoft Studio的前身。
- iText PDF:iText是著名的开放项目,是用于生成PDF文档的一个java类库。通过iText不仅可以生成PDF或rtf的文档,而且可以将XML、Html文件转化为PDF文件。
- Openoffice:openoffice是开源软件且能在windows和linux平台下运行,可以灵活的将word或者Excel转化为PDF文档。
常见操作
- JRXML: 表填充模板,本质是一个XML;Jasper:由JRXML模板编译生成的二进制文件,用于代码填充数据。
- 如何打开已经隐藏的窗口:菜单栏依次选择window→show view→other→已经隐藏的窗口名→Open
- 查看当前模板的纸张大小信息:鼠标移至模板页面左边线上部区域,点击鼠标右键,弹出模板菜单页面,在模板菜单页面点击“Page Format…(页面格式…)”按钮,调出纸张设置对话框。
- 新建模板步骤:在菜单栏中依此选择File→New→Jasper Report,进入到Report Templeates( 表模板)界面;在Report Templeates界面选择需要的模板,点击“Next”,进入到Report File( 表文件)界面,可修改模板存放路径和模板名称;在Report File界面点击“Finish”,完成 表模板创建(点击“Next”按钮,进入到Data Source(数据源)配置界面,不需要操作)。
- 在模板中添加元素:在“Palette”视窗中,选中自己所需要的元素(动态文本、静态文本、条形码文本等等),拖拽至模板中对应的位置上,完成模板元素新增操作。
- 在模板中给元素添加框架:通过鼠标选中所需元素,点击鼠标右键,弹出菜单页面,点击“Enclose into Frame”按钮,完成元素框架添加。
- 更改文件存储的位置:打开主菜单“File —> Switch WorkSpace”,选择你打算存放 表工程及 表设计文件的目录。
- 建立数据库连接:在“Repository Explorer”页签,依次进入“Data Adapter—>Create Data Adapter—>数据库连接方式(一般选择Database JDBC Connection)—>数据库连接配置(填写所连接数据库配置信息)—>Driver Classpath(添加相应数据库的jar包的存放路径)”
-
sqlserver本人选择框起来那个,选择另一个 错,所以看个人工具及数据库版本
连接数据库需要添加相应的jar包
MySQL:
Sqlserver:
- 建立主数据源(主档数据源)
界面元素解释
名称 |
翻译 |
备注 |
Jrxml |
一种XML文件格式,用于保存和共享为JasperReports库和使用它的应用程序(如JasperSoft Studio和JasperReports服务器)创建的 表。JRXML是一种开放格式,它使用XML标准精确定义 表的所有结构和配置。 |
|
Jasper |
jaspersoft的运行文件格式 |
JRXML模板编译生成的二进制文件,执行PDF 表打印的代码运行格式文件。 |
Title |
标题面板 |
只在首页打印一次 , 表面板 |
Detail |
内容面板 |
详情,根据数据数量,自动循环输出, 表面板。 |
Column Header |
行首面板 |
通常用来定义行的字段名称。每页都打印, 表面板。 |
Page Header |
页首面板 |
每页都打印, 表面板。 |
Page Footer |
页尾面板 |
每页都打印, 表面板。 |
Column Footer |
行尾面板 |
可用来告知 表的一些参数,诸如页码等。每页都打印, 表面板。 |
Last Page Footer |
最后页的页尾面板 |
只在最后页打印一次。 |
Palette |
调色板 |
调色板包含三个部分:Basic Elements(基本元素),Composite Elements(复合元素,其他元素组合创建的元素), Components(组件,软件商业版中可用元素)。通过拖拽调色板中的三个部分的元素至 表各类面板中,实现元素在 表中的新增 。 |
Composite Elements |
复合元素 |
复合元素是一个或多个可以在 表中使用的预配置元素。你可以配置元素的大小、颜色或字体等属性,或创建具有复杂经常使用的表达式,然后将其另存为复合元素。复合元素不能包含基于数据集的元素,例如图表或交叉表。 |
Basic Elements |
基本元素 |
表的基本构造块是元素,一切都是通过元素创建的,元素可以包含文本、创建表格、显示图像等。 |
Note |
备注 |
Basic Element里的元素, |
Text Field |
字段文本 |
Basic Element里的元素,动态文本字段允许您打印使用表达式创建的任意文本部分(或数字或日期)。 |
Static Text |
静态文本 |
Basic Element里的元素,通常标题使用此格式。 |
Image |
图片 |
Basic Element里的元素 |
Break |
强制分页符 |
Basic Element里的元素 |
Rectangle |
矩形 |
Basic Element里的元素 |
Ellipse |
椭圆 |
Basic Element里的元素 |
Line |
线条 |
Basic Element里的元素 |
Frame |
框架 |
Basic Element里的元素,框架是一个矩形元素,可以包含其他元素,还可以选择在它们周围绘制边框。框架内的元素是相对于框架而不是相对于标注栏定位的,当移动框架时,框架中包含的所有元素都会一起移动。框架会自动拉伸以适合其内容。 |
Subreport |
子 表 |
Basic Element里的元素 |
Barcode |
条形码、二维码 |
Basic Element里的元素 |
Chart |
图表 |
Basic Element里的元素 |
Properties |
属性栏 |
元素属性分为多个类别,通过“属性”视图中的选项卡可见。可用的属性依赖于元素类型。类别包含以下几类:Appearance、Borders、Element、Inheritance、Hyperlink |
Appearance |
外观选项卡 |
外观选项卡允许您设置元素的位置、大小、颜色和文本样式。 |
Borders |
边框选项卡 |
允许设置元素的填充和边框样式、颜色和宽度。 |
Text Field , Note, Static Text, Image,and so on |
元素名 |
允许设置评估时间以及特定于元素类型的属性。例如:静态文本选项卡允许您为字段定义不可更改的文本,并控制其外观;文本字段选项卡允许设置文本字段元素的格式和位置;图像选项卡允许您设置图像对齐、填充和缩放属性。 |
Inheritance |
继承选项卡 |
会显示当前元素的基本属性(Element attributes),能够重置当前属性(Reset Elements Properties),会显示 表的默认属性(Default attributes),允许查看从其他级别继承的任何属性,并在可能时覆盖这些属性。 |
Horizontal Alignment |
水平对齐位置 |
选项:CENTER(居中对齐)、LEFT(左对齐)、RIGHT(右对齐)、JUSTIFIED(两端对齐) |
Bold |
字体加粗 |
选项:True(加粗)、Flase(不加粗) |
Box Top/Bottom/Left/Right Line Style |
上/下/左/右边框线类型 |
选项:Solid(实线)、Dashed(虚线)、Dotted(点线)、Double(双实线) |
Box Top/Bottom/Left/Right Line Width |
上/下/左/右边框线宽度 |
|
Backcolor |
背景色 |
|
Hyperlink |
超链接选项卡 |
允许在元素中定义图像、文本字段和图表的超链接。 |
java. Lang.String |
常量字符串 |
|
Undo |
撤消 |
|
Redo |
恢复 |
|
Outline |
大纲视图 |
从大纲视图中我们发现,一个 表包含很多固定的面板。在每一个 表中标题和汇总(summary)面板只打印一次,页眉(header)和页脚(footer)在 表的每一页都会独立打印。我们可以直接在field中新增、删除字段,还可以将字段拖拽到 表的细节面板中,Jasper Studio将会为我们创建一个文本字段(text field)元素,并设置其值为对应字段的数据。文本字段不应出现在除细节面板之外的其它地方。 |
Field |
字段 |
大纲视图下的子单元菜单,在 表中,有三组对象可以存储值:字段(Field)、参数(Parameters)和变量(Variables)。点击“Create Field”按钮,对当前 表进行新增字段;“Field”表单下会显示当前 表中所有的字段信息。 |
Parameters |
参数 |
大纲视图下的子单元菜单,在 表中,有三组对象可以存储值:字段(Field)、参数(Parameters)和变量(Variables)。 |
Variables |
变量 |
大纲视图下的子单元菜单,在 表中,有三组对象可以存储值:字段(Field)、参数(Parameters)和变量(Variables)。 |
Text Field Menu |
动态文本菜单 |
鼠标在面板中选中动态文本,点击鼠标右键,弹出菜单,菜单目录如下: Undo Change Text Field Expression:撤消更改文本字段表达式 Redo:恢复 Cut:剪切 Copy:复制 Paste:粘贴 Copy Format: Enclose into Frame:装入框架 Save as Composite Element: Add to Template Set: Delete:删除 Show Properties: Order: Align in Container: Size to Container: Arrange In Container: Oragnize as Table: Add Detail Band: Stretch To Content: Convert to Static Text:转换为静态文本;将动态文本属性调整成静态 Fit text in element:在元素中调整文本; JSON Tags: CSV Tags: XLS Tags: PDF 508 Tags: |
Report State |
告状态 |
操作编译jasper文件中的jrxml源文件时,显示编译运行的日志信息 |
Page Format |
页面格式 |
主要是模板页面的属性信息,包含:Format(纸张大小,A4、A3等等),Width(纸张宽度),Height(高度),Page Orientation(页面方向,包含选项:Portrait(纵向)、Landscape(横向)),Units(单位,cm、mm、pixel等),Margins(边距,包含:Top(上部)、Bottom(下部)、Right(右边)、Left(左边)),Columns(面板,包含:Columns(面板数量)、Column Width(面板宽度)、Space(空间)、Print Order(打印顺序,包含选项:Vertical(垂直)和Horizontal(水平)))。 |
Location |
坐标 |
以当前元素的左上角的坐标作为当前元素的坐标。 |
Jaspersoft Studio 定义了一些内置参数(Parameters),具体说明如下:
内置参数 |
说明 |
REPORT_PARAMETERS_MAP |
使用者调用 API 中的 fillReport() 方法所传入的 Map 型键值对参数。 |
REPORT_CONNECTION |
表中的 JDBC connection,用于执行 SQL 语句。 |
REPORT_MAX_COUNT |
表所能填充的最大记录数。如果未指定,则没有限制。 |
REPORT_DATA_SOURCE |
如果没有使用 JDBC connection(比如非数据库的数据源 CSV 等),将会使用这个参数。 |
REPORT_SCRIPTLET |
表创建时的脚本实例,默认使用 net.sf.jasperreports.engine.JRDefaultScriptlet。 |
REPORT_LOCALE |
locale 区域设置,一般用于国际化场景。默认为系统值。 |
REPORT_TIME_ZONE |
所在时区,默认为系统值。 |
REPORT_FORMAT_FACTORY |
默认实现是 net.sf.jasperreports.engine.util.FormatFactory。可以参考该工厂类,实现自定义工厂。 |
REPORT_CLASS_LOADER |
可用于设置 表填充时的 class loader。 |
REPORT_URL_HANDLER_FACTORY |
可用于指定创建 URL handlers 实现工厂。 |
REPORT_FILE_RESOLVER |
默认实现是 net.sf.jasperreports.engine.util.FileResolver,用于解析 表中的资源路径,也可以自定义。 |
REPORT_VIRTUALIZER |
定义 表填充器的实现类,默认为 JRVirtualizer 接口的实现类。 |
IS_IGNORE_PAGINATION |
Boolean 类型,分页开关。默认情况下,除了导出 excel 与 HTML 之外,其它情况不分页。 |
常见问题处理
问题 |
原因 |
解决方法 |
Element reaches outside frame width:x =0,width=122,available width=120 |
元素达到外部框架宽度:x=0,宽度=122,可用宽度=120 |
根据 错信息,调至到Source界面,查看错误元素位置,在模板中进行调整修改 |
An internal error occurred during: “Building report”.java.lang.Null Pointer Exception |
正确表达式为: eld> … … ield> 或 Text> … … cText> |
|
Jaspersoftstudio生成jrxml的版本与打开jrxml的版本不一致 |
使用新版本的Jaspersoftstudio打开jasper文件重新生成jrxml。 |
|
根据模板(模板仅一页内容)执行打印时,打印机会打印出一张有内容的和一张空白页,或会进行正反两面打印(一面有内容一面没内容) |
维护模板时模板有空白页产生 |
|
Jaspersoftstudio软件高版本中会自动将条码信息以明文的形式显示出来 |
||
提示 错: There are compilation errors please fix the design. 详细 错: Invalid character constant Errors were encountered when compiling report expressions class file: |
使用了Jasper格式进行编译预览,导致无法保存 |
可以使用jasper文件对应的rxml文件在设计器中进文件行编译 |
详细 错: The operator / is undefined for the argument type(s) java.lang.String,java.lang.String Error were encountered when compiling report expressions class file: |
||
当配置单打印显示为null时 |
jasper模板中动态文本的编 未在模板字段关系中维护关联关系,导致无法映射关联取值 |
在模板字段关系中维护关联关系 |
当配置单打印显示为N/A时 |
根据模板字段关系的关联关系,校验取值取到空值 |
|
当配置单动态取值打印照片显示为空白时 |
1、jasper模板中动态文本的编 未在模板字段关系中维护关联关系,导致无法映射关联取值 2、根据模板字段关系的关联关系,校验取值取到空值 |
|
因为对用的数据库表中无结果数据 |
在对应的数据表中插入数据,使得查询的视图中存在可用数据。 |
|
获取打印模板通过打印服务器进行打印时,发现打印内容不展示,空白显示(有时候会出现部分信息能够打印显示,部分信息不能够打印显示) |
打印服务器字体中不包含打印模板中的字体,导致无法进行信息展示 |
将打印模板中的字体调整为打印服务器中有的字体 |
通过Jaspersoft Studio设计器打开别人发的jasper格式文件时,页面有 错提示:Failed to create the part‘s controls ,紧接着页面关闭。 |
接收到的jasper格式文件采用的是低版本( 6.2.0 )的Jaspersoft Studio设计器编译生成的,高版本的设计器在打开时不兼容 |
使用高版本的Jaspersoft Studio设计器打开对应jrxml文件进行重新编译生成jasper文件 |
函数表达式
表达式 |
含义 |
备注 |
“”.equals( $F{D020} )”:$F{D020} |
当变量D020的值等于空字符串时,返回为“X”,否则,返回对应的变量值 |
equals()方法用于判断两个对象是否相等。 |
$F{D090}.replace(“|”,”n”) |
当变量D090的值中出现“|”时,将“|”替换成换行符 |
replace() 方法通过用 newChar 字符替换字符串中出现的所有 searchChar 字符,并返回替换后的新字符串。 |
null==$F{D001} :$F{D001}.concat(“_”).concat($F{D006}) |
当变量D001的值为null时,将变量D001的值赋予为空字符串,否则,将返回对应的变量值,最后将D001值和D006值用“_”进行拼接。 |
concat() 方法用于将指定的字符串参数连接到字符串上。 |
$F{H004}.substring(0,4) |
截取变量H040的值前四位 |
substring(int,int) |
null == $F{D020} || “”.equals( $F{D020} )”:$F{D020} |
当变量D020等于空字符串或null值时,返回为“X”,否则返回对应的变量值 |
文章知识点与官方知识档案匹配,可进一步学习相关知识Java技能树首页概览92895 人正在系统学习中
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!