br.jus.jfpr.Divisor1.java Source code

Java tutorial

Introduction

Here is the source code for br.jus.jfpr.Divisor1.java

Source

/*
 * 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 br.jus.jfpr;

import com.itextpdf.text.Document;
import com.itextpdf.text.DocumentException;
import com.itextpdf.text.pdf.PdfContentByte;
import com.itextpdf.text.pdf.PdfImportedPage;
import com.itextpdf.text.pdf.PdfReader;
import com.itextpdf.text.pdf.PdfWriter;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;

/**
 *
 * @author Ronaldo Henriques (ronaldo_ahenriques@yahoo.com.br)
 */
public class Divisor1 {

    /**
     * Divide um arquivo inicialmente em 2, testa se o tamanho que todos
     * arquivos ficaram dentro do limite, se no ficaram apaga tudo e recomea
     * dividindo por, 3, 4, 5, etc. at que todos arquivo fiquem dentro do
     * limite
     *
     * @param arquivoEntrada O arquivo que ser dividido
     * @param arquivoSaida O nome do arquivo que ser criado
     * @param tamArqSel Tamanho selecionado que devero ficar os arquivos
     * divididos
     * @return String informativa do resultado
     */
    public static String dividePDF(File arquivoEntrada, String arquivoSaida, int tamArqSel) {

        int daPagina = 1;
        int paraPagina;
        int tamInicial;
        // FileOutputStream arquivoSair = null;
        String MensagemErro = "ok";
        int fatorDivisao = 2; //Incialmente dividir em 2
        arquivoSaida = arquivoSaida.substring(0, arquivoSaida.indexOf('.')) + "-divido"; //PAra definir o nome do arquivo de sada

        try {
            PdfReader PdfDeEntrada = new PdfReader(arquivoEntrada.getAbsolutePath()); //Para ler o arquivo de entrada
            final int totalPaginas = PdfDeEntrada.getNumberOfPages(); //Verifica o total de pginas
            tamInicial = paraPagina = (totalPaginas / fatorDivisao) + 1; //Define o tamanho (em pginas) do 1 arquivo e em quanto dever incrementar(sero o mesmo)
            PdfImportedPage pagina;

            int i = 1; //Contador simples
            while (i <= fatorDivisao && totalPaginas > fatorDivisao) { //Enquanto no fizer todas as divises
                Document documento = new Document();
                FileOutputStream arquivoSair = new FileOutputStream(arquivoSaida + "-" + i + ".pdf"); //Cria o arquivo, vazio
                PdfWriter writer = PdfWriter.getInstance(documento, arquivoSair); //
                documento.open();
                PdfContentByte PContentByte = writer.getDirectContent();
                while (daPagina <= paraPagina) {
                    documento.newPage(); //Aloca uma nova pginA
                    pagina = writer.getImportedPage(PdfDeEntrada, daPagina); //Seleciona uma pgina especfica. indicada pelo contador
                    PContentByte.addTemplate(pagina, 0, 0); //Adiciona a pagina ao contedo
                    daPagina++; //Contador simples
                }
                arquivoSair.flush();
                documento.close(); //Grava o arquivo de sada
                arquivoSair.close();
                File arquivoDest = new File(arquivoSaida + "-" + i + ".pdf");
                if (arquivoDest.length() > tamArqSel) { // O tamanho do arquivo de destino ficou maior do que deveria
                    delete(arquivoSaida, i); //Chamar a funo para deletar todos arquivos at a chave i
                    daPagina = i = 1; //Para recomear tudo de novo
                    fatorDivisao++; //Se um arquivo ficou maior, ento deve aumentar a diviso
                    tamInicial = paraPagina = (totalPaginas / fatorDivisao) + 1; //Para recomear tudo de novo
                } else {
                    i++; //Continua a divisao
                    if (i == fatorDivisao) { //Ou seja, chegou a ultima divisao
                        paraPagina = totalPaginas; //O ultimo arquivo conter mais pginas
                    } else {
                        paraPagina += tamInicial; //Cada arquivo ter o mesmo nmero de pginas//Incrementa sempre o tamanho inicial
                    }
                }
            }
        } catch (IOException | DocumentException e) {
            System.err.println(e.getMessage());
            MensagemErro = e.getMessage();
        }
        return MensagemErro;
    }

    /**
     * PAra apagar todos arquivos com nome at a chave k
     *
     * @param arquivoSaida nome do arquivo a ser apagado
     * @param k at onde ser pagado
     */
    private static void delete(String arquivoSaida, int k) {
        int i = 1;
        while (i <= k) {
            File arquivo = new File(arquivoSaida + "-" + i + ".pdf");
            arquivo.delete();
            i++;
        }
    }
}