Skip to main content
Skip table of contents

Cut and paste content in a page

Example in answer to the question Click How to move the content inside a rectangle inside an existing PDF?


cutandpaste

JAVA

JAVA
/**
 * Example written by Bruno Lowagie in answer to
 * http://stackoverflow.com/questions/28368317/itext-or-itextsharp-move-text-in-an-existing-pdf
 */
package sandbox.merge;

import com.itextpdf.text.Document;
import com.itextpdf.text.DocumentException;
import com.itextpdf.text.Rectangle;
import com.itextpdf.text.pdf.PdfContentByte;
import com.itextpdf.text.pdf.PdfImportedPage;
import com.itextpdf.text.pdf.PdfReader;
import com.itextpdf.text.pdf.PdfTemplate;
import com.itextpdf.text.pdf.PdfWriter;
import java.io.File;

import java.io.FileOutputStream;
import java.io.IOException;
import sandbox.WrapToTest;

@WrapToTest
public class CutAndPaste {

    /** The original PDF file. */
    public static final String SRC
        = "resources/pdfs/page229.pdf";

    /** The resulting PDF file. */
    public static final String DEST
        = "results/merge/page229_cut-paste.pdf";
    
    /**
     * Manipulates a PDF file src with the file dest as result
     * @param src the original PDF
     * @param dest the resulting PDF
     * @throws IOException
     * @throws DocumentException
     */
    public void manipulatePdf(String src, String dest)
        throws IOException, DocumentException {
    	// Creating a reader
        PdfReader reader = new PdfReader(src);
        // step 1
        Rectangle pageSize = reader.getPageSize(1);
        Rectangle toMove = new Rectangle(100, 500, 200, 600);
        Document document = new Document(pageSize);
        // step 2
        PdfWriter writer
            = PdfWriter.getInstance(document, new FileOutputStream(dest));
        // step 3
        document.open();
        // step 4
        PdfImportedPage page = writer.getImportedPage(reader, 1);
        PdfContentByte cb = writer.getDirectContent();
        PdfTemplate template1 = cb.createTemplate(pageSize.getWidth(), pageSize.getHeight());
        template1.rectangle(0, 0, pageSize.getWidth(), pageSize.getHeight());
        template1.rectangle(toMove.getLeft(), toMove.getBottom(),
                toMove.getWidth(), toMove.getHeight());
        template1.eoClip();
        template1.newPath();
        template1.addTemplate(page, 0, 0);
        PdfTemplate template2 = cb.createTemplate(pageSize.getWidth(), pageSize.getHeight());
        template2.rectangle(toMove.getLeft(), toMove.getBottom(),
                toMove.getWidth(), toMove.getHeight());
        template2.clip();
        template2.newPath();
        template2.addTemplate(page, 0, 0);
        cb.addTemplate(template1, 0, 0);
        cb.addTemplate(template2, -20, -2);
        // step 4
        document.close();
        reader.close();
    }
    
    /**
     * Main method.
     * @param    args    no arguments needed
     * @throws DocumentException 
     * @throws IOException
     */
    public static void main(String[] args)
        throws IOException, DocumentException {
        File file = new File(DEST);
        file.getParentFile().mkdirs();
        new CutAndPaste().manipulatePdf(SRC, DEST);
    }
}
JavaScript errors detected

Please note, these errors can depend on your browser setup.

If this problem persists, please contact our support.