Hi Mathias,
Thanks for taking the time to contribute back, but I need to ask two things. First can you create this as an Enhancement in Bugzilla for Batik (make the code an attachment). Second before I can use it you will need to have a Contributor License Agreement (CLA) on file with Apache.
http://issues.apache.org/bugzilla/ http://www.apache.org/licenses/#clas
Thanks again!
Mathias Kalb wrote:
Hello,
I think the sequence of the two dialogs (printer and page) in the PrintTranscoder is wrong.
The PrintTranscoder shows at first the page dialog and then the printer dialog. If you have many printers which supports diffent page formats then you can only choose some of page formats. The possible page formats depends on the printer you choose.
I wrote a new class which extends the PrintTranscoder (Batik 1.5.1) and which changed the print method. It also validates the page format because sometimes the values are wrong.
public void print() throws PrinterException { // // Now, request the transcoder to actually perform the // printing job. // PrinterJob printerJob = PrinterJob.getPrinterJob();
//
// If required, pop up a dialog to select the printer
//
Boolean showPrinterDialog = (Boolean) hints.get(KEY_SHOW_PRINTER_DIALOG);
if ((showPrinterDialog != null) && showPrinterDialog.booleanValue()) { if (!printerJob.printDialog()) { // Dialog was cancelled, meaning that the print process // should be stopped. return; } }
PageFormat pageFormat = printerJob.defaultPage();
// // Set the page parameters from the hints // Paper paper = pageFormat.getPaper();
Float pageWidth = (Float) hints.get(KEY_PAGE_WIDTH); Float pageHeight = (Float) hints.get(KEY_PAGE_HEIGHT);
if (pageWidth != null) { paper.setSize(pageWidth.floatValue(), paper.getHeight()); }
if (pageHeight != null) { paper.setSize(paper.getWidth(), pageHeight.floatValue()); }
float x = 0; float y = 0; float width = (float) paper.getWidth(); float height = (float) paper.getHeight();
Float leftMargin = (Float) hints.get(KEY_MARGIN_LEFT); Float topMargin = (Float) hints.get(KEY_MARGIN_TOP); Float rightMargin = (Float) hints.get(KEY_MARGIN_RIGHT); Float bottomMargin = (Float) hints.get(KEY_MARGIN_BOTTOM);
if (leftMargin != null) { x = leftMargin.floatValue(); width -= leftMargin.floatValue(); }
if (topMargin != null) { y = topMargin.floatValue(); height -= topMargin.floatValue(); }
if (rightMargin != null) { width -= rightMargin.floatValue(); }
if (bottomMargin != null) { height -= bottomMargin.floatValue(); }
paper.setImageableArea(x, y, width, height);
String pageOrientation = (String) hints.get(KEY_PAGE_ORIENTATION);
if (VALUE_PAGE_ORIENTATION_PORTRAIT.equalsIgnoreCase(pageOrientation)) {
pageFormat.setOrientation(pageFormat.PORTRAIT);
} else if (VALUE_PAGE_ORIENTATION_LANDSCAPE.equalsIgnoreCase(pageOrientation)) {
pageFormat.setOrientation(pageFormat.LANDSCAPE);
} else if (VALUE_PAGE_ORIENTATION_REVERSE_LANDSCAPE.equalsIgnoreCase(pageOrientation)) {
pageFormat.setOrientation(pageFormat.REVERSE_LANDSCAPE);
}
pageFormat.setPaper(paper); pageFormat = printerJob.validatePage(pageFormat);
// // If required, pop up a dialog to adjust the page format // Boolean showPageFormat = (Boolean) hints.get(KEY_SHOW_PAGE_DIALOG);
if ((showPageFormat != null) && showPageFormat.booleanValue()) { do { PageFormat tmpPageFormat = printerJob.pageDialog(pageFormat);
if (tmpPageFormat == pageFormat) { // Dialog was cancelled, meaning that the print process should // be stopped. return; }
// validates the new format pageFormat = printerJob.validatePage(tmpPageFormat);
// check the format // sometimes a value (width/height) is <= 0.0 } while (!isValidPageFormat(pageFormat)); }
// Print now printerJob.setPrintable(this, pageFormat);
printerJob.print(); }
protected boolean isValidPageFormat(PageFormat pageFormat) {
return (pageFormat.getWidth() > 0.0) && (pageFormat.getHeight() > 0.0) &&
(pageFormat.getImageableWidth() > 0.0) &&
(pageFormat.getImageableHeight() > 0.0) &&
(pageFormat.getPaper().getWidth() > 0.0) &&
(pageFormat.getPaper().getHeight() > 0.0) &&
(pageFormat.getPaper().getImageableWidth() > 0.0) &&
(pageFormat.getPaper().getImageableHeight() > 0.0);
}
Regards Mathias Kalb
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
