Hallo @MaxBitzer,
wenn ich es gerade richtig verstehe, dann verwendest du bereits die neue UI.
Also mit ed.ui-legacy: false. Hier scheint es bei den Stempeln ein etwas andere Verhalten zu geben.
Ich habe daher den Interceptor etwas angepasst (sollte in beiden Varianten gehen):
/*
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 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);
for(const customStamp of customStampsValue){
customStamp.textColor = this.convertColor(customStamp.textColor);
}
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());
Der Unterschied ist, dass ich nun auch beim laden die Stempelfarbe nochmals korrigiere, falls diese im falschen Format kommt.
Grundsätzlich ist es bei der Verwendung der Interceptoren etwas einfacher, wenn Sie noch die Legacy-UI verwenden. Hintergrund ist, dass die API von Apryse sich hier leider etwas verändert hat. Grundsätzich ist es aber möglich, auch die neue API zu verwenden.
Mit freundlichen Grüssen
Uli