【发布时间】: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 创造的看法)。