在移动浏览器上工作时生成pdf文件时出现问题

时间:2016-03-28 08:37:30

标签: c# asp.net pdf itextsharp

我在移动浏览器上生成pdf文件时面临以下问题。文件在某些​​移动浏览器中损坏,而在某些文件已下载但未显示文本时,它仅在文件中显示图像。同时,在桌面浏览器上工作时文件生成完美,下载时文件内容显示完美。我不知道背后的实际原因,因为我是开发Web应用程序的全新人。

我使用的代码如下:

three = Node (1, Leaf 2, Leaf 3)

1 个答案:

答案 0 :(得分:1)

这当然是错的:

Response.Write(pdfDoc);

pdfDoc对象的类型为DocumentResponse.Write()需要字节,而不是Document对象。你声称这在某些情况下有效是不正确的。

您还需要删除这两行:

pdfWriter.CloseStream = false;
pdfWriter.Close();

用这一行替换它们:

pdfDoc.Close();

在此处阅读有关PDF创建过程中5个步骤的更多信息:Getting started。你从哪里得到你的代码?你能保证你再也不会看到那些文件吗?始终使用official web site

当您执行pdfDoc.Close()时,PDF已完成。收听DocListener的所有Document个实例均已关闭。在您的情况下,侦听DocListener的{​​{1}}实例是您不知道的pdfDoc实例,因为它仅在内部使用。关闭此PdfDocument实例很重要,因为在PdfDocument操作中,会刷新大量内容。您可以通过关闭close()而不是pdfWriter来跳过此步骤。

您还可以打开内容流。这是个坏主意。应关闭内容流。直接使用pdfDoc时存在一些已知问题。在这个问题的答案中使用Response.OutputStream更好:iTextSharp is producing a corrupt PDF with Response

如果你很好地研究这个答案,你会看到:

MemoryStream

如您所见,您需要byte[] bytes = memoryStream.ToArray(); Response.Clear(); Response.ContentType = "application/pdf"; Response.AddHeader("Content-Disposition", "attachment;filename=ControleDePonto.pdf"); Response.Buffer = true; Response.Cache.SetCacheability(HttpCacheability.NoCache); Response.BinaryWrite(bytes); Response.End(); 方法,并且该方法需要BinaryWrite()。除了代码中的许多其他错误之外,您的主要错误是您将byte[]对象传递给Document方法。