java - @kholidfu

Table of Contents

1 PDF Link Stamper

Snippet ini berfungsi untuk menambahkan stamp berupa link yang ditaruh di pojok-kiri-bawah setiap halaman pdf.

import com.itextpdf.text.Anchor;
import com.itextpdf.text.Chunk;
import com.itextpdf.text.DocumentException;
import com.itextpdf.text.Element;
import com.itextpdf.text.Font;
import com.itextpdf.text.FontFactory;
import com.itextpdf.text.Phrase;
import com.itextpdf.text.Rectangle;
import com.itextpdf.text.pdf.ColumnText;
import com.itextpdf.text.pdf.PdfContentByte;
import com.itextpdf.text.pdf.PdfReader;
import com.itextpdf.text.pdf.PdfStamper;

import java.io.FileOutputStream;
import java.io.IOException;

/*
 * source of inspiration:
 * http://tutorials.jenkov.com/java-itext/modifying-pdf-documents.html
 * http://blindcoder.wordpress.com/2012/12/10/itext-adding-web-links-at-an-absolute-position-in-java/
 */

public class StampText {

  public static void main(String[] args) throws InterruptedException {
    try {

        // processbuilder for qpdf
        ProcessBuilder pb = new ProcessBuilder("qpdf",
                                               "--decrypt",
                                               "/home/banteng/Desktop/test.pdf",
                                               "/home/banteng/Desktop/test2.pdf");
        Process p = pb.start();
        p.waitFor();
        
        PdfReader pdfReader = new PdfReader("/home/banteng/Desktop/test2.pdf");

        PdfStamper pdfStamper = new PdfStamper(pdfReader,
        new FileOutputStream("/home/banteng/Desktop/test3.pdf"));

        for(int i=1; i<= pdfReader.getNumberOfPages(); i++){

          PdfContentByte content = pdfStamper.getOverContent(i);

          // get page size
          Rectangle crop = pdfReader.getCropBox(i);
          
          // font untuk anchor (default == 6)
          Font font = FontFactory.getFont(FontFactory.COURIER, 6,
                                          Font.UNDERLINE);
          font.setColor(0, 0, 255);
          // font untuk pre (default == 6)
          Font pre = FontFactory.getFont(FontFactory.COURIER, 6);
          pre.setColor(0, 0, 0);
          // adding phrase pre
          Phrase phrase0 = new Phrase("Downloaded from", pre);
          Phrase phrase1 = new Phrase("awesome site", pre);
          Chunk chunk = new Chunk("www.example.com", font);
          Anchor anchor = new Anchor(chunk);
          anchor.setReference("http://www.example.com");
          
          // setting default
          
          ColumnText.showTextAligned(content,
                                     Element.ALIGN_LEFT,
                                     phrase0,
                                     crop.getLeft() + 15,
                                     crop.getBottom() + 10, 0);
          ColumnText.showTextAligned(content,
                                     Element.ALIGN_LEFT,
                                     anchor,
                                     crop.getLeft() + 74,
                                     crop.getBottom() + 10, 0);
          ColumnText.showTextAligned(content,
                                     Element.ALIGN_LEFT,
                                     phrase1,
                                     crop.getLeft() + 137,
                                     crop.getBottom() + 10, 0);
          
          /*
          ColumnText.showTextAligned(content,
                                     Element.ALIGN_LEFT,
                                     phrase0,
                                     crop.getLeft() + 22,
                                     crop.getBottom() + 1, 0);
          ColumnText.showTextAligned(content,
                                     Element.ALIGN_LEFT,
                                     anchor,
                                     crop.getLeft() + 83,
                                     crop.getBottom() + 1, 0);
          ColumnText.showTextAligned(content,
                                     Element.ALIGN_LEFT,
                                     phrase1,
                                     crop.getLeft() + 145,
                                     crop.getBottom() + 1, 0);
          */
          
          // setting untuk halaman kecil
          /*
          ColumnText.showTextAligned(content,
                                     Element.ALIGN_LEFT,
                                     phrase0,
                                     crop.getLeft() + 45,
                                     crop.getBottom() + 1, 0);
          ColumnText.showTextAligned(content,
                                     Element.ALIGN_LEFT,
                                     anchor,
                                     crop.getLeft() + 93,
                                     crop.getBottom() + 1, 0);
          ColumnText.showTextAligned(content,
                                     Element.ALIGN_LEFT,
                                     phrase1,
                                     crop.getLeft() + 144,
                                     crop.getBottom() + 1, 0);
          */
      }

      pdfStamper.close();

    } catch (IOException e) {
      e.printStackTrace();
    } catch (DocumentException e) {
      e.printStackTrace();
    }
  }
}

Mohon dimaklumi jika kode terlihat janggal, bukan java native coder soalnya :p

Date: 2015-10-01

Author: Kholid Fuadi

Created: 2016-10-14 Fri 11:35

Validate