【问题标题】:How to export current ASPX page to PDF如何将当前 ASPX 页面导出为 PDF
【发布时间】:2011-01-20 18:18:55
【问题描述】:

我有一个网页,它使用 gridviews 和 html 元素的组合来创建报告。我想给用户一个点击选项,它将导出为 pdf。我不希望在服务器上创建 pdf,因为这需要我编写另一个进程来清理文件。

理想情况下,我希望当前页面打开一个新页面,该页面呈现 pdf 并提示用户保存/打开它。

如果我不必指定每个元素,我已经查看了 iTextSharp,并且有兴趣使用它。如果有办法指定面板及其所有内容或替代方法,我也愿意。

谢谢!

【问题讨论】:

    标签: asp.net html pdf-generation export-to-pdf


    【解决方案1】:

    我知道这是一个老问题,但我的公司所做的事情与您的需要非常相似。我们使用ExpertPDF 将 html 转换为 pdf 并执行以下操作以获取 html。请务必打开 EnableEventValidation="false",因为将 html 发送回服务器存在安全风险。

    ASPX

    <%@ Page Language="C#" **EnableEventValidation="false"** Inherits="MyProject.Default"
            Title="PDF Generation" CodeBehind="~/Default.aspx.cs" %>
    <html>
    <head>
    </head>
    <body>
    <script type="text/javascript" language="JavaScript">
    function getHtml() {
    var theHtml = document.getElementById('ReportContent').innerHTML;
    document.getElementById('<%=hdnHtml.ClientID %>').value = theHtml;
    return true;
            }
    
        </script>
    <div id='ReportContent'>    
    ...Some html content you want turned into a pdf
    </div>    
    <asp:Button ID="btnSend" OnClick="btnSend_Click" OnClientClick="return getHtml();"
                                                            runat="server" Text="Send" />
    
    </body>
    </html>
    




    您还必须发送对您的 CSS 样式表的引用

    CS

    protected void BtnExport_Click(object sender, EventArgs e)<br/>
    {
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CreateAndDownloadPDF(this.Request, hdnHtml.Value, Page.ResolveUrl("~/css/MAIN.css"), "NameOfTheFile", "Name of the Report");<br/>
    }
    
    public static void CreateAndDownloadPDF(System.Web.HttpRequest ServerRequest, string HTML, string cssfile, string FileName, string Footer)
    {
    string downloadName = FileName + ".pdf";<br/>
    try
    {
    PdfConverter pdfConverter = new PdfConverter();</br>
    pdfConverter.PdfDocumentOptions.PdfPageSize = PdfPageSize.Letter;
    pdfConverter.PdfDocumentOptions.FitWidth = false;
    pdfConverter.PdfDocumentOptions.PdfCompressionLevel = PdfCompressionLevel.Normal;
    pdfConverter.PdfDocumentOptions.ShowFooter = true;
    pdfConverter.PdfDocumentOptions.LeftMargin = 25;
    pdfConverter.PdfDocumentOptions.RightMargin = 25;
    pdfConverter.PdfDocumentOptions.TopMargin = 25;
    pdfConverter.PdfDocumentOptions.BottomMargin = 15;
    pdfConverter.PdfDocumentOptions.GenerateSelectablePdf = true;
    pdfConverter.AvoidImageBreak = true;
    
    pdfConverter.PdfDocumentOptions.ShowHeader = false;
    
    pdfConverter.PdfFooterOptions.FooterText = Footer;
    pdfConverter.PdfFooterOptions.FooterTextColor = Color.Black;
    pdfConverter.PdfFooterOptions.DrawFooterLine = true;
    pdfConverter.PdfFooterOptions.PageNumberText = "Page";
    pdfConverter.PdfFooterOptions.ShowPageNumber = true;
    
    pdfConverter.LicenseKey = "LICENSE_KEY_HERE";
    string strHTML = "<html><head><link href='" + cssfile + "' rel='stylesheet' type='text/css' /></head><body>" + HTML + "</body></html>";
    
    
    //set page url
    string url = "http://" + ServerRequest.ServerVariables["SERVER_NAME"] + port + ServerRequest.ServerVariables["SCRIPT_NAME"];
    //end set page url   
    byte[] downloadBytes = pdfConverter.GetPdfBytesFromHtmlString(strHTML, rmsPath);
    
    System.Web.HttpResponse response = System.Web.HttpContext.Current.Response;
    response.Clear();
    response.AddHeader("Content-Type", "binary/octet-stream");
    response.AddHeader("Content-Disposition", "attachment; filename=" + downloadName + "; size=" + downloadBytes.Length.ToString());
    response.BinaryWrite(downloadBytes);
    response.End();
    }
    catch (System.Threading.ThreadAbortException) { }  //for response.End()
    catch (Exception ex)
    {
    //Error handling
    }
    finally
    {
    if (File.Exists(ServerRequest.MapPath(downloadName)))
         File.Delete(ServerRequest.MapPath(downloadName));
    }
    }
    

    【讨论】:

    • 请注意,使用此方法需要支付许可费用。
    【解决方案2】:

    如果您能说服用户安装像CutePDfFoxit PDF Creator 这样的PDF 打印机,这将非常容易

    【讨论】:

    • 是的。同意。这是一个面向外部的网站。
    • 这确实是最好的选择。它将使用户能够获取从任何网页创建的 PDF 文件,稍后他们和您都会欣赏这些文件。
    • 顺便说一句,您可以很容易地将其用作 Word 文档。c-sharpcorner.com/UploadFile/sgersh01/…
    猜你喜欢
    • 2014-04-26
    • 2011-03-17
    • 2016-02-03
    • 2014-01-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多