浏览器将MS Word文档转换为PDF

时间:2012-11-20 15:54:16

标签: javascript silverlight activex pdf-generation ms-office

我想实现一个浏览器内的Microsoft Word文档合并功能,该功能可将合并后的文档转换为PDF并提供给用户下载。我希望Google Chrome和Firefox支持此流程。以下是我希望它的工作方式:

  1. 客户端JavaScript以docx格式从服务器获取Word模板文档,或者通过要求用户进行文件上载(然后可以使用FileReader API读取)
  2. JavaScript使用其本地数据结构(例如,通过Ajax获得的数据列表)将模板扩展为文档。它可以通过解压缩docx文件并处理其内容或使用DOCx.js直接执行此操作。模板扩展只是用从本地数据结构获得的值替换模板变量。
  3. 然后,JavaScript将展开的模板转换为PDF格式。
  4. JavaScript将PDF文件提供给用户以供下载,例如使用Downloadify。
  5. 我遇到的困难是在第3步。我的理解(基于我到目前为止所做的所有Google搜索)是我有以下选择:

    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. 如果我不清楚任何事情,请告诉我。我很感激您的想法和反馈。

2 个答案:

答案 0 :(得分:1)

我喜欢命令行工具。

将doc加载到您的服务器并使用LibreOffice通过命令行将其转换为PDF

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

您可以向用户显示进度条,完成后可以选择下载文档。

有关LibreOffice命令行参数的更多信息,请转到here

完成。

答案 1 :(得分:0)

现在是一个古老的老问题,但是对于任何偶然发现此问题的人来说,Web汇编(wasm)现在使这种方法成为可能。

我们刚刚发布了https://www.npmjs.com/package/@nativedocuments/docx-wasm,可以在本地执行转换。