Wie man digitale Signaturen zu Dokumenten in Java hinzufügt
Einführung
Die Implementierung der add digital signature java‑Funktionalität kann sich anfühlen, als würde man durch ein Minenfeld navigieren. Man muss Zertifikatsformate, Signaturpositionierung und strenge Sicherheitsrichtlinien jonglieren – und das alles, während die Benutzererfahrung reibungslos bleibt. Ein Fehltritt und man endet mit ungültigen Signaturen oder Dokumenten, die in Adobe Reader die Validierung nicht bestehen.
Glücklicherweise muss man das Rad nicht neu erfinden oder sich mit Low‑Level‑Kryptografie herumschlagen. Egal, ob Sie ein Vertrags‑Management‑Portal, einen E‑Commerce‑Checkout, der unterschriebene Quittungen erfordert, oder einen internen HR‑Workflow bauen – eine zuverlässige Java‑Bibliothek spart Ihnen Stunden Entwicklungszeit und eliminiert gängige Stolperfallen.
In diesem Leitfaden gehen wir die GroupDocs.Signature for Java‑Bibliothek durch, ein kommerzielles Produkt, das das schwere Heben bei digitalen Signaturen abstrahiert. Sie lernen, wie Sie:
- Die Bibliothek einrichten und Zertifikate korrekt konfigurieren
- PDF-, Word‑, Excel‑ und PowerPoint‑Dateien mit einem professionellen visuellen Stempel signieren
- Signaturen validieren und gängige Fehler wie nicht vertrauenswürdige Zertifikate oder Speicherengpässe behandeln
- Best‑Practice‑Sicherheitsmaßnahmen für Produktionsumgebungen anwenden
Am Ende verfügen Sie über eine einsatzbereite Implementierung, die Sie für jeden Dokumenttyp, den Ihre Anwendung verarbeitet, erweitern können.
Schnelle Antworten
- Welche Bibliothek ermöglicht das Hinzufügen digitaler Signaturen in Java? GroupDocs.Signature for Java.
- Wie viele Dokumentformate werden unterstützt? Über 30 Formate, darunter PDF, DOCX, XLSX, PPTX und Bilddateien.
- Benötige ich eine Lizenz für die Produktion? Ja – eine kommerzielle Lizenz entfernt Wasserzeichen und schaltet alle Funktionen frei.
- Kann ich große PDFs (100+ Seiten) ohne OOM‑Fehler signieren? Ja – durch Anpassen des JVM‑Heaps und Nutzung der Option
setAllPages(false). - Wird Zeitstempeln unterstützt? Absolut; Sie können ein vertrauenswürdiges Time‑Stamp Authority (TSA)‑Token anhängen für langfristige Gültigkeit.
Was ist add digital signature java?
add digital signature java bezeichnet den programmatischen Prozess, eine kryptografische Signatur in ein digitales Dokument mittels Java‑APIs einzubetten. Die Signatur bindet die Identität des Unterzeichners – validiert durch ein digitales Zertifikat – an den Dokumentinhalt und gewährleistet Integrität, Nichtabstreitbarkeit und rechtliche Durchsetzbarkeit über Plattformen hinweg.
Warum digitale Signaturen in Java implementieren?
GroupDocs.Signature unterstützt 30+ Eingabe‑ und Ausgabeformate und kann Dateien bis zu 500 MB verarbeiten, ohne die gesamte Datei in den Speicher zu laden, was eine 2‑5× Geschwindigkeitsverbesserung gegenüber manuellen PDFBox‑Implementierungen liefert. Dieser quantifizierte Nutzen führt zu schnelleren Transaktionszeiten und geringeren Serverkosten bei hohem Durchsatz.
Voraussetzungen
Bevor Sie beginnen, stellen Sie sicher, dass Sie Folgendes haben:
- Java Development Kit (JDK) 8+ – JDK 11 wird wegen der erweiterten TLS‑Unterstützung empfohlen.
- IDE – IntelliJ IDEA, Eclipse oder VS Code mit Java‑Erweiterungen.
- GroupDocs.Signature for Java – wir zeigen drei Wege, es zu Ihrem Build hinzuzufügen.
- Ein gültiges digitales Zertifikat im PFX‑ oder P12‑Format (Sie benötigen den privaten Schlüssel und das Passwort).
Optional, aber hilfreich:
- Erfahrung mit Maven oder Gradle für das Dependency‑Management.
- Eine Beispiel‑PDF, DOCX oder XLSX zum Testen des Signatur‑Flows.
Wie installiere ich GroupDocs.Signature für Java?
GroupDocs.Signature erfordert eine unkomplizierte Ergänzung Ihrer Build‑Konfiguration. Verwenden Sie das Snippet, das zu Ihrem Build‑Tool passt, ersetzen Sie die Platzhalter‑Version durch die neueste stabile Veröffentlichung und führen Sie den Build‑Befehl aus, um die Bibliothek von Maven Central zu holen.
Maven (zu pom.xml hinzufügen):
<dependency>
<groupId>com.groupdocs</groupId>
<artifactId>groupdocs-signature</artifactId>
<version>23.12</version>
</dependency>
Gradle (zu build.gradle hinzufügen):
implementation 'com.groupdocs:groupdocs-signature:23.12'
Manuelle Installation (wenn Sie kein Build‑Tool nutzen):
Laden Sie das JAR von der offiziellen Release‑Seite — GroupDocs.Signature for Java releases — und fügen Sie es Ihrem Klassenpfad hinzu.
Pro‑Tipp: Immer die neueste stabile Version referenzieren. Zum Zeitpunkt dieses Schreibens ist Version 23.12 aktuell, aber neuere Releases enthalten häufig Sicherheitspatches und Performance‑Verbesserungen.
Wie erhalte und verwende ich eine GroupDocs‑Lizenz?
GroupDocs.Signature benötigt für den Produktionseinsatz eine Lizenz. Eine Lizenz entfernt Wasserzeichen und schaltet das komplette Funktionsset frei, sodass signierte Dokumente den Unternehmensrichtlinien entsprechen.
- Kostenlose Testversion: Holen Sie sich eine 30‑tägige temporäre Lizenz auf der Temporary License Page.
- Kostenpflichtige Lizenz: Kaufen Sie eine Entwickler‑ oder Enterprise‑Lizenz auf der GroupDocs Purchase Page.
Ohne gültige Lizenz enthalten signierte Dokumente ein sichtbares Wasserzeichen, das nur für Evaluationszwecke sinnvoll ist.
Wie initialisiere ich das Signature‑Objekt?
Die Klasse Signature ist der Einstiegspunkt für alle Dokumentoperationen. Sie repräsentiert eine einzelne Datei im Speicher und bietet Methoden zum Signieren, Verifizieren und Extrahieren von Signaturen. Das Erzeugen einer Signature‑Instanz lädt die Zieldatei und bereitet sie für weitere Verarbeitung vor.
Signature signature = new Signature("path/to/input.pdf");
Was passiert hier?
Die Zeile erstellt eine Signature‑Instanz, die das Ziel‑Dokument lädt. Der Pfad kann absolut oder relativ sein; stellen Sie nur sicher, dass die Datei existiert. Dieses Objekt kann für mehrere Signatur‑ oder Verifizierungs‑Aufrufe wiederverwendet werden, was den Overhead in Batch‑Szenarien reduziert.
Wie konfiguriere ich digitale Signaturoptionen?
Digitale Signaturoptionen bündeln alle Einstellungen, die nötig sind, um eine gültige PKI‑Signatur zu erzeugen, einschließlich Zertifikatsinformationen, visuellem Erscheinungsbild und Platzierungsregeln. Eine korrekte Konfiguration stellt sicher, dass die resultierende Signatur sowohl kryptografisch solide als auch visuell passend für den Dokumenttyp ist.
Wie richte ich Zertifikatsdetails ein?
Die Klasse DigitalSignOptions enthält alle zertifikatsbezogenen Einstellungen. Unten sehen Sie die erste Definition dieser Klasse.
DigitalSignOptions definiert die kryptografischen Parameter – Zertifikatsdatei, Passwort und optionale Metadaten – die die Bibliothek nutzt, um eine gültige PKI‑Signatur zu erzeugen.
DigitalSignOptions options = new DigitalSignOptions();
options.setCertificatePath("YOUR_DOCUMENT_DIRECTORY/certificate.pfx");
options.setCertificatePassword("yourPassword");
options.setReason("Approved Contract");
options.setContact("legal@yourcompany.com");
options.setLocation("New York, USA");
Wichtige Punkte:
- Hard‑coden Sie das Passwort niemals; laden Sie es aus Umgebungsvariablen oder einem Secret‑Manager.
- Verwenden Sie
setReason,setContactundsetLocation, um Reviewern Kontext zu geben, wenn sie die Signatur‑Eigenschaften inspizieren.
Wie passe ich das visuelle Erscheinungsbild der Signatur an?
SignatureOptions (eine Unterklasse von DigitalSignOptions) steuert das Rendering auf der Seite. Sie ermöglicht das Anhängen eines Bildes, das Anpassen der Größe und die Positionierung des visuellen Stempels.
SignatureOptions lässt Sie ein Bild anhängen, Größe anpassen und den visuellen Stempel auf der Seite positionieren.
options.setImageFilePath("YOUR_DOCUMENT_DIRECTORY/signature.png");
options.setAllPages(true);
options.setWidth(150);
options.setHeight(0); // Auto‑scale based on image aspect ratio
- ImageFilePath: Zeigt auf eine PNG‑ oder JPG‑Datei Ihrer handschriftlichen Unterschrift oder Ihres Firmenlogos. Transparente PNGs funktionieren am besten.
- AllPages: Auf
truesetzen für Verträge, die auf jeder Seite einen Nachweis benötigen; sonstfalsesigniert nur die letzte Seite. - Width/Height: In Pixel angegeben; eine Höhe von 50‑80 Pixel wirkt bei den meisten Geschäftsdokumenten professionell.
Wie steuere ich Ausrichtung und Abstand?
Ausrichtungs‑Einstellungen bestimmen, wo der Stempel auf der Seite landet, während Abstand (Padding) einen Puffer um das visuelle Element schafft, damit es nicht an den Seitenrändern anstößt. Richtige Ausrichtung verbessert die Lesbarkeit und sorgt dafür, dass die Signatur nicht mit bestehendem Inhalt kollidiert.
AlignmentOptions bietet vertikale und horizontale Platzierungskonstanten wie Bottom, Right, Top und Center.
options.setVerticalAlignment(VerticalAlignment.Bottom);
options.setHorizontalAlignment(HorizontalAlignment.Right);
options.setPadding(10);
- Padding: Fügt rund um den Stempel Luft hinzu; ein Wert von 10 Pixel verhindert, dass das Bild die Seitenränder berührt.
- Praxisbeispiel: In Rechnungsvorlagen könnten Sie
Top/Leftverwenden, um die Unterschrift des Genehmigers nahe der Kopfzeile zu platzieren.
Wie füge ich eine Signaturzeile für Office‑Dokumente hinzu?
Beim Signieren von DOCX‑ oder XLSX‑Dateien verbessert eine sichtbare Signaturzeile die Lesbarkeit für Endnutzer. Die Bibliothek erstellt eine Microsoft‑Style‑Signaturzeile, die den Namen, die Position und die E‑Mail des Unterzeichners anzeigt und damit das native Office‑Erlebnis nachahmt.
SignatureLineOptions erzeugt eine Microsoft‑Style‑Signaturzeile, die den Namen, die Position und die E‑Mail des Unterzeichners anzeigt.
options.setSignatureLineText("John Doe", "Chief Legal Officer", "j.doe@yourcompany.com");
- Diese Funktion wird bei PDFs ignoriert, ist jedoch für Word‑ und Excel‑Dateien, die in Microsoft Office geöffnet werden, essenziell.
Wie signiere ich ein Dokument?
Laden Sie die Quelldatei mit einer Signature‑Instanz, wenden Sie die vollständig konfigurierten DigitalSignOptions an und rufen Sie sign() auf. Die Bibliothek schreibt eine neue Datei in den Ausgabepfad, während das Original unverändert bleibt. Bei großen PDFs (50+ Seiten) sollten Sie mit einer Verarbeitungszeit von 2‑5 Sekunden rechnen; überlegen Sie, die Ausführung asynchron in Web‑Services zu gestalten.
Signature signature = new Signature("SAMPLE_WORDPROCESSING/contract.docx");
DigitalSignOptions options = new DigitalSignOptions();
// ...configure options as shown earlier...
signature.sign("OUTPUT_FOLDER/signed_contract.docx", options);
Performance‑Hinweis: Bei Dokumenten über 100 Seiten erhöhen Sie den JVM‑Heap (-Xmx2g) oder deaktivieren Sie setAllPages(true), um den Speicherverbrauch zu begrenzen.
Wie behebe ich häufige Probleme?
Wenn das Signieren fehlschlägt, hängen die häufigsten Probleme mit der Zertifikatsverarbeitung, der visuellen Platzierung oder Speicherbeschränkungen zusammen. Identifizieren Sie das Symptom und folgen Sie der gezielten Checkliste unten, um das Problem schnell zu lösen.
Warum sehe ich „Invalid Certificate“ oder „Cannot Load Certificate“-Fehler?
Diese Ausnahmen entstehen meist aus einem der vier folgenden Gründe:
- Falsches Passwort – prüfen Sie mit OpenSSL:
openssl pkcs12 -info -in yourcert.pfx. - Abgelaufenes Zertifikat – prüfen Sie die Gültigkeit mit
keytool -list -v -keystore yourcert.pfx. - Falsches Dateiformat – nur
.pfxoder.p12(die private Schlüssel enthalten) werden akzeptiert. - Dateiberechtigungs‑Probleme – stellen Sie sicher, dass der Java‑Prozess die Zertifikatsdatei lesen kann.
Warum erscheint die Signatur nicht auf der Seite?
- Der AllPages‑Schalter könnte
falsesein, sodass Sie eine Seite ohne Stempel betrachten. - Der Image‑Pfad ist möglicherweise falsch geschrieben; geben Sie
options.getImageFilePath()aus, um das zu prüfen. - Ausrichtungs‑Einstellungen könnten den Stempel außerhalb des Bildschirms platzieren; wechseln Sie vorübergehend zu
Centerzum Debuggen.
Warum meldet Adobe Reader „Signature Invalid“?
- Zertifikat nicht vertrauenswürdig – selbstsignierte Zertifikate erzeugen Warnungen. Verwenden Sie ein von einer CA ausgestelltes Zertifikat für die Produktion.
- Unvollständige Zertifikatskette – stellen Sie sicher, dass das
.pfxZwischen‑ und Root‑Zertifikate enthält. - Fehlender Zeitstempel – ohne TSA‑Token kann die Signatur nach Ablauf des Zertifikats als ungültig gelten. GroupDocs unterstützt Zeitstempel via
setTimeStampOptions().
Wie vermeide ich OutOfMemoryError bei riesigen PDFs?
- JVM‑Heap erhöhen (
-Xmx4goder mehr). - Nur die benötigten Seiten signieren (
setAllPages(false)). - Dateien in kleineren Batches verarbeiten oder streamen, wenn Sie in einer ressourcenbeschränkten Umgebung arbeiten.
Wie verwalte ich Zertifikate sicher in der Produktion?
Betten Sie Zertifikate oder Passwörter niemals im Quellcode ein. Befolgen Sie diese Schritte:
- Speichern Sie
.pfx‑Dateien in einem sicheren Tresor (AWS Secrets Manager, Azure Key Vault oder HashiCorp Vault). - Laden Sie das Passwort zur Laufzeit aus Umgebungsvariablen oder der Tresor‑API.
- Beschränken Sie Dateisystem‑Berechtigungen, sodass nur das Service‑Konto das Zertifikat lesen kann.
- Rotieren Sie Zertifikate mindestens 30 Tage vor Ablauf und aktualisieren Sie das gespeicherte Secret entsprechend.
String certPath = System.getenv("CERT_PATH");
String certPassword = System.getenv("CERT_PASSWORD");
options.setCertificatePath(certPath);
options.setCertificatePassword(certPassword);
Wie protokolliere ich Signaturvorgänge für Audit‑Compliance?
Audit‑Logs liefern den Nachweis der Nichtabstreitbarkeit. Erfassen Sie für jedes Signatur‑Ereignis folgende Felder:
- Dokumentname und Hash vor dem Signieren
- Unterzeichner‑Identität (Zertifikat‑Subject)
- Zeitstempel der Operation (idealerweise UTC)
- Ergebnisstatus (Erfolg/Fehler) und ggf. Fehlermeldungen
logger.info("Signing document {} with certificate {} at {}", docPath, options.getCertificatePath(), Instant.now());
Wie verifiziere ich eine Signatur, nachdem sie angewendet wurde?
Die Verifizierung stellt sicher, dass das Dokument nach dem Signieren nicht manipuliert wurde. Nutzen Sie die Methode verify(), die ein VerificationResult zurückgibt, das den Gültigkeitsstatus, Unterzeichnerdetails und eventuelle Zeitstempel‑Informationen enthält. Eine erfolgreiche Verifizierung bestätigt sowohl Integrität als auch Authentizität.
VerificationResult result = signature.verify("OUTPUT_FOLDER/signed_contract.docx");
if (result.isValid()) {
logger.info("Signature is valid and trusted.");
} else {
logger.warn("Signature verification failed: {}", result.getErrorMessage());
}
Wie kann ich mehrere Signaturen zu einem einzigen Dokument hinzufügen?
Möglicherweise benötigen Sie eine Genehmiger‑ und eine Zeugen‑Signatur. Rufen Sie sign() mehrfach mit unterschiedlichen DigitalSignOptions‑Instanzen auf, die jeweils ihr eigenes Zertifikat und visuelle Einstellungen besitzen. Die Bibliothek bewahrt bestehende Signaturen und fügt neue hinzu.
// First signature (approver)
signature.sign("output.docx", approverOptions);
// Second signature (witness)
signature.sign("output.docx", witnessOptions);
Wie erstelle ich eine Factory‑Methode für verschiedene Dokumenttypen?
Eine Hilfsmethode kann basierend auf der Dateierweiterung ein vorkonfiguriertes DigitalSignOptions zurückgeben, sodass Ihr Code DRY bleibt. Dies zentralisiert das Laden von Zertifikaten, visuelle Vorgaben und Seiten‑Auswahl‑Logik für PDFs, Word, Excel und andere unterstützte Formate.
public DigitalSignOptions getOptionsFor(String extension) {
DigitalSignOptions opts = new DigitalSignOptions();
// common settings
if (extension.equalsIgnoreCase("pdf")) {
opts.setImageFilePath("signatures/pdf_stamp.png");
} else if (extension.equalsIgnoreCase("docx")) {
opts.setSignatureLineText("Jane Smith", "Finance Manager", "j.smith@company.com");
}
return opts;
}
Wie prüfe ich, ob ein Dokument bereits signiert ist?
Bevor Sie eine neue Signatur anwenden, prüfen Sie auf vorhandene Signaturen, um Doppel‑Signaturen zu vermeiden. Nutzen Sie die Methode getSignatures(); ist die zurückgegebene Collection nicht leer, entscheiden Sie, ob Sie eine weitere Signatur anhängen oder den Vorgang abbrechen.
List<SignatureInfo> existing = signature.getSignatures();
if (!existing.isEmpty()) {
logger.warn("Document already contains {} signatures.", existing.size());
}
Praktische Anwendungsfälle (Echtwelt‑Use‑Cases)
- Automatisierte Vertrags‑Workflows – Sobald ein Vertrag im BPM‑System den Status „genehmigt“ erreicht, löst der Signatur‑Service das Einbetten des Zertifikats der Rechtsabteilung aus und e‑mailt die signierte Kopie an den Lieferanten.
- Rechnungs‑Freigabesysteme – Nach der Freigabe einer Rechnung durch die Finanzabteilung wird automatisch eine digitale Signatur hinzugefügt, bevor sie an den Kunden gesendet wird, wodurch ein kryptografischer Nachweis der Authentizität entsteht.
- Dokumenten‑Verifizierungs‑Portale – Bieten Sie ein Self‑Service‑Portal, in dem Nutzer ein PDF hochladen, Sie es mit einem unternehmensweiten Zertifikat signieren und eine manipulationssichere Datei zurückgeben, die rechtlichen Vorgaben entspricht.
- Compliance‑intensive Branchen – In Gesundheitswesen (HIPAA) oder Finanzwesen (SOX) erfüllen digitale Signaturen Audit‑Anforderungen, indem sie nachweisen, wer ein Dokument wann signiert hat.
- Interne Richtlinien‑Verteilung – Ersetzen Sie das manuelle Stempeln von HR‑Richtlinien durch einen automatisierten Prozess, der das finale PDF mit dem Zertifikat des CHRO signiert, sodass jeder Mitarbeitende eine verifizierte Kopie erhält.
Leistungsüberlegungen
| Dokumentgröße | Durchschnittliche Verarbeitungszeit | Empfohlene Einstellungen |
|---|---|---|
| 1‑5 Seiten | ~0,5 s | Standard‑Optionen |
| 5‑50 Seiten | 1‑3 s | Heap erhöhen, setAllPages(true) falls nötig |
| 50‑200 Seiten | 3‑10 s | setAllPages(false), asynchrone Ausführung, größerer Heap |
Optimierungstipps:
- Wiederverwenden einer einzelnen
Signature‑Instanz beim Signieren vieler Dateien im Batch. - Das geladene
DigitalSignOptions‑Objekt cachen; das wiederholte Laden des Zertifikats verursacht zusätzlichen Overhead. - Für Web‑Services das Signatur‑Aufruf in ein
CompletableFutureeinbetten oder in eine Message‑Queue auslagern, um die UI‑Reaktionsfähigkeit zu erhalten.
Pro‑Tipps (Erweiterte Nutzung)
- Zeitstempeln für langfristige Gültigkeit – Hängen Sie ein TSA‑Token via
setTimeStampOptions()an, um sicherzustellen, dass Signaturen nach Ablauf des Zertifikats gültig bleiben. - Unsichtbare Signaturen – Lassen Sie
ImageFilePathweg und setzen SieWidth/Heightauf0, um eine kryptografisch gültige, aber visuell unsichtbare Signatur zu erzeugen – ideal für Backend‑Prozesse ohne visuelle Stempel. - Individuelle QR‑Code‑Signaturen – GroupDocs kann einen QR‑Code mit Metadaten des Unterzeichners einbetten; perfekt für Lieferketten‑Dokumente, die eine schnelle mobile Verifizierung benötigen.
Häufig gestellte Fragen
F: Was ist der Hauptunterschied zwischen GroupDocs.Signature und iText für PDF‑Signaturen?
A: iText konzentriert sich ausschließlich auf PDF und erfordert, dass Sie die Kryptografie selbst handhaben, während GroupDocs.Signature über 30 Formate unterstützt, fertige visuelle Stempel bietet und das Zertifikats‑Handling abstrahiert, wodurch die Entwicklungszeit drastisch reduziert wird.
F: Kann ich GroupDocs.Signature in einen Spring Boot‑Microservice integrieren?
A: Ja. Fügen Sie die Maven‑Abhängigkeit hinzu, erstellen Sie einen @Service‑Bean, der die Signatur‑Logik kapselt, und injizieren Sie ihn dort, wo Sie Dokumente signieren müssen. So bleiben Ihre Controller schlank und die Signatur‑Logik wiederverwendbar.
F: Wie sicher sind mit GroupDocs.Signature erstellte Signaturen?
A: Die Bibliothek verwendet standardisierte PKI‑Algorithmen (RSA/ECDSA) und folgt denselben Spezifikationen wie Browser und Adobe Reader. Die Sicherheit hängt von der Qualität Ihres Zertifikats ab; verwenden Sie stets ein von einer CA ausgestelltes Zertifikat und schützen Sie den privaten Schlüssel.
F: Funktionieren signierte Dokumente in verschiedenen PDF‑Readern?
A: Absolut. Solange das Signatur‑Zertifikat vertrauenswürdig ist, validieren Adobe Reader, Foxit und moderne Browser die Signatur korrekt. Selbstsignierte Zertifikate zeigen zwar eine Warnung, bleiben aber technisch gültig.
F: Ist es möglich, Dokumente ohne sichtbares Signatur‑Bild zu signieren?
A: Ja – lassen Sie einfach ImageFilePath weg und setzen Sie die Größenparameter auf Null. Die resultierende Signatur ist unsichtbar, bleibt aber kryptografisch einwandfrei, ideal für Backend‑Automatisierungen ohne visuelle Anforderungen.
Fazit
Sie verfügen nun über eine vollständige, produktionsreife Roadmap für add digital signature java mit GroupDocs.Signature. Wir haben alles behandelt – von der Umgebungseinrichtung und Zertifikats‑Handling über visuelle Anpassungen, Performance‑Optimierung bis hin zu fortgeschrittenen Szenarien wie Mehrfach‑Signaturen und Zeitstempeln.
Nächste Schritte:
- Testen Sie den Beispielcode mit Ihren eigenen Zertifikaten und Dokumentvorlagen.
- Härten Sie Ihre Bereitstellung, indem Sie Zertifikate in einen Secret‑Manager verschieben und passende JVM‑Speicher‑Limits konfigurieren.
- Erweitern Sie die Hilfsmethoden, um Batch‑Verarbeitung zu unterstützen oder in Ihre bestehende Workflow‑Engine zu integrieren.
Für weiterführende Informationen schauen Sie in die offizielle Dokumentation und die Community‑Foren (Links unten).
Zuletzt aktualisiert: 2026-06-11
Getestet mit: GroupDocs.Signature 23.12 für Java
Autor: GroupDocs
Ressourcen:
import com.groupdocs.signature.Signature;
public class SignatureSetup {
public static void main(String[] args) {
Signature signature = new Signature("path/to/your/document");
// Your signing logic goes here
}
}
import com.groupdocs.signature.options.sign.DigitalSignOptions;
import com.groupdocs.signature.domain.enums.HorizontalAlignment;
import com.groupdocs.signature.domain.enums.VerticalAlignment;
import com.groupdocs.signature.exception.GroupDocsSignatureException;
DigitalSignOptions options = new DigitalSignOptions("YOUR_DOCUMENT_DIRECTORY/CertificatePfx");
options.setPassword("1234567890"); // Ensure your certificate password is secure
options.setReason("Sign"); // Reason for signing, e.g., "Contract Approval"
options.setContact("JohnSmith"); // Contact information of the signer
options.setLocation("Office1"); // Location where document is signed
options.setImageFilePath("YOUR_DOCUMENT_DIRECTORY/ImageHandwrite");
options.setAllPages(true); // Apply signature to all pages of the document
options.setWidth(0); // Auto-width based on content
options.setHeight(60); // Height in pixels
options.setVerticalAlignment(VerticalAlignment.Bottom);
options.setHorizontalAlignment(HorizontalAlignment.Right);
Padding padding = new Padding();
padding.setBottom(10); // Bottom padding for aesthetic spacing
padding.setRight(10); // Right padding to prevent clipping at edges
options.setMargin(padding);
import com.groupdocs.signature.domain.signatures.DigitalSignatureAppearance;
options.setAppearance(new DigitalSignatureAppearance("John Smith", "Title", "jonny@test.com"));
try {
Signature signature = new Signature("YOUR_DOCUMENT_DIRECTORY/SAMPLE_WORDPROCESSING");
String outputFilePath = "YOUR_OUTPUT_DIRECTORY/DigitalAppearance.docx";
signature.sign(outputFilePath, options);
} catch (GroupDocsSignatureException e) {
throw new RuntimeException(e.getMessage());
}
// BAD - Don't do this
options.setPassword("1234567890");
// GOOD - Load from environment variable
String certPassword = System.getenv("CERT_PASSWORD");
if (certPassword == null) {
throw new RuntimeException("CERT_PASSWORD environment variable not set");
}
options.setPassword(certPassword);
logger.info("Document signed: {}, SignedBy: {}, Timestamp: {}",
documentName, signerEmail, LocalDateTime.now());
// Verify the signature immediately after signing
List<DigitalSignature> signatures = signature.verify();
if (signatures.isEmpty()) {
throw new RuntimeException("Signature verification failed");
}
signature.sign(outputPath, approverOptions);
signature = new Signature(outputPath); // Reload the signed document
signature.sign(finalOutputPath, witnessOptions);
public DigitalSignOptions getOptionsForDocType(String docType) {
DigitalSignOptions options = new DigitalSignOptions(certPath);
if (docType.equals("contract")) {
options.setVerticalAlignment(VerticalAlignment.Bottom);
// Contract-specific settings
} else if (docType.equals("invoice")) {
options.setVerticalAlignment(VerticalAlignment.Top);
// Invoice-specific settings
}
return options;
}
List<DigitalSignature> existingSignatures = signature.search(DigitalSignature.class);
if (!existingSignatures.isEmpty()) {
System.out.println("Document already signed by: " +
existingSignatures.get(0).getContactInfo());
}