itextsharp - 将页面转换为 PDF 并自动保存到临时文件夹而无需打开下载对话框

itextsharp - convert page to PDF and auto save to a temp folder without opening a download dialog

大家早上好,我找到了示例代码,可以让我使用 itextsharp 库将当前页面保存为 pdf,然后自动将其保存到站点内的临时文件夹中。但它一直在做的一件事是它不断触发浏览器提示我下载或保存文件。该文件已经保存在一个临时文件夹中,我只是想以某种方式禁用该浏览器对话框下载。请指教。非常感谢任何帮助。 谢谢

    HttpContext.Current.Response.Clear();
    HttpContext.Current.Response.AddHeader("Content-Disposition", "attachment;filename=RequestSummaryReport.pdf");
    HttpContext.Current.Response.Charset = "";
    HttpContext.Current.Response.ContentType = "application/pdf";

    StringWriter sw = new StringWriter();
    HtmlTextWriter htw = new HtmlTextWriter(sw);

    iTextSharp.text.Document pdfDocument = new iTextSharp.text.Document(PageSize.A3, 45, 5, 5, 5);
    //PdfWriter writer = PdfWriter.GetInstance(pdfDocument, Response.OutputStream);
    PdfWriter writer = PdfWriter.GetInstance(pdfDocument, new FileStream(Server.MapPath("~/temps/") + "mypdf.pdf", FileMode.CreateNew));

    pdfDocument.Open();

    HtmlPipelineContext htmlContext = new HtmlPipelineContext(null);
    htmlContext.SetTagFactory(Tags.GetHtmlTagProcessorFactory());
    ICSSResolver cssResolver = XMLWorkerHelper.GetInstance().GetDefaultCssResolver(false);

    IPipeline pipeline = new CssResolverPipeline(cssResolver, new HtmlPipeline(htmlContext, new PdfWriterPipeline(pdfDocument, writer)));

    XMLWorker worker = new XMLWorker(pipeline, true);
    XMLParser xmlParse = new XMLParser(true, worker);

    this.Page.RenderControl(htw);
    StringReader sr = new StringReader(sw.ToString());
    xmlParse.Parse(sr);
    xmlParse.Flush();
    pdfDocument.Close();
    //Response.Write(pdfDocument);
    Response.End();

所以你想把它保存在服务器上?你想在不提示用户保存的情况下将 pdf 显示到浏览器吗?也许 this 之前 post 对 SO 的回答会有所帮助。我记得该行为可能因浏览器(IE、Chrome、Firefox、Safari)而异。使用时:

Response.AddHeader("Content-Disposition", "inline;filename=somefile.ext")

浏览器将尝试将 pdf 呈现给浏览器。

如果删除以下代码行,浏览器将不会提示您保存文件:

HttpContext.Current.Response.AddHeader("Content-Disposition", "attachment;filename=RequestSummaryReport.pdf");