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();
}
}
}