我有两个代码:
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字节
但我需要使用Memory而不是Files。所以我尝试了下一个代码:
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告诉我该文件已损坏。我做错了什么?
谢谢!
答案 0 :(得分:3)
当你做
output.WriteTo(new FileStream(fileOutput, FileMode.Create, System.IO.FileAccess.Write));
结果PDF尚未完成。因此,显然Acrobat Reader会抱怨。
要将完成的PDF放在内存流中,您必须等到
之后doc.Close();
默认情况下,这会隐式关闭您可能不需要的输出流。因此,您可能还希望在之前将SetCloseStream(false)应用于PdfCopy。