Introducere
În acest articol rapid, ne vom concentra pe crearea de documente PDF de la zero pe baza popularelor biblioteci iText și PdfBox.
Dependențe Maven
Să aruncăm o privire la dependențele Maven, care trebuie să fie incluse în proiectul nostru:
Cele mai recente versiuni ale bibliotecilor pot fi găsite aici: iText și PdfBox.
Este necesar să adăugăm o dependență suplimentară, în cazul în care fișierul nostru va trebui să fie criptat. Pachetul Bounty Castle Provider conține implementări ale algoritmilor criptografici și este necesar pentru ambele biblioteci:
<dependency> <groupId>org.bouncycastle</groupId> <artifactId>bcprov-jdk15on</artifactId> <version>1.56</version></dependency>
Cea mai recentă versiune a bibliotecii poate fi găsită aici: The Bounty Castle Provider.
Atât iText, cât și PdfBox sunt biblioteci java utilizate pentru crearea/manipularea fișierelor pdf. Deși rezultatul final al bibliotecilor este același, ele funcționează într-un mod puțin diferit. Să aruncăm o privire asupra lor.
Creare Pdf în IText
4.1. Inserați text în Pdf
Să aruncăm o privire, la modul în care un nou fișier cu textul „Hello World” este inserat în fișierul pdf
Crearea unui pdf cu o utilizare a bibliotecii iText se bazează pe manipularea obiectelor care implementează interfața Elements în Document (în versiunea 5.5.10 există 45 de astfel de implementări).
Cel mai mic element care poate fi adăugat la document și utilizat se numește Chunk, care este practic un șir de caractere cu font aplicat.
În mod suplimentar, Chunk-urile pot fi combinate cu alte elemente cum ar fi Paragraphs, Section etc. rezultând documente cu aspect plăcut.
4.2. Inserarea imaginii
Biblioteca iText oferă o modalitate ușoară de a adăuga o imagine în document. Trebuie pur și simplu să creăm o instanță de imagine și să o adăugăm la document.
4.3. Inserarea unui tabel
S-ar putea să ne confruntăm cu o problemă atunci când dorim să adăugăm un tabel în pdf-ul nostru. Din fericire, iText oferă out-of-the-box o astfel de funcționalitate.
Primul lucru pe care trebuie să-l facem este să creăm un obiect PdfTable și în constructor să furnizăm un număr de coloane pentru tabelul nostru. Acum putem adăuga pur și simplu o nouă celulă prin apelarea
Acum putem adăuga pur și simplu o nouă celulă prin apelarea metodei addCell a obiectului tabel nou creat. iText va crea rânduri de tabel atâta timp cât toate celulele necesare sunt definite, ceea ce înseamnă că odată ce creați un tabel cu 3 coloane și adăugați 8 celule la acesta, vor fi afișate doar 2 rânduri cu 3 celule în fiecare.
Să aruncăm o privire la exemplu:
Creăm un tabel nou cu 3 coloane și 3 rânduri. Primul rând îl vom trata ca un antet de tabel cu o culoare de fundal și o lățime a marginii schimbate:
Cel de-al doilea rând va fi compus din trei celule doar cu text, fără formatare suplimentară.
private void addRows(PdfPTable table) { table.addCell("row 1, col 1"); table.addCell("row 1, col 2"); table.addCell("row 1, col 3");}
Potem include nu doar text în celule ci și imagini. În plus, fiecare celulă ar putea fi formatată individual, în exemplul prezentat mai jos aplicăm ajustări de aliniere orizontală și verticală:
4.4. Criptarea fișierelor
Pentru a aplica permisiunea folosind biblioteca iText, trebuie să avem un document pdf deja creat. În exemplul nostru, vom folosi fișierul iTextHelloWorld.pdf generat anterior.
După ce încărcăm fișierul folosind PdfReader, trebuie să creăm un PdfStamper care este folosit pentru a aplica conținut suplimentar la fișier, cum ar fi metadate, criptare etc:
În exemplul nostru, am criptat fișierul cu două parole. Parola de utilizator („userpass”) prin care un utilizator are doar dreptul de citire, fără posibilitatea de a-l imprima, și parola de proprietar („ownerpass”) care este utilizată ca cheie principală care permite unei persoane să aibă acces complet la pdf.
Dacă dorim să permitem utilizatorului să tipărească pdf-ul, în loc de 0 (al treilea parametru al setEncryption) putem trece:
PdfWriter.ALLOW_PRINTING
Desigur, putem amesteca diferite permisiuni, cum ar fi:
PdfWriter.ALLOW_PRINTING | PdfWriter.ALLOW_COPY
Rețineți că, utilizând iText pentru a seta permisiunile de acces, creăm, de asemenea, un pdf temporar care ar trebui să fie șters și, în caz contrar, ar putea fi complet accesibil oricui.
Crearea unui pdf în PdfBox
5.1. Inserarea textului în Pdf
În opoziție cu iText, biblioteca PdfBox oferă un API care se bazează pe manipularea fluxurilor. Nu există clase precum Chunk/Paragraph etc. Clasa PDDocument este o reprezentare Pdf în memorie în care utilizatorul scrie date prin manipularea clasei PDPageContentStream.
Să aruncăm o privire la exemplul de cod:
5.2. Inserarea imaginii
Inserarea imaginilor este simplă.
În primul rând trebuie să încărcăm un fișier și să creăm un PDImageXObject, ulterior să îl desenăm pe document (trebuie să furnizăm coordonatele x,y exacte).
Acesta este tot:
5.3. Inserarea unui tabel
Din păcate, PdfBox nu oferă nicio metodă out-of-box care să permită crearea de tabele. Ceea ce putem face într-o astfel de situație este să îl desenăm manual – literalmente, să trasăm fiecare linie până când desenul nostru seamănă cu tabelul visat.
5.4. Criptarea fișierelor
Biblioteca PDFBox oferă posibilitatea de a cripta, și de a ajusta permisiunile fișierelor pentru utilizator. În comparație cu iText, nu necesită utilizarea unui fișier deja existent, deoarece folosim pur și simplu PDDocument. Permisiunile fișierelor pdf sunt gestionate de clasa AccessPermission, unde putem seta dacă un utilizator va putea modifica, extrage conținutul sau imprima un fișier.
Subiectiv, creăm un obiect StandardProtectionPolicy care adaugă protecție pe bază de parolă la document. Putem specifica două tipuri de parole. Parola de utilizator, după care persoana va putea deschide un fișier cu permisiunile de acces aplicate și parola de proprietar (fără limitări la fișier):
Exemplul nostru prezintă o situație în care, dacă un utilizator furnizează parola de utilizator, fișierul nu poate fi modificat și tipărit.
Concluzii
În acest tutorial, am discutat modalitățile de creare a unui fișier pdf în două biblioteci Java populare.
Exemple complete pot fi găsite în proiectul bazat pe Maven de pe GitHub.
Începeți cu Spring 5 și Spring Boot 2, prin cursul Learn Spring:
>>VEZI CURSUL
.