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());