ICEPdf headless printing that is configurable.
Code:
import java.awt.print.PrinterJob;
import java.io.IOException;
import java.util.Locale;
import javax.print.PrintException;
import javax.print.PrintService;
import javax.print.PrintServiceLookup;
import javax.print.attribute.HashPrintRequestAttributeSet;
import javax.print.attribute.standard.Copies;
import javax.print.attribute.standard.JobName;
import javax.print.attribute.standard.MediaSizeName;
import javax.print.attribute.standard.PageRanges;
import javax.print.attribute.standard.PrintQuality;
import org.icepdf.core.exceptions.PDFException;
import org.icepdf.core.exceptions.PDFSecurityException;
import org.icepdf.core.pobjects.Document;
import org.icepdf.core.views.DocumentViewController;
import org.icepdf.ri.common.PrintHelper;
import org.icepdf.ri.common.SwingController;
import org.icepdf.ri.common.views.DocumentViewControllerImpl;
/**
* Converts the PDF content into printable format
*/
public class PrintPdf {
/**
* ::Constructor()
*/
public PrintPdf() {
}
/**
* Print a PDF document
*/
public boolean printPDF(String pdf, String jobName, String printer, int copies) {
boolean success = false;
Document doc = new Document();
try {
doc.setFile(pdf);
SwingController sc = new SwingController();
DocumentViewController vc = new DocumentViewControllerImpl(sc);
vc.setDocument(doc);
HashPrintRequestAttributeSet hp = new HashPrintRequestAttributeSet();
hp.add(new Copies(copies));
hp.add(new JobName(jobName,Locale.getDefault()));
hp.add(MediaSizeName.NA_LETTER);
hp.add(PrintQuality.HIGH);
hp.add(new PageRanges(1, doc.getNumberOfPages()));
PrintHelper ph = new PrintHelper(vc, doc.getPageTree());
ph.setupPrintService(getPrinterService(printer), hp, false);
ph.print();
success = true;
} catch (PDFException e) {
e.printStackTrace();
} catch (PDFSecurityException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (PrintException e) {
e.printStackTrace();
} finally {
doc.dispose();
}
return success;
}
/**
* Get the proper printer service, if not found
* use the default printer.
*/
public PrintService getPrinterService(String printer) {
PrintService[] printServices = PrinterJob.lookupPrintServices();
PrintService printService = null;
int i;
if (printer != null && printer.trim() != "") {
for (i = 0; i < printServices.length; i++) {
if (printServices[i].getName().trim().toLowerCase().
equals(printer.trim().toLowerCase())) {
printService = printServices[i];
break;
}
}
}
if (printService == null) {
printService = PrintServiceLookup.lookupDefaultPrintService();
}
return printService;
}
}
Code:
PrintPdf p = new PrintPdf();
p.printPDF("c:/tmp/testpdf.pdf", "This is a test print job", "HP LaserJet 1150", 1);
You could possible add parameters to pass in page size, print range, etc.
Have fun!!