Felhasználói eszközök

Eszközök a webhelyen


oktatas:programozas:java:java_pdf

< Java

Java PDF generálás

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:

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ó:

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.

Watermark.java
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);
        }    
 
}
Controller.java
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;
    }
}
PdfFilter.java
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

oktatas/programozas/java/java_pdf.txt · Utolsó módosítás: 2023/08/24 20:13 szerkesztette: admin