我在移动浏览器上生成pdf文件时面临以下问题。文件在某些移动浏览器中损坏,而在某些文件已下载但未显示文本时,它仅在文件中显示图像。同时,在桌面浏览器上工作时文件生成完美,下载时文件内容显示完美。我不知道背后的实际原因,因为我是开发Web应用程序的全新人。
我使用的代码如下:
three = Node (1, Leaf 2, Leaf 3)
答案 0 :(得分:1)
这当然是错的:
Response.Write(pdfDoc);
pdfDoc
对象的类型为Document
,Response.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
方法。