2012-11-20 189 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

布魯諾 - 我很樂意。但是看起來我沒有足夠的聲望去做投票! –