private void addContentToPage(PdfReader reader, Rectangle size, PdfImportedPage page) { if (WriterCustomizer == null) { return; } var stamp = _writer.CreatePageStamp(page); WriterCustomizer(new ImportedPageInfo { FileNumber = _fileNumber, Reader = reader, Stamp = stamp, PageSize = size, ImportedPage = page, CurrentPageNumber = _overallPageNumber, PdfDocument = _document, TotalNumberOfPages = _totalNumberOfPages }); stamp.AlterContents(); }
public void MergeAndStampPdf(bool resetStampEachPage, String[] input, String output, String stamp) { PdfReader stampReader = new PdfReader(pdfContent[stamp]); List <PdfReader> readersToClose = new List <PdfReader>(); readersToClose.Add(stampReader); MemoryStream baos = new MemoryStream(); try { Document document = new Document(); PdfCopy writer = new PdfSmartCopy(document, baos); try { document.Open(); int stampPageNum = 1; foreach (string element in input) { // create a reader for the input document PdfReader documentReader = new PdfReader( new RandomAccessFileOrArray( new RandomAccessSourceFactory().CreateSource(pdfContent[element]) ) , null); for (int pageNum = 1; pageNum <= documentReader.NumberOfPages; pageNum++) { // import a page from the main file PdfImportedPage mainPage = writer.GetImportedPage(documentReader, pageNum); // make a stamp from the page and get under content... PdfCopy.PageStamp pageStamp = writer.CreatePageStamp(mainPage); // import a page from a file with the stamp... if (resetStampEachPage) { stampReader = new PdfReader(pdfContent[stamp]); readersToClose.Add(stampReader); } PdfImportedPage stampPage = writer.GetImportedPage(stampReader, stampPageNum++); // add the stamp template, update stamp, and add the page pageStamp.GetOverContent().AddTemplate(stampPage, 0, 0); pageStamp.AlterContents(); writer.AddPage(mainPage); if (stampPageNum > stampReader.NumberOfPages) { stampPageNum = 1; } } } } finally { writer.Close(); document.Close(); } } finally { foreach (PdfReader stampReaderToClose in readersToClose) { stampReaderToClose.Close(); } } pdfContent[output] = baos.ToArray(); }