NCV5-打印模板技术红皮书.doc_第1页
NCV5-打印模板技术红皮书.doc_第2页
NCV5-打印模板技术红皮书.doc_第3页
NCV5-打印模板技术红皮书.doc_第4页
NCV5-打印模板技术红皮书.doc_第5页
已阅读5页,还剩87页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

打印模板技打印模板技术红术红皮皮书书 NC-UAP 5.0 用友 NC-UAP 2019-11-18 第 2 页 目目 录录 第一章前言.1 1.总体介绍.1 2.快速入门.3 第二章基本概念.7 1.打印模板.7 2.打印变量.7 3.打印数据源.9 4.固定行、固定列.10 5.向下扩展和动态列.10 6.固定行的单元格变量的扩展.10 7.分页.11 8.打印场景.11 第三章模板编辑器的使用.1 1.打印模板编辑器.1 2.单元格数据格式.2 3.单元格内容的折行.4 4.在模板中使用图片.6 5.打印图章(公章).10 6.页面设置.12 7.页码设置.18 8.单元格变量的连接.23 9.功能节点模板的管理.23 第四章模式化应用.25 1.普通分页场景.25 2.强制分页场景.28 3.凭证分页场景.35 4.工资条分页场景.38 5.卡片分页场景.41 6.动态列的应用.43 7.批量打印应用.46 8.EXCEL导出.48 8.1Excel导出功能的调用方式.48 8.2Excel导出设置.49 9.打印设置.50 第 3 页 第五章公式的应用.55 1.本页小计(_SUBTOTAL_)公式.55 2.合计(_TOTAL_)公式 .57 3.红字(_REDWORD_)公式.58 4.其它非常用的打印特有公式.59 4.1行号(_rowno_公式).59 4.2行数(_rowcount_)公式.59 4.3金额空格(_space_)公式.59 4.4中文金额空格(_cnspace_)公式.59 4.5日期空格(_datespace_)公式.59 4.6中文日期空格(_datecnspace_)公式.59 4.7变量扩展(_expandvar_)公式.59 4.8打印公式与NC系统公式的嵌套使用.60 5.修改显示格式的公式.60 5.1单元格内容对齐方式.60 5.2单元格背景色(_bgcolor_)公式.61 5.3字体颜色(_fontcolor_)公式.61 5.4字体(_fontfamily_)公式.61 5.5字体大小(_fontsize_)公式.61 5.6字体风格(_fontstyle_)公式.61 5.7文字下划线(_fontunderline_)公式.61 5.8条件格式.62 5.9组合格式.62 5.10在格式公式中使用null .62 6.公式的综合使用.63 第六章基于 NC 打印的二次开发 .66 1.UI 工厂:快速有效地实现打印.66 2.一个二次开发范例.69 3.打印监听器.71 第七章常见问题解答.72 1.出现打印问题,如何迅速地定位问题.72 2.本页小计公式每页都显示相同的值,为什么?.74 3.EXCEL导出时,是否还会发生内存溢出现象?导出效率如何?.74 4.如何进行双面打印.75 5.批量打印是否可预览?打印时是否可选择页码范围.75 6.如何模拟测试打印的效果.76 第八章V5 打印模块新特性.77 第 1 页 第一章第一章 前言前言 1. 总体介绍总体介绍 假设有一张凭证需要打印出来,打印效果如下,应如何实现? 如果把打印机想象成一张白板的话,打印,就是在白板上做绘制。上面的 这张凭证,可以很容易地绘制出来。但是,当客户想要调整“收款凭证”这四 个字的位置,改变它的字体,或是在下面的表格中增加金额列,是否必须修改 打印程序?另外每张凭证的摘要数据、会计科目数据都是不一样的,如何用统 一的打印程序将不同的数据打印出来?解决这个问题需要做到:1)可以配置字 体、颜色、文本的打印位置、表格的行列等等,这满足了客户对于显示的个性 化要求,2)在配置的时候,能把数据进行某种抽象,起到象征作用。实际打印 时,抽象化的数据被赋予真实的值。 NC 系统的打印模板,就是采用这种思路设计出来的。上面的这张凭证的 打印模板如下图: 第 2 页 可以看到,打印模板是一个表格,其基本元素是单元格。对于单元格,可 以定义字体、颜色、边框、文本对齐方式;对于行,可以定义行高、插入行、 删除行;对于列,可以定义列宽、插入列、删除列。这些功能使得凭证的外观 可方便灵活地配置。那如何进行数据的抽象呢?我们需要看看打印模板编辑器 的全貌: 上面打印模板编辑器的右侧,有一个列表,列出了“凭证类别名称” 、 “制 单日期” 、 “摘要”等在左侧表格以粉色背景出现的内容,这个列表里面的值, 就是对数据的抽象,被称为数据源变量。因此,模板信息,既包括了显示的样 式,又包括了数据的抽象。它足以适应个性化的显示和动态的数据。最后一个 第 3 页 问题是,如何赋真实的值给变量。上面的“凭证类别名称” 、 “摘要”等变量的 真实的值来自于要打印的凭证,因此需要把要打印的凭证的指定信息取出来赋 予给打印变量,实现这个过程,应该采用了下面的流程: 左边的凭证代表财务中的凭证对象,它包含了真正的业务信息,中间的数 据源是打印的标准取数接口。开发人员应从凭证中取得打印模板要使用的变量 的数据,放到数据源里,打印模板从数据源接口取得变量的真实的值,填充到 模板中。 2. 快速入门快速入门 第一节利用一个实际的例子,介绍了 NC 打印的设计思路,这一节,将继 续结合上面的实例,对设计思路做更加深入的讲解,帮助读者快速入门。 完成实例中凭证的打印,分了两个步骤:第一步是将最终的效果抽象成一 个模型,在打印模板中定义出来,第二步是创建数据源,通过该数据源能取到 打印模板引用的变量的值。第一步工作由开发人员或实施顾问完成,第二步工 作由开发人员完成。开发人员如何创建数据源? 打印模板提供了 IDataSource 接口,该接口的方法如下: package nc.ui.pub.print; public interface IDataSource / 返回数据源中所有的变量表达式 public java.lang.String getAllDataItemExpress(); / 返回数据源中所有的变量名 public java.lang.String getAllDataItemNames (); / 根据变量的表达式,取得变量的真实的值 public java.lang.String getItemValuesByExpress ( String itemExpress); / 如果某变量的值都是数字型的,返回 true 第 4 页 public boolean isNumber (String itemExpress); / 取的节点编号,推荐不实现 public java.lang.String getModuleName (); / 取得变量依赖的其他变量,推荐不实现 public java.lang.String getDependentItemExpressByExpress ( String itemExpress); 针对实例中的数据,可以简单地创建一个模拟的数据源(简单起见,未列 出所有变量,只是示范性地实现凭证类别名称、制单日期、摘要、借方本币四 个变量) ,比如: public class MyTestDataSource implements IDataSource / 返回数据源中所有的变量表达式 public java.lang.String getAllDataItemExpress() return new String “vouchertypename”,”dbilldate”,”summary”,” debitmny” ; / 返回数据源中所有的变量名 public java.lang.String getAllDataItemNames () return new String “凭证类别名称”,”制单日期”,”摘要”,”借方本币” ; / 根据变量的表达式,取得变量的真实的值 public java.lang.String getItemValuesByExpress ( String itemExpress) if(itemExpress.equals(“vouchertypename”) return new String“收款凭证”; else if(itemExpress.equals(“dbilldate”) return new String“2005-12-10”; else if(itemExpress.equals(“summary”) return new String “收款,客户 1”, “收款,客户 2”, “收款,客户 3”, “收款,客户 4”, “收款,客户 5” else if(itemExpress.equals(“debitmny”) return new String“”,” ”,” ”,” ”,”1000”; return null; 第 5 页 / 如果某变量的值都是数字型的,返回 true public boolean isNumber (String itemExpress) / 借方本币是数字 if(itemExpress.equals(“debitmny”) return true; return false; / 取的节点编号,可不实现 public java.lang.String getModuleName () return null; / 取得变量依赖的其他变量,推荐不实现 public java.lang.String getDependentItemExpressByExpress ( String itemExpress) return null; 有了打印模板,有了数据源,打印工作的所有准备活动都已完毕,只差一 点调用打印程序,完成打印。NC 打印程序的统一入口类是 nc.ui.pub.print.PrintEntry,下面介绍如何调用 PrintEntry。 PrintEntry pe = new PrintEntry(当前窗口对象,new MyTestDataSource(); / 设置打印模板 ID 的查询条件 pe.setTemplateID(公司,节点编号,用户,业务类型); / 如果分配了多个打印模板,可选择一个模板 pe.selectTemplate(); / 开始打印 pe.print(); / 也可以先预览,再在预览界面打印 / pe.preview(); 至此,整个工作才全部结束。不过,客户对打印的要求,并不像上例中这 么简单,比如:观察实例的模板,可以看到不同的行具有不同的背景颜色,其 中只有第 5 行是白色背景,其他都是藏青色背景。而通过预览效果可以看到, 第 5 行被动态向下扩展了(扩展行的行高列宽及单元格式都克隆了模板中的相 应单元格) ,而其他行却没有扩展。为什么会这样?假设模板中第 5 行的变量有 100 个值,如果都要扩展的话,一页能打下吗,要是打不下,该如何分页,能 否定义不同的分页方式?除了通过数据源取数,还有什么取数方式,可否定义 第 6 页 公式对数据源运算?要对一批凭证做批量打印,该怎么做?如果要把凭证输出 到 Excel 中,该怎么做?有特殊的页码要求,该怎么配置?要把内容打印到特 殊的纸张上,怎么定义纸型? 要解答这些问题,需要对打印模板有更深入的了解。后面的内容,致力于 以实例讲透各种高级功能。下一节,将对 NC 打印的基本概念做详细的描述。 第 7 页 第二章第二章 基本概念基本概念 1. 打印模板打印模板 打印模板定义了打印模型和各种打印选项。使用者将打印模型建立在打印 模板的表格中,每一个单元格都可以定义独立的字体、颜色、边框、高度宽度 和绑定的变量。另外,打印模板还可以定义关于打印的一些页面设置,比如页 码、页眉页脚、纸型等等。 2. 打印变量打印变量 打印变量是对要打印的数据的抽象,打印变量通过拖拽方式从变量列表添 加到模板中。在实际打印或预览时,用到的打印变量会被赋值。一共有三种类 型的变量:数据源变量、自定义变量和系统变量。 1.数据源变量 从开发人员创建的数据源获取值。字符型数据源变量在模板编辑器中以粉 色为背景,图片型数据源变量较为特殊,除了像字符型数据源变量一样将变量 插入到单元格,还需要在单元格的属性设置对话框中将单元格内容类型设置为 图像变量,这时图片型数据源变量在模板编辑器中的背景会变为红色。 2.自定义变量 第 8 页 间接地通过公式获取值。自定义变量通过公式编辑器定义,有两种使用公 式的方式:1)对数据源变量定义运算公式,比如统计公式:合计、小计,数据 格式公式:转换成中文、加空格等,格式公式:左对齐、字体颜色等,更多公 式的使用可参照第三章“公式的应用” ;2)从基本档案取数,它的值来自于 NC 系统可访问的数据库的某个表的某字段值。自定义变量和字符型数据源变 量一样,在模板编辑器的单元格以粉色为背景; 用户可以通过“设置/自定义变量”菜单管理自定义变量,同时在自定义变 量列表提供鼠标右键快捷菜单来增加、修改删除自定义变量。管理界面如下图 所示: 比如定义一个表示员工任务总数的自定义变量,首先输入变量描述“任务 总计” ,然后点击变量公式按钮在弹出的公式定义界面定义变量取值方式: 第 9 页 3.系统变量 它的值来源于系统预置的数据或当前客户端的信息,比如单位名称、日期、 用户等,此外,在模板管理界面通过“上传图片”上传的图片也作为系统变量 出现在“系统变量”列表中。 3. 打印数据源打印数据源 打印数据源是打印的取数接口,规定如何获取打印数据。目前提供 IDataSource、IDataSource2、IExDataSource 三个接口。其继承关系如下: IDataSource IDataSource2 IExDataSource IDataSource 是最基本的数据源接口,此接口支持字符串格式(String)的 第 10 页 打印数据,如果需要打印的数据为数字、时间等格式,可先转化为字符串。 IDataSource2 是凭证打印专用数据源接口,可以设置分录条数。 IExDataSource 可以用于传入除 String 外的其他数据类型数据,主要用于传 入图片。更详细用法可参照第四章“如何在打印模板中嵌入图片”一节。 4. 固定行、固定列固定行、固定列 在模板中,背景颜色为藏青色的行是固定行,背景颜色为藏青色的列是固 定列。 “固定”的意思不是指位置的固定,而是指它们在每一页都会显示。比如 单据的表头表尾信息、单据表体的标题。因此,固定行指的是这一行的单元格 定义的内容在每一页都会打印,固定列指的是这一列的单元格在每一页都会打 印。 注意:对于一页纸打印多张表的情况,比如强制分页和凭证分页场景,固 定行在每张表中都会打印。 5. 向下扩展和动态列向下扩展和动态列 如果某个变量具有多个值,在打印的时候,它们会为每个值复制打印模板 中自身的单元格(以获得相同的显示属性) ,将每个值单独放入,这就是单元格 的扩展。 (也只有当该单元格绑定的变量具有多个值时单元格才会扩展) 。例如, 在上一节的实例中,第 5 行进行了扩展。 而现代人的阅读顺序是从左到右,从上到下,因此扩展方向要么向右,要 么向下。在打印模板中,往单元格中置入一个变量,默认的扩展方向是向下, 当把一列设置成动态列时,这一列的所有单元格才变为向右扩展。 6. 固定行的单元格变量的扩展固定行的单元格变量的扩展 固定行上单元格的变量若有多个值,不会像非固定行那样向下扩展。固定 行在每页都会显示,它默认在每页都显示第一个值。但是,在某些场景中(凭 证分页和工资条分页) ,根据页码次序选择变量的值。 在上一节的实例中,第 3 行是固定行,其模板内容为: 在第一页,这一行的预览内容为: 第 11 页 第二页,预览内容为: 数据源中,voucher91 变量有两个值,第一页选择了第一个值,第二页选择 了第二个值。 7. 分页分页 与分页关系最紧密的因素是“纸张大小” ,也就是纸型。当纵向的内容高度 超过了纸张的高度,就会自动分页(纵向分成多页,向下) ,当横向的内容宽度 超过了纸张的宽度,也会自动分页(横向分成多页,向右) 。 除了这种自动分页方式,有些场景中还需要强制性地分页,理由很多:比 如满足特定格式的套打纸张,比如固定的合同要求,等等。在上一节的凭证打 印实例中,模板中的非固定行(第 5 行)每页最多扩展 5 行,这是因为该模板 用于凭证套打,纸制的凭证本身就已打好了表格。 因此,NC 打印必须支持自动分页和强制性地分页。 8. 打印场景打印场景 NC 打印目前分成五种场景:普通分页场景、强制分页场景、凭证分页 场景、工资条场景、卡片分页场景。 场景名称场景名称分页模式分页模式固定行变量如何选择固定行变量如何选择特点特点 普通分页普通分页自动分页每页都选择第一个值 强制分页强制分页强制性地分页每页(表)都选择第一 个值 可选”自动填充空行”, ”一 页打多张凭证” 凭证分页凭证分页强制性地分页根据页(表)码次序选 择值 可选”自动填充空行”, ”一 页打多张凭证” 工资条分页工资条分页自动分页根据工资条次序选择值自动折行,一页可打多条 卡片分页卡片分页自动分页根据卡片次序选择值 在“模式化应用”章中,会详细介绍这五种场景,在这里需要强调的是, 这五种场景的区别绝不仅仅是分页模式。 第 1 页 第三章第三章 模板编辑器的使用模板编辑器的使用 1. 打印模板编辑器打印模板编辑器 通过以上章节,我们已经对打印模板编辑器有了整体上的了解,本节更加 详细介绍一下模板编辑器的使用。 上图是一个员工任务完成情况表的打印模板,从图中可以清晰的看出,模 板编辑器分为菜单栏、工具栏、编辑栏、标尺、编辑区、状态栏、变量区几个 部分。其中工具栏、编辑栏、标尺、状态栏都可以通过“视图”菜单控制是否 显示。 模板采用类似于 Excel 方式进行编辑,以单元格为单位,单元格可以合并、 拆分;在编辑区提供四种右键快捷菜单:选中单个单元格可以粘贴复制删除单 元格内容并设置单元格格式,单元格格式对话框如下图,在此对话框可以设置 单元格的对齐、字体、边框、背景、Excel 导出数字格式,单元格内容类型,其 中更多关于 Excel 导出数字格式的信息可参照第二章“模式化应用”中“Excel 导出”节;选中多个单元格可以合并拆分,选中行可以设置行高、动态行等, 第 2 页 选中列可以设置列宽、固定列等; 菜单栏中的“表格”菜单项也提供了相似的 功能。标尺以毫米为单位,方便模板的测量绘制。模板编辑中做的操作可以通 过“编辑”菜单项的“撤销” “重做”操作进行恢复。 右侧为模板可以使用的变量区,包括数据源变量、自定义变量和系统变量。 数据源变量无法编辑,自定义变量界面中可以通过右键快捷菜单增删改,系统 变量无法编辑。在模板中引用变量有两种方式,一种可以通过拖拽,从右面变 量列表中拖拽一个变量放到编辑区中的某个单元格,另一种通过两次点击,鼠 标点击一个变量,然后点击某个单元格。 双击一个含有变量的单元格,会弹出单元格内容编辑器,可在此界面中给 单元格增加文本常量、增加多个变量并设置各个常量变量之间的顺序,关于单 元格内容编辑器的更多内容可参看“Red(#,#0) 红字千分位整数 (#,#0.00_);Red(#,#0.00) 红字千分位两位小数 3、货币:一般货币的表示。 ($#,#0_);($#,#0) “$”前缀的千分位货币 ($#,#0_);Red($#,#0) - “$”前缀的红字千分位货币 ($#,#0.00);($#,#0.00) - “$”前缀的千分位两位小数货币 ($#,#0.00_);Red($#,#0.00) - “$”前缀的红字千分位两位小数 货币 4、日期:一般日期格式的表示。 第 4 页 m/d/yy 形如8/18/1980格式日期 d-mm-yy 形如18-08-1980格式日期 d-mm 形如18-08格式日期 mm-yy 形如 08-80 格式日期 5、时间:一般时间格式的表示,比如: h:mm 形如9:18格式日期 h:mm:ss 形如 9:18:36 格式日期 百分比:一般百分数格式的表示,比如: 0% 形如 8%百分数 0.00% - 形如 8.00%百分数 分数:一般分数格式的表示,比如: # ?/? # ?/? 注意:由于打印模板使用开源项目 POI 导出 Excel,而 POI 单元格数字格 式定义不支持中文,所以以上各种数字格式中不能包含中文,否则会显示为乱 码。更多格式定义请参阅 方法二、public int getObjectTypeByExpress(String itemExpress); 方法一根据变量名获得变量对应的对象,如果为图片则返回 ImageIcon 或 Image 对象数组;方法二返回变量的对象类型,有三个可取值: IExDataSource.STRING_TYPE(字符串类型,一般不需要使用,因为使用 IDataSource 数据源就可以满足) IExDataSource.IMAGE_TYPE(图片类型变量) IExDataSource.BIGTEXT_TYPE(大文本类型) 。 示例程序如下: public Object getObjectByExpress(String itemExpress) if(itemExpress.equals(photo) Object pics = new Objectthis.size; for(int i = 0; i pics.length; i+) picsi = new ImageIcon(somepicpath); return pics; return null; public int getObjectTypeByExpress(String itemExpress) if(itemExpress.equals(photo) return IExDataSource.IMAGE_TYPE; return 0; 步骤二、在模板中使用此图片变量,过程和一般的数据源变量一样。 步骤三、设置图片变量所在的单元格的单元格文本类型为图片变量。打开 图片变量的单元格设置对话框的“类型”选项卡,设置文本类型为“图片变量” 。 第 10 页 这时,模板中图片变量字符背景会由粉红色变为红色,以区别于一般的字 符串变量。 这样,就完成了全部过程,从之前章节中的例子可以看到效果:不同的人 员显示不同的照片。 5. 打印图章打印图章(公章公章) 一些文档在打印时需要嵌进图章,这些图章不能作为正常的图片放进单元 格中进行打印,因为它需要作为一个单独的图层绘制在文字之上,和其它的打 印内容是一种“镶嵌”的关系。比如下面的打印结果所示: 第 11 页 在打印模板中设置图章的过程为:点击下面的图标打开图章设置对话框, 如图所示: 第 12 页 图章打印是绝对定位的,所以需要设置图章绘制起始点的绝对位置(单位 是像素) ,并可调整绘制的图片的长度宽度,另外,为避免图章层将文字覆盖, 可设置图章的透明度; 还有一个选项是设置图片的旋转角度,以使图章显示得更为真实。 6. 页面设置页面设置 “页面设置”用于定义打印页的常规属性,比如打印页的纸型、页边距、 页眉页脚页码的位置等。V5 打印模块的页面设置包括了丰富的设置信息,包括 三部分: 1 1纸型的选择:纸型的选择: 第 13 页 在纸型下拉框中选择需要的纸型,选定纸型的长度和宽度会在文本框中显 示出来,并可选择纸张的方向。在下部有一个复选框,它表示是否只显示当前 打印机支持的纸型,如果不勾选,纸型下拉框中会显示市场上所有存在的纸型。 推荐“只显示当前打印机支持的纸型” ,因为如果选择了打印机不支持的纸型, 打印机很难打出符合预期的效果。另外,在复选框右侧,有一个打印机图标, 点击该按钮可以选择打印机,纸型下拉框会根据选定的打印机来获得当前可用 的纸型。 有些时候,客户有一些特殊的纸张,因此需要自定义纸型,产品支持两种 自定义纸型的方式: 在 NC 页面设置中定义,这可以通过选择纸型下拉框的最后一个选项“自 定义纸张”来做到,如下图: 第 14 页 一旦选择了“自定义纸张” ,宽度和高度文本框均可编辑,可在文本框中写 下纸张的宽度和高度值。以后,每次打印此文档时,都会以此纸型打印。但需 要注意的是,这并不意味着随意地定义一个纸型都可以交给打印机,前提必须 是打印机支持这样的纸型。V5 提供此功能,只是提高易用性。 利用打印机驱动程序自定义纸型。方法是进入 Windows 系统的 设置控制 面板打印机,选定一个打印机后单击右键选择属性菜单,可进入打印机高级设 置,在高级设置或打印首选项中(随打印机驱动程序而变化)一般可以自定义 纸张,如下图所示,定义了新的纸张“lhwei” : 第 15 页 这个设置在本机可以被保存,适用于本机的所有应用程序。在 NC 的页面 设置对话框,也可选择此纸张,如下图: 第 16 页 2 2页边距设置页边距设置 在页边距页签中,可定义打印内容距纸张边缘上下左右的距离,以及页眉 页脚距纸张边缘的距离,另外,为了用户装订方便,还可预留一段作为装订线 区域,如下图: 第 17 页 3 3页码设置:页码设置: 页码设置的用于定义页码的显示格式、位置等信息。如下图: 第 18 页 页码位置和格式的选项都很显然,不作解释,重要的是两个其他选项:其 一是“横向信息”复选框,它的解释如上图界面中下侧的说明;另一个是起始 页码,主要是为页码加一个起始值,比如设置起始页码为 10,那么打印的第一页 的页码显示为 10,第二页为 11,依此类推。 7. 页码设置页码设置 有两种设置页码的方法, 方法一:在模板编辑器中点击菜单”设置页面设置”对话框的”页码”选项卡 直接添加页码,这是最方便添加页码的方式,详细地设置方式可参照“页面设 置的具体作用”一节。 方法二:有的时候,页码需要显示在文档的固定位置,比如放在表头。 这种情况无法用方法一实现,为了满足这种需求,我们提供“当前页数” “总页 数”系统变量,通过变量的组合自定义页码。 比如我们给凭证一节的例子加上自定义页码,具体做法:拖拽系统变量 中的“当前页数” “总页数”两个变量到模板中的凭证号单元格,然后双击此单 元格弹出单元格内容编辑器,如下设置单元格内容: 第 19 页 此时模板变为: 这时的预览效果如下: 第 20 页 第 21 页 方法三:通过自定义变量。比如,我们建立一个自定义变量“自定义页码” , 通过公式编辑器设置变量如下: 在模板中使用这个自定义变量,便能达到和方法二同样的效果。 有的时候,需要中文页码,比如“第壹页,共捌页” ,这种情况无法用方法 一和方法二实现,此时只能使用方法三,通过公式的嵌套来完成。 修改上面“自定义页码”变量,加上_cnspace_公式,定义如下: 第 22 页 预览结果: 第 23 页 8. 单元格变量的连接单元格变量的连接 在实例的模板中,可以看到一个单元格若有多个变量,它们之间就用 “ / 月 else if( express.equals(vmonth) ) return new String2005 年; / 供应商 else if( express.equals(supplyer) ) return new String上海大华股份有限公司; 2. 强制分页场景强制分页场景 强制分页场景通过设置“固定打印行数” ,可以规定每页向下扩展的行数, 以此决定每页打印的内容。 在第一节的例子基础上,在模板编辑器中,修改分页方式为“强制分页” , 每页固定打印行数为 12,如下图所示: 打印预览时,分成了三页(普通分页只分成两页): 第 29 页 上图可见,第一页的非固定行只打印了 12 行(根据分页设置) 。 第 30 页 第 31 页 上图是第三页,固定行都显示出来,非固定行从扩展的第 25 行开始打印。 强制分页场景中,还可勾上“自动填充空行”选项,此时最后一页打印效 果如下: 第 32 页 最后一页本身只有 4 行数据,但为了保证“固定打印行数”为 12,自动填 充了 8 行。为什么要有这个功能?以上图为例,如果客户是套打,总任务数变 量所在行在套打纸张上是固定的,因此最后一页需要填充一些空行,把总任务 数变量所在行撑到正确的位置显示。 强制分页场景中还可以设置一页纸打印多张单据,比如我们更改此模板的 场景设置为每页打印 6 条,每页打印两张表: 第 33 页 此时的预览结果分成了三页,第一页中显示了两张表,第二页也显示了两 张表,最后一页显示一张表。 第 34 页 第 35 页 3. 凭证分页场景凭证分页场景 凭证分页场景,并不是仅仅用来打凭证的。前面总结过它的特点,是:自 动分页,固定行的变量按照页码次序选择值。 还是在第一章实例的基础上介绍,在模板编辑器中,将分页方式设置为 “凭证打印” , “固定打印行数”为 4 : 第 36 页 在数据源中放入测试数据,预览的效果如下: 第 37 页 第二页的内容如下: 第一章分析过两页上凭证号的不同,并说明了在凭证分页场景,固定行上 的变量按照页码次序取值,因此开发人员创建数据源时,为固定行上的变量赋 予数据的技巧是按照页码次序。比如上面的凭证分两页,那么为”凭证类别名称” 、 ”制单日期”、 ”凭证编号”、 ”合计数”等固定行上的变量提供的 String 数组长度为 2,保证每一页都能取到正确的值。以凭证类别和合计数为例,如下所示: public java.lang.String getItemValuesByExpress ( String itemExpress) /* 根据要打印的表体记录行数和模板中设置的每页打印 * 行数计算要打印的页数 */ int pageCount = allRecordCount / getPrintEntry().getBreakPos()+1; / 凭证类别 if( express.equals(voucher10) ) String values = new StringpageCount; for (int i =

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论