Subversion Repositories Integrator Subversion

Rev

Rev 195 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
106 espaco 1
package br.com.ec.controller.util;
2
 
3
import java.io.ByteArrayOutputStream;
4
import java.io.FileOutputStream;
5
import java.io.IOException;
6
import java.util.ArrayList;
7
import java.util.List;
8
 
9
import com.itextpdf.text.Document;
10
import com.itextpdf.text.DocumentException;
11
import com.itextpdf.text.pdf.PdfCopy;
12
import com.itextpdf.text.pdf.PdfImportedPage;
13
import com.itextpdf.text.pdf.PdfReader;
14
import com.itextpdf.text.pdf.parser.PdfReaderContentParser;
15
import com.itextpdf.text.pdf.parser.SimpleTextExtractionStrategy;
16
import com.itextpdf.text.pdf.parser.TextExtractionStrategy;
17
 
195 espaco 18
import br.com.ec.core.util.VerificadorUtil;
106 espaco 19
 
20
public class PdfUtil {
21
 
22
        public static void main(String[] args) throws IOException, DocumentException {
432 espaco 23
                String caminhoArquivo = "D://recibo.pdf";
106 espaco 24
                List<byte[]> arquivos = separarPDF(caminhoArquivo);
25
                int i = 1;
26
                for (byte[] arquivo : arquivos) {
27
//                      System.out.println(extrairPDF(arquivo));
28
                        String[] linhas = extrairPDFEmLinhas(arquivo);
29
 
30
                        boolean capturar = false;
432 espaco 31
                        String valorVencimentos = "";
32
                        String codigo = "";
33
                        String linhaAnterior = "";
106 espaco 34
                        for (String linha : linhas) {
432 espaco 35
                                if (linha.contains("Referência")) {
36
                                        valorVencimentos = "" + linhaAnterior;
37
                                }
38
 
106 espaco 39
                                if (capturar) {
432 espaco 40
                                        codigo = "" + linha;
106 espaco 41
                                        capturar = false;
432 espaco 42
 
43
                                        System.out.println("CÓDIGO: " + codigo);
44
                                        System.out.println("VALOR: R$" + valorVencimentos);
106 espaco 45
                                }
46
                                if (linha.contains("CC:")) {
47
                                        capturar = true;
48
                                }
432 espaco 49
                                linhaAnterior = "" + linha;
106 espaco 50
                        }
51
 
432 espaco 52
//                      System.out.println(caminhoArquivo.substring(0, caminhoArquivo.indexOf(".pdf")) + "-" + String.format("%03d", i + 1) + ".pdf");
106 espaco 53
//                      gravarArquivo(caminhoArquivo.substring(0, caminhoArquivo.indexOf(".pdf")) + "-" + String.format("%03d", i + 1) + ".pdf", arquivo);
432 espaco 54
//                      i++;
106 espaco 55
                        //break;
56
                }
57
        }
58
 
59
        public static void gravarArquivo(String caminhoArquivo, byte[] arquivo) {
60
                try {
61
                        FileOutputStream fos = new FileOutputStream(caminhoArquivo);
62
                        fos.write(arquivo);
63
                        fos.flush();
64
                        fos.close();
65
                } catch (Exception e) {
66
                        e.printStackTrace();
67
                }
68
        }
69
 
70
        public static String[] extrairPDFEmLinhas(byte[] arquivo) throws IOException {
71
                StringBuilder texto = new StringBuilder();
72
                texto.append(extrairPDF(arquivo));
73
                return texto.toString().split("\n");
74
        }
75
 
76
        public static String extrairPDF(byte[] arquivo) throws IOException {
77
                PdfReader reader = new PdfReader(arquivo);
78
                String textoExtraido = null;
79
                try {
80
                        PdfReaderContentParser parser = new PdfReaderContentParser(reader);
81
                        int quantidadePaginas = reader.getNumberOfPages();
82
                        TextExtractionStrategy strategy;
83
 
84
                        for (int i = 1; i <= quantidadePaginas; i++) {
85
                                strategy = parser.processContent(i, new SimpleTextExtractionStrategy());
86
                                textoExtraido = strategy.getResultantText().toString();
87
                        }
88
                } catch (Exception e) {
89
                        e.printStackTrace();
90
                } finally {
91
                        reader.close();
92
                }
93
                return textoExtraido;
94
        }
95
 
96
        public static boolean verificarSeTemTexto(String texto, String textoExtraido) {
97
                if (VerificadorUtil.naoEstaNuloOuVazio(textoExtraido)) {
98
                        if (textoExtraido.contains(texto)) {
99
                                return true;
100
                        }
101
                }
102
                return false;
103
        }
104
 
105
        public static List<byte[]> separarPDF(byte[] arquivo) throws IOException {
106
                return separarPDF(new PdfReader(arquivo));
107
        }
108
 
109
        public static List<byte[]> separarPDF(String caminhoArquivo) throws IOException {
110
                return separarPDF(new PdfReader(caminhoArquivo));
111
        }
112
 
113
        private static List<byte[]> separarPDF(PdfReader reader) {
114
                List<byte[]> arquivos = new ArrayList<byte[]>();
115
                try {
116
            int quantidadePaginas = reader.getNumberOfPages();
117
            int i = 0;
118
            while (i < quantidadePaginas) {
119
                Document documento = new Document(reader.getPageSizeWithRotation(1));
120
                        ByteArrayOutputStream pdfOutputStream = new ByteArrayOutputStream();
121
                        PdfCopy writer = new PdfCopy(documento, pdfOutputStream);
122
                        documento.open();
123
                PdfImportedPage pagina = writer.getImportedPage(reader, ++i);
124
                writer.addPage(pagina);
125
                documento.close();
126
                writer.close();
127
 
128
                arquivos.add(pdfOutputStream.toByteArray());
129
                pdfOutputStream.close();
130
            }
131
        } catch (Exception e) {
132
            e.printStackTrace();
133
        } finally {
134
                        reader.close();
135
                }
136
                return arquivos;
137
        }
138
 
139
        public static void gerarPDF(byte[] bytesPDF, String destinoArquivo) {
140
                try {
141
                        PdfReader reader = new PdfReader(bytesPDF);
142
            Document documento = new Document(reader.getPageSizeWithRotation(1));
143
            PdfCopy copy = new PdfCopy(documento, new FileOutputStream(destinoArquivo));
144
            documento.open();
145
            PdfImportedPage page = copy.getImportedPage(reader, 1);
146
            copy.addPage(page);
147
            documento.close();
148
            copy.close();
149
                } catch (Exception e) {
150
                        e.printStackTrace();
151
                }
152
        }
153
 
154
        public static void separarSalvandoArquivoPDF(String caminhoArquivo) {
155
                try {
156
            PdfReader reader = new PdfReader(caminhoArquivo);
157
            int n = reader.getNumberOfPages();
158
            int i = 0;
159
            while (i < n) {
160
                String destinoArquivo = caminhoArquivo.substring(0, caminhoArquivo.indexOf(".pdf")) + "-" + String.format("%03d", i + 1) + ".pdf";
161
                Document document = new Document(reader.getPageSizeWithRotation(1));
162
                PdfCopy writer = new PdfCopy(document, new FileOutputStream(destinoArquivo));
163
                document.open();
164
                PdfImportedPage page = writer.getImportedPage(reader, ++i);
165
                writer.addPage(page);
166
                document.close();
167
                writer.close();
168
            }
169
        } catch (Exception e) {
170
            e.printStackTrace();
171
        }
172
        }
173
 
174
}