【问题标题】:iTextSharp generating corrupt PDF as "pdf.pdf"iTextSharp 生成损坏的 PDF 为“pdf.pdf”
【发布时间】:2016-06-22 17:39:05
【问题描述】:

我有一段从another question 获取的简单代码,主题相同,PDF 文件损坏。

我已尝试实施所述解决方案以及other references,但尚未成功。

这是生成我的示例 PDF 的两个函数:

private void ShowPdf (byte[] str)
{
    var Response = HttpContext.Current.Response;

    Response.ClearContent();
    Response.ClearHeaders();
    Response.ContentType = "application/pdf";
    Response.AddHeader("Content-Disposition", "attachment; filename=" + DateTime.Now);

    Response.BinaryWrite(str);
    Response.End();
    Response.Flush();
    Response.Clear();
}
private byte[] CreatePDF2()
{
    Document doc = new Document(PageSize.LETTER, 50, 50, 50, 50);

    using (MemoryStream output = new MemoryStream())
    {
        PdfWriter wri = PdfWriter.GetInstance(doc, output);
        doc.Open();

        Paragraph header = new Paragraph("Test bug") { Alignment = Element.ALIGN_CENTER };
        Paragraph paragraph = new Paragraph("test.");
        Phrase phrase = new Phrase("testnewline. \nnewline hapenned.");
        Chunk chunk = new Chunk("Chucnk cauncuanocnaacoocsinasiocniocsanacsoi chunk.");

        doc.Add(header);
        doc.Add(paragraph);
        doc.Add(phrase);
        doc.Add(chunk);

        doc.Close();
        return output.ToArray();
    }
}

然后在一个请求中,我只是像这样消费它:

ShowPdf(CreatePDF2());

问题是这会生成一个名为“Response.pdf.pdf”的文件,该文件已损坏且无法打开。

我该如何解决这个问题?

Obs.:我目前正在使用iTextSharp 4.1.6

【问题讨论】:

  • 我运行了您的 iText 代码和 ASP.Net 代码,并且都按预期工作,所以我很确定您的问题出在其他地方。尝试在记事本中打开 PDF 并查看文件开头 %PDF-1.4 之前或文件末尾 %%EOF 之后的文本内容。
  • 嘿@ChrisHaas 首先,感谢您的帮助。我在生成的 PDF 中找不到任何这些文本。
  • @ChrisHaas 你认为这类问题可能与我目前使用的版本有关吗?我将 4.1.6 用于 LGPL 许可证。是否有已知的错误或一些我必须适应的变化?
  • @Malavos 这篇文章解释了为什么您认为可以使用 4.1.6(对应于 Java 中的 2.1.6)的假设是错误的:Can iText 2.1.7 or earlier be used commercially? 确保告知您的客户技术和法律影响您选择的 iTextSharp 4.1.6。
  • @Malavos Quality 有它的价格。我们已经显着改进了 iText,但要做到这一点,我们需要雇用人员。如果没有人为使用 iText 付费,我们就不能雇佣他们。请参阅How can large open source projects be monetized? 开源旨在以合乎道德的方式使用软件,而不是在以下意义上的滥用:“我们拿走一些东西,我们从不回馈任何东西”(这是您使用 cmets 创造的看法)。

标签: c# pdf itext


【解决方案1】:

试试这个输出变量,

FileStream output = new FileStream(Server.MapPath("MyFirstPDF.pdf"), FileMode.Create);

【讨论】:

  • 我要试试这个,我会在这里评论发生了什么。
  • 这个解决方案对我不起作用,虽然我不再使用 itextsharp,但这可以帮助未来的用户。谢谢。
  • 更新:我在另一台机器上复制了问题来更新我的问题,这个解决方案在这种情况下有效。不知道为什么它不能在旧机器上运行,你。
猜你喜欢
  • 2011-09-16
  • 2016-01-25
  • 1970-01-01
  • 2014-07-30
  • 2016-10-02
  • 2022-10-05
  • 2011-01-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多