iTextSharp + FileStream =损坏的PDF文件

我正在尝试使用iTextSharp创建PDF文件。 我尝试将pdf的内容写入MemoryStream,以便将结果写入文件和数据库BLOB。 该文件被创建,大小约为21kB,在使用Notepad ++进行操作时,它看起来像一个pdf。 但我的PDF阅读器说它已经被破坏了。 这是一段小小的代码片段(只尝试写入文件,而不是数据库):

Document myDocument = new Document();
MemoryStream myMemoryStream = new MemoryStream();
PdfWriter myPDFWriter = PdfWriter.GetInstance(myDocument, myMemoryStream);
myDocument.Open();
// Content of the pdf gets inserted here
using (FileStream fs = File.Create("D:...aTestFile.pdf"))
{
    myMemoryStream.WriteTo(fs);
}
myMemoryStream.Close();

我犯的错在哪里?

谢谢,诺伯特


我认为你的问题是你没有正确地向你的PDF添加内容。 这是通过Document.Add()方法完成的,并通过调用Document.Close()完成。

但是,当您调用Document.Close()时,您的MemoryStream也会关闭,因此您无法将它写入FileStream中。 你可以通过将你的MemoryStream的内容存储到一个字节数组来解决这个问题。

以下代码片段适用于我:

using (MemoryStream myMemoryStream = new MemoryStream()) {
    Document myDocument = new Document();
    PdfWriter myPDFWriter = PdfWriter.GetInstance(myDocument, myMemoryStream);

    myDocument.Open();

    // Add to content to your PDF here...
    myDocument.Add(new Paragraph("I hope this works for you."));

    // We're done adding stuff to our PDF.
    myDocument.Close();

    byte[] content = myMemoryStream.ToArray();

    // Write out PDF from memory stream.
    using (FileStream fs = File.Create("aTestFile.pdf")) {
        fs.Write(content, 0, (int)content.Length);
    }
}

我有类似的问题。 我的文件被下载,但文件大小将是13Bytes。 当我使用二进制编写器写入我的文件时,我解决了这个问题

byte[] bytes = new byte[0];
//pass in your API response into the bytes initialized

using (StreamWriter streamWriter = new StreamWriter(FilePath, true))
{
   BinaryWriter binaryWriter = new BinaryWriter(streamWriter.BaseStream);
   binaryWriter.Write(bytes);
}

只是想一想 - 如果用文件流替换内存流会发生什么? 这是否给你你需要的结果? 这至少会告诉你问题出在哪里。

如果这确实起作用,文件如何不同(大小和二进制表示形式)?

只是一个猜测,但你有没有试图在写入之前寻找内存流的开始?

myMemoryStream.Seek(0, SeekOrigin.Begin);
链接地址: http://www.djcxy.com/p/46747.html

上一篇: iTextSharp + FileStream = Corrupt PDF file

下一篇: C# Filestream Read