using iText.Kernel.Pdf; using iText.Kernel.Pdf.Canvas; #if NETFRAMEWORK using System.IO; using System; #endif namespace EnvelopeGenerator.PdfEditor #if NET ; #elif NETFRAMEWORK { #endif public static class Extensions { #region Edit PDF document public static TStream Edit(this TStream inputStream, Action edit) where TStream : Stream, new() { using (var outputStream = new TStream()) { using (var pdfDoc = new PdfDocument(new PdfReader(inputStream), new PdfWriter(outputStream))) { edit(pdfDoc); } return outputStream; } } public static byte[] Edit(this byte[] pdfBytes, Action edit) { using (var inputStream = new MemoryStream(pdfBytes)) { return inputStream.Edit(edit).ToArray(); } } #endregion public static byte[] Design(this byte[] pdfBytes, params (int pageIndex, Action design)[] pageDesign) => pdfBytes.Edit(doc => { foreach((int pageIndex, Action design) in pageDesign) { var page = doc.GetPage(pageIndex); var canvas = new PdfCanvas(page); design(canvas); } }); } #if NETFRAMEWORK } #endif