Stempel speichern

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());
3 „Gefällt mir“