ONLYOFFICE 的表单复杂字段开发详解
ONLYOFFICE 的表单复杂字段开发详解
上一回图文讲到了表单文件的入门使用:
一种新的表单制作表单填写高效解决方案
展示了使用正则表达式来设计开发逻辑复杂的填表域空格的功能,但是,正则表达式是一种非常难学的晦涩难懂的语言,虽然掌握后是屠龙宝刀,正则表达式不是谁都可以学得会的……

那么,不用正则表达式,能否设计开发上一篇图文里面的复杂功能呢?比如那个身份证号码输入验证功能?答案是肯定的,那就是使用表单复杂字段。

如上图菜单中最右侧的这个按钮复合字段
,复合字段的属性如下图所示

复合字段里面再插入多个各种不同类型的表单域,正好适合于身份证或手机号的不同的位域的具体设计定义,比如我们都知道一个人的出生日期是身份证号的第 7 位到第 14 位,因此在我这里设计的身份证号的复合字段的占位符为空,由各个位域的字段的占位符来定义。
字段关联
密钥与关联字段:在上侧的输入框输入身份证,就会在下侧的输出框自动计算显示输出你的身份证号码,在上侧的复合字段的属性密钥里定义一个名称,我这里输入为“身份证号
”,在下一行的复合字段的属性密钥的下拉列表中,选择上面为输入框定义的密钥“身份证号
”,就可以完成字段关联

这样在输出的可填写表单.oform
文件中,你在输入框的输入会直接自动的同步输出到输出框中。

在截图这个表单文件中同样操作了手机号,手机号输入后同时输出来。
地址码字段
身份证前 6 位是属地户籍信息,省、县(市)、乡(区),比如我们北京的都是110
开头,然后东城、西城、海淀、朝阳……等分配接下来的三位103
、104
、105
…………其他城市有其他的代码,这里就不列出具体的行政区划代码列表了,这 6 位都可能会出现从 0 到 9 的 10 个阿拉伯数字字符,因此,这个字段的表单文本规则很简单:地址码字段属性的格式
下拉框中选择数字即可限定只能输入阿拉伯数字字符,并且勾选字数限制
设为 6 即可,如下图所示

占位符就是没有输入的状态下的显示内容,习惯用 0 填充,不设置占位符的话,空白状态的地址码字段的宽度就会缩地很短,填表时随着输入而动态的加宽,可能会把本行文本顶出本行而自动换行,自动换行有可能导致下面各行连锁下移一行,引发格式灾变,因此,占位符预先占取了位置就可以方便设计表单版式了,当然还有另一种方式就是截图中文字字段属性的字符组合
复选框,勾选后可以在单元格宽度
栏内精确定义每一个字符的宽度。
出生日期码字段
年月日总共有 8 位数字:
年份前两位
只能是19
或者20
,毕竟不可能有 18 几几年出生现在还健在的人,那都得 120 多岁了,所以这里使用候选列表
表单域

值设置处仅需要添加19
和20
两个字符串即可,占位符就不要置 0 了,而从候选列表里面选一个作为占位符,最终填表时效果如下,只能从下拉框中选择一个

年份后两位
虽然人类活不到 120 多岁,但是百岁老人还是不罕见,最著名的过百岁才逝世的老人有千古功臣张学良将军

所以年份的后两位的字符串的可能性实在是太多,就不用候选列表
表单域,还是使用普通的文本域如下:

格式
选择数字,字数限制
为 2,字符组合
里将单元格宽度``精确
的调整至0.26厘米
月两位
1 年只有 12 个月,所以选择使用候选列表
这个表单域,值设置
里面添加从01
到12
这 12 个候选项,占位符选择 01:

日两位
每个月的天数不太一样,但最多也不过 31 天,所以也选择使用候选列表
这个表单域:

至于 2 月份只能留给填表人自己负责不去选择31
、30
、29
这几个数字了
顺序码
出生日期之后的 3 位数字是顺序码,是给同地址码同出生日期码的人编定的顺序号,其中奇数分配给男性,偶数分配给女性,因此设计如下:

校验码
最后一位是校验码,校验码为一位数,但如果最后采用校验码系统计算的校验码是“10
”,碍于身份证号码为 18 位的规定,则以“X
”代替校验码“10
”,因此,校验码有 11 种可能,分别是从0
到9
,外加一个“X
”,这里并不复制校验码真实的计算方法,就只是禁止输入校验码之外的字符,比如 abcde……之类的英文字符,所以如下设计:

字段的格式
选择无,也就是纯文字,在可用符号
里直接输入所有这些可能出现的 11 个字符,从0
到X
,限制 1 位数字
这样就能通过复杂字段来严格限制并校验身份证号码的输入了。
固定字段
很多时候填表内容中都会有固定出现的字段,如下图所示,比如电子邮箱地址里面的@
符号,比如社交网站个人主页的https://blog.csdn.net/
,这些字段可以直接在复合字段中输入,然后在需要填表人填写的位置插入具体的表单域:

然后填表人只需要输入自己的用户名,不用输入完整的地址。
固定字段可以位于复合字段的开头、中间以及末尾的任意位置,例如下图所示,电话号码各个数字段中间的-
字符,方便人们读写电话号码,国内的手机号码一般是 11 位,正确的读写断句应该是三位四位四位的读法,对应的在各段之间插入一个-
字符,这是有意义的,如下
掩码规则
在普通文字字段
的格式
下拉框中还可以选择使用任意掩码
,这种掩码技术比正则表达式稍微简单易学一些,举例如下:

国内的手机号的前三位一般是手机服务运营商的的号段位,比如图中的135
是移不动的的号段,所有号段的第 1 位都是1
,第 2 和第 3 位则可能是任意阿拉伯数字,所以这里设定掩码的规则是 199,这样就完美的表达了如此规则

手机号的中间 4 位和后 4 位都是阿拉伯数字,因此都开启字数限制
设为 4,并开启字符组合
色彩、字体、杂项排版
如上图所示,可以开启边框颜色和背景颜色,标准的颜色板功能,如下图所示

其它的排版可以选择相关字段后,就像正文一样,应用各种排版,如上述各截图,可以设置文字的字体、颜色、斜体、加粗、字号、等等,甚至可以放置在表格里面,用表格来精确调整位置
体验
上面展示的实例的可填写的表单在这里
复杂字段.oform[1]
在你输入手机号码之后它能自动的计算出来你的手机号码:

参考资料
[1] 复杂字段.oform: https://personal.onlyoffice.com/products/files/doceditor?fileid=5154256&doc=Y3l6ZGkwSUhzUy9yTVdBbjN2UnN0NEIxY1d1cjQzeDJ4TWVMbnFWaUluUT0_NTE1NDI1Ng
[2] ......[3] 表单创建工具中复杂字段介绍和使用指南: https://www.onlyoffice.com/blog/zh-hans/2022/10/what-is-a-complex-field/
[4] ONLYOFFICE 表单字段类型及配置: https://test-helpcenter.onlyoffice.com/ONLYOFFICE-Editors/ONLYOFFICE-Document-Editor/UsageInstructions/CreateFillableForms.aspx