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;
}
每次使用 PdfWriter.GetInstance
时,您都会创建一个新PdfWriter
并将此Writer
添加到pdfDocument
中。然后,添加到本文档的每个元素的 PDF 表示形式将被写入输出流。
实际上是将 pdf 发送到响应,因为您正在创建一个写入第 10 行HttpContext.Current.Response.OutputStream
的pdfWriter
。
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
对象的输出流。如果我正确理解您的问题,这是不希望的行为。删除此行,则不会再发生不需要的行为。