C# MemoryStream似乎使用iTextSharp损坏了文件

C# MemoryStream似乎使用iTextSharp损坏了文件,c#,.net,vb.net,itextsharp,memorystream,C#,.net,Vb.net,Itextsharp,Memorystream,我有两个密码: 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();

我有两个密码:

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告诉我文件已损坏。我做错了什么

谢谢

在您这样做的时候

output.WriteTo(new FileStream(fileOutput, FileMode.Create, System.IO.FileAccess.Write));
结果PDF尚未完成。因此,Acrobat的读者显然会抱怨

要在内存流中保存完成的PDF,必须等到

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

在您这样做的时候

output.WriteTo(new FileStream(fileOutput, FileMode.Create, System.IO.FileAccess.Write));
结果PDF尚未完成。因此,Acrobat的读者显然会抱怨

要在内存流中保存完成的PDF,必须等到

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

在您这样做的时候

output.WriteTo(new FileStream(fileOutput, FileMode.Create, System.IO.FileAccess.Write));
结果PDF尚未完成。因此,Acrobat的读者显然会抱怨

要在内存流中保存完成的PDF,必须等到

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

在您这样做的时候

output.WriteTo(new FileStream(fileOutput, FileMode.Create, System.IO.FileAccess.Write));
结果PDF尚未完成。因此,Acrobat的读者显然会抱怨

要在内存流中保存完成的PDF,必须等到

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