2012-05-08 20 views
2

私は生成している1つのファイルにそれを保存しているpdfのシャープな文書がうまくいきます。私が試してみて、同じPDF文書からいくつかのファイルに保存した場合、私は、次のエラーメッセージが表示されます。PDFSharpオブジェクトを複数のファイルに保存する方法は?

Test Error : UnitTests.PdfFocusCalResultOutputterTester.Test_MakePDF 
System.InvalidOperationException : The dictionary already has a stream. 
at PdfSharp.Pdf.PdfDictionary.CreateStream(Byte[] value) 
at PdfSharp.Pdf.Advanced.PdfToUnicodeMap.PrepareForSave() 
at PdfSharp.Pdf.Advanced.PdfType0Font.PrepareForSave() 
at PdfSharp.Pdf.Advanced.PdfFontTable.PrepareForSave() 
at PdfSharp.Pdf.PdfDocument.PrepareForSave() 
at PdfSharp.Pdf.PdfDocument.DoSave(PdfWriter writer) 
at PdfSharp.Pdf.PdfDocument.Save(Stream stream, Boolean closeStream) 
at ResultOutputter.PdfFocusCalResultOutputter.RenderToFile(String filename) in c:\projects\testing\pdffocuscalresultoutputter.cpp:line 802 

次のように私は単にPdfDocumentの私のインスタンスにPdfSharp::Pdf::PdfDocument::Saveを呼んでいる:

System::IO::FileStream^ s = gcnew System::IO::FileStream("firstpdf.pdf", System::IO::FileMode::Create); 
m_document->Save(s, false); 
s->Flush(); 
s->Close(); 

System::IO::FileStream^ s2 = gcnew System::IO::FileStream("secondpdf.pdf", System::IO::FileMode::Create); 
m_document->Save(s2, false); 
s2->Flush(); 
s2->Close(); 

答えて

3
  1. これはPDFsharpのバグです。コードがうまくいくはずです。
  2. コードが効率的ではありません。一度ストリームに保存し、そのストリームを複数のファイルに書き込む。
+0

私は生成したpdfを再利用したいのですが、再作成する必要がありますか? ...またはPDFファイルを変更してストリームをクリアしますか? –

+0

誰かがこれを行う必要がある場合は、メモリストリームを使用することができます:http://stackoverflow.com/questions/1073277/pdfsharp-save-to-memorystream –

+0

Open-modify-saveは機能します。オープン・モディファイ・セーブ・モディファイ・セーブは動作しません。 Open-modify-save-open-modify-saveが機能するので、中間ステップをファイルに保存し、ストリームに保存し、ストリームをファイルにコピーしてからストリームを開き、さらに変更を加えます。 ご迷惑をおかけして申し訳ありませんが、「バグを修正」するのはやや複雑だと言われました。 –

関連する問題