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);
}
}
}