关于Word文档的自动化

Sun 08 June 2014 / In categories Productivity

Word

我的初衷是设计一个表单来收集数据。最初的设想是用Web表单来做。表单最终需要打印出来,但是用CSS无法对Web页面进行精细的打印布局,而且各个主要浏览器对打印的支持也千奇百怪,所以只能采用其他办法了。

Word是一个不错的排版工具。在Word中打开developer(ribbon)工具栏,可以用来设计表单。如果Word可以作为客户端,可以自动从URL获取表单数据,自动更新文档该多好。结果困难重重,这涉及到编写VBA宏,以及通过COM调用Internet Explorer从URL获取数据。这不是最复杂的部分,更麻烦的是如何组织数据!XML应该最好的选择了,但用VBA来解析XML似乎不是一个好主意。

即便所有功能都实现了,Word也不会是一个好的客户端。Word文档的便携性极差,同一个Word文档丢给另外一个人观看,格式可能就不一样了。主要是因为每个人电脑上安装的Word版本不尽相同,对VBA宏的安全性设置也不同,VBA要调用的COM组件也不一定在系统里面装备齐全,调用宏获取URL数据的可靠性极低。

PDF文档倒声称是可便携的,也支持表单,而且还有Javascript可以来写脚本。但是创建PDF表单需要专业的工具,需要用到昂贵的Adobe Acrobat专业版或者其他的工具(如排版工具Scribus)。此外作为客户端的Adobe Reader对表单的支持也是有限的,版本XI以下的Adobe Reader填写表单是不能够保存文档的。

于是只能放弃客户端方案,采用使用服务端来生成文档的方法。

现如今Word采用了开放的OpenXML文档格式,可以轻松地用编程的方法创建Word文档。试了下确实是可以,在安装了一大堆SDK之后,上CodePlex学习了几个例子,终于可以在Windows上搞成了。可是想把这代码挪到服务端使用却没那么简单,必须使用微软自家Windows Server以及Sharepoint Server才行,免费的上哪儿找去啊?

最后还是得用在线生成PDF的方式来解决这个问题。使用Java语言可以考虑iText,使用Python的话可以用ReportLab

本着想偷懒的意图却是浪费了许多时间,简单好用且免费的解决方法要是有的话别人早就用了。一开始不想在服务端做,图省事儿想在客户端解决。结果绕了一圈之后还是回到了服务端。沿正确的路,才能找到正确的东西。

Load Disqus Comments