Java tutorial
/* * To change this license header, choose License Headers in Project Properties. * To change this template file, choose Tools | Templates * and open the template in the editor. */ package com.vigglet.pdf; import com.vigglet.util.DateUtil; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.util.ArrayList; import java.util.List; import javafx.util.Pair; import org.apache.pdfbox.exceptions.COSVisitorException; import org.apache.pdfbox.pdmodel.PDDocument; import org.apache.pdfbox.pdmodel.PDPage; /** * * @author vikn */ public abstract class PdfBase { protected PDDocument doc; protected PdfPage page; protected static List<Pair<String, String>> defaultInformationHeaders = new ArrayList<>(1); static { defaultInformationHeaders.add(new Pair<>("Skapad", DateUtil.getTodayString())); } protected abstract String getPageHeader(); protected abstract List<Pair<String, String>> getInformationHeaders(); protected void createPdfPage() { doc = new PDDocument(); page = new PdfPage(doc); } protected List<PDPage> getPages() { return page.getPDPages(); } protected void setHeader() throws IOException { page.addPageHeader(getPageHeader()); } protected void addInformationHeaders() throws IOException { page.addInformationHeaders(defaultInformationHeaders, getInformationHeaders()); } protected void drawTable(String tableHeader, List<String> headers, List<List<String>> rows) throws IOException { page.drawTable(tableHeader, headers, rows); } protected void addTextBox(String title, String textContent) throws IOException { page.addTextBox(title, textContent); } protected void addLogo(FileInputStream fis) throws IOException { page.addLogo(fis); } protected void close() throws IOException { page.closeAndSave(); doc.close(); } protected File closeAndSave() throws IOException, COSVisitorException { File result = null; page.closeAndSave(); // Collections.reverse(page.getPDPages()); page.addTotalPageNumbers(); for (PDPage asd : page.getPDPages()) { doc.addPage(asd); } // page.getPDPages().stream().forEach((PDPage foo) -> { // doc.addPage(foo); // }); result = File.createTempFile(PdfUtil.PDF_TEMP_PREFIX, PdfUtil.PDF_TEMP_SUFFIX, PdfUtil.PDF_TEMP_DIRECTORY); doc.save(result); doc.close(); return result; } }