mac_ref
mac_ref

Reputation: 23

Divide one page PDF file in two pages PDF file

I'm using iTextSharp to handle pdf files. I'd like to know how I can split a page in half and make 2 different pages from the two pieces. I tried a lot but nothing seems to work right now.

First try

iTextSharp.text.Rectangle size = new iTextSharp.text.Rectangle(0, pdfReader.GetPageSize(1).Height / 2, pdfReader.GetPageSize(1).Width, 0);

Second try

iTextSharp.text.Rectangle size = pdfReader.GetPageSizeWithRotation(1);
iTextSharp.text.Document document = new iTextSharp.text.Document(size.GetRectangle(0, size.Height / 2));

And several others. The results are always the same: I have a file with just the second half of the original page.

Upvotes: 0

Views: 2336

Answers (1)

Bruno Lowagie
Bruno Lowagie

Reputation: 77528

I don't understand your code snippets, but then again: probably you don't understand them either, so let's not look at what you've written so far, and let's take a closer look at the TileInTwo example:

public void manipulatePdf(String src, String dest)
    throws IOException, DocumentException {
    // Creating a reader
    PdfReader reader = new PdfReader(src);
    int n = reader.getNumberOfPages();
    // step 1
    Rectangle mediabox = new Rectangle(getHalfPageSize(reader.getPageSizeWithRotation(1)));
    Document document = new Document(mediabox);
    // step 2
    PdfWriter writer
        = PdfWriter.getInstance(document, new FileOutputStream(dest));
    // step 3
    document.open();
    // step 4
    PdfContentByte content = writer.getDirectContent();
    PdfImportedPage page;
    int i = 1;
    while (true) {
        page = writer.getImportedPage(reader, i);
        content.addTemplate(page, 0, -mediabox.getHeight());
        document.newPage();
        content.addTemplate(page, 0, 0);
        if (++i > n)
            break;
        mediabox = new Rectangle(getHalfPageSize(reader.getPageSizeWithRotation(i)));
        document.setPageSize(mediabox);
        document.newPage();
    }
    // step 5
    document.close();
    reader.close();
}

public Rectangle getHalfPageSize(Rectangle pagesize) {
    float width = pagesize.getWidth();
    float height = pagesize.getHeight();
    return new Rectangle(width, height / 2);
}

In this example, we ask the PdfReader instance for the page size of the first page and we create a new rectangle with the same width and only half the height.

We then import each page in the document, and we add it twice on different pages:

  • once on the odd pages with a negative y value to show the upper half of the original page,
  • once on the even pages with y = 0 to show the lower half of the original page.

As every page in the original document can have a different size, we may need to change the page size for every new couple of pages.

Upvotes: 2

Related Questions