Stempel speichern

Hallo zusammen,

bietet ED in der Version 2.2.5 auch die Möglichkeit benutzerdefinierte Stempel zu speichern? Leider verschwinden die bei uns immer nach der erneuten Anmeldung in Enaio.

Beste Grüße,
Christian

Hallo @cschulze,

das ist jetzt wirklich ein grosser Zufall. Eine OS Tochter hatte mich um ein Beispiel gebeten. Dieses Beispiel speichert die Daten über eine Methode des AppConnectors benutzerspezifisch in die enaio Datenbank. Prinzipiell kann man dies natürlich auch anders umsetzten.

Hier das Beispiel:

/*
Dieser Interceptor speichert und lädt die Custom Stempel.
*/

class PersistStamps {
  stampsLoaded = false;
  tool = null;
  STORAGE_KEY_CUSTOM = "ed-stamps-custom";
  // Beim starten der Editor Instanz
  initEditorConfiguration(instance) {
    const { documentViewer } = instance.Core;

    // Stempel Tool holen
    this.tool = documentViewer.getTool('AnnotationCreateRubberStamp');

    // Immer speichern wenn ein Stempel hinzugefügt, geändert oder gelöscht wird
    this.tool.addEventListener('stampsUpdated', (stampData) => {
      this.saveStamps();
    });
    // Nachdem das Dokument geladen wurde, prüfen ob die gespecherten Stempel schon importiert wurden.
    documentViewer.addEventListener('documentLoaded', () => {
      // Nur einmal laden
      if(this.stampsLoaded){
        return;
      }

      this.loadStamps();
      this.stampsLoaded = true;
    
    });
  }

  // Methode zum speichern der Stempel
  async saveStamps() {
    // Nur speichern, wenn das erste Dokument geladen wurde
    if(!this.stampsLoaded){
      return;
    }

    const data = {
      type: 80,
      name: this.STORAGE_KEY_CUSTOM,
      value: JSON.stringify(this.tool.getCustomStamps()),
    };

    const response = await fetch(`/osrest/api/session/settings/custom/save`, {
      method: 'POST',
      body: JSON.stringify(data),
      headers: {
        'Content-Type': 'application/json',
      },
    });
    // Prüfen ob die Signature gespeichert werden konnte
    if (response.status == 204) {
      console.log('Stamps saved');
    } else {
      console.error(response);
    }
  }

  // Methode zum laden der Stempel
  async loadStamps() {
    const customStampsResponse = await fetch(`/osrest/api/session/settings/custom/load?type=80&name=${this.STORAGE_KEY_CUSTOM}` );
    // Prüfen ob das laden erfolgreich war
    if (customStampsResponse.status == 200) {
      const customStamps = await customStampsResponse.json();
      if (customStamps.value) {
        // Import der Stempel in embedded documents
        const customStampsValue = JSON.parse(customStamps.value);
        await this.tool.setCustomStamps(customStampsValue);
        console.log('Custom Stamps loaded');
      }
    } else {
      console.error(response);
    }
  }
}

// Registrierung des Interceptors
window.ed.registerInterceptor(new PersistStamps());

Hallo @uw ,
besten Dank für die schnelle Rückmeldung.
Das sieht sehr gut aus.
Der Stempel wird jedoch nicht richtig gespeichert.
Bei uns wird nur der Hintergrund gespeichert, aber der Stempeltext ist nach einem Neustart des Enaio-Client wieder verschwunden.

Ich kann aber keine Fehlermeldungen in den Logs finden, die hier vielleicht weiterhelfen könnten.

Beste Grüße,
Christian Schulze

Hallo @uw
ich hoffe Sie sind erfolgreich in das neue Jahr gestartet :slight_smile:
Ich habe mich mit dem Thema noch einmal auseinander gesetzt.
Dabei ist mir aufgefallen, dass das Problem an der Schriftfarbe liegt.
Alle Stempel die ich erstelle, welche mit weißer Schrift versehen sind, bei denen wird die Schrift nicht gespeichert und nach Client-Neustart nur der gewählte Hintergrund angezeigt.
Erstelle ich einen Stempel mit einer anders farbigen Schriftart, wird dieser korrekt gespeichert und kann immer wieder verwendet werden.

Gruß,
Christian

Hallo @cschulze, vielen Dank für das Update. Ich nehme das gerne als Testfall auf und hoffe, dass wir uns dazu in der nächsten Woche äussern können.

Dieses Thema würde uns auch interessieren. Gibt es hierzu schon Neuigkeiten?

Die PDF Editor Library scheint leider einen Bug zu haben. Diese liefert bei der Farbe Weiss im Stempel JSON die Textfarbe als "textColor": { "R": 255, "G": 255, "B": 255, "A": 1 } statt #FFFFFF. Wenn man diese dann wieder importiert, wird diese Farbe falsche interpretiert. Diesen Fehler werde ich an den Hersteller melden.
Zwischenzeitlich habe ich aber das Beispiel entsprechend angepasst:

/*
Dieser Interceptor speichert und lädt die Custom Stempel.

* 2024-06-04: Stempelschriftfarbe bei weiss wird korrigiert
*/

class PersistStamps {
    stampsLoaded = false;
    tool = null;
    STORAGE_KEY_CUSTOM = "ed-stamps-custom";
    // Beim starten der Editor Instanz
    initEditorConfiguration(instance) {
      const { documentViewer } = instance.Core;
  
      // Stempel Tool holen
      this.tool = documentViewer.getTool('AnnotationCreateRubberStamp');
  
      // Immer speichern wenn ein Stempel hinzugefügt, geändert oder gelöscht wird
      this.tool.addEventListener('stampsUpdated', (stampData) => {
        this.saveStamps();
      });
      // Nachdem das Dokument geladen wurde, prüfen ob die gespecherten Stempel schon importiert wurden.
      documentViewer.addEventListener('documentLoaded', () => {
        // Nur einmal laden
        if(this.stampsLoaded){
          return;
        }
  
        this.loadStamps();
        this.stampsLoaded = true;
      
      });
    }
  
    // Methode zum speichern der Stempel
    async saveStamps() {
      // Nur speichern, wenn das erste Dokument geladen wurde
      if(!this.stampsLoaded){
        return;
      }
      const stamps = this.tool.getCustomStamps();
      for(const stamp of stamps){
        stamp.textColor = this.convertColor(stamp.textColor);
      }

      const data = {
        type: 80,
        name: this.STORAGE_KEY_CUSTOM,
        value: JSON.stringify(stamps),
      };
  
      const response = await fetch(`/osrest/api/session/settings/custom/save`, {
        method: 'POST',
        body: JSON.stringify(data),
        headers: {
          'Content-Type': 'application/json',
        },
      });
      // Prüfen ob die Signature gespeichert werden konnte
      if (response.status == 204) {
        console.log('Stamps saved');
      } else {
        console.error(response);
      }
    }
  
    // Methode zum laden der Stempel
    async loadStamps() {
      const customStampsResponse = await fetch(`/osrest/api/session/settings/custom/load?type=80&name=${this.STORAGE_KEY_CUSTOM}` );
      // Prüfen ob das laden erfolgreich war
      if (customStampsResponse.status == 200) {
        const customStamps = await customStampsResponse.json();

        if (customStamps.value) {
          // Import der Stempel in embedded documents
          const customStampsValue = JSON.parse(customStamps.value);
          await this.tool.setCustomStamps(customStampsValue);
          console.log('Custom Stamps loaded');
        }
      } else {
        console.error(response);
      }
    }

    convertColor(color) {
        const zeroPad = (num, places) => String(num).padStart(places, '0');

        if(color instanceof Object){
            return ("#" + zeroPad(color.R.toString(16)) + zeroPad(color.G.toString(16)) + zeroPad(color.B.toString(16))).toUpperCase();
        } else {
            return color;
        }
      }
  }
  
  // Registrierung des Interceptors
  window.ed.registerInterceptor(new PersistStamps());
1 „Gefällt mir“