iTextSharp HTML to PDF 返回 PDF 作为响应 - 不需要的行为

本文关键字:PDF 不需要 响应 HTML to 返回 iTextSharp | 更新日期: 2023-09-27 18:05:46

我正在使用iTextSharp生成付款收据的副本,并保存在某个位置,以备日后需要。基本上,我将此函数添加到一个单独的C#类中,该类采用html并保存文件。这是从 ASPX 页中的函数调用的。

它工作正常,但我遇到的问题是 PDF 实际上以某种方式作为字符返回给响应并插入我的页面开头。

我还检查了Fiddler,我可以看到响应在实际html开始之前只有很多字符。关于为什么 iTextSharp 以及如果我什至没有远程将任何内容发送回响应,它如何插入字符的任何想法?

  public string CreatePDFInvoice(string htmlText, int invoiceID)
{
    Document pdfDocument = new Document(PageSize.LETTER, 70, 55, 40, 25);
    string newPDFFilePath = @"C:'temp'receipt-" + invoiceID.ToString() + "-" +DateTime.Now.Ticks.ToString() + ".pdf";
    try
    {
        PdfWriter wri = PdfWriter.GetInstance(pdfDocument, new FileStream(newPDFFilePath, FileMode.Create));
        PdfWriter.GetInstance(pdfDocument, HttpContext.Current.Response.OutputStream);
        pdfDocument.Open();
        XMLWorkerHelper.GetInstance().ParseXHtml(wri, pdfDocument, new StringReader(htmlText));
    }
    catch (Exception ex)
    {
        throw ex;
    }
    finally
    {
        pdfDocument.Close();
    }
    return newPDFFilePath;
}

iTextSharp HTML to PDF 返回 PDF 作为响应 - 不需要的行为

每次使用 PdfWriter.GetInstance 时,您都会创建一个新PdfWriter并将此Writer添加到pdfDocument中。然后,添加到本文档的每个元素的 PDF 表示形式将被写入输出流。

实际上是将 pdf 发送到响应,因为您正在创建一个写入第 10 行HttpContext.Current.Response.OutputStreampdfWriter

PdfWriter.GetInstance(pdfDocument, HttpContext.Current.Response.OutputStream);

请查看源代码中的这两行:

PdfWriter wri = PdfWriter.GetInstance(pdfDocument, new FileStream(newPDFFilePath, FileMode.Create));
PdfWriter.GetInstance(pdfDocument, HttpContext.Current.Response.OutputStream);

在这两行中的第一行中,您将创建一个将 PDF 文件写入服务器上路径的PdfWriter。如果我正确理解了您的问题,这是所需的行为:您想要文档以供以后使用。

现在看第二行。这将创建一个PdfWriter实例,该实例将 PDF 字节写入Response对象的输出流。如果我正确理解您的问题,这是不希望的行为。删除此行,则不会再发生不需要的行为。