Subversion Repositories Integrator Subversion

Rev

Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

package br.com.ec.controller.util;

import java.io.ByteArrayOutputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import com.itextpdf.text.Document;
import com.itextpdf.text.DocumentException;
import com.itextpdf.text.pdf.PdfCopy;
import com.itextpdf.text.pdf.PdfImportedPage;
import com.itextpdf.text.pdf.PdfReader;
import com.itextpdf.text.pdf.parser.PdfReaderContentParser;
import com.itextpdf.text.pdf.parser.SimpleTextExtractionStrategy;
import com.itextpdf.text.pdf.parser.TextExtractionStrategy;

import br.com.ec.core.util.VerificadorUtil;

public class PdfUtil {

        public static void main(String[] args) throws IOException, DocumentException {
                String caminhoArquivo = "D://recibo.pdf";
                List<byte[]> arquivos = separarPDF(caminhoArquivo);
                int i = 1;
                for (byte[] arquivo : arquivos) {
//                      System.out.println(extrairPDF(arquivo));
                        String[] linhas = extrairPDFEmLinhas(arquivo);
                       
                        boolean capturar = false;
                        String valorVencimentos = "";
                        String codigo = "";
                        String linhaAnterior = "";
                        for (String linha : linhas) {
                                if (linha.contains("ReferĂȘncia")) {
                                        valorVencimentos = "" + linhaAnterior;
                                }
                               
                                if (capturar) {
                                        codigo = "" + linha;
                                        capturar = false;
                                       
                                        System.out.println("CÓDIGO: " + codigo);
                                        System.out.println("VALOR: R$" + valorVencimentos);
                                }
                                if (linha.contains("CC:")) {
                                        capturar = true;
                                }
                                linhaAnterior = "" + linha;
                        }
                       
//                      System.out.println(caminhoArquivo.substring(0, caminhoArquivo.indexOf(".pdf")) + "-" + String.format("%03d", i + 1) + ".pdf");
//                      gravarArquivo(caminhoArquivo.substring(0, caminhoArquivo.indexOf(".pdf")) + "-" + String.format("%03d", i + 1) + ".pdf", arquivo);
//                      i++;
                        //break;
                }
        }
       
        public static void gravarArquivo(String caminhoArquivo, byte[] arquivo) {
                try {
                        FileOutputStream fos = new FileOutputStream(caminhoArquivo);
                        fos.write(arquivo);
                        fos.flush();
                        fos.close();
                } catch (Exception e) {
                        e.printStackTrace();
                }
        }
       
        public static String[] extrairPDFEmLinhas(byte[] arquivo) throws IOException {
                StringBuilder texto = new StringBuilder();
                texto.append(extrairPDF(arquivo));
                return texto.toString().split("\n");
        }
       
        public static String extrairPDF(byte[] arquivo) throws IOException {
                PdfReader reader = new PdfReader(arquivo);
                String textoExtraido = null;
                try {
                        PdfReaderContentParser parser = new PdfReaderContentParser(reader);
                        int quantidadePaginas = reader.getNumberOfPages();
                        TextExtractionStrategy strategy;

                        for (int i = 1; i <= quantidadePaginas; i++) {
                                strategy = parser.processContent(i, new SimpleTextExtractionStrategy());
                                textoExtraido = strategy.getResultantText().toString();
                        }
                } catch (Exception e) {
                        e.printStackTrace();
                } finally {
                        reader.close();
                }
                return textoExtraido;
        }
       
        public static boolean verificarSeTemTexto(String texto, String textoExtraido) {
                if (VerificadorUtil.naoEstaNuloOuVazio(textoExtraido)) {
                        if (textoExtraido.contains(texto)) {
                                return true;
                        }
                }
                return false;
        }
       
        public static List<byte[]> separarPDF(byte[] arquivo) throws IOException {
                return separarPDF(new PdfReader(arquivo));
        }
       
        public static List<byte[]> separarPDF(String caminhoArquivo) throws IOException {
                return separarPDF(new PdfReader(caminhoArquivo));
        }
       
        private static List<byte[]> separarPDF(PdfReader reader) {
                List<byte[]> arquivos = new ArrayList<byte[]>();
                try {
            int quantidadePaginas = reader.getNumberOfPages();
            int i = 0;
            while (i < quantidadePaginas) {
                Document documento = new Document(reader.getPageSizeWithRotation(1));
                        ByteArrayOutputStream pdfOutputStream = new ByteArrayOutputStream();
                        PdfCopy writer = new PdfCopy(documento, pdfOutputStream);
                        documento.open();
                PdfImportedPage pagina = writer.getImportedPage(reader, ++i);
                writer.addPage(pagina);
                documento.close();
                writer.close();
               
                arquivos.add(pdfOutputStream.toByteArray());
                pdfOutputStream.close();
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
                        reader.close();
                }
                return arquivos;
        }
       
        public static void gerarPDF(byte[] bytesPDF, String destinoArquivo) {
                try {
                        PdfReader reader = new PdfReader(bytesPDF);
            Document documento = new Document(reader.getPageSizeWithRotation(1));
            PdfCopy copy = new PdfCopy(documento, new FileOutputStream(destinoArquivo));
            documento.open();
            PdfImportedPage page = copy.getImportedPage(reader, 1);
            copy.addPage(page);
            documento.close();
            copy.close();
                } catch (Exception e) {
                        e.printStackTrace();
                }
        }
       
        public static void separarSalvandoArquivoPDF(String caminhoArquivo) {
                try {
            PdfReader reader = new PdfReader(caminhoArquivo);
            int n = reader.getNumberOfPages();
            int i = 0;
            while (i < n) {
                String destinoArquivo = caminhoArquivo.substring(0, caminhoArquivo.indexOf(".pdf")) + "-" + String.format("%03d", i + 1) + ".pdf";
                Document document = new Document(reader.getPageSizeWithRotation(1));
                PdfCopy writer = new PdfCopy(document, new FileOutputStream(destinoArquivo));
                document.open();
                PdfImportedPage page = writer.getImportedPage(reader, ++i);
                writer.addPage(page);
                document.close();
                writer.close();
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        }
       
}