我正在使用iTextSharp生成付款收据的副本,并在以后需要时保存在某个位置。基本上我在一个单独的C#类中添加了这个函数,它带有一个html并保存文件。这是从ASPX页面中的函数调用的。
它工作正常,但我遇到的问题是,实际上PDF实际上作为字符返回到Response并插入到我的页面的开头。
我还和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;
}
答案 0 :(得分:3)
每次使用PdfWriter.GetInstance
时,您都会创建新的PdfWriter
并将此Writer
添加到pdfDocument
。然后,添加到此Document的每个Element的PDF表示将被写入输出流。
您实际上是将pdf发送到Reponse,因为您正在创建一个{10},在第10行写入pdfWriter
。
HttpContext.Current.Response.OutputStream
答案 1 :(得分:2)
请查看源代码中的这两行:
PdfWriter wri = PdfWriter.GetInstance(pdfDocument, new FileStream(newPDFFilePath, FileMode.Create));
PdfWriter.GetInstance(pdfDocument, HttpContext.Current.Response.OutputStream);
在这两行中的第一行中,您创建了一个PdfWriter
,它将PDF文件写入服务器上的路径。如果我正确理解了您的问题,这就是您想要的行为:您希望将文档供以后使用。
现在看第二行。这将创建一个PdfWriter
实例,将PDF字节写入Response
对象的输出流。如果我正确理解您的问题,这是不受欢迎的行为。删除此行,将不再发生意外行为。