模板设计:单元属性
目录

1. 关于单元属性

单元属性,指定模板表格单元的具体特征属性:是否为字段单元,字段单元的数据类型、格式等等。通过单元属性窗口来设置模板中单元的属性,此窗口缺省位于主窗口右侧, 可在模板属性页面属性、以及单元属性之间切换:鼠标点击表格中的任意单元,则属性窗口切换为单元属性。另外,单元属性和页面属性,可以通过属性窗口顶部的下拉框来相互切换。

other

2. 单元属性详解

2. 1. 基本

other
2.1.1 字段

指定单元是否为字段(或者称为变量)单元。

否,则为非字段单元
又称为标识单元,其作用类似于Windows中的标签(Lable)或者静态框。在打印输出过程中不能改变标识单元的内容。 对于非字段单元,诸如数据属性等均无意义。
是,则为字段单元
类似于Windows中的编辑框等。在打印输出过程中,其内容是客户端传递过来的相应数据。
2.1.2 名称

字段单元的名称。必须为字段单元起一个名称。如果“名称”为空,则被认为是非字段单元。
命名规范:名字中可以包含汉字、字母、数字等,但不可以包含 + - ( ) [ ] { } < > , . : ; ' | / ~ ! @ # $ % ^ & * " \。
同一个模板页中的字段单元,其名称要具有唯一性。

单元名称通常是手动输入的。如果希望通过弹框选择输入由后台返回字段名等信息,那么需要设置字段信息源

2. 2. 数据

other
2.2.1 类型

数据类型,包括:文本、数值、日期/时间、布尔、二进制。

2.2.2 格式

数据格式,指定数据的输出形式。不同的数据类型有这不同的数据格式:

文本
针对文本类型数据,其格式一般为空,除非:
①如果将文本以一维条码形式输出,则需在此选择一种一维码的编码。
②如果将文本以二维码形式输出,则需在此选择你需要的二维码,可以是:QRCode、DataMatrix或者PDF417。
对于QRCode:可以在格式中指定符合规范的纠错等级(L、M、Q、H)和版本(1~40),例如:二维码:QRCode Q2,则指定纠错等级为Q,版本为2。
对于DataMatrix:可以在格式中指定符合规范的输出模块数,例如:二维码:DataMatrix 48X16,则输出宽度48模块、高度16模块。
③选择“富格式”,则可以显示由一组JSON对象描述的“富格式”文本。富格式文本用于图文混排,其中可以包含各种字体的文本、图像、条码、换行等内容。相应的JSON对象如下:
文本:
{"type":"text","content":"...","prop":"..."},这里,type为类型,这里是文本text;content为文本内容字符串;porp为文本样式,其形式与Unit对象的方法TextStyle一致。如果没有porp或者prop为空,则文本样式为当前文本样式。
图像:
{"type":"image","content":"...","prop":"..."},这里,type为类型,这里是图像image;content为图像URL、本地路径或者base64等;prop形式如“h:2.3,w:1.8”,用于指定图像显示高度和宽度,单位厘米。
换行:
{"type":"newline"},很简单,type为newline即可。
条码:
{"type":"code39","content":"...","prop":"..."},这里,type为类型,这里是code39;content为条码内容;prop形式如“h:2.3,w:1.8,c:0”,用于指定图像显示高度、宽度(单位厘米)和颜色。
type还可以是:code93、Code128A、Code128B、Code128C、CodeI2of5、CodeEan13、QRcode。
选择框:
{"type":"checkbox","content":...,"prop":"..."},这里,type为类型,这里是选择框(或称检查框)checkbox;content为true或false,为true则勾选,否则未勾选;prop形式如“h:4.0,c:255,l:0.5”,分别用于指定选择框的大小(单位mm,缺省值为5)、颜色(缺省值为0,即黑色)和框线宽度(单位磅point,缺省值为1)。
上下标:
{"type":"supersubscript","content":...,"prop":"..."},这里,type为类型,这里是supersubscript;content为字符串,一般被两个分号分隔成三个部分(比如字符串"A;B;C",则输出为A,B为上标,C为下标;如果字符串"X;y",则输出X的y次方。),上标与下标字符可以为空(即没有上标或下标);porp为文本样式,其形式与Unit对象的方法TextStyle一致。如果没有porp或者prop为空,则文本样式为当前文本样式。
/**
* “富文本”示例。一个富文本,就是一个包含任意上述文本、图像、换行JSON对象的数组。本代码示例中,假设模板字段单元名为:describe,其格式为富文本。
*/

