Release Version 2.4.0

Wir freuen uns, die Version 2.4.0 von Embedded Documents freigeben zu dürfen.

Bei diesem Update werden alle Bibliotheken auf die aktuellen Versionen aktualisiert. Insbesondere die Folgenden:

  • Spring Boot 3.4.6 (bisher 2.7.18)
  • Angular 19.2 (bisher 19.0)
  • Apryse 11.5.0 (bisher 10.9.0)

Zusätzlich werden folgende Fehler behoben:

  • Fehlerabfänge im Zusammenhang mit Ausfällen/Hängern beim RenditionCache/DocumentViewer
  • Anzeigeprobleme

Die neue Version kann wie gewohnt über das Service-Portal von Optimal-Systems heruntergeladen werden.

1 „Gefällt mir“

Hallo @uw,

hat die Version 2.4.0 eine spezielle JRE Voraussetzung? Unter enaio 10.10 erhalte ich nachfolgenden Fehler beim starten.

Exception in thread „main“ java.lang.UnsupportedClassVersionError: org/springframework/boot/loader/launch/JarLauncher has been compiled by a more recent version of the Java Runtime (class file version 61.0), this version of the Java Runtime only recognizes class file versions up to 52.0

Unter 11.10 läuft es problemlos.

Viele Grüße
Daniel

Hallo @danielstraub, ED hat zusammen mit neueren enaio-Versionen einen Sprung auf Spring Boot 3 gemacht und ist damit von Java 17 abhängig.

@uw und ich besprechen die Optionen, welche Ihr eventuell hättet, um von ED 2.4 auch für enaio 10.10 in Genuss zu kommen. Allerdings ist das Versions-Upgrade eine der wesentlichen, wenngleich rein technischen Neuerungen.

Hallo @rk,
ist dies auch der Grund, weshalb einige Interceptor wie Annotations einbrennen, Passwort entfernen oder die vorbelegte Standard Schriftart nicht mehr funktionieren bzw. gar nicht mehr angezeigt werden? Bei uns ist die enaio Version 11.0 im Einsatz. Vor dem Update von ED funktionierten die oben beschriebenen Interceptoren noch ganz normal.

Viele Grüße
Linus

1 „Gefällt mir“

Hallo @hesslinl, dieser Effekt ist mir nicht bekannt. Das Splitting ist in meiner Demo noch okay, aber wir schauen das gerne an.

Ist einer dieser Interceptoren für meine Tests 1:1 von dieser Website oder darf ich nach dem konkret eingesetzten Code fragen?

Hallo @rk,

das Splitting funktioniert auch bei uns ganz normal. Funktionen wie z.B. das Einbrennen von Annotationen sind davon betroffen.

Hier der eingesetzte Code:

class EDAnnotationFlattener {
// code fragements taken from Flatten Annotation using JS | Apryse documentation
buttonDataElement = ‚custom_annotation_flattener_button‘;
dialogDataElement = ‚custom_annotation_flattener_dialog‘;

async flattenAllAnnotations(instance) {
  const { documentViewer, PDFNet, annotationManager } = instance.Core;

  await PDFNet.initialize();
  const theDocument = await documentViewer.getDocument().getPDFDoc();

  // export annotations from the document
  const allAnnotations = await annotationManager.exportAnnotations();

  // Run PDFNet methods with memory management
  await PDFNet.runWithCleanup(async () => {
    // lock the document before a write operation
    // runWithCleanup will auto unlock when complete
    theDocument.lock();

    // import annotations to PDFNet
    const fdfDocument = await PDFNet.FDFDoc.createFromXFDF(allAnnotations);
    await theDocument.fdfUpdate(fdfDocument);

    // flatten all annotations in the document
    // see https://docs.apryse.com/api/web/Core.PDFNet.PDFDoc.html#flattenAnnotations__anchor
    await theDocument.flattenAnnotations();

    // clear the original annotations
    annotationManager.deleteAnnotations(annotationManager.getAnnotationsList());
  });

  // clear the cache (rendered) data with the newly updated document
  documentViewer.refreshAll();

  // Update viewer to render with the new document
  documentViewer.updateView();

  // Refresh searchable and selectable text data with the new document
  documentViewer.getDocument().refreshTextData();
}

initEditorConfiguration(instance) {
  // Create a new action button
  const aButton = {
    dataElement: this.buttonDataElement,
    type: 'actionButton',
    img: '<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-fire" viewBox="0 0 16 16"><path d="M8 16c3.314 0 6-2 6-5.5 0-1.5-.5-4-2.5-6 .25 1.5-1.25 2-1.25 2C11 4 9 .5 6 0c.357 2 .5 4-2 6-1.25 1-2 2.729-2 4.5C2 14 4.686 16 8 16Zm0-1c-1.657 0-3-1-3-2.75 0-.75.25-2 1.25-3C6.125 10 7 10.5 7 10.5c-.375-1.25.5-3.25 2-3.5-.179 1-.25 2 1 3 .625.5 1 1.364 1 2.25C11 14 9.657 15 8 15Z"/></svg>',
    title: 'Alle Anmerkungen einbrennen',
    onClick: () => instance.UI.openElements([this.dialogDataElement]),
  };

  // Add the new button to the header
  instance.UI.setHeaderItems((header) => {
      const items = header.getItems();
			items.push(aButton);
			header.update(items);
  });

  const body = document.createElement("div");
  body.innerHTML = "Alle Anmerkungen werden unwiderruflich in das PDF integriert, sobald Sie auf Einbrennen klicken.";

  const modal = {
      dataElement: this.dialogDataElement,
      header: {
        title: 'Anmerkungen einbrennen',
      },
      body: {
        className: 'myCustomModal-body',
        style: {textAlign: "center"}, // optional inline styles
        children: [body], // HTML dom elements
      },
      footer: {
        className: 'myCustomModal-footer footer',
        style: {}, // optional inline styles
        children: [
          {
            title: 'Abbrechen',
            button: true,
            style: {},
            className: 'modal-button cancel-form-field-button',
            onClick: async (e) => {
              instance.UI.closeElements([this.dialogDataElement]);
            },
          },
          {
            title: 'Einbrennen',
            button: true,
            style: {},
            className: 'modal-button confirm ok-btn',
            onClick: async (e) => {
              await this.flattenAllAnnotations(instance);
              instance.UI.closeElements([this.dialogDataElement]);
            },
          },
        ],
      },
    };
    instance.UI.addCustomModal(modal);
}

async updateEditorConfiguration(instance, info, config) {
  if (info.mode != 'edit') {
    instance.UI.disableElements([this.buttonDataElement]);
  } else {
    instance.UI.enableElements([this.buttonDataElement]);
  }
}

}

