单击以下载 Jquery HTML 动态页面到 asp.net 核心中的 PDF



我有一个页面,一旦页面加载到核心中,就会动态填充 asp.net AJAX。 我必须使用 AJAX,因为我使用 id 参数从不同来源填充页面以获取值并填充页面。HTML 页面工作正常,数据正确显示。

所以我尝试在本教程的基础上使用 Rotativa,我能够让 pdf 工作,但 PDF 是空的,因为在生成 PDF 之前页面尚未加载。

现在的想法是,如果我可以在页面上有一个按钮将页面转换为pdf并且用户可以下载。

有没有办法实现这一目标?

现在的想法是,如果我可以在页面上有一个按钮将页面转换为pdf,用户可以下载。 有没有办法实现这一目标?

您可以使用 PDF。核心包来实现它,你可以在Nuget中找到它。

下面是一个工作演示:

视图:

<h1>Test</h1>
<input id="download" type="button" value="download" />
<script src="~/lib/jquery/dist/jquery.js"></script>
<script>
$(function () {
$("#download").on("click", function () {
var markup = document.documentElement.innerHTML;
$.ajax({
type: "post",
url: "/Home/Download",
data: { "htmlContent": markup },
success: function () {
window.location = '@Url.Action("Download", "Home")';
}
})
})
});
</script>

控制器

public IActionResult Download(String htmlContent)
{
if (!string.IsNullOrEmpty(htmlContent))
{
IronPdf.HtmlToPdf Renderer = new IronPdf.HtmlToPdf();
Renderer.RenderHtmlAsPdf(htmlContent).SaveAs("html-string.pdf");
return Ok();
}
else
{
var stream = new FileStream(Path.Combine(_hostingEnvironment.ContentRootPath, "html-string.pdf"), FileMode.Open);
return new FileStreamResult(stream, "application/pdf");
}
}

我们的团队选择了IronPDF,它基于发布的MVC教程工作: https://ironpdf.com/docs/questions/asp-net-mvc-pdf-binary/

public FileResult GetHTMLPageAsPDF(long id) {
//Create a PDF Document
var PDF = Renderer.RenderHtmlAsPdf("<h1>html as required</h1>");
//return a pdf document from a view
var content = PDF.BinaryData;
Response.AppendHeader("Content-Length", content.Length.ToString());
Response.AppendHeader("Content-Disposition", "inline; filename=Document_" + id + ".pdf");
return File(content, "application/pdf;");
}

后来我选择了pugpdf,因为我买不起IronPDF。不过这是一个很好的包装。 Pugpdf为我做了这项工作

public async Task<IActionResult> Download(String htmlContent)
{
if (!string.IsNullOrEmpty(htmlContent))
{
var renderer = new HtmlToPdf();
renderer.PrintOptions.Title = "Statement";
var pdf = await renderer.RenderHtmlAsPdfAsync(htmlContent);
pdf.SaveAs(Path.Combine(_webHostEnvironment.ContentRootPath, "html-string.pdf"));
return Ok();
}
else
{
var stream = new FileStream(Path.Combine(_webHostEnvironment.ContentRootPath, "html-string.pdf"), FileMode.Open);
return new FileStreamResult(stream, "application/pdf");
}
}

最新更新