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.
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:
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ó:
A com.itextpdf.text csomag:
A com.itextpdf.text.pdf csomag:
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;
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();
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();
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"; } }