Bevezetés
Ez a gyors cikk a PDF dokumentum létrehozására összpontosít a semmiből a népszerű iText és PdfBox könyvtár alapján.
Maven függőségek
Vessünk egy pillantást a Maven függőségekre, amelyeket a projektünknek tartalmaznia kell:
A könyvtárak legújabb verzióját itt találjuk: iText és PdfBox.
Egy további függőséget szükséges hozzáadni, amennyiben a fájlunkat titkosítani kell. A Bounty Castle Provider csomag kriptográfiai algoritmusok implementációit tartalmazza, és mindkét könyvtárnak szüksége van rá:
<dependency> <groupId>org.bouncycastle</groupId> <artifactId>bcprov-jdk15on</artifactId> <version>1.56</version></dependency>
A könyvtár legújabb verziója itt található: The Bounty Castle Provider.
Overview
Az iText és a PdfBox is java könyvtárak, amelyeket pdf fájlok létrehozására/manipulálására használnak. Bár a könyvtárak végső kimenete ugyanaz, mégis kicsit másképp működnek. Vessünk rájuk egy pillantást.
Pdf létrehozása az ITextben
4.1. Szöveg beillesztése a Pdf-be
Nézzük meg, hogyan illesztünk be egy új fájlt “Hello World” szöveggel a pdf fájlba
A pdf létrehozása az iText könyvtár használatával az Elements interfészt megvalósító objektumok manipulálásán alapul a Document-ben (az 5.5.10-es verzióban 45 ilyen megvalósítás van).
A dokumentumhoz hozzáadható és használható legkisebb elem a Chunk, amely alapvetően egy karakterlánc alkalmazott betűtípussal.
A Chunkok emellett más elemekkel, például Paragraphs, Section stb. is kombinálhatók, ami szép megjelenésű dokumentumokat eredményez.
4.2. A dokumentumban a Chunk-elemek és a Section-elemek kombinációja. Kép beszúrása
Az iText könyvtár egyszerű módot biztosít arra, hogy képet adjunk a dokumentumhoz. Egyszerűen csak létre kell hoznunk egy képpéldányt, és hozzá kell adnunk a dokumentumhoz.
4.3. Táblázat beillesztése
Problémával szembesülhetünk, amikor táblázatot szeretnénk hozzáadni a pdf-ünkhöz. Szerencsére az iText out-of-the-box ilyen funkciót biztosít.
Először is azt kell tennünk, hogy létrehozunk egy PdfTable objektumot, és a konstruktorban megadjuk a táblázatunk oszlopainak számát. Most már egyszerűen hozzáadhatunk új cellát a
Most már egyszerűen hozzáadhatunk új cellát az újonnan létrehozott táblázat objektum addCell metódusának meghívásával. iText létrehozza a táblázat sorait, amíg az összes szükséges cella meg van határozva, ami azt jelenti, hogy ha egyszer létrehozunk egy táblázatot 3 oszloppal és hozzáadunk 8 cellát, csak 2 sor fog megjelenni, mindegyikben 3 cellával.
Nézzük meg a példát:
Elkészítünk egy új táblázatot 3 oszloppal és 3 sorral. Az első sort táblázatfejlécként fogjuk kezelni, megváltozott háttérszínnel és szegélyszélességgel:
A második sor három cellából fog állni, csak szöveggel, extra formázás nélkül.
private void addRows(PdfPTable table) { table.addCell("row 1, col 1"); table.addCell("row 1, col 2"); table.addCell("row 1, col 3");}
A cellákba nemcsak szöveget, hanem képeket is felvehetünk. Ezenkívül minden egyes cellát külön-külön is formázhatunk, az alábbiakban bemutatott példában vízszintes és függőleges igazítást alkalmazunk:
4.4. Fájl titkosítás
Az iText könyvtár segítségével történő engedélyezés alkalmazásához már létrehozott pdf dokumentumra van szükségünk. Példánkban a korábban létrehozott iTextHelloWorld.pdf fájlunkat fogjuk használni.
Mihelyt betöltjük a fájlt a PdfReader segítségével, létre kell hoznunk egy PdfStamper-t, amelyet arra használunk, hogy további tartalmakat alkalmazzunk a fájlra, például metaadatokat, titkosítást stb:
Példánkban két jelszóval titkosítottuk a fájlt. A felhasználói jelszót (“userpass”), ahol a felhasználónak csak olvasási joga van, nyomtatási lehetőség nélkül, és a tulajdonosi jelszót (“ownerpass”), amelyet mesterkulcsként használunk, amely lehetővé teszi egy személy számára a teljes hozzáférést a pdf-hez.
Ha engedélyezni akarjuk a felhasználónak a pdf kinyomtatását, akkor a 0 helyett (a setEncryption harmadik paramétere) átadhatjuk:
PdfWriter.ALLOW_PRINTING
Természetesen különböző jogosultságokat is keverhetünk, például:
PdfWriter.ALLOW_PRINTING | PdfWriter.ALLOW_COPY
Ne feledjük, hogy az iText használatával a hozzáférési jogosultságok beállításához egy ideiglenes pdf-et is létrehozunk, amelyet törölni kell, és ha nem, akkor bárki számára teljesen hozzáférhetővé válik.
Pdf létrehozása a PdfBoxban
5.1. Pdf létrehozása a PdfBoxban
. Szöveg beillesztése a Pdf-be
A PdfBox könyvtár az iText-tel ellentétben olyan API-t biztosít, amely a folyammanipuláción alapul. Nincsenek olyan osztályok, mint a Chunk/Paragraph stb. A PDDocument osztály egy memórián belüli Pdf-reprezentáció, ahol a felhasználó a PDPageContentStream osztály manipulálásával írja az adatokat.
Vessünk egy pillantást a kódpéldára:
5.2. Kép beillesztése
A képek beillesztése egyszerű.
Először be kell töltenünk egy fájlt és létrehozni egy PDImageXObjectet, majd ezt követően kirajzolni a dokumentumra (pontos x,y koordinátákat kell megadni).
Ez minden:
5.3. Képek beillesztése. Táblázat beszúrása
A PdfBox sajnos nem biztosít olyan out-of-box módszereket, amelyek lehetővé tennék a táblázatok létrehozását. Amit ilyen helyzetben tehetünk, az az, hogy kézzel rajzoljuk meg – szó szerint minden egyes sort megrajzolunk, amíg a rajzunk nem hasonlít az általunk megálmodott táblázatra.
5.4. A táblázat megrajzolása. Fájl titkosítás
A PdfBox könyvtár lehetőséget biztosít a titkosításra, és a fájlengedélyek beállítására a felhasználó számára. Az iTexthez képest nem igényel már létező fájlt, mivel egyszerűen a PDDocumentet használjuk. A Pdf-fájlok jogosultságait az AccessPermission osztály kezeli, ahol beállíthatjuk, hogy a felhasználó módosíthatja-e, kiveheti-e a tartalmat vagy kinyomtathatja-e a fájlt.
A továbbiakban létrehozunk egy StandardProtectionPolicy objektumot, amely jelszó alapú védelmet ad a dokumentumhoz. Kétféle jelszótípust adhatunk meg. A felhasználói jelszót, amely után a személy képes lesz megnyitni a fájlt az alkalmazott hozzáférési jogosultságokkal és a tulajdonosi jelszót (nincs korlátozás a fájlra):
Példánkban olyan helyzetet mutatunk be, hogy ha egy felhasználó felhasználói jelszót ad meg, a fájl nem módosítható és nem nyomtatható ki.
Következtetések
Ezzel a bemutatóval a pdf fájl létrehozásának módjait tárgyaltuk két népszerű Java könyvtárban.
A teljes példák megtalálhatók a Maven alapú projektben a GitHubon.
Kezdje meg a Spring 5 és a Spring Boot 2 használatát a Tanulj Spring tanfolyamon keresztül:
>> KATTINTSON A TANFOLYAMRA