PDF-tiedostojen luominen Javalla

Esittely

Tässä pika-artikkelissa keskitymme PDF-dokumentin luomiseen tyhjästä suosittuun iText- ja PdfBox-kirjastoon perustuen.

Maven-riippuvuudet

Katsotaanpa Maven-riippuvuudet, jotka on sisällytettävä projektiimme:

Kirjastojen uusimmat versiot löytyvät täältä: iText ja PdfBox.

Yksi ylimääräinen riippuvuus on lisättävä, jos tiedostomme halutaan salata. Bounty Castle Provider -paketti sisältää kryptografisten algoritmien toteutuksia, ja molemmat kirjastot tarvitsevat sitä:

<dependency> <groupId>org.bouncycastle</groupId> <artifactId>bcprov-jdk15on</artifactId> <version>1.56</version></dependency>

Kirjaston uusin versio löytyy täältä: The Bounty Castle Provider.

Yleiskatsaus

Kumpikin, iText ja PdfBox ovat java-kirjastoja, joita käytetään pdf-tiedostojen luomiseen/käsittelyyn. Vaikka kirjastojen lopputulos on sama, ne toimivat hieman eri tavalla. Tutustutaanpa niihin.

Pdf:n luominen ITextillä

4.1. Pdf:n luominen ITextillä

. Tekstin lisääminen Pdf-tiedostoon

Katsotaanpa, miten uusi tiedosto, jossa on ”Hello World”-teksti, lisätään pdf-tiedostoon

Pdf-tiedoston luominen iText-kirjastoa käyttämällä perustuu Elements-rajapinnan toteuttavien objektien manipuloimiseen asiakirjassa Document (versiossa 5.5.10 näitä toteutuksia on 45).

Pienin elementti, joka voidaan lisätä dokumenttiin ja jota voidaan käyttää, on nimeltään Chunk, joka on periaatteessa merkkijono sovelletulla fontilla.

Lisäksi Chunkit voidaan yhdistää muihin elementteihin, kuten Paragraphs, Section jne. ja näin saada aikaan kauniin näköisiä dokumentteja.

4.2. Kuvan lisääminen

iText-kirjasto tarjoaa helpon tavan lisätä kuva asiakirjaan. Meidän tarvitsee vain luoda Image-instanssi ja lisätä se dokumenttiin.

4.3. Taulukon lisääminen

Saatamme kohdata ongelman, kun haluaisimme lisätä taulukon pdf:ään. Onneksi iText tarjoaa valmiiksi tällaisen toiminnallisuuden.

Ensin meidän on luotava PdfTable-olio ja konstruktorissa annettava taulukkomme sarakkeiden määrä. Nyt voimme yksinkertaisesti lisätä uuden solun kutsumalla

Nyt voimme yksinkertaisesti lisätä uuden solun kutsumalla hiljattain luodun taulukkoobjektin addCell-metodia. iText luo taulukon rivejä niin kauan kuin kaikki tarvittavat solut on määritelty, mikä tarkoittaa sitä, että kun luot taulukon, jossa on 3 saraketta ja lisäät siihen 8 solua, näytetään vain 2 riviä, joissa kummassakin on 3 solua.

Katsotaanpa esimerkkiä:

Luotaan uusi taulukko, jossa on 3 saraketta ja 3 riviä. Ensimmäistä riviä käsittelemme taulukon otsikkona, jonka taustaväriä ja reunuksen leveyttä muutetaan:

Toinen rivi koostuu kolmesta solusta, joissa on vain tekstiä, ei mitään ylimääräisiä muotoiluja.

private void addRows(PdfPTable table) { table.addCell("row 1, col 1"); table.addCell("row 1, col 2"); table.addCell("row 1, col 3");}

Voimme sisällyttää soluihin tekstin lisäksi myös kuvia. Lisäksi jokainen solu voidaan muotoilla erikseen, alla esitetyssä esimerkissä käytämme vaaka- ja pystysuuntaisia tasauskorjauksia:

4.4. Muotoilemme soluja. Tiedoston salaus

