当前位置: 首页 > 编程语言 > C#

iTextSharp+FileStream=损坏的PDF文件共享

时间:2023-04-10 20:21:12 C#

iTextSharp+FileStream=损坏的PDF文件我正在尝试使用iTextSharp创建一个pdf文件。我的尝试是将pdf的内容写入MemoryStream,这样我就可以将结果写入文件和数据库BLOB。文件已创建,大小约为21kB,用Notepad++打开时看起来像pdf。但是我的PDF查看器说它坏了。这是一个小代码片段(只尝试写入文件,而不是数据库):DocumentmyDocument=newDocument();内存流myMemoryStream=newMemoryStream();PdfWritermyPDFWriter=PdfWriter.GetInstance(myDocument,myMemoryStream);我的文档.打开();//使用(FileStreamfs=File.Create("D:\...\aTestFile.pdf")){myMemoryStream.WriteTo(fs);//在此处插入pdf的内容}myMemoryStream.Close();你哪里弄错了?谢谢Norbert我认为你的问题是你没有正确地向PDF添加内容。这是通过Document.Add()方法完成的,然后调用Document.Close()。但是,当您调用Document.Close()时,您的MemoryStream也会关闭,因此您将无法将其写入FileStream。您可以通过将MemoryStream的内容存储到字节数组来解决此问题。以下片段对我有用:using(MemoryStreammyMemoryStream=newMemoryStream()){PdfWritermyPDFWriter=PdfWriter.GetInstance(myDocument,myMemoryStream);我的文档.打开();//在此处将内容添加到您的PDF...myDocument.Add(newParagraph("Ihopethisworksforyou."));//我们完成了向PDF添加内容。我的文档.Close();字节[]内容=myMemoryStream。ToArray();//从内存流中写出PDF。使用(FileStreamfs=File.Create("aTestFile.pdf")){fs.Write(content,0,(int)content.Length);我有类似的问题。我的文件已下载,但文件大小为13字节。当我使用二进制写入器写入文件byte[]bytes=newbyte[0];时,我解决了这个问题;//将您的API响应传递到使用初始化的字节中(StreamWriterstreamWriter=newStreamWriter(FilePath,true)){binaryWriter.Write(字节);只是一些想法——如果用文件流替换内存流会发生什么?这会给你想要的结果吗?这至少告诉你问题出在哪里。如果这确实有效,文件有何不同(大小和二进制表示)?只是一个猜测,但您是否尝试过在写入之前寻找内存流的开头?myMemoryStream.Seek(0,SeekOrigin.Begin);尝试仔细检查使用iText处理PDF的代码。确保您正在调用任何PdfContentByte对象的相应EndText方法,并确保在将文件写入磁盘之前调用myDocument.Close()。这些是我过去在使用iTextSharp生成PDF时遇到的问题。以上就是C#学习教程:iTextSharp+FileStream=损坏的PDF文件分享的全部内容。如果对大家有用,需要进一步了解C#学习教程,希望大家多多关注——documentobject.Close();使用(FileStreamfs=System.IO.File.Create(path)){Memorystreamobject.WriteTo(fs);}本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: