Hogyan adjunk digitális aláírásokat dokumentumokhoz Java-ban
Bevezetés
A add digital signature java funkció megvalósítása olyan, mintha aknakerítényt járnánk át. Kezelnünk kell a tanúsítványformátumokat, az aláírás elhelyezését és a szigorú biztonsági szabályzatokat – mindezt úgy, hogy a felhasználói élmény zökkenőmentes maradjon. Egyetlen hiba is érvénytelen aláírásokhoz vagy az Adobe Readerben hibásan validálódó dokumentumokhoz vezethet.
Szerencsére nem kell a kereket újra feltalálni, vagy alacsony szintű kriptográfiával bajlódni. Legyen szó szerződés‑kezelő portálról, egy e‑kereskedelmi fizetésről, amely aláírt nyugtát igényel, vagy egy belső HR munkafolyamatról, egy megbízható Java könyvtár órákat spórol meg a fejlesztésben és elkerüli a gyakori buktatókat.
Ebben az útmutatóban a GroupDocs.Signature for Java kereskedelmi könyvtárat mutatjuk be, amely elrejti a digitális aláírások nehéz részleteit. Megtanulod, hogyan:
- Állítsd be a könyvtárat és konfiguráld helyesen a tanúsítványokat
- Aláírd a PDF, Word, Excel és PowerPoint fájlokat professzionális vizuális pecséttel
- Érvényesítsd az aláírásokat és kezeld a gyakori hibákat, például a nem megbízható tanúsítványokat vagy a memória‑szűkítéseket
- Alkalmazz legjobb gyakorlatú biztonsági intézkedéseket termelési környezetben
A végére egy kész, beilleszthető megoldást kapsz, amelyet bármely dokumentumtípushoz kiterjeszthetsz, amit az alkalmazásod kezel.
Gyors válaszok
- Melyik könyvtár teszi lehetővé a digitális aláírások hozzáadását Java-ban? GroupDocs.Signature for Java.
- Hány dokumentumformátumot támogat? Több mint 30 formátum, beleértve a PDF, DOCX, XLSX, PPTX és képfájlok.
- Szükség van licencre a termeléshez? Igen – egy kereskedelmi licenc eltávolítja a vízjeleket és feloldja a teljes funkcionalitást.
- Alá tudok-e írni nagy PDF‑eket (100+ oldal) OOM hibák nélkül? Igen – a JVM heap méretének növelésével és a
setAllPages(false)opció használatával. - Támogatott a timestampolás? Természetesen; csatolhatsz egy megbízható Time‑Stamp Authority (TSA) tokent a hosszú távú érvényességhez.
Mi az a add digital signature java?
add digital signature java a kriptográfiai aláírás programozott beágyazását jelenti egy digitális dokumentumba Java API‑k segítségével. Az aláírás a felhasználó személyazonosságát – amelyet egy digitális tanúsítvány hitelesít – köti a dokumentum tartalmához, biztosítva az integritást, a nem megtagadhatóságot és a jogi érvényességet platformok között.
Miért érdemes digitális aláírásokat megvalósítani Java‑ban?
A GroupDocs.Signature 30+ bemeneti és kimeneti formátumot támogat, és akár 500 MB‑os fájlokat is képes feldolgozni anélkül, hogy a teljes fájlt a memóriába töltené, ami 2‑5×‑es sebességjavulást eredményez a manuális PDFBox megoldásokhoz képest. Ez a kvantifikált előny gyorsabb tranzakciós időket és alacsonyabb szerverköltségeket jelent nagy volumenű munkaterhelések esetén.
Előfeltételek
Mielőtt elkezdenéd, ellenőrizd, hogy a következők rendelkezésedre állnak:
- Java Development Kit (JDK) 8+ – JDK 11 ajánlott a fejlett TLS‑támogatás miatt.
- IDE – IntelliJ IDEA, Eclipse vagy VS Code Java kiegészítőkkel.
- GroupDocs.Signature for Java – három módon mutatjuk be a hozzáadását a buildhez.
- Érvényes digitális tanúsítvány PFX vagy P12 formátumban (szükség lesz a privát kulcsra és a jelszóra).
Opcionális, de hasznos:
- Ismeretek a Maven vagy Gradle függőségkezelésről.
- Egy minta PDF, DOCX vagy XLSX fájl a aláírási folyamat teszteléséhez.
Hogyan telepítem a GroupDocs.Signature for Java‑t?
A GroupDocs.Signature egyszerűen hozzáadható a build konfigurációhoz. Használd a megfelelő kódrészletet a build eszközödnek megfelelően, cseréld le a helyőrző verziót a legújabb stabil kiadásra, majd futtasd a build parancsot a könyvtár Maven Central‑ról történő letöltéséhez.
Maven (add hozzá a pom.xml‑hez):
<dependency>
<groupId>com.groupdocs</groupId>
<artifactId>groupdocs-signature</artifactId>
<version>23.12</version>
</dependency>
Gradle (add hozzá a build.gradle‑hez):
implementation 'com.groupdocs:groupdocs-signature:23.12'
Manuális telepítés (ha nem használsz build eszközt):
Töltsd le a JAR‑t a hivatalos kiadási oldalról — GroupDocs.Signature for Java releases — és add hozzá a classpath‑hoz.
Pro tipp: Mindig a legújabb stabil verziót használd. A jelen íráskori állapot szerint a 23.12‑es verzió a legfrissebb, de az újabb kiadások gyakran tartalmaznak biztonsági javításokat és teljesítmény‑fejlesztéseket.
Hogyan szerezzek és alkalmazzak GroupDocs licencet?
A GroupDocs.Signature licencet igényel a termelési használathoz. A licenc eltávolítja a vízjeleket és feloldja a teljes funkciókészletet, biztosítva, hogy az aláírt dokumentumok megfeleljenek a vállalati szabályzatoknak.
- Ingyenes próba: Szerezz 30‑napos ideiglenes licencet a Temporary License Page oldalon.
- Fizetett licenc: Vásárolj fejlesztői vagy vállalati licencet a GroupDocs Purchase Page oldalon.
Érvényes licenc hiányában az aláírt dokumentumok látható vízjelet kapnak, ami csak értékelési célra hasznos.
Hogyan inicializáljam a Signature objektumot?
A Signature osztály a belépési pont minden dokumentumművelethez. Egyetlen fájlt reprezentál a memóriában, és metódusokat biztosít az aláíráshoz, ellenőrzéshez és aláírások kinyeréséhez. Egy Signature példány létrehozása betölti a célfájlt és előkészíti a további feldolgozást.
Signature signature = new Signature("path/to/input.pdf");
Mi történik itt?
A sor egy Signature példányt hoz létre, amely betölti a cél dokumentumot. Az útvonal lehet abszolút vagy relatív; csak győződj meg róla, hogy a fájl létezik. Ez az objektum többször is felhasználható aláírási vagy ellenőrzési műveletekhez, ami csökkenti a kötegelt szcenáriókban jelentkező terhelést.
Hogyan konfiguráljam a digitális aláírási beállításokat?
A digitális aláírási beállítások tartalmazzák az összes olyan paramétert, amely egy érvényes PKI aláíráshoz szükséges, beleértve a tanúsítványinformációkat, a vizuális megjelenést és a elhelyezési szabályokat. A megfelelő konfiguráció biztosítja, hogy az aláírás kriptográfiailag helyes és a dokumentumtípushoz vizuálisan is illeszkedő legyen.
Hogyan állítsam be a tanúsítvány részleteit?
A DigitalSignOptions osztály tárolja az összes tanúsítvány‑kapcsolódó beállítást. Az alábbiakban az első alkalommal definiált horgony látható ehhez az osztályhoz.
DigitalSignOptions definiálja a kriptográfiai paramétereket – tanúsítványfájl, jelszó és opcionális metaadatok –, amelyeket a könyvtár a valid PKI aláírás létrehozásához használ.
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");
Fontos pontok:
- Soha ne hard‑code‑old a jelszót; töltsd be környezeti változókból vagy titkoskezelőből.
- Használd a
setReason,setContactéssetLocationmetódusokat, hogy a felülvizsgálók kontextust kapjanak az aláírás tulajdonságainak megtekintésekor.
Hogyan testreszabjam az aláírás vizuális megjelenését?
A SignatureOptions (a DigitalSignOptions alosztálya) szabályozza az oldalon történő megjelenítést. Lehetővé teszi egy kép csatolását, a méret állítását és a vizuális pecsét pozicionálását.
SignatureOptions lehetővé teszi egy kép csatolását, a méret állítását és a vizuális pecsét pozicionálását az oldalon.
options.setImageFilePath("YOUR_DOCUMENT_DIRECTORY/signature.png");
options.setAllPages(true);
options.setWidth(150);
options.setHeight(0); // Auto‑scale based on image aspect ratio
- ImageFilePath: Mutass egy PNG vagy JPG fájlra, amely a kézzel írott aláírásodat vagy vállalati logódat tartalmazza. A transparent PNG‑k a legjobbak.
- AllPages: Állítsd
true‑ra, ha a szerződés minden oldalán szükség van bizonyítékra; egyébkéntfalsecsak az utolsó oldalra ír alá. - Width/Height: Pixelben megadva; a 50‑80 pixel magasság professzionális megjelenést biztosít a legtöbb üzleti dokumentumnál.
Hogyan szabályozzam a igazítást és a margót?
Az igazítási beállítások határozzák meg, hogy a pecsét hol landol az oldalon, míg a margó (padding) egy puffert ad a vizuális elem köré, hogy ne érjen a lap széléhez. A megfelelő igazítás javítja az olvashatóságot és biztosítja, hogy az aláírás ne zavarja a meglévő tartalmat.
AlignmentOptions biztosítja a függőleges és vízszintes elhelyezési állandókat, például Bottom, Right, Top és Center.
options.setVerticalAlignment(VerticalAlignment.Bottom);
options.setHorizontalAlignment(HorizontalAlignment.Right);
options.setPadding(10);
- Padding: Légyszi légteret ad a pecsét köré; a 10 pixel érték megakadályozza, hogy a kép érintse a lap szélét.
- Valós példa: Számlasablonoknál használhatod a
Top/Leftbeállítást, hogy a jóváhagyó aláírása a fejléc közelében jelenjen meg.
Hogyan adok aláírási sort Office dokumentumokhoz?
DOCX vagy XLSX fájlok aláírásakor egy látható aláírási sor javítja a végfelhasználók olvashatóságát. A könyvtár egy Microsoft‑stílusú aláírási sort hoz létre, amely megjeleníti a felhasználó nevét, beosztását és e‑mail címét, tükrözve a natív Office élményt.
SignatureLineOptions létrehozza a Microsoft‑stílusú aláírási sort, amely megjeleníti a felhasználó nevét, beosztását és e‑mail címét.
options.setSignatureLineText("John Doe", "Chief Legal Officer", "j.doe@yourcompany.com");
- Ez a funkció PDF‑eknél figyelmen kívül marad, de a Word és Excel fájloknál elengedhetetlen, ha Microsoft Office‑ban nyitják meg őket.
Hogyan aláírok ténylegesen egy dokumentumot?
Töltsd be a forrásfájlt egy Signature példánnyal, alkalmazd a teljesen konfigurált DigitalSignOptions‑t, majd hívd meg a sign() metódust. A könyvtár egy új fájlt ír a kimeneti útvonalra, az eredetit érintetlenül hagyva. Nagy PDF‑ek (50+ oldal) esetén számíts 2‑5 másodperces feldolgozási időre; érdemes aszinkron módon futtatni webszolgáltatásokban.
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);
Teljesítményjegyzet: 100 oldal feletti dokumentumoknál növeld a JVM heap‑et (-Xmx2g) vagy tiltsd le a setAllPages(true) használatát a memóriafogyasztás csökkentése érdekében.
Hogyan oldjam meg a gyakori problémákat?
Aláírási hibák esetén a leggyakoribb problémák a tanúsítványkezelés, a vizuális elhelyezés vagy a memória korlátok körül forognak. Azonosítsd a tünetet, majd kövesd az alábbi célzott ellenőrzőlistát a gyors megoldáshoz.
Miért kapom a “Invalid Certificate” vagy “Cannot Load Certificate” hibákat?
Ezek a kivételek általában négy ok valamelyikéből adódnak:
- Helytelen jelszó – ellenőrizd OpenSSL‑el:
openssl pkcs12 -info -in yourcert.pfx. - Lejárt tanúsítvány – ellenőrizd a
keytool -list -v -keystore yourcert.pfxparanccsal. - Rossz fájlformátum – csak
.pfxvagy.p12(privát kulcsot tartalmazó) fájlok elfogadottak. - Fájlengedély-problémák – győződj meg róla, hogy a Java folyamat olvasni tudja a tanúsítványfájlt.
Miért nem jelenik meg az aláírás az oldalon?
- Az AllPages flag lehet
false, így egy olyan oldalt nézel, amelyen nincs pecsét. - Az Image path elgépelődhet; írd ki
options.getImageFilePath()értékét a hibakereséshez. - Az Alignment beállítások eltolhatják a pecsétet a képernyőn kívülre; ideiglenesen állítsd
Center‑re a hibakereséshez.
Miért jelzi az Adobe Reader a “Signature Invalid” üzenetet?
- Tanúsítvány nem megbízható – az önaláírt tanúsítványok figyelmeztetést generálnak. Használj CA‑által kiadott tanúsítványt termeléshez.
- Hiányos tanúsítványlánc – győződj meg róla, hogy a
.pfxtartalmazza a köztes és a gyökér tanúsítványt is. - Hiányzó timestamp – TSA token nélkül az aláírás a tanúsítvány lejárta után érvénytelennek tekinthető. A GroupDocs timestampolást támogat a
setTimeStampOptions()segítségével.
Hogyan kerüljem el az OutOfMemoryError‑t hatalmas PDF‑ekkel?
- Növeld a JVM heap‑et (
-Xmx4gvagy nagyobb). - Aláírás csak a szükséges oldalakon (
setAllPages(false)). - Dolgozz kisebb kötegekben vagy streameld a fájlokat, ha korlátozott környezetben vagy.
Hogyan kezeljem a tanúsítványokat biztonságosan termelésben?
Soha ne ágyazz be tanúsítványokat vagy jelszavakat a forráskódba. Kövesd az alábbi lépéseket:
- Tárold a
.pfxfájlokat egy biztonságos tárolóban (AWS Secrets Manager, Azure Key Vault vagy HashiCorp Vault). - Töltsd be a jelszót futásidőben környezeti változókból vagy a tároló API‑jából.
- Korlátozd a fájlrendszer jogosultságait, hogy csak a szolgáltatási fiók olvashassa a tanúsítványt.
- Cseréld le a tanúsítványokat legalább 30 nappal a lejárat előtt, és frissítsd a tárolt titkot ennek megfelelően.
String certPath = System.getenv("CERT_PATH");
String certPassword = System.getenv("CERT_PASSWORD");
options.setCertificatePath(certPath);
options.setCertificatePassword(certPassword);
Hogyan naplózzam az aláírási műveleteket audit megfelelőség érdekében?
Az audit naplók nem megtagadható bizonyítékot nyújtanak. Rögzítsd a következő mezőket minden aláírási eseményhez:
- Dokumentum neve és hash az aláírás előtt
- Aláíró személyazonossága (tanúsítvány alany)
- A művelet időbélyege (lehetőleg UTC)
- Eredmény állapota (siker/sikertelen) és a hiba részletei, ha vannak
logger.info("Signing document {} with certificate {} at {}", docPath, options.getCertificatePath(), Instant.now());
Hogyan ellenőrizhetem egy aláírás érvényességét az alkalmazás után?
Az ellenőrzés biztosítja, hogy a dokumentumot nem módosították az aláírás után. Használd a verify() metódust, amely egy VerificationResult objektumot ad vissza, benne a validitási állapottal, az aláíró adataival és esetleges timestamp információkkal. A sikeres ellenőrzés megerősíti mind az integritást, mind a hitelességet.
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());
}
Hogyan adhatok hozzá több aláírást egyetlen dokumentumhoz?
Lehet, hogy egy jóváhagyó és egy tanú aláírására is szükség van. Hívd meg a sign() metódust többször különböző DigitalSignOptions példányokkal, mindegyik saját tanúsítvánnyal és vizuális beállításokkal. A könyvtár megőrzi a meglévő aláírásokat, miközben újakat fűz hozzá.
// First signature (approver)
signature.sign("output.docx", approverOptions);
// Second signature (witness)
signature.sign("output.docx", witnessOptions);
Hogyan hozhatok létre egy gyári metódust különböző dokumentumtípusokhoz?
Egy segédmetódus visszaadhat egy előre konfigurált DigitalSignOptions‑t a fájlkiterjesztés alapján, így a kód DRY marad. Ez központosítja a tanúsítvány betöltését, a vizuális alapértelmezéseket és az oldal‑kiválasztási logikát PDF‑ek, Word, Excel és egyéb támogatott formátumok esetén.
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;
}
Hogyan ellenőrizhetem, hogy egy dokumentum már nincs-e aláírva?
Új aláírás alkalmazása előtt ellenőrizd a meglévő aláírásokat, hogy elkerüld a duplikált aláírást. Használd a getSignatures() metódust; ha a visszakapott gyűjtemény nem üres, döntsd el, hogy új aláírást fűzöl‑e hozzá vagy megszakítod a műveletet.
List<SignatureInfo> existing = signature.getSignatures();
if (!existing.isEmpty()) {
logger.warn("Document already contains {} signatures.", existing.size());
}
Gyakorlati alkalmazások (Valós példák)
- Automatizált szerződés‑folyamatok – Amikor egy szerződés eléri a „jóváhagyott” állapotot a BPM rendszeredben, indítsd el az aláírási szolgáltatást, amely beágyazza a jogi osztály tanúsítványát, majd e‑mailben elküldi a aláírt példányt a szállítónak.
- Számla‑jóváhagyási rendszerek – A pénzügyek aláírják a számlát, majd automatikusan digitális aláírást adnak hozzá, mielőtt elküldenék a vevőnek, ezzel kriptográfiai bizonyítékot nyújtva az eredetiségre.
- Dokumentum‑ellenőrző portálok – Kínálj önkiszolgáló portált, ahol a felhasználók PDF‑et töltenek fel, te aláírod egy vállalati tanúsítvánnyal, és visszakapják a manipuláció‑ellenálló fájlt a jogi megfeleléshez.
- Szabályozott iparágak – Egészségügyben (HIPAA) vagy pénzügyben (SOX) a digitális aláírások megfelelnek az auditkövetelményeknek, bizonyítva, ki és mikor írt alá egy dokumentumot.
- Belső szabályzat‑terjesztés – Cseréld le a HR‑politikai kézi pecsételését egy automatizált folyamatra, amely a CHRO tanúsítványával aláírja a végső PDF‑et, biztosítva, hogy minden alkalmazott egy hitelesített példányt kapjon.
Teljesítmény‑szempontok
| Dokumentum mérete | Átlagos feldolgozási idő | Ajánlott beállítások |
|---|---|---|
| 1‑5 oldal | ~0.5 s | Alapértelmezett beállítások |
| 5‑50 oldal | 1‑3 s | Heap növelése, setAllPages(true) ha szükséges |
| 50‑200 oldal | 3‑10 s | setAllPages(false), aszinkron végrehajtás, nagyobb heap |
Optimalizálási tippek:
- Egy
Signaturepéldány újrahasználata sok fájl kötegelt aláírásakor. - A betöltött
DigitalSignOptionsobjektum cache‑elése; a tanúsítvány többszöri betöltése extra terhet jelent. - Webszolgáltatások esetén a aláírási hívást
CompletableFuture‑ben vagy üzenetsorban futtasd, hogy a UI reagálóképessége megmaradjon.
Pro tippek (Haladó használat)
- Timestampolás hosszú távú érvényességhez – Csatolj egy TSA tokent a
setTimeStampOptions()‑el, hogy az aláírások a tanúsítvány lejárta után is érvényesek maradjanak. - Láthatatlan aláírások – Hagyd ki az
ImageFilePath‑t és állítsd aWidth/Heightértékét0‑ra, így kriptográfiai szempontból érvényes, de vizuálisan nem látható aláírást kapsz, ami a háttérfolyamatokhoz ideális. - Egyedi QR‑kód aláírások – A GroupDocs képes QR‑kódot beágyazni, amely aláíró metaadatokat tartalmaz; ideális ellátási lánc dokumentumokhoz, ahol mobil eszközökkel gyors ellenőrzésre van szükség.
Gyakran Ismételt Kérdések
Q: Mi a fő különbség a GroupDocs.Signature és az iText PDF‑aláírás között?
A: Az iText kizárólag PDF‑re fókuszál, és a fejlesztőnek kell kezelnie az alacsony szintű kriptográfiát, míg a GroupDocs.Signature 30+ formátumot támogat, kész vizuális pecséteket kínál, és elrejti a tanúsítványkezelést, drámaian csökkentve a fejlesztési időt.
Q: Integrálhatom a GroupDocs.Signature‑t egy Spring Boot mikroszolgáltatásba?
A: Igen. Add hozzá a Maven függőséget, hozz létre egy @Service bean‑t, amely körülveszi az aláírási logikát, és injektáld be bárhol, ahol dokumentumot kell aláírni. Így a kontrollerek karcsúak maradnak, az aláírási kód újrahasználható.
Q: Mennyire biztonságosak a GroupDocs.Signature‑val létrehozott aláírások?
A: A könyvtár szabványos PKI algoritmusokat (RSA/ECDSA) használ, és ugyanazokat a specifikációkat követi, mint a böngészők és az Adobe Reader. A biztonság a tanúsítvány minőségétől függ; mindig használj CA‑által kiadott tanúsítványt, és óvd a privát kulcsot.
Q: Működnek-e az aláírt dokumentumok különböző PDF‑olvasókban?
A: Teljesen. Amennyiben az aláírási tanúsítvány megbízható, az Adobe Reader, a Foxit és a modern böngészők helyesen validálják az aláírást. Az önaláírt tanúsítványok figyelmeztetést generálnak, de technikailag érvényesek maradnak.
Q: Lehet-e aláírni dokumentumokat látható aláírási kép nélkül?
A: Igen – egyszerűen hagyd ki az ImageFilePath‑t és állítsd a méretparamétereket nullára. Az eredmény egy láthatatlan, de kriptográfiai szempontból érvényes aláírás, amely tökéletes a háttér‑automatizáláshoz, ahol a vizuális jelzés nem szükséges.
Következtetés
Most már egy komplett, termelés‑kész útmutatód van a add digital signature java megvalósításához a GroupDocs.Signature segítségével. Áttekintettük a környezet beállítását, a tanúsítványkezelést, a vizuális testreszabást, a teljesítmény‑hangolást és a haladó szcenáriókat, mint a több aláírás és a timestampolás.
Következő lépések:
- Teszteld a mintakódot saját tanúsítványaiddal és dokumentumsablonjaiddal.
- Erősítsd meg a telepítést úgy, hogy a tanúsítványokat egy titkoskezelőbe helyezed, és megfelelő JVM memória‑korlátokat állítasz be.
- Bővítsd a segédmetódusokat kötegelt feldolgozáshoz vagy integráld a meglévő munkafolyamat‑motorodba.
A mélyebb részletekért tekintsd meg a hivatalos dokumentációt és a közösségi fórumokat az alábbi linkeken.
Utoljára frissítve: 2026-06-11
Tesztelve: GroupDocs.Signature 23.12 for Java
Szerző: GroupDocs
Erőforrások:
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());
}