Java tutorial
/* Copyright (c) 2015-2015, Michal Szczepanski All rights reserved. This source code is licensed under the BSD-style license found in the LICENSE file in the root directory of this source tree. */ package pl.vane.pdf.factory; import org.apache.pdfbox.pdmodel.PDDocument; import org.apache.pdfbox.pdmodel.PDPage; import org.apache.pdfbox.pdmodel.PDPageContentStream; import org.apache.pdfbox.pdmodel.common.PDRectangle; import org.apache.pdfbox.pdmodel.font.PDFont; import org.apache.pdfbox.pdmodel.font.PDType0Font; import pl.vane.log.Log; import pl.vane.pdf.model.*; import pl.vane.pdf.model.base.Point; import pl.vane.pdf.model.content.PDFTextContent; import java.io.File; import java.io.IOException; import java.util.HashMap; import java.util.List; import java.util.Map; /** * Author: Michal Szczepanski * Date: 23/03/15 * Time: 23:29 */ public class PDFFactory { static final Log log = Log.getLogger(PDFFactory.class.getSimpleName()); public static PDDocument create(PDFDocument pdf) throws IOException { log.trace("--- pdf start"); PDDocument document = new PDDocument(); log.trace("--- load fonts"); Map<Integer, PDFont> fonts = loadFonts(pdf.getFont(), document); for (PDFPage data : pdf.getPage()) { // create page with size PDPage page = new PDPage(); PDFPageSize size = data.getSize(); PDRectangle mediaBox = new PDRectangle(size.getWidth(), size.getHeight()); page.setMediaBox(mediaBox); document.addPage(page); // create content PDPageContentStream stream = new PDPageContentStream(document, page); for (PDFContent content : data.getContent()) { if (content instanceof PDFTextContent) { PDFTextContent txt = (PDFTextContent) content; PDFont font = fonts.get(txt.getFontId()); Point p = txt.getStart(); PDFWriter.drawString(stream, font, txt.getFontSize(), txt.getLeading(), p.getX(), p.getY(), txt.getText()); } } stream.close(); } log.trace("--- pdf end"); return document; } private static Map<Integer, PDFont> loadFonts(List<PDFFont> fontList, PDDocument document) throws IOException { Map<Integer, PDFont> fonts = new HashMap<Integer, PDFont>(); for (PDFFont data : fontList) { File f = new File(data.getPath()); PDFont font = PDType0Font.load(document, f); fonts.put(data.getId(), font); } return fonts; } }