iTextSharp HTML to PDF返回PDF作为回应 - 不良行为

时间:2014-05-30 04:30:25

标签: c# pdf-generation itextsharp

我正在使用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;
}

2 个答案:

答案 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对象的输出流。如果我正确理解您的问题,这是不受欢迎的行为。删除此行,将不再发生意外行为。