var objRichText=[
    {
        "type":"text",
        "content":"我爱北京天安门",
        "prop":"c:255,b:true,n:楷体"
    },
    {
        "type":"supersubscript",
        "content":"X;y", //输出X的y次方
        "prop":"c:0,n:微软雅黑"
    },
    {
        "type":"checkbox",
        "content":true,
        "prop":"h:3.5,l:0.5,c:0"
    },
    {
        "type":"newline"
    },
    {
        "type":"image",
        "content":"http://www.mywebsite.com/image/morning.jpg",
        "prop":"h:3,w:3.5"
    }
    ...
];

var pw = GetPrintWorld();
var data={};
data.describe=objRichText;
...
var json = {};
json.action = "preview"; //预览
json.data = data; 
pw.Act(json);    //发送数据给打天下打印服务
数值
对于数值类型,一般需要选择一个合适的输出格式,来确定小数位数。
日期/时间
需要选择一个合适的输出格式。
布尔
需要选择一个合适的输出格式。
二进制
需要选择一个合适的输出格式,诸如“图像”等。传递给“图像“单元的数据可以是:①位于Web服务器上的图像文件URL(绝对地址,不能是相对地址);②本地文件(全路径);③将图像数据Base64编码后的字符串;④资源
图像在不改变原尺寸横纵比的前提下缩放以适应单元。如果格式为“图像+”(即在格式属性中选择“图像”,然后输入一个+号),则图像被缩放以铺满单元。
2.2.3 前缀/后缀

对于数值类型才有意义。用于指定输出数值的前缀/后缀。比如,对于金额3678.90,如果前缀为¥,则实际输出:¥3678.90。

2.2.4 公式

填写计算公式

2. 3. 扩展

other
2.3.1 容器

或称为容器类型,指的是单元包含动态对象的类型,即此单元做为动态对象容器,它包含哪种类型的动态对象。缺省为空,即不做为包含动态对象的容器。可选的容器类型如下:

单选框
将单元中的选择框对象做为动态对象,其中只有一个选择框可以被勾选。
多选框
将单元中的选择框对象做为动态对象,其中多个选择框可以同时被勾选。
文字框
将单元中的单字框对象做为动态对象,传来的数据被写到这些框里,每个框中最多有一个字或字母或数字。
混合
将单元中的(除单字框之外的)对象,诸如内嵌文本对象等不止一种对象做为动态对象。

示例采购合同中用到了“混合”容器,可参考。

2.3.2 联合

联合,全称为联合名称。具有相同联合名的单元,将联合为一个单元。联合有数值联合、日期联合、文本联合3种类型。只有在某些特殊的应用场景,联合会带来一些便利,当然,你完全可以不用联合。

数值联合 即针对数值类型的联合。举例如下:
下图是一支票的局部,其中的资金栏(红色圈起来的部分),就是数值联合:将其中的11个数值单元“联合”起来的,如此,这11个单元可视为一个单元来处理。图中,传来的数值为356712.5。

sample

为了正确地设置上图所示的联合,除了为这些单元指定同一个联合名称外,你还需要:
将联合中所有单元数据类型设为数值
指定个位单元:将从右向左数第3个单元(即上图“元”下面的单元)的数据格式设为“个位”。
如果需要前缀¥,在个位单元的数据之“前缀”属性中,输入¥即可。
日期联合 即针对日期的联合。有3单元日期联合和8单元日期联合,通常在“套打”应用场景下,才有必要用到日期联合。举例如下:
3单元日期联合
顾名思义,3单元日期联合,就是由3字段个单元来显示分别显示日期的年、月、日,如图所示,灰色的三个单元: sample ,其单元属性见下表:

名称 类型 联合
year 日期/时间 注册日期
month 日期/时间 注册日期
day 日期/时间 注册日期
如此一来,传递数据JSON数据:”注册日期”:”2019/6/15”,则实际输出结果如图: sample
另外,如果给其中的year单元指定(数据)格式:年(中文大写),则输出如图:sample

8单元日期联合
与3单元日期联合类似,只不过,8单元联合是将4位年、2位月以及2位日共8位数字,使其每位占用一个字段单元,然后联合之。
sample
如上图所示的8个(虚线)单元,就是8单元联合日期单元,其单元属性见下表:

名称 类型 联合
y1 日期/时间 注册日期
y2 日期/时间 注册日期
y3 日期/时间 注册日期
y4 日期/时间 注册日期
m1 日期/时间 注册日期
m2 日期/时间 注册日期
d1 日期/时间 注册日期
d2 日期/时间 注册日期
如此一来,传递数据JSON数据:”注册日期”:”2019/6/15”,则实际输出结果如图:sample
文本联合 即针对文本的联合。有单字符单元联合和多字符单元联合。 单字符单元联合是字符串中的每一个字符占一个单元;多字符单元联合则是字符串可以分布多个单元,但是单元中的字符数可以大于1。

参考示例:支票中用到了数值联合、有3单元日期联合。

2.3.3 溢出

用于指定在单元容纳不下包含的文本内容时,如何处理。

