pl.vane.pdf.factory.PDFFactory.java Source code

Java tutorial

Introduction

Here is the source code for pl.vane.pdf.factory.PDFFactory.java

Source

/*
    
 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;
    }
}