2017-09-28 3 views
0

メモリに作成された他のPdfDocumentから新しいPdfDocumentを作成しようとしています。私はこれをディスクに保存してから読んだだけですが、ちょうどメモリストリームでこれを行う方法があるのでしょうか?そうすれば、私はメモリ内の他の部分を作成し、それらを新しいpdfドキュメントに配置することができます。どんな助けもありがとう。以下はメモリストリームでこれを行う私の試みですが、私は何かが欠けているようです。itext7でメモリに作成された他のPdfDocumentから新しいPdfDocumentを作成します。

using (var stream = new MemoryStream()) 
{ 
    using (var pdfDocument = new PdfDocument(new PdfWriter(stream))) 
    { 
     var doc = new Document(pdfDocument, new PageSize(298f, 178f)); 
     doc.SetMargins(0,0,0,0); 
     var tableInfo = PageElementsFactory.BuildDefaultTable(null, 1); 
     tableInfo.SetMargin(0); 
     tableInfo.SetPadding(0); 
     var cell = PageElementsFactory.BuildDefaultCell(); 
     var dataValue = DataValues[PdfConstValues.RETENTION_INFORMATION_CUSTOMER_NAME]; 
     cell.Add(new Paragraph(dataValue).SetFontSize(12f)); 
     tableInfo.AddCell(cell); 
     var cell2 = PageElementsFactory.BuildDefaultCell(); 
     cell2.Add(new Paragraph(DataValues[PdfConstValues.RETENTION_INFORMATION_ORDER_INFO]).SetBold()); 
     tableInfo.AddCell(cell2); 
     var cell3 = PageElementsFactory.BuildDefaultCell(); 
     cell3.Add(new Paragraph(DataValues[PdfConstValues.RETENTION_INFORMATION_PART_NUMBER]) 
      .SetFontSize(23f).SetBold()); 
     tableInfo.AddCell(cell3); 

     doc.Add(tableInfo); 
     doc.Close(); 
     var page = pdfDocument.GetFirstPage(); 
     var xObject = page.CopyAsFormXObject(newPdfDocument); 
     return new Image(xObject); 
    } 
} 
+1

*「私はディスクに保存してからちょうどそれらを読むことによってこれを行うことができますが、ちょうどメモリストリームでこれを行う方法がある場合、私は不思議でしたか?」* - あなたを保っている正確にどのようなファイルシステムの代わりに 'MemoryStream'インスタンスを使用していませんか?あなたが前者を行う方法を知っているなら、後者は自明でなければなりません。 – mkl

+0

大きな質問です。私がストリームを閉じた後にストリームを読み込もうとすると、閉じたストリームにアクセスできないというエラーが表示されます。ストリームを閉じずにアクセスしようとすると、別のエラーが発生します.PDFヘッダーが見つかりません。 – Haggis777

答えて

0

MKLは、私に彼のコメントからいくつかのアイデアを与えた、といくつかのより多くの試行錯誤の後に私がしなければならなかったすべてはpdfdocument近かったし、その後、アレイにストリームをコピーして、それから、新しいメモリストリームを作成し、 BAM!出来た。

doc.Add(tableInfo); 
doc.Close(); 
var streamInfo = stream.ToArray(); 
var memstreamClone = new MemoryStream(streamInfo); 
memstreamClone.Position = 0; 
var pdfStreamDoc = new PdfDocument(new PdfReader(memstreamClone)); 
var firstPage = pdfStreamDoc.GetFirstPage(); 
return new Image(firstPage.CopyAsFormXObject(pdfDoc)); 
関連する問題