[[oktatas:programozás:java|< Java]]
====== Java PDF generálás ======
* **Szerző:** Sallai András
* Copyright (c) 2014, Sallai András
* Szerkesztve: 2014, 2015, 2016
* Licenc: [[https://creativecommons.org/licenses/by-sa/4.0/|CC BY-SA 4.0]]
* Web: https://szit.hu
===== Bevezetés =====
Ez a leírás a iTextPdf használatát mutatja be, egy egyszerű példán
keresztül. Cél, hogy az ékezetes "ő" és "ű" betűk is problémamentesen
megjelenjenek.
===== Szükséges jar fájl =====
A PDF generálásához a iTextPdfet használjuk. A kívánt jar fájl letöltéséhez
látogassuk meg a következő weboldalt:
* http://itextpdf.com/
A itextpdf-x.x.x.jar fájl szükséges. A dokumentum készítésekor:
itextpdf-5.5.4.jar
API dokumentáció:
* http://api.itextpdf.com/itext/
===== Használható osztályok =====
A com.itextpdf.text csomag:
* PdfReader - dokumentum beolvasása
* PdfWriter - dokumentum elkészítése
A com.itextpdf.text.pdf csomag:
* PdfStamper - dokumentum időbélyeg
===== Szükséges osztályok =====
import com.itextpdf.text.Chunk;
import com.itextpdf.text.Document;
import com.itextpdf.text.Font;
import com.itextpdf.text.pdf.BaseFont;
import com.itextpdf.text.pdf.PdfWriter;
import java.io.FileOutputStream;
===== Helló Világ =====
Document document = new Document();
PdfWriter.getInstance(document, new FileOutputStream(dest));
Rectangle one = new Rectangle(70,140);
Rectangle two = new Rectangle(700,400);
document.setPageSize(one);
document.setMargins(2, 2, 2, 2);
document.open();
Paragraph p = new Paragraph("Hi");
document.add(p);
document.setPageSize(two);
document.setMargins(20, 20, 20, 20);
document.newPage();
document.add(p);
document.close();
===== Helló Világ ékezetes =====
Document document = new Document();
try {
FileOutputStream os = new FileOutputStream("hellovilag.pdf");
PdfWriter.getInstance(document, os);
document.open();
BaseFont baseFont = BaseFont.createFont(BaseFont.HELVETICA,
BaseFont.CP1250, BaseFont.EMBEDDED);
Font font = new Font(baseFont, 12, Font.NORMAL);
Chunk chunk = new Chunk("Árvíztűrő tükörfúrógép.", font);
document.add(chunk);
}catch(Exception ex) {
//kivételkezelés
}
document.close();
===== Vízjel, filter és fájlválasztó =====
A vízjeles példa az ékezetes hosszú "ű" és hosszú "ő" karaktereket is kezeli.
package model;
import com.itextpdf.text.BaseColor;
import com.itextpdf.text.Document;
import com.itextpdf.text.DocumentException;
import com.itextpdf.text.Element;
import com.itextpdf.text.Font;
import com.itextpdf.text.Font.FontFamily;
import com.itextpdf.text.Phrase;
import com.itextpdf.text.pdf.BaseFont;
import com.itextpdf.text.pdf.ColumnText;
import com.itextpdf.text.pdf.PdfContentByte;
import com.itextpdf.text.pdf.PdfPageEventHelper;
import com.itextpdf.text.pdf.PdfWriter;
import java.io.IOException;
public class Watermark extends PdfPageEventHelper {
Font font = null;
Phrase watermark = null;
public Watermark() {
font = new Font(createBaseFont(), 70, Font.NORMAL, BaseColor.LIGHT_GRAY);
watermark = new Phrase("VÍZJEL ÁRVÍZTŰRŐ", font);
}
private BaseFont createBaseFont() {
BaseFont baseFont = null;
try {
baseFont = tryCreateBaseFont();
}catch(DocumentException ex) {
System.err.println("Hiba a dokumentum készítése közben!");
}catch(IOException ex) {
System.err.println("Hiba a dokuementum kiírása közben!");
}
return baseFont;
}
private BaseFont tryCreateBaseFont() throws DocumentException,
IOException {
BaseFont baseFont = BaseFont.createFont(BaseFont.HELVETICA,
BaseFont.CP1250, BaseFont.EMBEDDED);
return baseFont;
}
@Override
public void onEndPage(PdfWriter writer, Document document) {
PdfContentByte canvas = writer.getDirectContentUnder();
ColumnText.showTextAligned(canvas, Element.ALIGN_CENTER, watermark, 280, 420, 45);
}
}
package controller;
import com.itextpdf.text.Chunk;
import com.itextpdf.text.Document;
import com.itextpdf.text.DocumentException;
import com.itextpdf.text.Font;
import com.itextpdf.text.pdf.BaseFont;
import com.itextpdf.text.pdf.PdfWriter;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.File;
import javax.swing.JFileChooser;
import model.PdfFilter;
import model.Watermark;
public class Controller.java {
public void genPdfButtonActionPerformed(java.awt.event.ActionEvent evt) {
String filePath = fileChoose();
if(filePath != "") {
genPdf(filePath);
}
}
private void genPdf(String filePath) {
try {
tryGenPdf(filePath);
}catch(FileNotFoundException ex) {
System.err.println("A fájl nem található!");
}catch(DocumentException ex){
System.err.println("Hiba a dokumentum készítése során!");
}catch(IOException ex){
System.err.println("Hiba a kiírás során!");
}
}
private void tryGenPdf(String filePath) throws FileNotFoundException, DocumentException,
IOException {
Document document = new Document();
FileOutputStream os = new FileOutputStream(filePath);
PdfWriter pdfWriter = PdfWriter.getInstance(document, os);
pdfWriter.setPageEvent(new Watermark()); //vízjel hozzáadása
document.open();
BaseFont baseFont = BaseFont.createFont(BaseFont.HELVETICA,
BaseFont.CP1250, BaseFont.EMBEDDED);
Font font = new Font(baseFont, 12, Font.NORMAL);
Chunk chunk = new Chunk("Árvíztűrő tükörfúrógép.", font);
document.add(chunk);
document.close();
}
private String fileChoose() {
JFileChooser fileChooser = new JFileChooser();
String filePath = "";
//Itt adjuk hozzá a filtert (2 sor):
fileChooser.setAcceptAllFileFilterUsed(false);
fileChooser.addChoosableFileFilter(new PdfFilter());
if( fileChooser.showSaveDialog(null) == JFileChooser.APPROVE_OPTION ) {
filePath = fileChooser.getSelectedFile().getPath();
}
return filePath;
}
}
public class PdfFilter extends FileFilter {
private final String[] okFileExtensions =
new String[] {"pdf"};
public boolean accept(File file) {
for (String extension : okFileExtensions)
{
if (file.getName().toLowerCase().endsWith(extension))
{
return true;
}
}
return false;
}
public String getDescription()
{
return "PDF fájl";
}
}
===== Linkek =====
==== PDF generátorok ====
* [[http://itextpdf.com/|iTextPdf]]
* [[http://itextpdf.com/book/examples.php|iTextPdf példa]]
* [[http://pdfbox.apache.org/|PDFBox]]
* [[http://pdfclown.org/|PDFClown]]
* [[https://java.net/projects/pdf-renderer/|PDF-renderer]]
* [[http://opensource.intarsys.de/home/en/index.php?n=OpenSource.JPod|jPod]]
* [[http://pdfjet.com/os/edition.html|PDFjet]]
* [[https://code.google.com/p/flying-saucer/|Flying Saucer]]