Zum Ende der Metadaten springen
Zum Anfang der Metadaten

Sie zeigen eine alte Version dieser Seite an. Zeigen Sie die aktuelle Version an.

Unterschiede anzeigen Seitenhistorie anzeigen

« Vorherige Version anzeigen Version 14 Aktuelle »

Der jadice Druckdialog 

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

  • Druckvorschau
  • Druckerauswahl
  • Verschiedene Druckeinstellungen, wie z.B. Anzahl Kopien, Seitenformat uvm.
  • Eine Auswahl, welche Seitenelemente gedruckt werden sollen, z.B. Dokument, Annotations oder beides

Nachfolgend eine Ansicht des jadice Druckdialogs.

Der jadice Druckdialog

Die technische Basis des jadice Druckdialogs beruht auf der Java Print Service API. Die Java Print Service API ist Teil der Java Virtual Machine und bietet eine 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 die installierten Druckertreiber sind. 

 

Spezifische Druckertreiber Einstellungsdialoge

 

Manche Einstellungen sind spezifisch für bestimmte Druckertreiber. Zur Änderung von Einstellungen, die ein Druckertreiber anbietet, bringen Druckertreiber oft einen eigenen Einstellungsdialog mit.

Nachfolgend ein Beispiel des Einstellungsdialog eines Lexmark Druckers.

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" spezielle Druckertreiber 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. 

Nachfolgend eine Ansicht des Windows Betriebssystem-Dialogs.

Der native Betriebssystem Druckdialog

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.

Die Verwendung des nativen Druckdialogs.

 

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

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

  • Keine Stichwörter