Я знаю, что это старый вопрос, но моя компания делает нечто очень похожее на то, что вам нужно.Мы используем 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/>
{
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));
}
}