J'essaie de créer un nouveau PdfDocument à partir d'autres PdfDocuments créés en mémoire. Je peux le faire en les enregistrant sur le disque et en les lisant juste, mais je me demandais s'il y avait un moyen de le faire avec juste un flux de mémoire? De cette façon, je pourrais créer les autres pièces en mémoire et les placer dans le nouveau pdf document. Toute aide serait appréciée. Voici ma tentative de le faire avec un flux de mémoire, mais il me semble qu'il manque quelque chose.Créer un nouveau PdfDocument à partir d'autres pièces PdfDocument créées en mémoire avec itext7
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);
}
}
* « Je peux le faire en les enregistrant sur le disque, puis il suffit de les lire, mais je me demandais s'il y a un moyen de le faire avec juste un flux de mémoire? » * - Qu'est-ce qui vous empêche exactement d'utiliser les instances de 'MemoryStream' au lieu du système de fichiers? Si vous savez comment faire le premier, le dernier devrait être trivial. – mkl
Bonne question. Si j'essaie de lire dans mon flux après l'avoir fermé, j'obtiens une erreur indiquant que je ne peux pas accéder à un flux fermé. Si je ne ferme pas le flux et essaie d'y accéder, j'obtiens une erreur différente: l'en-tête PDF n'est pas trouvé. – Haggis777