Dokumentation

Verschlüsselung

Schützen Sie ein PDF mit einem Passwort, und jasy verschlüsselt es mit AES-256 (V5/R6, der neueste Handler der PDF-Spezifikation). Es läuft auf WebCrypto der Plattform, also ohne native Abhängigkeiten und ohne Java - derselbe Code verschlüsselt in Node und direkt im Browser.

Ein Passwort setzen

Übergeben Sie die Option encrypt an renderToBytes (oder renderPdf). Ein userPassword ist alles, was Sie brauchen - jeder Viewer fragt danach, bevor er das Dokument öffnet.

import { Document, Page, Text, renderToBytes } from "@jasy/pdf";

const doc = Document([Page([Text("Confidential")])]);

const bytes = await renderToBytes(doc, {
  encrypt: { userPassword: "secret" },
});

Owner-Passwort und Permissions

Ergänzen Sie ein ownerPassword für volle Rechte und permissions, um Aktionen zu erlauben oder zu verbieten. Lassen Sie das Owner-Passwort weg, gilt das User-Passwort, und jede Permission ist standardmäßig erlaubt.

const bytes = await renderToBytes(doc, {
  encrypt: {
    userPassword: "secret", // to open the document
    ownerPassword: "owner", // full rights
    permissions: {
      printing: false, // disallow printing
      copying: false, // disallow text/content extraction
      modifying: true,
      annotating: true,
    },
  },
});

Ein verschlüsseltes PDF öffnen

Die andere Hälfte: jasy liest auch verschlüsselte PDFs, und erst das macht es möglich, ein geschütztes Formular auszufüllen. Übergeben Sie das Passwort, und alles Weitere bleibt wie gewohnt:

import { PdfDocument, fillForm } from "@jasy/pdf/edit";

const doc = await PdfDocument.open(bytes, { password: "secret" });
const { bytes: filled } = await fillForm(bytes, { name: "Ada" }, { password: "secret" });

Lesen ist breit, Schreiben ist schmal. jasy öffnet AES-256 (R6, R5), AES-128 (R4) und RC4 (R2/R3), denn solche Dateien gibt es, und vielleicht müssen Sie eine öffnen. Geschrieben wird nur AES-256 R6: Jemandem einen Schutz in die Hand zu geben, der bekanntermaßen gebrochen ist, ist keine Funktion, also verweigert der alte Handler das Verschlüsseln.

Gut zu wissen beim Vergleichen: PDFKit und react-pdf verwenden beide standardmäßig 40-Bit-RC4, wenn Sie ein Passwort verlangen, und keines von beiden kann überhaupt R6 erzeugen. Ghostscript 10 lehnt alles über R3 ab.

Die Fehler sind benannt, nie allgemein: kein Passwort, falsches Passwort oder eine Revision, die jasy nicht umsetzt - drei verschiedene Dinge, auf die ein Aufrufer unterschiedlich reagieren kann.

Gut zu wissen

  • AES-256, R6. Der aktuelle Handler nach ISO 32000-2 - nicht die älteren Revisionen, die manche Bibliotheken noch ausliefern.
  • Reines JS, isomorph. Darunter liegt WebCrypto: keine native Kryptografie, keine zusätzlichen Abhängigkeiten, identisch in Node und im Browser.
  • Auch in Vue, React und Nuxt. In @jasy/vue übergeben Sie es als drittes Argument - renderToPdf(Doc, props, { encrypt: { userPassword: "secret" } }). In @jasy/react ist es das zweite - renderToPdf(<Doc />, { encrypt: { userPassword: "secret" } }). In @jasy/nuxt nehmen Sie renderOptions.
  • Nicht für PDF/A. PDF/A (und damit Rechnungen nach ZUGFeRD / Factur-X) verbietet Verschlüsselung, der Versuch wird also mit einem klaren Fehler abgelehnt.