Package org.pdfclown.samples.cli

Source Code of org.pdfclown.samples.cli.PageNumberingSample

package org.pdfclown.samples.cli;

import org.pdfclown.documents.Document;
import org.pdfclown.documents.Page;
import org.pdfclown.documents.contents.colorSpaces.DeviceRGBColor;
import org.pdfclown.documents.contents.composition.AlignmentXEnum;
import org.pdfclown.documents.contents.composition.AlignmentYEnum;
import org.pdfclown.documents.contents.composition.PrimitiveComposer;
import org.pdfclown.documents.contents.fonts.StandardType1Font;
import org.pdfclown.files.File;
import org.pdfclown.tools.PageStamper;

import java.awt.geom.Dimension2D;
import java.awt.geom.Point2D;

/**
  This sample demonstrates <b>how to stamp the page number</b> on alternated corners
  of an existing PDF document's pages.
  <h3>Remarks</h3>
  <p>Stamping is just one of the several ways PDF contents can be manipulated using PDF Clown:
  contents can be inserted as (raw) data chunks, mid-level content objects, external forms,
  etc.</p>

  @author Stefano Chizzolini (http://www.stefanochizzolini.it)
  @version 0.1.0
*/
public class PageNumberingSample
  extends Sample
{
  @Override
  public boolean run(
    )
  {
    // 1. Opening the PDF file...
    File file;
    {
      String filePath = promptPdfFileChoice("Please select a PDF file");

      try
      {file = new File(filePath);}
      catch(Exception e)
      {throw new RuntimeException(filePath + " file access error.",e);}
    }
    Document document = file.getDocument();

    // 2. Stamp the document!
    stamp(document);

    // (boilerplate metadata insertion -- ignore it)
    buildAccessories(document,"Page numbering","numbering a document's pages");

    // 3. Serialize the PDF file!
    serialize(file);
   
    return true;
  }

  private void stamp(
    Document document
    )
  {
    // 1. Instantiate the stamper!
    /* NOTE: The PageStamper is optimized for dealing with pages. */
    PageStamper stamper = new PageStamper();

    // 2. Numbering each page...
    StandardType1Font font = new StandardType1Font(
      document,
      StandardType1Font.FamilyEnum.Courier,
      true,
      false
      );
    DeviceRGBColor redColor = new DeviceRGBColor(1, 0, 0);
    int margin = 32;
    for(Page page : document.getPages())
    {
      // 2.1. Associate the page to the stamper!
      stamper.setPage(page);

      // 2.2. Stamping the page number on the foreground...
      {
        PrimitiveComposer foreground = stamper.getForeground();

        foreground.setFont(font,16);
        foreground.setFillColor(redColor);

        Dimension2D pageSize = page.getSize();
        int pageNumber = page.getIndex() + 1;
        boolean pageIsEven = (pageNumber % 2 == 0);
        foreground.showText(
          Integer.toString(pageNumber),
          new Point2D.Double(
            (pageIsEven
              ? margin
              : pageSize.getWidth() - margin),
            pageSize.getHeight() - margin
            ),
          (pageIsEven
            ? AlignmentXEnum.Left
            : AlignmentXEnum.Right),
          AlignmentYEnum.Bottom,
          0
          );
      }

      // 2.3. End the stamping!
      stamper.flush();
    }
  }
}
TOP

Related Classes of org.pdfclown.samples.cli.PageNumberingSample

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.