org.jrimum.bopepo.pdf.PDFs.java Source code

Java tutorial

Introduction

Here is the source code for org.jrimum.bopepo.pdf.PDFs.java

Source

/* 
 * Copyright 2008 JRimum Project
 * 
 * Licensed under the Apache License, Version 2.0 (the "License"); you may not
 * use this file except in compliance with the License. You may obtain a copy of
 * the License at http://www.apache.org/licenses/LICENSE-2.0
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
 * License for the specific language governing permissions and limitations under
 * the License.
 * 
 * Created at: 30/03/2008 - 23:49:00
 *
 * ================================================================================
 *
 * Direitos autorais 2008 JRimum Project
 *
 * Licenciado sob a Licena Apache, Verso 2.0 ("LICENA"); voc no pode 
 * usar esse arquivo exceto em conformidade com a esta LICENA. Voc pode obter uma 
 * cpia desta LICENA em http://www.apache.org/licenses/LICENSE-2.0 A menos que 
 * haja exigncia legal ou acordo por escrito, a distribuio de software sob esta 
 * LICENA se dar COMO EST??, SEM GARANTIAS OU CONDIES DE QUALQUER TIPO, sejam 
 * expressas ou tcitas. Veja a LICENA para a redao especfica a reger permisses 
 * e limitaes sob esta LICENA.
 * 
 * Criado em: 30/03/2008 - 23:49:00
 * 
 */

package org.jrimum.bopepo.pdf;

import java.io.ByteArrayOutputStream;
import java.util.Collection;

import org.jrimum.utilix.Exceptions;

import com.lowagie.text.Document;
import com.lowagie.text.DocumentException;
import com.lowagie.text.Image;
import com.lowagie.text.pdf.PdfCopy;
import com.lowagie.text.pdf.PdfReader;
import com.lowagie.text.pdf.PdfStamper;

/**
 * Servios e atividades relacionadas a manipulao de PDF (provavelmente da lib
 * iText).
 * 
 * @author <a href="http://gilmatryx.googlepages.com/">Gilmar P.S.L.</a>
 * 
 * @since 0.2
 * 
 * @version 0.2
 */
public class PDFs {

    /**
     * <p>
     * Muda um input field para uma imgem com as dimenses e possio do field.
     * </p>
     * 
     * @param stamper
     * @param positions
     * @param image
     * @return rectanglePDF
     * @throws DocumentException
     * 
     * @since 0.2
     */
    public static PdfRectangle changeFieldToImage(PdfStamper stamper, float[] positions, Image image)
            throws DocumentException {

        PdfRectangle rect = new PdfRectangle(positions);

        return changeFieldToImage(stamper, rect, image);
    }

    /**
     * <p>
     * Muda um input field para uma imgem com as dimenses e possio do field.
     * </p>
     * 
     * @param stamper
     * @param rect
     * @param image
     * @return rectanglePDF
     * @throws DocumentException
     * 
     * @since 0.2
     */
    public static PdfRectangle changeFieldToImage(PdfStamper stamper, PdfRectangle rect, Image image)
            throws DocumentException {

        // Ajustando o tamanho da imagem de acordo com o tamanho do campo.
        // image.scaleToFit(rect.getWidth(), rect.getHeight());
        image.scaleAbsolute(rect.getWidth(), rect.getHeight());

        // A rotina abaixo tem por objetivo deixar a imagem posicionada no
        // centro
        // do field, tanto na perspectiva horizontal como na vertical.
        // Caso no se queira mais posicionar a imagem no centro do field, basta
        // efetuar a chamada a seguir:
        // "image.setAbsolutePosition
        // (rect.getLowerLeftX(),rect.getLowerLeftY());"
        image.setAbsolutePosition(rect.getLowerLeftX() + (rect.getWidth() - image.getScaledWidth()) / 2,
                rect.getLowerLeftY() + (rect.getHeight() - image.getScaledHeight()) / 2);

        stamper.getOverContent(rect.getPage()).addImage(image);

        return rect;
    }

    /**
     * Junta varios arquivos pdf em um s.
     * 
     * @param pdfFiles
     *            Coleo de array de bytes
     * 
     * @return Arquivo PDF em forma de byte
     * @since 0.2
     */
    public static byte[] mergeFiles(Collection<byte[]> pdfFiles) {

        return mergeFiles(pdfFiles, null);
    }

    /**
     * Junta varios arquivos pdf em um s.
     * 
     * @param pdfFiles
     *            Coleo de array de bytes
     * @param info
     *            Usa somente as informaes
     *            (title,subject,keywords,author,creator)
     * 
     * @return Arquivo PDF em forma de byte
     * 
     * @since 0.2
     */
    public static byte[] mergeFiles(Collection<byte[]> pdfFiles, PdfDocInfo info) {

        try {

            ByteArrayOutputStream byteOS = new ByteArrayOutputStream();

            Document document = new Document();

            PdfCopy copy = new PdfCopy(document, byteOS);

            document.open();

            for (byte[] f : pdfFiles) {

                PdfReader reader = new PdfReader(f);

                for (int page = 1; page <= reader.getNumberOfPages(); page++) {

                    copy.addPage(copy.getImportedPage(reader, page));
                }

                reader.close();
            }

            document.addCreationDate();

            if (info != null) {

                document.addAuthor(info.author());
                document.addCreator(info.creator());
                document.addTitle(info.title());
                document.addSubject(info.subject());
                document.addKeywords(info.keywords());
            }

            copy.close();
            document.close();
            byteOS.close();

            return byteOS.toByteArray();

        } catch (Exception e) {
            return Exceptions.throwIllegalStateException(e);
        }
    }

}