2012-11-20 131 views
1

我想实现浏览器中的Microsoft Word文档合并功能,该功能将合并文档转换为PDF并提供给用户下载。我希望在Google Chrome和Firefox中支持此过程。这是我想它是如何工作的:在浏览器中将MS Word文档转换为PDF

  1. 客户端JavaScript获得在DOCX格式的Word模板文件,无论是从一台服务器,或通过询问用户的文件上传(它可以然后读取使用FileReader API)
  2. JavaScript使用其本地数据结构(例如,它通过Ajax获得的数据列表)将模板扩展为文档。它可以通过解压缩docx文件并处理其内容,或者使用DOCx.js直接执行此操作。模板扩展只是将模板变量替换为从本地数据结构获取的值。
  3. JavaScript然后将展开的模板转换为PDF。
  4. JavaScript提供PDF文件供用户下载,例如使用Downloadify。

我遇到的困难是在第3步我的理解(基于所有的谷歌搜索,到目前为止我已经做了)是,我有以下选项:

  1. 要求本地机器一台Windows机器,并调用Word,将其转换为PDF。这可以通过使用WScript.shell使用一些脚本来完成,并且它在Internet Explorer中看起来可以使用。但基于我读过的内容,它看起来并不像我可以从Chrome或Firefox中调用WScript.shell,因为它们的安全限制。
  2. 我很乐意尝试使用Silverlight进行转换,但是我没有找到足够的文档来说明如何做到这一点。理想情况下,如果我使用Silverlight,我想用JavaScript编写Silverlight代码,因为(a)我不太了解CSharp,(b)我认为在JavaScript中会更容易。
  3. 创建一个Web服务,将给定的docx文件转换为pdf文件,并通过Ajax调用该服务。如果可能的话,我宁愿不这样做,原因如下:(a)我尝试使用docx4java(我是一个相当熟练的Java程序员),但转换过程太慢,并且不能很好地保存文档内容; (b)我想避免向网络发出呼叫,以避免安全问题。看起来有可能在Windows服务器上编写一些小服务来进行转换,如果没有其他好的选择,我可能会选择这种方式。

如果我一直不清楚任何事情,请让我知道。我会感谢您的想法和反馈。

+4

为什么必须是客户端?这可能会更容易使用服务器端服务(如一个无头的OpenOffice实例进行转换) –

+2

在客户端,您必须为每个浏览器(以及可能的每个平台)构建一个插件,这会花费您很多的时间。 –

+0

嘿,这不是一个好主意。如果你需要这样做,只需编写一个只能在ie上运行的ActiveX,并且你需要在Windows MFC类上使用C++的经验。 – pylover

回答

1

我喜欢命令行工具。

装入文档到你的服务器,并使用LibreOffice的通过命令行来将其转换为PDF

soffice.exe --headless --convert-to pdf --outdir E:\Docs\Out E:\Docs\In\a.doc 

您可以显示一个进度条给用户,完成后给他们下载文档的选项。

上的LibreOffice的命令行参数的更多信息请here

完成。

+0

Pekka,布鲁诺 - 感谢您的评论。那么共识似乎是使用LibreOffice?关于转换后的PDF与原始文档有多接近的评论?我会再看看这个。这似乎是一个不错的选择,因为我甚至可以在Linux主机上运行它。再次感谢! –

+0

@an upvote会很好:) – Bruno

+0

布鲁诺 - 我很乐意。但是看起来我没有足够的声望去做投票! –