0

私は2つのコードを持っています:

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 から、ファイルが破損していると表示されます。私が間違っていることは何ですか?

ありがとう!

4

1 に答える 1

3

あなたがする時に

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

結果の PDF はまだ完成していません。したがって、明らかに Acrobat Reader は文句を言います。

完成したPDFをメモリストリームに入れるには、後まで待つ必要があります

doc.Close();

これは、デフォルトで暗黙的に出力ストリームを閉じますが、これは望ましくない可能性があります。したがって、前に SetCloseStream(false) を PdfCopy に適用することもできます。

于 2013-10-27T14:32:33.623 に答える