3

我想將HTML + CSS頁面轉換爲PDF文件。 我試過wkhtmltopdf,我遇到了問題,因爲我想訪問的網頁需要在網站上進行身份驗證。如何使用wkhtmltopdf將安全的HTML(ASP.NET MVC 3)頁面轉換爲PDF?

頁,我想轉換爲PDF格式有如下的URL:http:// [公司網址]/PDFReport/33

如果我嘗試不認證來訪問它,我重定向到登錄頁。

所以當我用wkhtmltopdf,它在我的登錄頁面轉換爲PDF ...

我在我的ASP.NET MVC應用程序中使用anthentication方法是SimpleMembership:

[Authorize] 
public ActionResult PDFReport(string id) 
{ 
} 

我執行wkhtmltopdf .exe與System.Diagnostics.Process:

FileInfo tempFile = new FileInfo(Request.PhysicalApplicationPath + "\\bin\\test.pdf"); 

StringBuilder argument = new StringBuilder(); 
argument.Append(" --disable-smart-shrinking"); 
argument.Append(" --no-pdf-compression"); 
argument.Append(" " + "http://[WEBSITE]/PDFReport/33"); 
argument.Append(" " + tempFile.FullName); 

// to call the exe to convert 
using (Process p = new System.Diagnostics.Process()) 
{ 
    p.StartInfo.UseShellExecute = false; 
    p.StartInfo.CreateNoWindow = true; 
    p.StartInfo.FileName = Request.PhysicalApplicationPath + "\\bin\\wkhtmltopdf.exe"; 
    p.StartInfo.Arguments = argument.ToString(); 
    p.StartInfo.RedirectStandardOutput = true; 
    p.StartInfo.RedirectStandardError = true; 

    p.Start(); 
    p.WaitForExit(); 
} 

您知道如何在不禁用此頁面上的安全性的情況下生成PDF嗎?

回答

1

最近我遇到了很多麻煩。簡而言之,WKHTMLTOPDF是Webkit(QT,我相信他們稱之爲)的一個版本,所以當你請求一個受密碼保護的頁面時,瀏覽器需要登錄和存儲/引用一個cookie,就像你通常一樣。

原始調用看起來是這樣的:

`/路/ wkhtmltopdf --cookie-JAR my.jar --username名爲myUsername --password輸入mypassword URL

其中:

  • my.jar是一個創建並保存您的cookie值的jar文件
  • username是用戶名錶單字段的namemyusername是崗位價值
  • password是密碼錶單字段的namemypassword是崗位價值
  • URL的日誌頁面的URL

一定要包括成功登錄所需的任何其他職務領域在 - 你可能會想監視你的HTTP頭,而不只是看錶格。再次使用正常參數在您要捕獲的頁面上調用WKHTMLTOPDF,包括--cookie-jar my.jar以維護會話。這應該做到!

但是,我仍然遇到了問題,但它是一個相當健壯的登錄(多個Cookie,安全,許多參數等)。我正在使用PHP,並使用CURL運氣更好 - 我不確定這是如何繼承到ASP.NET(也許這?http://support.microsoft.com/kb/303436),但這裏是我的邏輯,如果有幫助:

登錄通過捲曲
  • 抓住HTML頁面,並存儲在本地臨時文件
    • 替換的圖片和文件,以絕對引用的所有相對引用(或插入base標籤)上的臨時文件
    • 運行普通的「醇WKHTMLTOPDF刪除臨時文件

    總而言之,這樣做很容易,而且對我來說感覺更好,因爲我知道我靠着WKHTMLTOPDF 0.10版中的試驗和真實代碼而不是參數。

  • +0

    謝謝,我會嘗試這種解決方法。 – Toc

    相關問題