2013-07-17 263 views
1

我需要將[未公開訪問]的網頁轉換爲PDF或圖像[最好轉換爲PNG]。將網頁轉換爲PDF或圖像

網頁包含一組圖表和圖像。大部分圖表通過Ajax調用進行填充,因此頁面加載和圖表加載之間存在延遲。

我期待的答案對任何這些問題:

1 - 我發現設爲快照的API,但沒有他們的支持我的訪問內部頁面。由於我試圖導出的網頁不是公開的,因此我需要進行身份驗證。最大的問題是我無法發送請求標頭[如session-id,cookie或其他變量]以及這些API。看起來他們不支持這種功能。

2-我不確定我是否可以做以下事項:使用HTTP客戶端登錄到我的網頁,添加http標頭,發送獲取調用並獲取HTML字符串。然後使用其中一個轉換器將其轉換爲PDF。我不確定的是,如果可以從我從http客戶端獲得的HTML字符串中獲取正確的PDF,因爲資源[css,js等]將會丟失。我希望我的pdf /圖像與網站上的完全一樣。

我真的很感激,如果你可以幫忙。

由於提前,

ED

回答

1

你可能最好使用wkhtmltopdf,這是一個服務器端工具和易於安裝的。

有,你可以用它來等待你的Ajax來完成兩個參數,嘗試:

  • javascript-delay影響程序等待時間爲JavaScript來完成
  • window-status等待一定的回報爲窗口

代碼參見大量的人工這個程序here

wkhtmltopdf生成一個PDF,wkhtmltoimg默認生成一個圖像,這是PNG(按照您的要求)。

+0

謝謝你的回答。我已經檢查了這一個,但我想運行它作爲我的程序的一部分,而不是一個獨立的應用程序。 – programmersmurf

+0

對不起,延遲迴復。我將你的答案標記爲正確答案。我實際上實現了一個使用在後端運行wkhtmltopdf的微服務的解決方案。這個解決方案已經運行了三年,沒有問題。我認爲這是最好的(免費)解決方案之一,具有很大的靈活性。 – programmersmurf

0

認證是困難的,因爲它涉及到安全性。由於您描述的操作不正常,因此可能會導致各種警報響鈴。完全有可能做到這一點,但是在面對安全更新和代碼更改時,它很容易出錯並且很脆弱。

因此,我將建議一種替代方法,這是我們經常爲ABCpdf(我工作的)推薦的方法之一。是的,我們支持標準認證方法,但這種方法的優點在於它非常強大,適用於其他解決方案(如基於Java)和新穎的認證方法。

通常,您只需要當前頁面的PDF。做到這一點的最簡單的方法就是修復HTML。你這樣做的方式取決於你的環境。例如,在ASP.NET中,您可以使用HttpResponse.Filter屬性或重寫頁面的Render方法來獲取當前頁面的HTML。你這樣做的方式將取決於你在編碼什麼。

然後你需要將這個HTML保存到一個文件,並通過'file://'協議URL將它呈現給你的解決方案。現在很明顯,在這一點上,任何相關鏈接都將被打破,但通過放入引用它們所在位置的BASE標籤可以很容易地解決這個問題。

服務器端頁面引用的資源類型通常是靜態的。因此,如果您可以創建引用實際文件而非網站的標籤,則您將繞過任何認證以訪問這些資源。

這仍然留下了基於AJAX的問題,這是另一種蠕蟲病毒。渲染延遲方法是我們多年來一直支持的(從AJAX出現之前),但它不是非常可靠,因爲你只是不知道要等多久。

更好的是通過一個回調鏈接到JavaScript,通過回調可以確定頁面是否被加載。我不認爲ABCpdf適合你,因爲它是.NET,但我一定會鼓勵你尋找一種基於Java的解決方案,它使用這種更復雜的方法。

+0

如何通過回調函數將更緊密的鏈接導入JavaScript? –