Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/90.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net 如何将当前ASPX页面导出为PDF_Asp.net_Html_Pdf Generation_Export To Pdf - Fatal编程技术网

Asp.net 如何将当前ASPX页面导出为PDF

Asp.net 如何将当前ASPX页面导出为PDF,asp.net,html,pdf-generation,export-to-pdf,Asp.net,Html,Pdf Generation,Export To Pdf,我有一个网页,它使用GridView和html元素的组合来创建报告。我想给用户一个选项,点击,它将导出为pdf格式。我不希望在服务器上创建pdf,因为这需要我编写另一个进程来清理文件 最理想的情况是,我希望当前页面打开一个新页面来呈现pdf并提示用户保存/打开它 我看过iTextSharp,如果不必指定每个元素,我对使用它很感兴趣。如果有一种方法可以指定一个面板和它的所有内容或替代品,我也愿意这样做 谢谢 如果你能说服用户安装一台PDF打印机,这将非常容易。我知道这是一个老问题,但我的公司做的事

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

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

我看过iTextSharp,如果不必指定每个元素,我对使用它很感兴趣。如果有一种方法可以指定一个面板和它的所有内容或替代品,我也愿意这样做


谢谢

如果你能说服用户安装一台PDF打印机,这将非常容易。我知道这是一个老问题,但我的公司做的事情与你需要的非常相似。我们使用将html转换为pdf,并执行以下操作以获得html。重要的是,您必须启用EnableEventValidation=“false”,因为将html发送回服务器会带来安全风险

ASPX


函数getHtml(){
var theHtml=document.getElementById('ReportContent').innerHTML;
document.getElementById(“”).value=theHtml;
返回true;
}
…您希望将某些html内容转换为pdf



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

CS

protectedvoid BtnExport\u单击(对象发送方,事件参数)
{ 创建并下载PDF(this.Request,hdnHtml.Value,Page.ResolveUrl(“~/css/MAIN.css”),“文件名”,“报告名”);
} public static void CreateAndDownloadPDF(System.Web.HttpRequest ServerRequest,string HTML,string cssfile,string FileName,string Footer) { string downloadName=FileName+“.pdf”;
尝试 { PdfConverter PdfConverter=新的PdfConverter()
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=页脚; pdfConverter.PdfFooterOptions.FooterTextColor=Color.Black; pdfConverter.PdfFooterOptions.DrawFooterLine=true; pdfConverter.PdfFooterOptions.PageNumberText=“Page”; pdfConverter.PdfFooterOptions.ShowPageNumber=true; pdfConverter.LicenseKey=“LICENSE\u KEY\u HERE”; 字符串strHTML=”“+HTML+”; //设置页面url string url=“http://”+ServerRequest.ServerVariables[“SERVER_NAME”]+port+ServerRequest.ServerVariables[“SCRIPT_NAME”]; //结束集页面url byte[]downloadBytes=pdfConverter.GetPdfBytesFromHtmlString(strHTML,rmsPath); System.Web.HttpResponse response=System.Web.HttpContext.Current.response; response.Clear(); AddHeader(“内容类型”、“二进制/八位字节流”); response.AddHeader(“内容处置”、“附件;文件名=“+downloadName+””size=“+downloadBytes.Length.ToString()); BinaryWrite(下载字节); response.End(); } response.End()的catch(System.Threading.ThreadAbortException){}// 捕获(例外情况除外) { //错误处理 } 最后 { if(File.Exists(ServerRequest.MapPath(downloadName))) Delete(ServerRequest.MapPath(downloadName)); } }
是的。同意。这是一个面向外部的网站。这确实是最好的选择。它将使用户能够从任何网页上获取PDF文件,这将在以后得到他们和您的赞赏。此外,您可以很容易地将其作为Word文档使用。。注意,使用这种方法需要许可证费用。
<%@ 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>
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));
}
}