我是新手wkhtmltopdf。我想知道如何在Eclipse中使用wkhtmltopdf和我的Dynamic Web Project?如何將wkhtmltopdf與我的Java動態Web應用程序集成?如何在Java Web應用程序中使用wkhtmltopdf?
wkhtmltopdf的初學者是否有任何教程可用?
(基本上,我想用wkhtmltopdf在我的web應用程序,這樣,當用戶點擊保存按鈕,當前頁將被保存爲PDF文件)。
我是新手wkhtmltopdf。我想知道如何在Eclipse中使用wkhtmltopdf和我的Dynamic Web Project?如何將wkhtmltopdf與我的Java動態Web應用程序集成?如何在Java Web應用程序中使用wkhtmltopdf?
wkhtmltopdf的初學者是否有任何教程可用?
(基本上,我想用wkhtmltopdf在我的web應用程序,這樣,當用戶點擊保存按鈕,當前頁將被保存爲PDF文件)。
首先,技術說明:因爲你想在web項目中使用wkhtmltopdf,所以如果你部署到通過ssh訪問的Linux服務器機器上(即通過網絡),你需要使用修補Qt版本,或運行X服務器,例如虛擬X服務器xvfb。 (我不知道如果部署到運行Linux以外的操作系統的服務器會發生什麼情況)。
其次,在web項目中使用wkhtmltopdf應該非常簡單。
如果你只是想保存服務器生成的版本的當前頁面,即沒有任何可能已經像用戶填寫表單,或JavaScript添加新的DOM元素的變化,你只需要有在URL的末尾添加一個額外的可選參數,如?generate=pdf
,這將導致該頁面生成爲PDF,然後PDF按鈕將鏈接到該URL。如果你只是使用簡單的JSP或者其他東西,這可能是很多工作要添加到每個頁面的,但是根據你使用的是哪個Web框架,Web框架可能會提供一些幫助來在每個頁面上實現相同的動作,如果你需要實現這一點。
要實現這種方法,您可能希望通過包裝響應對象並覆蓋其響應對象並覆蓋其方法getWriter()
和getOutputStream()
來捕獲響應。
另一種方法是有一個「提交併生成PDF」按鈕,它將以PDF形式生成下一頁頁面。如果你有一個用戶需要填寫的表單,這可能會更有意義 - 我不知道。這是一個真正的設計決定。
第三種方法是使用Javascript將頁面的當前狀態上傳回服務器,並使用wkhtmltopdf進行處理。這可以在任何頁面上工作。 (這可以在任何網站上使用,不僅僅是你的,如果你把它做成一個小書籤。只是一個想法發生在我身上 - 這可能不是一個好主意。)
第四種方法是,因爲wkhtmltopdf可以抓取網址,以傳遞網頁的網址而不是網頁的內容(只有在請求是HTTP GET的情況下,或者相當於同一網址上的HTTP GET時,纔會生效)。這在捕獲自己的響應輸出上有一些小的開銷,但它可能可以忽略不計。你也很可能需要用這種方法將cookie複製到cookie jar中,因爲大概你的用戶可能已經登錄或者有一個隱式會話。
所以你可以看到有很多選擇!
現在,問題仍然存在:當您的服務器有必要的HTML,從上述任何方法,如何將其饋送到wkhtmltopdf?這很簡單。您需要使用Runtime.getRuntime().exec()
或更新的API ProcessBuilder
來產生外部進程 - 請參閱http://www.java-tips.org/java-se-tips/java.util/from-runtime.exec-to-processbuilder.html以進行比較。如果你很聰明,你應該能夠做到這一點,而不需要創建任何臨時文件。
其中一個wkhtmltopdf網站目前正在關閉,但主要自述文件可用here,它解釋了命令行參數。
這只是給出一些指針的大綱答案。如果您需要更多詳細信息,請讓我們知道您需要知道的具體具體爲。
附加信息:
如果你最終企圖調用wkhtmltopdf從Java編寫的外部程序(或就此而言,任何語言),請注意,「正常」的輸出,你使用wkhtmltopdf時候見從命令行(即你期望在STDOUT中看到的內容)不是在STDOUT中,而是在STDERR中。我的項目頁面
http://code.google.com/p/wkhtmltopdf/issues/detail?id=825
提出了這一問題,並回答說,這是設計使然,因爲wkhtmltopdf支持讓步STDOUT實際PDF輸出。請參閱鏈接瞭解更多詳情和Java代碼。
java-wkhtmltopdf-wrapper爲在Java中使用wkhtmltopdf
提供了一個簡單的API。
它也可以在xvfb
的無頭服務器上直接使用。
例如,一個Ubuntu或者Debian的服務器上: aptitude install wkhtmltopdf xvfb
然後在Java中:
Pdf pdf = new Pdf();
pdf.addPage("http://www.google.com", PageType.url);
pdf.saveAs("output.pdf");
參見相應Github頁面上的例子更多的選擇。
你可以請出示一些代碼嗎?他們根本沒有文件。我是否必須在我的機器上安裝wkhtmltopdf應用程序才能使用它?完全困惑。 – 2016-05-19 14:10:51
有沒有什麼方法可以將我的HTML頁面代碼作爲字符串傳遞給PDF? – 2016-05-19 14:11:51