首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将当前ASPX页面导出为PDF

如何将当前ASPX页面导出为PDF
EN

Stack Overflow用户
提问于 2010-02-25 06:13:21
回答 2查看 8.5K关注 0票数 1

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

最好,我希望当前页面打开一个新页面,呈现pdf并提示用户保存/打开它。

我已经研究过iTextSharp,如果不需要指定每个元素,我很有兴趣使用它。如果有一种方法可以指定一个面板和它的所有内容或替代方法,我也愿意这样做。

谢谢!

EN

回答 2

Stack Overflow用户

发布于 2010-02-25 06:16:44

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

票数 2
EN

Stack Overflow用户

发布于 2012-03-09 08:19:26

我知道这是一个老生常谈的问题,但是我的公司做的事情和你需要的非常相似。我们使用ExpertPDF将html转换为pdf,并执行以下操作以获得html。转向EnableEventValidation="false"是很重要的,因为将html发送回服务器是一种安全风险。

ASPX

代码语言:javascript
复制
<%@ 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样式表的引用

政务司司长

代码语言:javascript
复制
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));
}
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2330025

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档