簡體   English   中英

如何將我的ASP.NET頁面轉換為PDF?

[英]How to Convert my ASP.NET Page to PDF?

對於從包含嵌套RadGrid控件的asp.net頁創建pdf文件,我具有以下接受標准:

  1. 頁面的當前視圖應轉換為PDF,這意味着應考慮當前頁面請求的視圖狀態和會話信息。 這給我只有一個選擇。 發送新的pdf回發時,在當前會話的Page_Render()事件處理程序中進行PDF轉換。

  2. $(document).ready(...)時,使用JQuery更改了asp.net頁面布局,這意味着不僅應將呈現的HTML轉換為PDF,還必須在其上運行javascript以具有最終的PDF文件中所需的布局更改; 例如列對齊,等等。我希望否則可能...

  3. asp.net頁僅在IE 6+中正確顯示,因此使用的PDF工具必須使用IE渲染引擎。

請您告知在這種情況下哪種工具可以提供幫助?

我下載並測試了EvoPdf工具,但它顯然不支持IE渲染引擎(僅支持FireFox渲染),並且無法使javascripts與其一起正常工作。

我將評估ABCPdf和Winnovetive,但不確定它們是否會支持我想要的內容。

如果我找不到任何工具可以解決上述問題,則另一種可能的解決方案可能是使用客戶端腳本截取頁面的屏幕截圖(不知道是否可能),然后將其發送到服務器,最后進行轉換圖片轉pdf。

非常感謝,

您可以嘗試WebToPDF.NET

  1. 嘗試轉換呈現asp.net頁面后獲得的HTML頁面
  2. WebToPDF.NET支持JavaScript(和JQuery),所以這不是問題
  3. WebToPDF.NET通過了所有W3C測試(BIDI除外),並支持HTML 4.01,JavaScript,XHTML 1.0,XHTML 1.1和CSS 2.1,包括分頁符,表單和鏈接。

Winnovative HTML to PDF Converter不使用IE作為呈現引擎。 它與WebKit呈現兼容,並且不依賴IE或任何其他第三方工具。

您可以轉換當前的HTML頁面以覆蓋ASP.NET頁面的Render()方法,並捕獲按頁面呈現的HTML代碼。 您可以在將當前HTML頁面轉換為PDF演示中找到帶有C#源代碼的完整示例。

這是此方法的相關源代碼:

// Controls if the current HTML page will be rendered to PDF or as a normal page
bool convertToPdf = false;

protected void convertToPdfButton_Click(object sender, EventArgs e)
{
    // The current ASP.NET page will be rendered to PDF when its Render method will be called by framework
    convertToPdf = true;
}

protected override void Render(HtmlTextWriter writer)
{
    if (convertToPdf)
    {
        // Get the current page HTML string by rendering into a TextWriter object
        TextWriter outTextWriter = new StringWriter();
        HtmlTextWriter outHtmlTextWriter = new HtmlTextWriter(outTextWriter);
        base.Render(outHtmlTextWriter);

        // Obtain the current page HTML string
        string currentPageHtmlString = outTextWriter.ToString();

        // Create a HTML to PDF converter object with default settings
        HtmlToPdfConverter htmlToPdfConverter = new HtmlToPdfConverter();

        // Set license key received after purchase to use the converter in licensed mode
        // Leave it not set to use the converter in demo mode
        htmlToPdfConverter.LicenseKey = "fvDh8eDx4fHg4P/h8eLg/+Dj/+jo6Og=";

        // Use the current page URL as base URL
        string baseUrl = HttpContext.Current.Request.Url.AbsoluteUri;

        // Convert the current page HTML string a PDF document in a memory buffer
        byte[] outPdfBuffer = htmlToPdfConverter.ConvertHtml(currentPageHtmlString, baseUrl);

        // Send the PDF as response to browser

        // Set response content type
        Response.AddHeader("Content-Type", "application/pdf");

        // Instruct the browser to open the PDF file as an attachment or inline
        Response.AddHeader("Content-Disposition", String.Format("attachment; filename=Convert_Current_Page.pdf; size={0}", outPdfBuffer.Length.ToString()));

        // Write the PDF document buffer to HTTP response
        Response.BinaryWrite(outPdfBuffer);

        // End the HTTP response and stop the current page processing
        Response.End();
    }
    else
    {
        base.Render(writer);
    }
}

不完全了解您的要求,但請參閱wkhtmltopdf

如何在ASP.net中使用wkhtmltopdf.exe

winnovative完全滿足了我的需要:)它使用與EvoPdf不同的IE渲染引擎。

我沒有時間測試其他工具。

謝謝

EvoPdf由開發ExpertPDF(http://www.html-to-pdf.net/)的同一團隊開發。 ExpertPDF是較舊的產品,因此盡管API幾乎相同,但EvoPDF API卻稍有改進。

產品之間的主要區別是ExpertPDF使用本地IE渲染引擎。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM