de.krutisch.jan.rasterizer.Rasterizer.java Source code

Java tutorial

Introduction

Here is the source code for de.krutisch.jan.rasterizer.Rasterizer.java

Source

package de.krutisch.jan.rasterizer;
/*
 * The Great Rasterizer. Styled after the Rasterbator:
 * http://homokaasu.org/rasterbator/
 *
 * This is the Commandline version.
 * 
 *   This program is free software; you can redistribute it and/or modify
 *   it under the terms of the GNU General Public License as published by
 *   the Free Software Foundation; either version 2 of the License, or
 *   (at your option) any later version.
 *
 *   This program is distributed in the hope that it will be useful,
 *   but WITHOUT ANY WARRANTY; without even the implied warranty of
 *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *   GNU General Public License for more details.
 *
 *   You should have received a copy of the GNU General Public License
 *   along with this program; if not, write to the Free Software
 *   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 * 
 * The Great Rasterizer uses the following libraries: 
 * (apart from the obvious JRE SL)
 * 
 * * iText for pdf generation by Bruno Lowagie  and Paulo Soares
 * (http://www.lowagie.com/iText/)
 * 
 * * GNU getOpt, to have Unix style command line options by Aaron M. Renn
 * (http://www.urbanophile.com/arenn/hacking/download.html)
 * 
 * $Id$
 * 
 * 
 */

import gnu.getopt.Getopt;

import java.util.Date;
import com.lowagie.text.PageSize;

public class Rasterizer {

    private int rowsPerPage = 80;
    private int colsPerPage = 56;
    private float dotSize = 10f;

    private String inputFilename = new String("");
    private String outputFilename = new String("");

    private int xPages = 4;

    private boolean landscape = false;
    private boolean verbose = false;
    private boolean autoMargins = false;
    private boolean printCropmarks = false;
    private boolean printAllCropmarks = false;
    private boolean printColor = false;
    private com.lowagie.text.Rectangle pageSize = null;
    private static final String VERSION = "0.5";

    //    
    public Rasterizer(String[] args) {

        System.out.println("Rasterizer " + VERSION + "(c) JanKrutisch");
        // parse options using getOpt
        pageSize = PageSize.A4;
        if (parseOptions(args) == false)
            return;

        // get Time for performance measurement
        long startTime = new Date().getTime();

        CliLogger logger = new CliLogger();
        if (verbose)
            logger.setLogLevel(EventLogger.VERBOSE);

        RasterizerImage ri = RasterizerImage.getInstance(logger);
        RasterizerPdf rp = RasterizerPdf.getInstance(logger);

        if (!ri.loadImageFromFile(inputFilename)) {
            System.out.println("Image file '" + inputFilename + "' couldn't be opened. aborting.");
            return;
        }
        rp.setOutputFile(outputFilename);
        if (printColor) {
            rp.setColorMode(RasterizerPdf.SIMPLECOLOR);
        }
        rp.setPageSize(pageSize);
        rp.setDotSize(dotSize);
        rp.setMargins(36, 36, 36, 36);
        rp.setLandscape(landscape);

        if (printAllCropmarks) {
            rp.setCropmarks(RasterizerPdf.ALLCROPMARKS);
        } else if (printCropmarks)
            rp.setCropmarks(RasterizerPdf.CROPMARKS);
        rp.setHorizontalPages(xPages);
        RasterThread rt = new RasterThread(ri, rp, logger);
        rt.start();
        logger.log(EventLogger.VERBOSE, "detached");

        long fullTime = new Date().getTime() - startTime;

    }

    private void setDotSize(String p) {

        try {
            dotSize = Float.parseFloat(p);
        } catch (Exception e) {
            System.out.println("Illegal Dot Size. Defaulting to 10pt");
            dotSize = 10f;
        }
    }

    private void setPageSize(String p) {
        if ("A4".equals(p)) {
            pageSize = PageSize.A4;
        } else if ("A3".equals(p)) {
            pageSize = PageSize.A3;
        } else if ("LETTER".equals(p)) {
            pageSize = PageSize.LETTER;
        } else if ("LEGAL".equals(p)) {
            pageSize = PageSize.LEGAL;
        }
        if (pageSize == null)
            pageSize = PageSize.A4;
    }

    /*
     * Image scaling method.
     */

    /*
     * Parse Commandline Options using GNU Getopt.
     */
    private boolean parseOptions(String[] args) {
        Getopt g = new Getopt("Rasterizer", args, "p:s:d:m::lvhc");
        int c;
        String arg;
        while ((c = g.getopt()) != -1) {
            switch (c) {
            case 'm':
                printCropmarks = true;
                if ("all".equals(g.getOptarg())) {
                    printAllCropmarks = true;
                }
                break;
            case 'l':
                landscape = true;
                break;
            case 'v':
                // DO VERBOSE OUTPUT
                verbose = true;
                break;
            case 'h':
                // PRINT HELP
                printHelp();
                return false;
            case 's':
                // Page size
                setPageSize(g.getOptarg());
                break;
            case 'd':
                // Page size
                setDotSize(g.getOptarg());
                break;
            case 'p':
                // NUMBER OF X-PAGES
                arg = g.getOptarg();
                try {
                    xPages = Integer.parseInt(arg);
                } catch (Exception e) {
                    xPages = 4;
                }
                break;
            case 'c':
                //Color mode
                printColor = true;
            case '?':
                break;
            default:

            }
        }
        // Finally: Parse non-GetOpt parameters (input/output filenames)
        int no = g.getOptind();
        if (no < args.length) {
            inputFilename = args[no];
        }
        no++;
        if (no < args.length) {
            outputFilename = args[no];
        }

        // Sanity Check for parameters
        if (inputFilename.length() == 0) {
            printHelp();
            return false;
        }
        if (outputFilename.length() == 0) {
            outputFilename = "out.pdf";
        } else {
            if (!outputFilename.toLowerCase().endsWith(".pdf")) {
                outputFilename += ".pdf";
            }
        }
        return true;

    }

    /*
     * Print Help Message, showing commandline parameters.
     */
    private void printHelp() {
        System.out.println("Usage: java Rasterizer [-p pages] [-l] [-h] [-v] inputfile [outputfile]");
        System.out.println(
                "-p : Number of horizontal pages (vertical will be chosen according to aspect ratio of source image)");
        System.out.println("-l : Use Pages in Landscape");
        System.out.println("-s : Paper Size. Allowed Values: A4, A3, LETTER, LEGAL");
        System.out.println("-m : Print Cropmarks intelligently. use -mall for forced cropmarks");
        System.out.println("-d : Dotsize in pt. Defaults to 10pt");
        System.out.println("-h : The stuff you are reading right now. No Action.");
        System.out.println("-c : Experimental color output (the Rasterbator solution)");
        System.out.println("-v : Verbose output");
        System.out.println("inputfile  : Input file (.jpeg, .gif, .png)");
        System.out.println(
                "outputfile : Output file (.pdf) defaults to out.pdf. '.pdf' is added if filename doesn't end on .pdf");
    }

    /*
     * main - static start method. Only calls constructor.
     */
    public static void main(String[] args) {
        Rasterizer myRasterizer = new Rasterizer(args);
    }

    public class CliLogger extends EventLogger {
        public void log(String msg) {
            System.out.println(msg);
        }
    }
}