Versionen im Vergleich

Schlüssel

  • Diese Zeile wurde hinzugefügt.
  • Diese Zeile wurde entfernt.
  • Formatierung wurde geändert.

(_____UNDER CONSTRUCTION____)

 

Der jadice Druckdialog 

jadice stellt einen eigenem Druckdialog zur Verfügung. Dieser Druckdialog bietet Anwendern viele Vorteile:

...

Die technische Basis des jadice Druckdialogs beruht auf der Java Print Service API. Die Java Print Service API ist der Java Virtual Machine und bietet betriebssystemübergreifende High-Level API um PrintServices zu ermitteln, Druckjobs mit allgemeinen Einstellungen zu konfigurieren und anzustarten. Allgemeine Einstellungen sind Einstellungen, die weder spezifisch für das ausführende Betriebssystem noch für installierte die installierten Druckertreiber spezifisch sind. 

 

Spezifische Druckertreiber Einstellungsdialoge

 

Manche Einstellungen sind spezifisch für bestimmte Druckertreiber. Diese Einstellungen können nur in dem Druckertreiber eigenen Einstellungsdialog.

 

Image Removed

 

Der native Betriebssystem DruckdialogImage Removed

 

 

Zur Änderung von Einstellungen, die ein Druckertreiber anbietet, bringen Druckertreiber oft einen eigenen Einstellungsdialog mit.

Hier ist ein Druckdialog eines Lexmark Druckers.

Image Added

Die Java Virtual Machine bietet keinen Pure Java Zugriff auf spezifische Druckertreiber Dialoge, insbesondere erlaubt sie nicht Druckertreiber Dialoge per Java API zu öffnen oder darin enthaltene Einstellungen programmatisch vorzunehmen. 

 

Der native Betriebssystem Druckdialog

Die Java Virtual Machine stellt einen eigenen Betriebssystem Druckdialog zur Verfügung. Einzig dieser Dialog bietet dem Anwender die Möglichkeit über "Eigenschaften" Druckertreiber eigene Dialoge zu öffnen. Leider ist dieser Dialog weit in den Tiefen der JVM Innereien versteckt und bietet keinerlei programmatischen Zugriff weder auf den Dialog selber noch auf die Funktion, die hinter dem "Eigenschaften" Knopf versteckt ist. 

Im folgende ist eine Ansicht des Windows Betriebssystem Dialogs.

Der native Betriebssystem DruckdialogImage Added

 

Fazit:

Für spezielle Druckereinstellungen, die im Druckertreiber eigenen Dialog gesetzt werden müssen, bietet die Java Virtual Machine nur einen technischen Weg: Die Verwendung des nativen Druckdialog. Leider ist dieser Dialog weder steuerbar, noch anpassbar und auch funktionale Elemente des Dialogs wie der "Eigenschaften" Knopf können aus Java heraus nicht verwendet werden

 

Lösung 1: Die Verwendung des nativen Druckdialogs.

Das folgende Code Snippet skizziert, wie der native Druckdialog in jadice genutzt werden kann. 

Codeblock
themeEclipse
languagejava
titleNativer Druckdialog Command
/**
 * Druck Demo Command mit Nutzung des nativen Betriebssystem Druckdialogs. <p>
 * Es öffnet den nativen Druckdialog und löst bei Bestätigung einen Druckprozess aus. 
 */
public class PrintWithNativePrintDialog extends DirectPrintDocumentCommand {
  private static final Logger log = LoggerFactory.getLogger(PrintDocumentCommand.class);
  @Override
  protected void execute() {
    final PrintJobConfiguration pjc = PrintJobConfiguration.create();
    final EventList<Page> docPageList = getPageView().getDocument().getPages();
    try {
      addPagesToPrint(pjc, docPageList);
      prepare(pjc);
      pjc.setShowPrintDialog(false);
      Printer printer = new Printer(pjc);
      PrinterJob printerJob = printer.getPrinterJob();
      printerJob.setJobName(pjc.getPrintTitle());
      printerJob.setPageable(new Pageable() {
        public PageFormat getPageFormat(int pageIndex) throws IndexOutOfBoundsException {
           return pjc.getPageFormat();
        }
        public int getNumberOfPages() {
          return pjc.getNumbersOfPages();
        }
        public Printable getPrintable(int pageIndex) throws IndexOutOfBoundsException {
          return null;
        }
      });
            
      PrintRequestAttributeSet requestAttributeSet = printer.getPrintRequestAttributeSet();
      if (requestAttributeSet == null) {
        requestAttributeSet = new HashPrintRequestAttributeSet();
        printer.setPrintRequestAttributeSet(requestAttributeSet);
      }
      // Nativen Druckdialog anfordern
      try {
        // JRE 1.7+
        requestAttributeSet.add(javax.print.attribute.standard.DialogTypeSelection.NATIVE);
      
        // JRE 1.6
//        requestAttributeSet.add(sun.print.DialogTypeSelection.NATIVE);
      } catch (final Exception e) {
        log.error("\"DialogTypeSelection.NATIVE\" konnte nicht ausgewählt werden.); ");
      }
      if (printerJob.printDialog(requestAttributeSet)) {
        log.info("Executing print job");
        PrintManager.executePrintJob(printer);
      }
    } catch (final JadiceException e) {
      log.fatal("Could not print", e);
    }
  }
}

Lösung 2: Vorkonfigurierte Druckertreiber im System