window.ed.registerInterceptor(new EDAnnotationFlattener());

1 „Gefällt mir“

Hallo @hesslinl, ich glaube, ich weiss, was das Problem bei den Interceptoren ist. Die Buttons in der oberen Leiste werden neu anders integriert, das können wir aber für den Moment wieder rückgängig machen, denke ich.

  • Kurzfristig können wir eine Version 2.4.1 machen, die die Buttons wieder normal angezeigt.
  • Mittelfristig müssten die Interceptoren vermutlich jeweils an der Zeile geändert werden, die Buttons laden.

Die kurzfristige Lösung mit einer Version 2.4.1 wäre vermutlich schon sehr hilfreich. Wird diese Version dann wieder über das Serviceportal von OS zur Verfügung gestellt?

Vielen Dank schon einmal im Voraus!

Hallo @hesslinl, ja, aber wir brauchen vermutlich einige Tage dafür. Ich melde mich hier zurück, wenn wir parat sind.

1 „Gefällt mir“

Kurzes Update: Wir sind derzeit in der Testphase, ich hoffe, wir können die neue(n) Versionen bald zur Verfügung stellen.

Hallo zusammen, danke für die Geduld. Wir stellen nun auf den üblichen Kanälen zwei Updates bereit:

  • Version 2.3.11 als Pflege-Release mit allen aktuellen Fixes für enaio 10.10.

    • Hier braucht es eine Sonderversion mit alter Spring-Boot-Abhängigkeit 2.x da Spring Boot 3.x erst ab Java 17 und damit erst ab enaio 11.0 ohne kundenspezifische Umbauten gut genutzt werden kann.
  • Version 2.4.1 als Update zur Version 2.4.0 für enaio 11.x

    • Wie besprochen haben wir dafür gesorgt, dass bisherige Interceptoren wieder lauffähig sind/lauffähig bleiben.

    • Für neue Projekte empfehle ich aber, in der ed-prod.yaml den Schalter „ed: ui-legacy“ auf false zu setzen, sodass vom verbesserten UI profitiert werden kann. Entsprechend empfiehlt es sich auch, alle übrigen Interceptoren bei Gelegenheit zu prüfen und die Button-Positionierung anzupassen. Die eigene YAML-Datei würde also für das moderne Look-and-feel so zu ergänzen sein:

      ed: 
          ui-legacy: false
      
  • Die von OS nicht mehr unterstützten enaio-Versionen < 10.10 sind nicht mehr mit aktuellen Web-Technologien kompatibel und bleiben damit aussen vor.

    • Mit enaio 11.0 hat OS die Technik geändert: der Dashlet-Browser ist kein fixer Bestandteil des Clients mehr und wir haben somit die Hoffnung, dass die neueren enaio-Versionen über ihre offizielle Lebenszeit hinaus länger lauffähig bleiben.