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 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++; } } }