Vordefinierte Pfad-Annotationen über die API anlegen

Anforderung

Oft ist es notwendig bestimmte Formen für Pfad-Annotationen vorzudefinieren. Dies können beispielsweise Haken zum "Abhaken" von Listen sein.

Mögliche Lösung

Annotationen können nicht nur über die grafische Oberfläche angelegt werden. Es ist auch möglich diese über die API zu erstellen. Hierfür ist das Vorgehen im Allgemeinen wie folgt:

  1. Laden, bzw. Zugriff auf das AnnotationProfile. Dieses Profil enthält bereits grundsätzliche Vorlagen für eine Reihe von Annotationstypen
  2. Erstellen einer Annotation-Instanz mittels einer Annotation Factory. Factories können über die Methode AnnotationProfile.getFactory(String) von einem AnnotationProfile erfragt werden. Factories werden für Templates, wie auch Annotation Types zur Verfügung gestellt.
  3. Anwenden der gewünschten Annotations-Einstellungen
  4. Hinzufügen der Annotation zu einer Seite unter Verwendung des AnnotationPageSegment. Dieses kann über die Hilfsmethode Annotations.getAnnotationPageSegment(Page, boolean) angefragt werden.

Beispiel

public static void applyCheckMarkAnnotation(Document doc) throws Exception {

  // 1) Laden des AnnotationProfile
  AnnotationProfile profile = AnnotationProfile.load(
      PreshapedAnnotationExample.class.getResource("/filenet-is-annotation-profile.xml"));
  AnnotationProfile.setDefaultProfile(profile);

  PathAnnotation annotation = createCheckMarkAnnotation(profile);

  // 4) Hinzufügen der Annotation zu einem Dokument.
  Page p = doc.getPage(0);
  AnnotationPageSegment aps = Annotations.getAnnotationPageSegment(p, true);
  aps.addAnnotation(annotation);
}

public static PathAnnotation createCheckMarkAnnotation(AnnotationProfile profile) throws InstantiationException,
    IllegalAccessException {
  // Laden des AnnotationTemplate mit dem Namen "Pen". Diese wurde im AnnotationProfile definiert.
  AnnotationFactory factory = profile.getFactory("Pen");


  // 2) Mittels der Factory können dann konkrete Annotations-Instanzen erzeugt werden.
  // Im AnnotationProfile wurde hinterlegt, dass es sich bei der "Pen"-Annotation um eine
  // konfigurierte Instanz der PathAnnotation handelt. Damit ist es sicher, hier einen expliziten
  // Cast durchzuführen.
  PathAnnotation annotation = (PathAnnotation) factory.createNewInstance();

  Path2D checkMarkPath = createCheckMarkPath();

  // 3) Konfigurieren der Annotation. Unter anderem wird hier der Pfad integriert, sowie die Farbe
  // und Liniendicke angepasst.
  annotation.setPath(checkMarkPath);
  annotation.setStrokeColor(Color.GREEN);
  annotation.setLineWidth(10);
  annotation.setAllowResize(false);

  return annotation;
}

/**
 * Erstellt einen Pfad für ein Haken
 */
public static Path2D createCheckMarkPath() {

  // Die hier verwendeten Korrdinaten beziehen sich auf das jadice interne Koordinaten-System.
  // Dieses basiert auf 7200 DPI.

  GeneralPath gp = new GeneralPath();

  gp.moveTo(1000, 3000);
  gp.lineTo(2000, 4000);
  gp.lineTo(4000, 1000);

  return gp;
}