PdfReader reader = new PdfReader(src); int n = reader.getNumberOfPages(); PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(dest)); PdfContentByte pagecontent; for (int i = 0; i < n; ) { pagecontent = stamper.getOverContent(++i); ColumnText.showTextAligned(pagecontent, Element.ALIGN_RIGHT, new Phrase(String.format("page %s of %s", i, n)), 559, 806, 0); } stamper.close(); reader.close();
PdfReader reader = new PdfReader(SOURCE); int pageToReplace = NROFPAGETOREPLACE; List<Integer> pagesToKeep = new ArrayList<Integer>(); for (int i = 1; i <= reader.getNumberOfPages(); i++) if (i != pageToReplace) pagesToKeep.add(i); reader.selectPages(pagesToKeep); PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(TARGET)); stamper.insertPage(pageToReplace, reader.getPageSizeWithRotation(1)); Image image = Image.getInstance(IMAGESOURCE); stamper.getOverContent(pageToReplace).addImage(image, image.getWidth(), 0, 0, image.getHeight(), 30, 30); stamper.close();
PdfReader insert = new PdfReader(INSERT); PdfReader reader = new PdfReader(src); PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(DEST)); stamper.insertPage(4, insert.getPageSize(1)); PdfContentByte cb = stamper.getOverContent(4); cb.addTemplate(stamper.getImportedPage(insert, 1), 0, 0); ... stamper.close();
outputStream = new ByteArrayOutputStream(); output = new DataOutputStream(outputStream); document = new Document(); writer = PdfWriter.getInstance(document, output); document.open(); contentByte = writer.getDirectContent(); ....add stuff document.close(); writer.close(); byte[] output = outputStream.toByteArray(); PdfReader reader = new PdfReader(output); //reset the output outputStream = new ByteArrayOutputStream(); output = new DataOutputStream(outputStream); document = new Document(); writer = PdfWriter.getInstance(document, output); document.open(); PdfStamper stamper = new PdfStamper(reader, outputStream); //add the pages for (int i = 1; i <= pageCount; i++) { contentByte = stamper.getOverContent(i); addParagraph("Page " + i + " of " + pageCount, new Point(500, 30), boldTextFont); // my own paragraph font } stamper.close();
void addTextPatternToOverContent(File source, File target) throws IOException, DocumentException { PdfReader reader = new PdfReader(source.getPath()); OutputStream os = new FileOutputStream(target); PdfStamper stamper = new PdfStamper(reader, os); PdfPatternPainter painter = stamper.getOverContent(1).createPattern(200, 150); painter.setColorFill(BaseColor.BLACK); painter.beginText(); painter.setTextMatrix(AffineTransform.getTranslateInstance(0, 50)); painter.setFontAndSize(BaseFont.createFont(), 100); painter.showText("Test"); painter.endText(); for (int i = reader.getNumberOfPages(); i > 0; i--) { PdfContentByte overContent = stamper.getOverContent(i); overContent.setColorFill(new PatternColor(painter)); overContent.rectangle(200, 300, 200, 150); overContent.fill(); } stamper.close(); os.close(); reader.close(); }
Font smallFont = FontFactory.getFont("Arial", 9, Font.NORMAL); ByteArrayOutputStream pdfOutputStream = new ByteArrayOutputStream(); Document document = new Document(PageSize.A4, 70, 70, 40, 40); PdfWriter pdfWriter = PdfWriter.getInstance(document, pdfOutputStream); document.open(); //CREATE PDF HERE - ADD CONTENT TO DOCUMENT document.close(); int pageCount = pdfWriter.getPageNumber()-1; byte[] pdfAsBytes = pdfOutputStream.toByteArray(); //add footer PdfReader reader = new PdfReader(pdfAsBytes); ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); DataOutputStream output = new DataOutputStream(outputStream); document = new Document(); document.open(); PdfStamper stamper = new PdfStamper(reader, output); for (int i = 1; i <= pageCount; i++) { ColumnText.showTextAligned(stamper.getOverContent(i), Element.ALIGN_CENTER, new Phrase(i+"/" + pageCount, smallFont), 550, 30, 0); } stamper.close(); byte[] finalPdfAsBytes = outputStream.toByteArray();
//PDF READER // Create a reader try{ ByteArrayOutputStream out = new ByteArrayOutputStream(); PdfReader reader = new PdfReader(output.toByteArray()); PdfStamper stamper = new PdfStamper(reader, out); int n = reader.getNumberOfPages(); PdfContentByte cbq; Font headerFont = new Font(FontFamily.COURIER, 13, Font.UNDERLINE); for (int i = 1; i <= n; i++) { cbq = stamper.getOverContent(i); ColumnText ct = new ColumnText( cbq ); ct.setSimpleColumn( 300 , 300, 50, 50 , 150, Element.ALIGN_CENTER ); ct.addElement( new Paragraph( "Mathias" , headerFont ) ); ct.go(); } // Close the stamper stamper.close(); reader.close(); response.setContentLength(out.size()); OutputStream os = response.getOutputStream(); out.writeTo(os); } catch (DocumentException e) { // TODO Auto-generated catch block e.printStackTrace(); }
PdfReader reader = new PdfReader("template.pdf"); PdfStamper stamper = new PdfStamper( reader, new FileOutputStream("output.pdf")); PdfContentByte content = stamper.getOverContent(1); // first page == 1 Image image = Image.createInstance("someImage.png"); image.setAbsolutePosition( x, y ); image.setAbsoluteHeight( hei ); image.setAbsoluteWidth( wid ); content.addImage(image); // instead of absolutely positioning the image, you can do: //content.addImage( image, wid, 0f, 0f, hei, x, y ); // that's a transformation matrix, you can skew, rotate, scale, etc. stamper.close();
public void manipulatePdf(String src, String dest) throws IOException, DocumentException { PdfReader reader = new PdfReader(src); PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(dest)); int n = reader.getNumberOfPages(); float percentage = 0.8f; for (int p = 1; p <= n; p++) { float offsetX = (reader.getPageSize(p).getWidth() * (1 - percentage)) / 2; float offsetY = (reader.getPageSize(p).getHeight() * (1 - percentage)) / 2; stamper.getUnderContent(p).setLiteral( String.format("\nq %s 0 0 %s %s %s cm\nq\n", percentage, percentage, offsetX, offsetY)); stamper.getOverContent(p).setLiteral("\nQ\nQ\n"); } stamper.close(); reader.close(); }
PdfStamper stamper = new PdfStamper(reader, os); PdfPatternPainter painter = stamper.getOverContent(1).createPattern(200, 150); painter.setColorFill(BaseColor.GREEN); painter.beginText(); PdfContentByte overContent = stamper.getOverContent(i);
public void manipulatePdf(String src, String dest) throws IOException, DocumentException { PdfReader reader = new PdfReader(src); PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(dest)); Phrase header = new Phrase("Copy", new Font(FontFamily.HELVETICA, 14)); for (int i = 1; i <= reader.getNumberOfPages(); i++) { float x = reader.getPageSize(i).getWidth() / 2; float y = reader.getPageSize(i).getTop(20); ColumnText.showTextAligned( stamper.getOverContent(i), Element.ALIGN_CENTER, header, x, y, 0); } stamper.close(); reader.close(); }
public void manipulatePdf(String src, String dest) throws IOException, DocumentException { PdfReader reader = new PdfReader(src); PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(dest)); PdfContentByte canvas = stamper.getOverContent(1); Font bold = new Font(FontFamily.HELVETICA, 12, Font.BOLD); Chunk chunk = new Chunk("The Best iText Questions on StackOverflow", bold); chunk.setAnchor("http://pages.itextpdf.com/ebook-stackoverflow-questions.html"); Phrase p = new Phrase("Download "); p.add(chunk); p.add(" and discover more than 200 questions and answers."); ColumnText ct = new ColumnText(canvas); ct.setSimpleColumn(36, 700, 559, 750); ct.addText(p); ct.go(); stamper.close(); reader.close(); }
PdfReader reader = new PdfReader(src); // We assume that there's a single large picture on the first page PdfDictionary page = reader.getPageN(1); PdfDictionary resources = page.getAsDict(PdfName.RESOURCES); PdfDictionary xobjects = resources.getAsDict(PdfName.XOBJECT); PdfName imgName = xobjects.getKeys().iterator().next(); Image img = Image.getInstance((PRIndirectReference)xobjects.getAsIndirectObject(imgName)); img.setAbsolutePosition(0, 0); img.scaleAbsolute(reader.getPageSize(1)); PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(dest)); stamper.getOverContent(1).addImage(img); stamper.close(); reader.close();
public void manipulatePdf(String src, String dest) throws IOException, DocumentException { PdfReader reader = new PdfReader(src); PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(dest)); // Here we define the location: Rectangle linkLocation = new Rectangle(320, 695, 560, 741); // here we add the actual content at this location: ColumnText ct = new ColumnText(stamper.getOverContent(1)); ct.setSimpleColumn(linkLocation); ct.addElement(new Paragraph("This is a link. Click it and you'll be forwarded to another page in this document.")); ct.go(); // now we create the link that will jump to a specific destination: PdfDestination destination = new PdfDestination(PdfDestination.FIT); PdfAnnotation link = PdfAnnotation.createLink(stamper.getWriter(), linkLocation, PdfAnnotation.HIGHLIGHT_INVERT, 3, destination); // If you don't want a border, here's where you remove it: link.setBorder(new PdfBorderArray(0, 0, 0)); // We add the link (that is the clickable area, not the text!) stamper.addAnnotation(link, 1); stamper.close(); reader.close(); }
PdfReader cover = new PdfReader("hero.pdf"); PdfReader reader = new PdfReader("pages.pdf"); PdfStamper stamper = new PdfStamper(reader, new FileOutputStream("cover_with_pages.pdf")); stamper.insertPage(1, cover.getPageSizeWithRotation(1)); PdfContentByte page1 = stamper.getOverContent(1); PdfImportedPage page = stamper.getImportedPage(cover, 1); page1.addTemplate(page, 0, 0); stamper.close(); cover.close(); reader.close();
public void manipulatePdf(String src, String dest) throws IOException, DocumentException { PdfReader reader = new PdfReader(src); PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(dest)); AffineTransform transform = AffineTransform.getRotateInstance(Math.PI / 6); stamper.getWriter().setPageEvent(new AddAnnotation(stamper, transform)); PdfContentByte canvas = stamper.getOverContent(1); Font bold = new Font(FontFamily.HELVETICA, 12, Font.BOLD); Chunk chunk = new Chunk("The Best iText Questions on StackOverflow", bold); chunk.setGenericTag("http://pages.itextpdf.com/ebook-stackoverflow-questions.html"); Phrase p = new Phrase("Download "); p.add(chunk); p.add(" and discover more than 200 questions and answers."); canvas.saveState(); canvas.concatCTM(transform); ColumnText ct = new ColumnText(canvas); ct.setSimpleColumn(300, 0, 800, 400); ct.addText(p); ct.go(); canvas.restoreState(); stamper.close(); reader.close(); }
public void manipulatePdf(String src, String dest) throws IOException, DocumentException { PdfReader reader = new PdfReader(src); PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(dest)); AffineTransform transform = AffineTransform.getRotateInstance(Math.PI / 2); stamper.getWriter().setPageEvent(new AddAnnotation(stamper, transform)); PdfContentByte canvas = stamper.getOverContent(1); Font bold = new Font(FontFamily.HELVETICA, 12, Font.BOLD); Chunk chunk = new Chunk("The Best iText Questions on StackOverflow", bold); chunk.setGenericTag("http://pages.itextpdf.com/ebook-stackoverflow-questions.html"); Phrase p = new Phrase("Download "); p.add(chunk); p.add(" and discover more than 200 questions and answers."); canvas.saveState(); canvas.concatCTM(transform); ColumnText ct = new ColumnText(canvas); ct.setSimpleColumn(36, -559, 806, -36); ct.addText(p); ct.go(); canvas.restoreState(); stamper.close(); reader.close(); }
public void manipulatePdf(String src, String dest) throws IOException, DocumentException { PdfReader reader = new PdfReader(src); PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(dest)); int n = reader.getNumberOfPages(); PdfContentByte canvas; Rectangle pageSize; float x, y; for (int p = 1; p <= n; p++) { pageSize = reader.getPageSizeWithRotation(p); // left of the page x = pageSize.getLeft(); // middle of the height y = (pageSize.getTop() + pageSize.getBottom()) / 2; // getting the canvas covering the existing content canvas = stamper.getOverContent(p); // adding some lines to the left ColumnText.showTextAligned(canvas, Element.ALIGN_CENTER, new Phrase("This is some extra text added to the left of the page"), x + 18, y, 90); ColumnText.showTextAligned(canvas, Element.ALIGN_CENTER, new Phrase("This is some more text added to the left of the page"), x + 34, y, 90); } stamper.close(); }
PdfReader reader = new PdfReader(src); PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(dest)); int n = reader.getNumberOfPages(); PdfDictionary page; PdfArray crop; PdfArray media; for (int p = 1; p <= n; p++) { page = reader.getPageN(p); media = page.getAsArray(PdfName.CROPBOX); if (media == null) { media = page.getAsArray(PdfName.MEDIABOX); } crop = new PdfArray(); crop.add(new PdfNumber(0)); crop.add(new PdfNumber(0)); crop.add(new PdfNumber(media.getAsNumber(2).floatValue() / 2)); crop.add(new PdfNumber(media.getAsNumber(3).floatValue() / 2)); page.put(PdfName.MEDIABOX, crop); page.put(PdfName.CROPBOX, crop); stamper.getUnderContent(p).setLiteral("\nq 0.5 0 0 0.5 0 0 cm\nq\n"); stamper.getOverContent(p).setLiteral("\nQ\nQ\n"); } stamper.close(); reader.close();
public void manipulatePdf(String src, String dest) throws IOException, DocumentException { PdfReader reader = new PdfReader(src); PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(dest)); int n = reader.getNumberOfPages(); PdfDictionary page; PdfArray media; for (int p = 1; p <= n; p++) { page = reader.getPageN(p); media = page.getAsArray(PdfName.CROPBOX); if (media == null) { media = page.getAsArray(PdfName.MEDIABOX); } float llx = media.getAsNumber(0).floatValue() + 200; float lly = media.getAsNumber(1).floatValue() + 200; float w = media.getAsNumber(2).floatValue() - media.getAsNumber(0).floatValue() - 400; float h = media.getAsNumber(3).floatValue() - media.getAsNumber(1).floatValue() - 400; String command = String.format( "\nq %.2f %.2f %.2f %.2f re W n\nq\n", llx, lly, w, h); stamper.getUnderContent(p).setLiteral(command); stamper.getOverContent(p).setLiteral("\nQ\nQ\n"); } stamper.close(); reader.close(); }