使用 iTextShart 使用 HTML 到 PDF,使用 asp.net 下载位置

本文关键字:使用 net 下载 位置 asp PDF iTextShart HTML | 更新日期: 2023-09-27 18:30:54

我在 asp.net 使用以下代码将html导出为pdf

protected void btnExport_Click(object sender, EventArgs e)
{
    Response.ContentType = "application/pdf";
    Response.AddHeader("content-disposition", "attachment;filename=Panel.pdf");
    Response.Cache.SetCacheability(HttpCacheability.NoCache);
    StringWriter sw = new StringWriter();
    HtmlTextWriter hw = new HtmlTextWriter(sw);
    pnlPerson.RenderControl(hw);
    StringReader sr = new StringReader(sw.ToString());
    Document pdfDoc = new Document(PageSize.A4, 10f, 10f, 100f, 0f);
    HTMLWorker htmlparser = new HTMLWorker(pdfDoc);
    PdfWriter.GetInstance(pdfDoc, Response.OutputStream);
    pdfDoc.Open();
    htmlparser.Parse(sr);
    pdfDoc.Close();
    Response.Write(pdfDoc);
    Response.End();
}

此代码将下载文件夹中的 pdf 文件。我想在没有下载提示的情况下在特定路径下载它。

使用 iTextShart 使用 HTML 到 PDF,使用 asp.net 下载位置

您正在将 PDF 写入Response.OutputStream

看这里: 如何使用iTextsharp将pdf保存在服务器地图路径上

这不是 C# 或 ASP.NET 的问题,而是用户代理(即浏览器)决定文件的下载位置,通常是在询问用户之后或使用其配置中设置的默认目录。

Web开发人员无法改变这种行为,这是理所当然的。让网站决定应该在哪里下载文件会让用户感到厌恶,他们将不得不寻找文件,并且通过让第三方将有害的东西放在他们不应该在的地方来存在安全漏洞。

1)恕我直言,出于安全原因,您不能绕过浏览器要求下载(对于一般Web应用程序,这是无法访问的客户端应用程序设置)。您可以尝试重定向到某些在线pdf查看器服务或提供自己的服务而不是下载。

2)我不推荐像您显示的那样的代码(btnExport_Click,使用当前页面响应填充下载内容)。这会导致您的页面在单击"导出"后变得无响应(基本上损坏),因为页面只有一个响应。我建议创建单独的页面或 http 处理程序来呈现 pdf(根据请求参数):只需在单击按钮时重定向到此页面/处理程序,您将获得正确的行为。

3)我强烈建议使用wkhtmltopdf和一些包装器(例如Pechkin)。它在 99% 的真实场景中开箱即用,并且需要更少的代码来实现基本的 html2pdf 渲染处理链接、css、图像、unicode 等。