我正在尝试从内存中创建的其他PdfDocuments创建一个新的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);
}
}
答案 0 :(得分: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));