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