Arbeiten mit Druckelementen

Druckelemente konfigurieren

Wenn Benutzer über den vorgeschalteten Druckdialog drucken, möchten Sie möglicherweise die zu druckenden Elemente bestimmen. Ab jadice document platform 5.2.0.0 gibt es die Möglichkeit die im Druckdialog angebotenen Elemente über die Klasse com.levigo.jadice.printer.PrintEnvironment zu konfigurieren. Diese Klasse verfolgt ein statisches Konzept, das generelle Einstellungen zur Druckumgebung unabhängig vom einzelnen Druckjob ermöglicht. Das heisst, diese Einstellungen sollten nur ein einziges Mal vorgenommen werden.

Um eine Auswahl von Elementen, im Folgenden Layer genannt,  zu ermöglichen haben wir eine Art Trägerobjekt (com.levigo.jadice.printer.LayerSelection) bereitgestellt. Mit dieser Klasse ist es möglich eine beliebige Zusammenstellung von Layern aufzubauen und einen Namen zuzuordnen.

Das nachfolgende Beispiel zeigt, wie die Klasse PrintEnvironment dazu benutzt werden kann:

Collection<LayerSelection> registered = PrintEnvironment.getRegisteredLayerSelections();
registered.clear(); // löscht alle bereits registrierten LayerSelection-Objekte

// Document + Annotations
LayerSelection documentAndAnnotations = new LayerSelection("Elements.DocumentAndAnnos", DocumentLayer.DEFAULT, DocumentLayer.ANNOTATIONS);
registered.add(documentAndAnnotations);

// Document only
LayerSelection documentOnly = new LayerSelection("Elements.Document", DocumentLayer.DEFAULT);
registered.add(documentOnly);

// Konfiguration der Standardauswahl
PrintEnvironment.setDefaultLayerSelection(documentAndAnnotations);

Ausgewählte Druckelemente speichern

Das nachfolgende Beispiel zeigt, wie die während eines Drucks gewählten Druckelemente beim nächsten Druck - unabhängig davon ob mit oder ohne Druckdialog - vorausgewählt werden können.

public class DemoPrint extends PrintDocumentCommand {
  private class PrintElementsListener implements PrintEventListener {
    private final PrintJobConfiguration pjc;
    public PrintElementsListener(PrintJobConfiguration pjc) {
      this.pjc = pjc;
    }
    @Override
    public void printStateChanged(PrintEvent e) {
      if(e == null || e.getType() == null) {
        return;
      }
      if (e.getType().equals(PrintEvent.PrintEventType.STARTED)) {
        // Catch up the layer selection that will be used for print
        LayerSelection layerSelection = pjc.getLayerSelectionToPrint();
        
        // Save layer selection to be pre-selected next time  
        PrintEnvironment.setDefaultLayerSelection(layerSelection);
        
        // Remove this listener instance to avoid increasing memory and wrong behaviour
        PrintEventBroadcaster.removePrintListener(this);
      }
    }
  }
  
  @Override
  protected void prepare(PrintJobConfiguration pjc) {
    PrintEventBroadcaster.addPrintListener(new PrintElementsListener(pjc));
  }
}