@Override public void postProcess(ITextContext context, File fileIn, File fileOut) { FileInputStream in = null; FileOutputStream out = null; try { in = new FileInputStream(fileIn); out = new FileOutputStream(fileOut); PageNumber pageNumber = context.pageNumber(); int startPage = pageNumber.lookupFrontMatterLastPage(); ColumnText ct = generateTableOfContent(context); pageNumber.continueFrontMatter(); PdfReader reader = new PdfReader(in); Rectangle pageSize = reader.getPageSize(1); PdfStamper stamper = new PdfStamper(reader, out); while (true) { stamper.insertPage(++startPage, pageSize); PdfContentByte under = stamper.getUnderContent(startPage); pageNumber.notifyPageChange(); headerFooter.drawFooter(under, pageNumber.pageInfos()); PdfContentByte canvas = stamper.getOverContent(startPage); ct.setCanvas(canvas); ct.setSimpleColumn(36, 36, 559, 770); if (!ColumnText.hasMoreText(ct.go())) break; } stamper.close(); } catch (FileNotFoundException e) { log.error("Unable to reopen temporary generated file ({})", fileIn, e); } catch (DocumentException e) { log.error("Error during report post-processing from: {}, to: {}", fileIn, fileOut, e); } catch (IOException e) { log.error("Error during report post-processing from: {}, to: {}", fileIn, fileOut, e); } finally { IOUtils.closeQuietly(out); IOUtils.closeQuietly(in); } }