遮挡
遮挡超出的部分
延展
自动纵向扩展单元高度以适应文本高度。
仅仅将“延展”设置为“是”,是不能做到单元自动适应文本高度的,还需要在模板属性中,将打印模式属性设为“动态加页”、“动态加高”、“拼接分页”或者“拼接加高”才行。 如此,即为动态模板
收缩
缩小字体以使所有内容可见。
收缩为单行
缩小成一行,且以使所有内容可见。

参考示例:采购合同中用到了“延展”,以扩展含有大段合同文本的单元,并可以在超出页面时截断并分页。

2. 4. 明细

other

很多时候,模板表格需要包含多行明细信息,这些明细信息输出于一个M x N(M行N列)的表格结构中,如下图中的浅蓝色部分,是一个7行9列的明细输出区域。

table

如何将上图蓝色区域定义为一个明细呢?这就需要将明细结构首行各单元的“名称”、“类型”等单元属性定义好,并在明细结构的左上角单元,定义如下“明细”属性:

名称: 明细名称,起一个适当的明细名,比如“明细”、“details”等等。其命名规范与字段单元名称的命名规范一致。
行数: 明细结构的行数,又称为明细的结构行数,不能小于1(但是,行数乘以列数不能小于2)。对于上图中的明细来说,行数为7。
列数: 明细结构的列数,不能小于1(但是,行数乘以列数不能小于2)。对于上图中的明细来说,列数为9。
类型: 可选“静态”、“动态”或者“交叉”。
①静态:所谓静态,指的是模板的结构是静态的、不变的。
②动态:可以根据实际数据行数来动态改变明细的行数。仅仅此属性选择“动态”,还不可以使明细行动态改变,还要将模板的打印属性设置为“加页”、“加高”、“拼接分页”或者“拼接加高”才行。如此,即为动态模板
③交叉:交叉明细的列数是根据实际数据而变化的。如果让其行数也动态改变,那么将模板的打印属性设置为“加页”、“加高”、“拼接分页”或者“拼接加高”即可。
首部: 指定动态明细上面的若干行做为(在明细内)分页后的明细标题。
尾部: 指定动态明细上面的若干行做为(在明细内)分页后的明细尾部。
补空: 是否为明细补充空行以打满整页。
分页: 是精准分页还是在明细内分页。

明细中除了结构行,还有数据行这一概念:明细数据行,是指传递给打印服务器的数据中实际所包含的明细数据的条数,可能大于,也可能小于实际的结构行数。

定义了明细属性的M x N的表格结构,称为明细结构,简称明细。需要强调的是:明细结构中所有单元,只需要设置其首行的单元属性即可,其余行的各个单元,不必设置其属性,因为,系统在打印时,会自动获得其对应列首行单元的相应属性。
变量查看模式,点击工具条按钮button ,则进入变量查看模式(再次点击此按钮或者按Esc则退出此模式),如下图所示,明细结构中只有首行的各单元设置了比要的属性:

table

2. 5. 套打

other

套打,是指在预印刷的的纸张上的某些指定位置打印输出指定的内容,诸如各种银行票据、传统快递单、工商营业执照等等不一而足。将模板的打印模式指定为套打,则模板即为套打模板,除此之外,“打天下”套打模板与其他类型的模板基本是没有的区别的。 套打模板的表格线是不输出的。
这里的套打相关属性,只对套打模板有意义。

输出: 对应单元的内容是否套打输出。选择是或者否。
横偏: 指定套打输出时,单元内容在原位置的基础上的水平偏移量,单位毫米。缺省为0.0,即无横向偏移。
如果实际打印位置在水平方向上偏离了预定位置,可在此设置偏移:大于零,向右偏移,小于零,向左偏移。
纵偏: 指定套打输出时,单元内容在原位置的基础上的垂直偏移量,单位毫米。缺省为0.0,即无横向偏移。
如果实际打印位置在垂直方向上偏离了预定位置,可在此设置偏移:大于零,向下偏移,小于零,向上偏移。

3. 字段信息源

模板单元属性中的字段单元名称是手工填写的,如果需要弹框选择填充字段名,那么需设置字段信息源 ,服务端需要根据模板设计器的请求返回相应的字段信息。

1、设置字段信息源URL,指向后台服务端。
执行主菜单命令:文件->字段信息源,弹出会话框如下:

dlg
URL: 指向(用于返回字段信息的)服务端URL,比如:http://www.alipapa.com/xxxPath/GetFields.jsp。
用户: 用户名,用于服务端身份认证,如果不需要认证,可为空。
密码: 密码,用于服务端身份认证,如果不需要认证,可为空。
附加: 通过URL向后台请求字段信息时提交的附加信息,可为空。

2、构建服务端的URL页面代码,以返回字段信息