PDF套打失败?
李小翔
2015-06-30 19:36

内容列表

供稿人：张文秀
PDF套打的大致过程是：先导出word的xml文件，然后通过文档转换服务BroFileConvert转换成pdf文件；而BroFileConvert实际做是把xml文件用word打开，然后另存为为pdf文件后返回。
生产机有时候会遇到同一个流程，之前导出功能都好使，突然有一个单子的导出pdf不能导出而且后台报 java.net.SocketTimeoutException: Read timed out，这种情况大多数是生成的xml文件word不能正常解析，可能是数据中有特殊字符导致的或者是因为代码问题生成的xml不正确，BroFileConvert不能返回pdf文件导致超时。
查看文档转换服务器的控制台，可以看到下面的日志输出：
注：BroFileConvert日志也会显示报错信息Word文件打开失败,其实这里也会显示出错位置831行
解决方案：
· 	将PDF套打改成Word套打
· 	使用Word打开导出的doc文件，检查错误的代码并修复
· 	具体步骤如下。
在页面上中找到隐藏域 <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导出通常也可以使用这种方式来定位、处理问题。