【问题标题】:MemoryStream looks like corrupt the file using iTextSharpMemoryStream 看起来像是使用 iTextSharp 损坏了文件
【发布时间】:2013-11-06 06:41:03
【问题描述】:

我有两个代码:

string fileInput = @"c:\temp\input.pdf";
string fileOutput = @"c:\temp\saida.pdf";

PdfReader reader = new PdfReader(fileInput);

Stream output = new System.IO.FileStream(fileOutput, System.IO.FileMode.Create);

Document doc = new Document();
PdfCopy writer = new PdfCopy(doc, output);

doc.Open();
PdfImportedPage pagina = writer.GetImportedPage(reader, 23);
writer.AddPage(pagina);

doc.Close();

output.Close();

效果很好!该文件有 46.451 字节

但我需要使用内存而不是文件。所以我尝试了下一个代码:

string fileInput = @"c:\temp\input.pdf";
string fileOutput = @"c:\temp\saida.pdf";

PdfReader reader = new PdfReader(fileInput);

//Stream output = new System.IO.FileStream(fileOutput, System.IO.FileMode.Create);
MemoryStream output = new MemoryStream();

Document doc = new Document();
PdfCopy writer = new PdfCopy(doc, output);

doc.Open();
PdfImportedPage pagina = writer.GetImportedPage(reader, 23);
writer.AddPage(pagina);

//Added line. Just to compare...
output.WriteTo(new FileStream(fileOutput, FileMode.Create, System.IO.FileAccess.Write));

doc.Close();

output.Close();

该文件有 45.582 字节。 Acrobat Reader 告诉我文件已损坏。我做错了什么?

谢谢!

【问题讨论】:

    标签: c# .net vb.net itextsharp memorystream


    【解决方案1】:

    在你这样做的时候

    output.WriteTo(new FileStream(fileOutput, FileMode.Create, System.IO.FileAccess.Write));
    

    结果 PDF 尚未完成。因此,显然 Acrobat Reader 会抱怨。

    要将完成的 PDF 放入内存流中,您必须等到之后

    doc.Close();
    

    默认情况下,这会隐式关闭您可能不需要的输出流。因此,您可能还想在之前将 SetCloseStream(false) 应用于 PdfCopy。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-05-24
      • 2016-01-08
      • 2023-03-10
      • 1970-01-01
      • 2011-01-12
      • 2011-07-02
      • 1970-01-01
      • 2016-01-25
      相关资源
      最近更新 更多