用来导出到Word、WPS的工具类,在xml格式的视图模版中使用。
Word模版制作说明:
1、在Word中,调整好所有的格式,包括“正文”样式里的默认中、英文字体(否则可能出现字体不一致的现象)。
在需要插入简单的文本数据的地方输入一些容易被搜索得到的代码,或者直接输入对应的el表达式,如"${bean.bianhao}";
在需要插入图片的地方,照常插入即可,比如页眉的logo,不过通用的图片,建议放到 resources/template/export 文件夹下,编写自定义标签以便重用;
在需要插入意见的地方,插入一个两行一列、无边框的表格,第一行左对齐、并输入一个易于查找的标记如$$,
第二行右对齐、并输入一个日期(根据需要一般为yyyy-MM-dd或yyyy-MM-dd HH:mm)、然后在前面插入一个签名图片并调整位置;
在需要插入手写签名的地方,插入一个假的版式为“浮于文字上方”的签名图片(resources/template/signature/dummy.png),并设置好位置(Shift+上下左右可以微调);
将文档保存成XML格式(WPS保存成中文办公软件文档格式),如果是Word2007及以上的版本,保存为Word 2003 XML文档。
2、用使用Eclipse或者其他XML美化工具将XML文件格式化,并复制到gsp文件中(如export.doc.gsp),并且在头部插入需要的内容:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<%@ page import="bropen.bpm.plugins.export.*" %>
<% ExportUtils exportUtils = new MSWordExportUtils(request) %>
注意上面这种写法,是为了确保生成的xml文件中"<?xml ..."在文件最上面,以免解析时格式错误。
3、修改gsp文件
搜索之前写的el表达式,将其修改为正确的代码,如“${askForLeaveInstance.bianhao}”
搜索标签“<w:binData w:name="wordml://03000001.png">${exportUtils.fileBinData("export/logo_209x33.png")}</w:binData>
在需要插入手写签名的地方,可以分别调用API:
signatureDef、signature
在显示动态表的地方,可以循环 w:tr 标签,输出表格,并删除多余的空行。
在需要插入意见的地方,找到 w:tbl 标签,记录下它的宽度信息(w:w)、签名图片处(v:shape)的style(如 left:0;text-align:left;margin-left:285pt;margin-top:-10pt;z-index:2)
然后将整个表格标签替换成意见标签的写法,如:
${exportUtils.opinions(bean, "5000", "left:0;text-align:left;margin-left:85pt;margin-top:-20pt;z-index:3", null, "总经理意见", null, 1, 1, 1)}
如果需要签名图片,则需要提前调用 opinionsDef。
如果导出时签名显示位置不正确,可以微调style里的left、top、margin-left、margin-top等属性。
4、一些参考语法:
插入红色的几个字:
<w:r>
<w:rPr><w:rFonts w:ascii="宋体" w:h-ansi="宋体" w:hint="fareast"/><wx:font wx:val="宋体"/><w:color w:val="FF0000"/></w:rPr>
<w:t>(${bean.getBizhong()})</w:t>
</w:r>
格式化数字的API:
NumberUtils.format
设置简单的保护(不允许编辑、拷贝等),在 w:docPr 标签内插入:
<w:documentProtection w:edit="forms" w:enforcement="on" w:unprotectPassword="C782CE28"/>
注意这个密码就是1,可以随便改一下。等同于:工具 - 选项 - 安全性 - 保护文档:“编辑限制”设置为仅允许“填写窗体”。
(在WPS中,如果另存成XML格式的.uof后,保护失效)。
| Modifiers | Name | Description |
|---|---|---|
protected javax.servlet.http.HttpServletRequest |
request |
| Constructor and description |
|---|
ExportUtils
(javax.servlet.http.HttpServletRequest request)构造方法 |
| Type | Name and description |
|---|---|
protected String |
escapeXML(String xml)将"<"等字符转换成转义字如"<" |
String |
fileBinData(String filename)将文件转化成Base64编码,并返回字串。 |
protected String |
loadFileAsBase64(String filename)从template文件夹下根据相对路径、或完整的文件路径获得文件内容,并返回base64编码后的字符串 |
String |
opinion(Object opn, String width, String style, Object blank = 1, Object datetime = 1, Object sigLen = 10)插入意见表格,意见中将包含员工的签名图片(或姓名文本) |
String |
opinionDef(Object opn, String style)插入一个或多个意见的员工签名图片的定义。 |
String |
opinions(Object bean, String width, String style, Object tags = null, Object groups = null, Object nodes = null, Object blank = 1, Object override = null, Object datetime = 1, Object defaultTxt = null, Object sigLen = 10)显示意见的表格(基本同ProcessTagLib中的意见标签)。 |
String |
opinionsDef(Object bean, String style, Object tags = null, Object groups = null, Object nodes = null, Object blank = 1, Object override = null)定义意见中的手写签名图片 |
String |
paragraph(String txt)插入一段文字(段落)。 |
protected Map |
parseStyle(String s)解析style,并返回一个Map |
String |
picture(String id, String style)插入浮于文字上方的图片引用。 |
String |
pictureDef(String id, String filename, String style)插入图片定义。 |
protected void |
renderOpinion(StringBuilder sb, String tableWidth, String opnContent, String opnSignature, String sigTime, String sigStyle) |
protected String |
renderParagraph(String txt) |
protected String |
renderPicture(String id, String style) |
protected String |
renderPictureDef(String id, String bin, String ext, String style) |
protected String |
renderText(Object txt) |
String |
signature(bropen.framework.core.osm.Employee emp, String style, Integer blank = 10)插入浮于文字上方的员工签名图片引用,如果签名图片不存在,则插入员工的姓名文本(总长度为参数blank) |
String |
signatureDef(bropen.framework.core.osm.Employee emp, String style)插入一个员工的签名的图片定义。 |
protected String |
string(Object txt)直接插入字符串,如果为空则插入空串 |
String |
text(Object txt)在段落中插入一段文字 |
| Methods inherited from class | Name |
|---|---|
class Object |
Object#wait(long, int), Object#wait(long), Object#wait(), Object#equals(Object), Object#toString(), Object#hashCode(), Object#getClass(), Object#notify(), Object#notifyAll() |
将"<"等字符转换成转义字如"<"
将文件转化成Base64编码,并返回字串。
如果时Word,则放在“w:binData”中,注意“w:name”必须唯一;
如果时WPS,则放在“uof:对象集 - uof:其他对象 - uof:数据”中。
filename - 位于template下的文件名,或完整的文件路径从template文件夹下根据相对路径、或完整的文件路径获得文件内容,并返回base64编码后的字符串
插入意见表格,意见中将包含员工的签名图片(或姓名文本)
opinion - 一个意见或多个意见对象列表width - 表格的宽度style - 签名图片的位置等信息blank - , datetime 参考 opinions插入一个或多个意见的员工签名图片的定义。
opinion - 一个意见(Opinion)或多个意见对象列表style - 签名图片的位置和zIndex,如:"left:xxx; top:xxx; z-index:xx",Word不需要显示意见的表格(基本同ProcessTagLib中的意见标签)。
bean - 业务Bean对象width - 表格宽度style - 签名图片的位置和zIndex,如:"left:xxx; top:xxx; z-index:xx"tags - 可选,逗号分割的字符串groups - 可选,显示分组。分组ID列表/数组。null则显示所有流转意见,否则仅显示对应分组的意见(注意主干的分组ID为trunk)nodes - 可选,逗号分割的字符串,如果为空则显示所有意见blank - 可选,如何显示意见,0/null=过滤掉空意见(不显示),1=空意见仅显示签名+时间,2=空意见显示空行和签名+时间,3=不论有无意见仅显示签名+时间override - 可选,如何显示同一个环节的重复意见,默认显示所有,1=同一个分组、同一个环节、同一个用户、同一个意见标签中只显示新的datetime - 可选,如何显示时间格式,1(默认)=显示日期和时间,2=仅显示日期default - 可选,当没有找到对应的意见时显示的内容,如“无”signatureLength - 可选,默认为10,表示如果没有签名图片时文本的数量。例如“张三”,会输出“张三”加6个空格。定义意见中的手写签名图片
bean - 业务Bean对象style - 签名图片的位置和zIndex,如:"left:xxx; top:xxx; z-index:xx",Word不需要tags - 可选,参考 opinionsgroups - 可选,参考 opinionsnodes - 可选,参考 opinionsblank - 可选,参考 opinionsoverride - 可选,参考 opinions插入一段文字(段落)。
Word则插入“w:p”标签,WPS则插入“字:段落”标签。
txt - 文字内容解析style,并返回一个Map
插入浮于文字上方的图片引用。
需要先定义图片(pictureDef)。
如果是Word,则插入“w:pict”标签;
如果是WPS,则在“字:句”中插入浮于文字上方的图片引用标签“字:锚点”。
id - 图片的IDstyle - 图片的大小、层次等:width, height, left, top, z-index插入图片定义。
如果是Word,则插入“w:binData”标签,该标签可以放在任何地方;
如果是WPS,则在"uof:对象集"中,插入“uof:其他对象”、“图:图形”标签
id - 图片的IDfileName - 位于template下的文件名,或完整的文件路径style - 签名图片的位置等信息,Word不需要插入浮于文字上方的员工签名图片引用,如果签名图片不存在,则插入员工的姓名文本(总长度为参数blank)
需要先定义签名图片(signatureDef)。
employee - 需要插入签名的员工style - 签名图片的位置等信息blank - 签名所占位置的字符数长度(如果没有图片时,会插入员工名称,此时如果字数不够时,用空格补)插入一个员工的签名的图片定义。
employee - 需要插入签名的员工style - 签名图片的位置等信息,Word不需要直接插入字符串,如果为空则插入空串
在段落中插入一段文字
Word则插入“w:t”标签,WPS则插入“字:文本串”标签。
txt - 可以转成String的对象BROPEN Documentation, 2020-04-21 11:24