Voidaksemme soveltaa lupaa iText-kirjaston avulla, tarvitsemme jo luodun pdf-dokumentin. Esimerkissämme käytämme aiemmin luotua iTextHelloWorld.pdf-tiedostoamme.

Kun lataamme tiedoston PdfReaderilla, meidän on luotava PdfStamper, jota käytetään tiedoston lisäsisällön, kuten metatietojen, salauksen jne. soveltamiseen:

Esimerkissämme salasimme tiedoston kahdella salasanalla. Käyttäjän salasana (”userpass”), jossa käyttäjällä on vain lukuoikeus ilman mahdollisuutta tulostaa sitä, ja omistajan salasana (”ownerpass”), jota käytetään pääavaimena, jonka avulla henkilöllä on täysi pääsy pdf-tiedostoon.

Jos haluamme sallia käyttäjän tulostaa pdf:n, voimme antaa 0:n (setEncryptionin kolmas parametri) sijasta:

PdfWriter.ALLOW_PRINTING

Voidaan tietysti sekoittaa erilaisia oikeuksia, kuten:

PdfWriter.ALLOW_PRINTING | PdfWriter.ALLOW_COPY

Kannattaa muistaa, että kun käytämme iTextiä käyttöoikeuksien asettamiseen, luomme myös tilapäisen pdf:n, joka olisi poistettava, ja jos näin ei tapahdu, se voi olla täysin kenen tahansa käytettävissä.

Luo Pdf:n PdfBoxissa

5.1. Pdf:n luominen PdfBoxissa

. Tekstin lisääminen Pdf:ään

PdfBox-kirjasto tarjoaa iTextin vastakohtana API:n, joka perustuu stream-käsittelyyn. Ei ole luokkia kuten Chunk/Paragraph jne. PDDocument-luokka on muistissa oleva Pdf-esitys, johon käyttäjä kirjoittaa dataa manipuloimalla PDPageContentStream-luokkaa.

Katsotaanpa koodiesimerkki:

5.2. PdfBox-luokka. Kuvan lisääminen

Kuvan lisääminen on suoraviivaista.

Ensin on ladattava tiedosto ja luotava PDImageXObject, jonka jälkeen se piirretään dokumenttiin (on annettava tarkat x,y-koordinaatit).

Ei muuta:

5.3. Kuvan lisääminen. Taulukon lisääminen

PdfBox ei valitettavasti tarjoa mitään out-of-box-metodeja, jotka mahdollistaisivat taulukoiden luomisen. Mitä voimme tehdä tällaisessa tilanteessa, on piirtää se manuaalisesti – kirjaimellisesti piirtää jokainen viiva, kunnes piirroksemme muistuttaa haaveilemaamme taulukkoa.

5.4. Tiedoston salaus

PdfBox-kirjasto tarjoaa mahdollisuuden salata ja säätää tiedoston käyttöoikeuksia käyttäjälle. Verrattuna iTextiin, se ei vaadi käyttämään jo olemassa olevaa tiedostoa, koska käytämme yksinkertaisesti PDDocumentia. Pdf-tiedoston käyttöoikeuksia käsitellään AccessPermission-luokassa, jossa voimme asettaa, voiko käyttäjä muokata, poimia sisällön tai tulostaa tiedoston.

Sitten luomme StandardProtectionPolicy-olion, joka lisää salasanapohjaisen suojauksen asiakirjaan. Voimme määrittää kahdenlaisia salasanoja. Käyttäjän salasanan, jonka jälkeen henkilö pystyy avaamaan tiedoston sovelletuilla käyttöoikeuksilla ja omistajan salasanan (ei rajoituksia tiedostoon):

Esimerkissämme esitetään tilanne, että jos käyttäjä antaa käyttäjän salasanan, tiedostoa ei voi muokata eikä tulostaa.

Johtopäätökset

Tässä opetusohjelmassa käsiteltiin tapoja luoda pdf-tiedosto kahdella suositulla Java-kirjastolla.

Täydelliset esimerkit löytyvät Maven-pohjaisesta projektista GitHubissa.

Aloita Spring 5:n ja Spring Boot 2:n käyttö Opi Spring -kurssilla:

>> KATSO KURSSI

Vastaa

Sähköpostiosoitettasi ei julkaista.