Hogyan kezeljünk vonalkód aláírásokat Java-ban
Túráltál már órákat, próbálva manage barcode signatures java‑stílusban kezelni a vonalkód aláírásokat, programozottan ellenőrizni az aláírt dokumentumokat, csak hogy végül PDF könyvtárakkal küzdj, amelyek nem az aláíráskezelésre lettek tervezve? Nem vagy egyedül. Az elektronikus aláírások kezelése – különösen a vonalkód aláírások – komoly nehézséget jelenthet, amikor dokumentumáramlásokat építesz.
A lényeg: a legtöbb Java fejlesztő vagy manuálisan dolgozza fel az aláírásokat (időigényes és hibára hajlamos), vagy több könyvtárat kombinál, hogy különböző aláírás típusokat kezeljen. Itt jön képbe a GroupDocs.Signature for Java. Ez egy specializált könyvtár, amely a nehéz aláíráskezelési feladatokat veszi át, lehetővé téve, hogy néhány kódsorral keress, érvényesíts és eltávolíts vonalkód aláírásokat.
Ebben az útmutatóban megtanulod, hogyan manage barcode signatures java a kezdetektől a befejezésig. Áttekintjük az alapbeállítástól a fejlett műveletekig mindent, valamint megosztok néhány hibakeresési tippet, amelyet én is szívesen tudtam volna, amikor először ezzel a könyvtárral dolgoztam.
Gyors válaszok
- Melyik könyvtár segít a vonalkód aláírások Java-ban történő kezelésében? GroupDocs.Signature for Java.
- Törölhetek vonalkód aláírást anélkül, hogy az eredeti fájlt módosítanám? Igen, a
delete()metódus új dokumentumot hoz létre, megőrizve a forrást. - Szükség van licencre a termeléshez? A termeléshez kereskedelmi licenc szükséges; egy ingyenes próba elérhető értékeléshez.
- Az API egységes PDF, Word és Excel esetén? Teljesen – a GroupDocs.Signature egységes API-t kínál minden támogatott formátumhoz.
- Hogyan kereshetek egy konkrét vonalkód típust (pl. QR kód)? Használd a
BarcodeSearchOptions‑t, hogy szűrjEncodeTypealapján.
Mi az a manage barcode signatures java?
A manage barcode signatures java azt jelenti, hogy programozottan megtalálod, érvényesíted, és opcionálisan eltávolítod a dokumentumokba (PDF, Word vagy táblázat) beágyazott vonalkód‑alapú elektronikus aláírásokat. Ez a képesség elengedhetetlen az automatizált munkafolyamatokhoz, amelyeknek hitelesítést, beágyazott adatok kinyerését vagy a dokumentum újraláírásra való előkészítését kell elvégezniük.
Miért a GroupDocs.Signature a vonalkód aláíráskezeléshez?
- Egységes API – Egy kódbázis működik PDF, DOCX, XLSX és további formátumok esetén.
- Beépített detektálás – Nem kell egyedi parszereket írni minden formátumhoz.
- Biztonság elsőként – A törlés új fájlt hoz létre, az eredetit érintetlenül hagyva.
- Teljesítmény‑optimalizált – Nagy fájlok hatékony kezelése lapozási támogatással.
Előfeltételek
Mielőtt belevágnál, győződj meg róla, hogy az alábbi alapok rendben vannak:
Szükséges szoftver
- Java Development Kit (JDK) – 8-as vagy újabb verzió (JDK 11+ ajánlott a jobb teljesítményért)
- GroupDocs.Signature for Java – 23.12 vagy újabb verzió
- Kedvenc IDE‑d – IntelliJ IDEA, Eclipse vagy VS Code Java kiegészítőkkel
Környezet beállítása
Szükséged lesz egy build eszközre, például Maven vagy Gradle. Ha nem vagy biztos benne, melyiket válaszd, a Maven általában egyszerűbb a Java projektekhez (és a legtöbb példánk is ezt használja).
Tudásbeli előfeltételek
Ez az útmutató azt feltételezi, hogy magabiztos vagy:
- Alapvető Java programozási koncepciók (osztályok, metódusok, kivételkezelés)
- Maven vagy Gradle használata függőségkezeléshez
- Alapvető fájl‑I/O műveletek Java‑ban
Ne aggódj, ha újonc vagy a dokumentumfeldolgozó könyvtárakban – minden lépést részletesen elmagyarázunk.
Miért használjunk dedikált könyvtárat a vonalkód aláírásokhoz?
Talán azt kérdezed: „Nem használhatok egyszerű PDF könyvtárat?” Technikai szempontból igen, de általában több gondot okoz, mint hasznot:
A kézi megközelítés:
- Manuálisan kell elemezni a dokumentum szerkezetét
- Különböző formátumok (PDF, Word, Excel) eltérő kezelést igényelnek
- Az aláírás‑validáció logikája gyorsan bonyolulttá válik
- Az aláírások frissítése vagy eltávolítása mély dokumentum‑ismeretet igényel
A GroupDocs.Signature‑tal:
- Egységes API több dokumentumformátumhoz
- Beépített aláírás‑detektálás és validáció
- Széljegyek kezelése (korrupt aláírások, több aláírás típus)
- Sokkal kevesebb karbantartandó kód
Saját tapasztalatom szerint egy specializált könyvtár, mint a GroupDocs.Signature, a saját megoldásod fejlesztéséhez képest 70‑80 %‑kal csökkenti a fejlesztési időt. Ráadásul több ezer implementációval már tesztelték.
GroupDocs.Signature for Java beállítása
Integráljuk a könyvtárat a projektedbe. Egyszerű, de megmutatom mind a Maven, mind a Gradle változatot.
Maven beállítás
Add hozzá ezt a függőséget a pom.xml‑hez:
<dependency>
<groupId>com.groupdocs</groupId>
<artifactId>groupdocs-signature</artifactId>
<version>23.12</version>
</dependency>
Gradle beállítás
Vagy ha Gradlet használsz, ezt illeszd be a build.gradle‑ba:
implementation 'com.groupdocs:groupdocs-signature:23.12'
Közvetlen letöltés
Nem használsz build eszközt? Letöltheted a JAR‑t közvetlenül a GroupDocs.Signature for Java releases oldaláról, és manuálisan hozzáadhatod a classpath‑hoz.
Licenc beszerzése
A licencelésről fontos tudnivalók:
- Ingyenes próba – Ideális teszteléshez és kisebb projektekhez. A GroupDocs weboldaláról letölthető, hogy minden funkciót kipróbálhass.
- Ideiglenes licenc – Több időre van szükséged a kiértékeléshez? Kérj egy ideiglenes licencet (általában 30 nap).
- Kereskedelmi licenc – Termeléshez teljes licenc szükséges. Az ár a telepítési igények szerint skálázódik.
Pro tipp: Kezdd az ingyenes próbával, hogy megbizonyosodj a GroupDocs.Signature megfelelőségéről, mielőtt vásárolnál.
Implementációs útmutató
Most jön a jó rész – írjunk kódot. Lépésről‑lépésre haladunk, az egyszerű inicializálástól a teljes aláíráskezelésig.
Signature objektum inicializálása
Miért fontos:
A Signature objektum a kapu minden aláírás‑művelethez. Olyan, mintha megnyitnád a dokumentumot szerkesztésre – ez a kezelő szükséges minden további művelethez.
1. lépés: Állítsd be a fájl útvonalát
import com.groupdocs.signature.Signature;
public class InitializeSignature {
public static void run() throws Exception {
String filePath = "YOUR_DOCUMENT_DIRECTORY/sample.pdf";
// Create a Signature object using the file path
final Signature signature = new Signature(filePath);
// The Signature object is now ready for further operations.
}
}
Mi történik: Cseréld le a "YOUR_DOCUMENT_DIRECTORY/sample.pdf"‑t a saját dokumentumod tényleges útvonalára. Lehet PDF, Word, Excel vagy bármely más támogatott formátum – a GroupDocs automatikusan felismeri a formátumot.
A Signature objektum most már referenciát tart a dokumentumra, és kereshet, hozzáadhat, frissíthet vagy törölhet aláírásokat. Fontos megjegyezni, hogy ez nem tölti be a teljes dokumentumot a memóriába (ami nagy fájlok esetén előnyös).
Gyakori hiba: Győződj meg róla, hogy a fájl útvonal a megfelelő elválasztót használja az operációs rendszeredhez. Windows alatt használhatsz előre‑döntött perjeleket (/) vagy dupla visszaperjeleket (\\), de az előre‑döntött perjelek mindenhol működnek és általában biztonságosabbak.
Vonalkód aláírások keresése
Miért lehet erre szükség:
A vonalkód aláírások keresése elengedhetetlen a dokumentumok ellenőrzéséhez, a hitelesség validálásához vagy a vonalkódba ágyazott információk kinyeréséhez. Gyakori számlafeldolgozás, szerződéskezelés és megfelelőségi munkafolyamatok esetén.
2. lépés: Keresési opciók konfigurálása
import com.groupdocs.signature.Signature;
import com.groupdocs.signature.domain.signatures.BarcodeSignature;
import com.groupdocs.signature.options.search.BarcodeSearchOptions;
public class SearchBarcodeSignatures {
public static void run() throws Exception {
String filePath = "YOUR_DOCUMENT_DIRECTORY/sample.pdf";
final Signature signature = new Signature(filePath);
// Create search options for barcode signatures
BarcodeSearchOptions options = new BarcodeSearchOptions();
// Search for barcode signatures in the document
List<BarcodeSignature> signatures = signature.search(BarcodeSignature.class, options);
if (!signatures.isEmpty()) {
// Access found barcode signatures from the 'signatures' list.
}
}
}
Részletek: A BarcodeSearchOptions osztály lehetővé teszi a keresés finomhangolását. Alapértelmezés szerint az egész dokumentumban minden vonalkód típust keres, de beállíthatod, hogy:
- Kifejezetten bizonyos vonalkód formátumokra (Code128, QR kódok stb.) célozz
- Csak bizonyos oldalakon keresd
- A vonalkód tartalma vagy metaadata alapján szűrj
A search() metódus egy BarcodeSignature objektumok listáját adja vissza. Minden objektum tartalmazza a vonalkód pozícióját, tartalmát, típusát és metaadatait. Ha a lista üres, nem talált vonalkód aláírásokat (lehet, hogy a dokumentumban nincs, vagy egy nem konfigurált formátumról van szó).
Valós példa: Számlafeldolgozó rendszerben a vonalkód aláírások keresésével automatikusan kinyerheted a számlaszámot és a validációs kódot, ezzel kiküszöbölve a kézi adatbevitel szükségességét.
Vonalkód aláírás törlése
Mikor lehet erre szükség:
Néha el kell távolítani az aláírásokat – például ha egy vonalkód hibásan került be, a dokumentumot újra kell aláírni, vagy egy régi aláírást frissíteni szeretnél. Ez gyakori a dokumentum‑revíziós munkafolyamatokban.
3. lépés: Az aláírás azonosítása és eltávolítása
import com.groupdocs.signature.Signature;
import com.groupdocs.signature.domain.signatures.BarcodeSignature;
import java.io.File;
public class DeleteBarcode {
public static void run() throws Exception {
String filePath = "YOUR_DOCUMENT_DIRECTORY/sample.pdf";
final Signature signature = new Signature(filePath);
BarcodeSearchOptions options = new BarcodeSearchOptions();
List<BarcodeSignature> signatures = signature.search(BarcodeSignature.class, options);
if (!signatures.isEmpty()) {
BarcodeSignature barcodeSignature = signatures.get(0);
String outputFilePath = new File("YOUR_OUTPUT_DIRECTORY", "output_sample.pdf").getPath();
// Delete the first found barcode signature from the document
boolean result = signature.delete(outputFilePath, barcodeSignature);
if (result) {
// Signature successfully deleted.
} else {
// Could not find or delete the signature.
}
}
}
}
A folyamat megértése: Ez a kód egy keres‑utáni‑törlés mintát követ. Először megtalálja az összes vonalkód aláírást, majd az elsőt veszi (szűrhetsz vagy ciklusba teheted is). Végül meghívja a delete()‑t egy kimeneti útvonallal és a törlendő aláírással.
Fontos megjegyzés: A delete() metódus új dokumentumot hoz létre az aláírás eltávolításával – nem módosítja az eredeti fájlt. Ez egy biztonsági funkció, amely megőrzi az eredetit, ha szükséges. Győződj meg róla, hogy a "YOUR_OUTPUT_DIRECTORY" egy olyan helyre mutat, ahol írási jogosultsággal rendelkezel.
A visszatérő boolean érték azt jelzi, hogy a törlés sikeres volt-e. Ha false‑t ad vissza, a leggyakoribb okok:
- Az aláírás már nem létezik a dokumentumban (lehet, hogy már korábban eltávolították)
- Írási jogosultsági problémák a kimeneti könyvtárral
- A dokumentum formátuma nem támogatja az aláírás eltávolítását
Pro tipp: Éles kódban mindig ellenőrizd, hogy a megfelelő aláírást törlöd. Használhatod a barcodeSignature.getText() vagy a barcodeSignature.getEncodeType() értékeket a pontos azonosításhoz.
Gyakori hibák, amiket kerülj
Az alábbiakban a leggyakoribb csapdákat és a megoldásukat mutatom be:
1. Nem megfelelő fájl útvonalak kezelése
Hiba: Keménykódolt útvonalak vagy a különböző operációs rendszerek elválasztóinak figyelmen kívül hagyása.
Megoldás: Használd a File.separator‑t vagy maradj az előre‑döntött perjeleknél (minden platformon működnek). Még jobb, ha a java.nio.file‑ből a Paths.get()‑t használod:
String filePath = Paths.get("YOUR_DOCUMENT_DIRECTORY", "sample.pdf").toString();
2. Erőforrások lezárásának elhanyagolása
Hiba: A Signature objektum nem kerül lezárásra, ami fájl‑zárolásokat vagy memória‑szivárgásokat okozhat több dokumentum esetén.
Megoldás: Használd a try‑with‑resources‑t (a Signature osztály implementálja az AutoCloseable‑t):
try (Signature signature = new Signature(filePath)) {
// Your code here
}
// Automatically closed and resources released
3. Feltételezés, hogy minden vonalkód megtalálható
Hiba: Nem ellenőrzöd, hogy a keresés üres listát adott‑e vissza, mielőtt hozzáférnél az aláírás adataihoz.
Megoldás: Mindig validáld a keresési eredményeket:
List<BarcodeSignature> signatures = signature.search(BarcodeSignature.class, options);
if (signatures.isEmpty()) {
System.out.println("No barcode signatures found in the document.");
return;
}
4. Dokumentum formátum kompatibilitás figyelmen kívül hagyása
Hiba: Feltételezed, hogy minden művelet minden dokumentumformátumon működik.
Megoldás: Ellenőrizd a dokumentációt a formátum‑specifikus korlátozásokért. Például néhány régebbi formátum nem támogat bizonyos aláírás‑műveleteket.
Hibakeresési útmutató
Problémák? Íme a leggyakoribb hibák megoldásai:
Probléma: „File not found” kivétel
Tünetek: FileNotFoundException a Signature objektum inicializálásakor.
Megoldások:
- Ellenőrizd a fájl útvonalát (hibakereséskor használj abszolút útvonalat)
- Győződj meg róla, hogy a fájl valóban létezik a megadott helyen
- Ellenőrizd a fájl jogosultságait – az alkalmazásnak olvasási hozzáférésre van szüksége
- Ügyelj a projekt‑relatív és rendszer‑abszolút útvonalak közti különbségre
Probléma: Nem talál aláírásokat (bár tudod, hogy vannak)
Tünetek: A keresés üres listát ad, miközben a dokumentumban látható aláírások vannak.
Megoldások:
- Lehet, hogy nem vonalkód típusú aláírásokról van szó – próbálj más aláírás‑típusokra keresni
- A
BarcodeSearchOptionstúl szigorú lehet (próbáld először az alapértelmezett opciókat) - A dokumentum sérült lehet – nyisd meg PDF‑nézőben a validáláshoz
- Egyes dokumentumok olyan aláírásokat tartalmazhatnak, amelyeket a GroupDocs nem ismer fel
Probléma: Törlés sikertelen (false‑t ad vissza)
Tünetek: A delete() metódus false‑t ad, és az aláírás megmarad.
Megoldások:
- Ellenőrizd, hogy írási jogosultságod van‑e a kimeneti könyvtárban
- Győződj meg róla, hogy a
BarcodeSignatureobjektum még érvényes (a keresési eredmények elavulhatnak) - Ellenőrizd, hogy a kimeneti fájl nincs‑e megnyitva egy másik alkalmazásban
- Próbáld meg újra keresni közvetlenül a törlés előtt
Probléma: OutOfMemoryError nagy dokumentumoknál
Tünetek: Az alkalmazás összeomlik nagy PDF‑fájlok feldolgozásakor.
Megoldások:
- Növeld a JVM heap méretét:
-Xmx4g(vagy nagyobbra, igény szerint) - Több fájl esetén dolgozz kötegben
- Fontold meg a specifikus oldalak feldolgozását a teljes dokumentum helyett
- Használd a keresési opciók lapozását a memóriahasználat korlátozásához
Mikor érdemes ezt a megközelítést alkalmazni
A GroupDocs.Signature ideális:
✅ Ideális esetek:
- Dokumentumkezelő rendszerek építése, ahol aláírások validálása szükséges
- Szerződés‑automatizálás vonalkód‑ellenőrzéssel
- Számlák vagy nyugták feldolgozása beágyazott vonalkód aláírásokkal
- Audit‑naplók létrehozása aláírt dokumentumokról
- Több dokumentumformátum (PDF, Word, Excel) egyidejű kezelése
❌ Nem megfelelő, ha:
- Csak egyetlen dokumentumformátummal dolgozol, és már van megfelelő könyvtárad
- Csak nagyon alapvető funkciókra van szükséged (csak megtekintés, nem manipuláció)
- Kizárólag kép‑fájlokkal dolgozol (használj inkább vonalkód‑olvasó könyvtárat)
- Nagyon szűk költségvetésed van, és a kézi feldolgozás elfogadható
Gyakorlati alkalmazások
Nézzünk néhány valós példát:
1. Szerződéskezelő rendszer
Szituáció: Olyan rendszer építése, amely a szerződések aláírását ellenőrzi archiválás előtt.
Megoldás: Automatikusan keres vonalkód aláírásokat, amelyek a szerződés‑azonosítót tartalmazzák, ellenőrzi, hogy egyeznek‑e az adatbázissal, és elutasítja a hiányos vagy hibás aláírású dokumentumokat. Így a problémák már a végleges archiválás előtt kiszűrhetők.
2. Számlafeldolgozás automatizálása
Szituáció: Havi több ezer számla érkezik, mindegyikben vonalkód aláírás a validációhoz.
Megoldás: Bejövő számlákat beolvasva keres vonalkód aláírásokat, kinyeri a szállító‑információkat és a számlaszámot, majd a megfelelő jóváhagyási folyamatba irányítja. Ezzel megszűnik a kézi rendezés és adatbevitel.
3. Dokumentum‑revíziós munkafolyamat
Szituáció: Jogi dokumentumokat időről‑időre frissíteni kell, ezért a régi aláírásokat el kell távolítani az újraláírás előtt.
Megoldás: Programozottan eltávolítja a régi vonalkód aláírásokat, biztosítva, hogy a dokumentumok tiszták legyenek az új aláírási folyamat számára. Így elkerülhető a félreértés, mely aláírás a aktuális.
4. Megfelelőségi audit
Szituáció: A szervezetnek ellenőriznie kell, hogy az archívum minden dokumentuma rendelkezik‑e érvényes aláírással.
Megoldás: Köteg‑feldolgozás az archívumon, minden fájlban keres vonalkód aláírásokat, és naplózza, mely dokumentumok hiányoznak. Automatikus audit‑riportok készülnek a manuális felülvizsgálat helyett.
Teljesítmény‑szempontok
Éles környezetben a következő tényezőkre érdemes figyelni:
Memória‑kezelés
Nagy dokumentumok jelentős memóriát igényelhetnek. Több dokumentum esetén:
- Folyamatosan, egyesével dolgozz, ne töltsd be egyszerre az összeset
- Használd a keresési opciók lapozását, hogy a nagy fájlokat darabokban dolgozd fel
- Hívd meg explicit módon a
signature.dispose()‑t (vagy try‑with‑resources), hogy a memória gyorsan felszabaduljon
Köteg‑feldolgozás optimalizálása
Több dokumentum egyszerre? Ezek a stratégiák segítenek:
- Újrahasználd a konfigurációs objektumokat (pl.
BarcodeSearchOptions) a különböző műveletek között - Használd a Java
ExecutorService‑t párhuzamos feldolgozáshoz (de figyelj a memóriahasználatra) - Cache‑eld a keresési eredményeket, ha ugyanazokon az aláírásokon több műveletet kell végezni
Fájl‑I/O hatékonyság
A fájl műveletek gyakran szűk keresztmetszet:
- Olvasd a dokumentumokat gyors tárolóról (SSD a hálózati meghajtó helyett)
- Ha több aláírást törölsz, csináld egy művelettel, ne több kimeneti fájlt hozva létre
- Ha gyakran hozzáférsz ugyanahhoz a dokumentumhoz, tartsd memóriában (ha a használati eset megengedi)
Valós példa: Egy projektben a köteg‑műveletek és a keresési konfigurációk újrahasználatával 60 %‑kal csökkentettük a feldolgozási időt.
Összegzés
Most már szilárd alapokkal rendelkezel a manage barcode signatures java használatához a GroupDocs.Signature‑val. Áttekintettük az alapokat – a könyvtár inicializálását, a keresést és a törlést – valamint a gyakorlati szempontokat, amelyek a működő kódot a termelés‑kész megoldástól különböztetik.
A fő tanulság? Nem kell dokumentumformátum‑szakértőnek lenned ahhoz, hogy hatékonyan kezeld az aláírásokat. A GroupDocs.Signature elrejti a komplexitást, így a saját alkalmazáslogikádra koncentrálhatsz, nem a PDF‑belső részletekre.
Következő lépések:
- Kísérletezz a különböző keresési opciókkal, hogy pontosabban szűrd a találatokat
- Fedezd fel a GroupDocs által támogatott további aláírás típusokat (digitális aláírások, QR kódok, szöveges aláírások)
- Tekintsd meg a documentation‑t a fejlett funkciókhoz, mint például aláírás metaadatok és egyedi tulajdonságok
Próbálj ki egyet a bemutatott gyakorlati alkalmazások közül – meglepődsz, milyen gyorsan építhetsz robusztus dokumentumáramlásokat, amint megérted az API‑t.
Gyakran ismételt kérdések
K: Külön licenc kell-e a különböző környezetekhez (dev, staging, production)?
A: A licencszerződésedtől függ. Általában a fejlesztés és tesztelés a próba‑licencet használhatja, de a termeléshez kereskedelmi licenc szükséges. Kérdezd a GroupDocs értékesítést a konkrét helyzetedre vonatkozóan.
K: Kereshetek több aláírás típust egy műveletben?
A: Nem közvetlenül egy hívással, de több keresést végezhetsz egymás után. Minden aláírás típus (vonalkód, QR kód, digitális aláírás) saját keresési opciós osztályt igényel.
K: Mi történik, ha egy nem létező aláírást próbálok törölni?
A: A delete() metódus false‑t ad vissza, a dokumentum változatlan marad. Kivételt nem dob, ezért a visszatérési értéket kell ellenőrizned.
K: Hogyan kezelem a több tucat vonalkód aláírást tartalmazó dokumentumokat?
A: A keresés egy listát ad vissza az összes megtalált aláírásról. Végigiterálhatsz a listán, szűrhetsz tartalom vagy pozíció alapján, és szelektíven dolgozhatsz vagy törölhetsz. Tömeges műveletekhez érdemes egy ciklusban feldolgozni őket.
K: Működik ez jelszóval védett dokumentumokkal?
A: Igen, de a jelszót meg kell adni a Signature objektum inicializálásakor. A GroupDocs.Signature rendelkezik olyan konstruktorokkal, amelyek elfogadják a jelszó paramétert a titkosított dokumentumokhoz.
K: Használhatom webalkalmazásban?
A: Teljesen. A GroupDocs.Signature egy szabványos Java könyvtár, így működik asztali, web (Spring Boot, Jakarta EE) vagy mikro‑szolgáltatás környezetben. Csak ügyelj a memóriahasználatra nagy forgalmú szituációkban.
K: Milyen teljesítményhatása van a nagy dokumentumok keresésének?
A: A keresés teljesítménye a dokumentum méretétől és összetettségétől függ. A legtöbb dokumentum (100 oldal alatt) egy másodpercen belül lefut. Nagyon nagy dokumentumok esetén használj oldal‑specifikus keresési opciókat, hogy korlátozd a keresési tartományt.
Források
Utoljára frissítve: 2026-02-26
Tesztelve: GroupDocs.Signature 23.12 (Java)
Szerző: GroupDocs