一般动作
供稿人:张文秀
PDF套打的大致过程是:先导出word的xml文件,然后通过文档转换服务BroFileConvert转换成pdf文件;而BroFileConvert实际做是把xml文件用word打开,然后另存为为pdf文件后返回。
生产机有时候会遇到同一个流程,之前导出功能都好使,突然有一个单子的导出pdf不能导出而且后台报 java.net.SocketTimeoutException: Read timed out,这种情况大多数是生成的xml文件word不能正常解析,可能是数据中有特殊字符导致的或者是因为代码问题生成的xml不正确,BroFileConvert不能返回pdf文件导致超时。
查看文档转换服务器的控制台,可以看到下面的日志输出:
注:BroFileConvert日志也会显示报错信息Word文件打开失败,其实这里也会显示出错位置831行
解决方案:
具体步骤如下。
在页面上中找到隐藏域 <g:hiddenField name="_export_format" value="pdf" />, 把value值改成doc:
把相应的 export.pdf.gsp 视图复制、并改名成 export.doc.gsp 放在相同目录下,此时,再点击页面上的导出按钮,得到的是后缀为doc的Word的文件:
用Word打开导出的doc文件,就会有提示:
看这个错误是名称字符非法,而且还有具体位置,把这个导出文件用文本编辑器打开,到相应的行数就可以看见是哪里的数据有问题了:
可以看到,831行是特殊字符导致Word打开失败,这个就可以找到对应是那个数据有问题了,然后在 gsp 中找到相应代码加 “.encodeAsHTML()”即可。
BTW:Excel、Word导出通常也可以使用这种方式来定位、处理问题。