Interceptor-Beispiel: PDF-Kennwörter entfernen

Hallo zusammen,

in einem anderen Diskussionsfaden hat @hesslinl folgende Frage gestellt:

Zur besseren Wiederauffindbarkeit habe ich mir erlaubt, eine mögliche Lösung hier als separaten Post zu erstellen.


Testweise habe ich einen Button implementiert, welche bei zur Bearbeitung geöffneten PDFs mögliche Kennwörter entfernt und das PDF in enaio zurückspeichert. Wichtig: Zuvor muss das Kennwort einmal eingegeben werden, wenn das PDF zum ersten Mal geöffnet wird:

Der gesamte Vorgang als kurzes Video:

Wie üblich kann dazu ein Java-Script als Interceptor angelegt werden, z. B. als ...\service-manager\data\ed\public\interceptors\remove-password.js:

class EDRemovePassword {
  buttonDataElement = "EDRemovePassword";
  info = null;

  initEditorConfiguration(instance, current, viewer) {
    const removePasswordButton = {
      dataElement: this.buttonDataElement,
      type: "actionButton",
      img: '<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-incognito" viewBox="0 0 16 16"><path fill-rule="evenodd" d="m4.736 1.968-.892 3.269-.014.058C2.113 5.568 1 6.006 1 6.5 1 7.328 4.134 8 8 8s7-.672 7-1.5c0-.494-1.113-.932-2.83-1.205l-.014-.058-.892-3.27c-.146-.533-.698-.849-1.239-.734C9.411 1.363 8.62 1.5 8 1.5s-1.411-.136-2.025-.267c-.541-.115-1.093.2-1.239.735m.015 3.867a.25.25 0 0 1 .274-.224c.9.092 1.91.143 2.975.143a30 30 0 0 0 2.975-.143.25.25 0 0 1 .05.498c-.918.093-1.944.145-3.025.145s-2.107-.052-3.025-.145a.25.25 0 0 1-.224-.274M3.5 10h2a.5.5 0 0 1 .5.5v1a1.5 1.5 0 0 1-3 0v-1a.5.5 0 0 1 .5-.5m-1.5.5q.001-.264.085-.5H2a.5.5 0 0 1 0-1h3.5a1.5 1.5 0 0 1 1.488 1.312 3.5 3.5 0 0 1 2.024 0A1.5 1.5 0 0 1 10.5 9H14a.5.5 0 0 1 0 1h-.085q.084.236.085.5v1a2.5 2.5 0 0 1-5 0v-.14l-.21-.07a2.5 2.5 0 0 0-1.58 0l-.21.07v.14a2.5 2.5 0 0 1-5 0zm8.5-.5h2a.5.5 0 0 1 .5.5v1a1.5 1.5 0 0 1-3 0v-1a.5.5 0 0 1 .5-.5"/></svg>',
      title: "Kennwort entfernen",
      onClick: () => this.removePassword(instance, viewer),
    };

    instance.UI.setHeaderItems((header) => {
      header.push(removePasswordButton);
    });
  }

  async updateEditorConfiguration(instance, info, config) {
    this.info = info;
    if (info.mode === "edit") {
      instance.UI.enableElements([this.buttonDataElement]);
    } else {
      instance.UI.disableElements([this.buttonDataElement]);
    }
  }

  async removePassword(instance, viewer) {
    const doc = instance.Core.documentViewer.getDocument();
    const pdfDoc = await doc.getPDFDoc();
    pdfDoc.removeSecurity();
    viewer.documentModified = true;
    viewer.onSave(true);

    let ui = instance.UI;
    await ui.showWarningMessage({
      title: 'Kennwort entfernt',
      message: "Das Kennwort wurde entfernt und die Datei neu gespeichert.",
      onConfirm: async () => {
        // resolve(true);
      },
    });

    console.log("Removed security.")
  }
}

window.ed.registerInterceptor(new EDRemovePassword());

Nach einem Reload des Document-Viewers steht der Beispiel-Button bei zum Bearbeiten geöffneten PDFs zur Verfügung.

2 „Gefällt mir“