2017-02-16 177 views
5

TL;博士,我從JavaScript尋找批量打印數據庫存儲的HTML文檔的一個很好的方式使用Javascript - 編程批量打印HTML文檔

我們的用戶通過生成一個開源的所見即所得的基於JavaScript的文本富文本內容編輯(CKEditor)。 HTML內容保存到我們的數據庫,並可以通過其內置的打印功能(基本上只是window.print())直接從編輯器打印。這是偉大的,完美的作品。

現在,我們需要批量打印保存的文檔,我正在尋找可行的解決方案。我可以看到各種選項,但都有很大的折衷:

  1. 用戶選擇要打印的文檔。 JS代碼循環遍歷文檔和調用一個接一個地打印。這裏的問題是用戶會看到一堆打印對話框。這是痛苦的。 (除此之外:我們正在使用Chrome瀏覽器,但我沒有將其設置爲信息亭模式的選項)

  2. 用戶選擇要打印的文檔。 JS代碼將所有這些組合在一個(隱藏)容器中,並且它們都被打印爲一個「文檔」。這些可以是帶有表格,圖像等的相當大的文檔。我擔心這裏涉及的性能,因爲我們可能會向DOM添加顯着的數量。

  3. 與上述#2類似,但在某些時候文檔被轉換並保存爲單個PDF。這樣可以,但是將HTML轉換爲PDF似乎並沒有很多好的/符合成本效益的選項。

  4. 生成某種可以處理HTML內容的報告。我看了一下SQL Server報告服務,但它支持一組非常有限的HTML標記和CSS屬性。

有沒有更好的方法批量打印JavaScript的HTML內容?很感謝任何形式的幫助!

編輯按@保羅,我需要澄清幾點:

內容是,這是在標準的在線文本編輯器創建。在我的情況:

  • 無內部框架
  • 無動畫
  • 沒有動態內容

現在,是我從打印樣式表將被應用編輯器直接打印,所以這可能複雜化事情有點。

+0

這樣的事情? http://stackoverflow.com/a/13724670/2418529 –

+0

@NicolòCozzani這將遭受#2中的大DOM問題。我的擔憂並不是打開一個新窗口,這是一個新的Chrome打印對話框。謝謝! –

+1

我很滿意投票的人,但會很感激反饋意見,以改善未來的問題。這對我來說似乎是一個合理的話題。 –

回答

7

由於內容可能很大並且消耗大量內存,因此我會在服務器端執行此操作。在客戶端和請求服務器上選擇文檔以將其呈現爲PDF,例如利用PhantomJS。這將允許您甚至使用移動客戶端來獲取PDF。

+0

這也是我要採用的方法 –

+0

這使得很多意義, 謝謝。你可以建議任何特定的庫來實現這與PhantomJS? –

+1

@JP。既然你有html,你可以使用nodejs和[phantom](https://github.com/amir20/phantomjs-node)結合來顯示html,參見[截圖](http://phantomjs.org /screen-capture.html)的功能,以便如何將其打印爲PDF格式。 – matt

0

我完全同意上面的答案,PhantomJS可能是最好的選擇。唯一的問題就是在可靠性方面PhantomJS已經非常靈活,並且可以在最後幾個版本中使用。如果文檔太大,Phantom可能會變得太多(記住它最初是爲網絡測試而設計的,並且變成了網頁自動化)。當寫這個劇本,我會建議如下的概括(向上突破的過程成更容易管理的步驟)

var steps = [ 
    function() { 
    // step 1 
    }, 
    function() { 
    // step 2 
    } 
] 

再次,它不是整體完美的選項後面,卻是我們必須以最好的一個現在工作。如果您有任何問題可以隨時伸手,我正在自己的Web自動化工作,所以這一切都將在我心中新鮮。

下載用於PhantomJS Here

1

沒有足夠的代表處發表評論。

我會在服務器端做到這一點。從後端生成HTML文檔或PDF,並將其下載給用戶。

當用戶首次單擊時禁用下載按鈕,並在服務器生成文檔時啓用它。您可以使用xmlhttprequest通過在後端設置全局變量來檢查完成的任務的百分比,並將其顯示在客戶端。

如果需要很長的時間來生成服務器,請用戶檢查later.Like說文件將準備下載到XXXX-XXXX