package br.com.centralit.citcorpore.util; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import org.apache.poi.hssf.extractor.ExcelExtractor; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.hwpf.HWPFDocument; import org.apache.poi.hwpf.extractor.WordExtractor; import org.apache.poi.xssf.extractor.XSSFExcelExtractor; import org.apache.poi.xssf.usermodel.XSSFWorkbook; import org.apache.poi.xwpf.extractor.XWPFWordExtractor; import org.apache.poi.xwpf.usermodel.XWPFDocument; import org.pdfbox.cos.COSDocument; import org.pdfbox.pdfparser.PDFParser; import org.pdfbox.pdmodel.PDDocument; import org.pdfbox.util.PDFTextStripper; import br.com.centralit.citcorpore.bean.UploadDTO; import br.com.centralit.citged.bean.ControleGEDDTO; import br.com.citframework.util.Constantes; import br.com.citframework.util.UtilStrings; /** * Precisei criar esta classe, para utilizar este c�digo tanto na indexa��o Lucene como na tela Base de Conhecimento... * @author euler.ramos * */ public class Arquivo { private String link; private String nome; private String extensao; private String conteudo; public Arquivo(ControleGEDDTO controleGEDDTO) { super(); this.nome = controleGEDDTO.getNomeArquivo(); this.extensao = controleGEDDTO.getExtensaoArquivo(); try { this.link = this.getFromGed(controleGEDDTO); } catch (Exception e) { e.printStackTrace(); } this.conteudo = this.buscaConteudo(); } public Arquivo() { } public String getLink() { return link; } public String getNome() { return nome; } public String getExtensao() { return extensao; } public String getConteudo() { return conteudo; } private String buscaConteudo(){ if (this.link!=null){ StringBuilder textoDocumento = new StringBuilder(); String[] arrayMicrosoftWord; File arquivo = new File(this.link); if (arquivo.exists()) { if (this.getExtensao().equals("pdf")) { try { textoDocumento.append(this.extrairFormatoPDF(this.link)); } catch (IOException e) { e.printStackTrace(); } } else if (this.getExtensao().equals("doc")) { arrayMicrosoftWord = this .extrairFormatoMicrosoftWord(this.link); for (int i = 0; i < arrayMicrosoftWord.length; i++) { textoDocumento.append(arrayMicrosoftWord[i]); } } else if (this.getExtensao().equals("docx")) { textoDocumento.append(this.extrairFormatoDOCX(this.link)); } else if (this.getExtensao().equals("xls")) { textoDocumento.append(this.extrairFormatoXLS(this.link)); } else if (this.getExtensao().equals("xlsx")) { textoDocumento.append(this.extrairFormatoXLSX(this.link)); } else if (this.getExtensao().equals("txt")) { textoDocumento.append(extrairFormatoTxt(this.link)); } } return textoDocumento.toString(); } else { return ""; } } /** * Extrai o texto nos formatos suportados pelo Microsoft Word. Na necessidade presente só será necessários os formatos DOC e DOCX. * * @param caminhoDocumento * @param nomeArquivo * @return String */ private String[] extrairFormatoMicrosoftWord(String caminhoDocumento) { File file = null; FileInputStream fis = null; WordExtractor extractor = null; String[] fileData = null; try { file = new File(caminhoDocumento); fis = new FileInputStream(file.getAbsolutePath()); HWPFDocument document = new HWPFDocument(fis); extractor = new WordExtractor(document); fileData = extractor.getParagraphText(); } catch (Exception ex) { ex.printStackTrace(); } finally { try { if(fis != null) fis.close(); if(extractor != null) extractor.close(); } catch (IOException e) { e.printStackTrace(); } } return fileData; } /** * Extrai texto dos documentos do formato .docx * * @param caminhoDocumento * @return StringBuilder * @author Vadoilo Damasceno */ private StringBuilder extrairFormatoDOCX(String caminhoDocumento) { File file = null; FileInputStream fis = null; XWPFWordExtractor extractor = null; StringBuilder texto = new StringBuilder(); try { file = new File(caminhoDocumento); fis = new FileInputStream(file.getAbsolutePath()); XWPFDocument document = new XWPFDocument(fis); extractor = new XWPFWordExtractor(document); texto.append(extractor.getText()); } catch (Exception ex) { ex.printStackTrace(); } finally { try { if(fis != null) fis.close(); if(extractor != null) extractor.close(); } catch (IOException e) { e.printStackTrace(); } } return texto; } /** * Extrai texto de documentos no formato .xlsx * * @param caminhoDocumento * @return StringBuilder * @author Vadoilo Damasceno */ private StringBuilder extrairFormatoXLSX(String caminhoDocumento) { StringBuilder texto = new StringBuilder(); FileInputStream fileInputStream = null; XSSFExcelExtractor extractor = null; try { File file = new File(caminhoDocumento); fileInputStream = new FileInputStream(file.getAbsolutePath()); XSSFWorkbook document = new XSSFWorkbook(fileInputStream); extractor = new XSSFExcelExtractor(document); extractor.setFormulasNotResults(true); extractor.setIncludeSheetNames(true); texto.append(extractor.getText()); } catch (Exception ex) { ex.printStackTrace(); } finally { try { if(fileInputStream != null) fileInputStream.close(); if(extractor != null) extractor.close(); } catch (IOException e) { e.printStackTrace(); } } return texto; } /** * Extrai texto de documentos no formato .xls * * @param caminhoDocumento * @return StringBuilder * @author Vadoilo Damasceno */ private StringBuilder extrairFormatoXLS(String caminhoDocumento) { StringBuilder texto = new StringBuilder(); FileInputStream fileInputStream = null; ExcelExtractor extractor = null; try { File file = new File(caminhoDocumento); fileInputStream = new FileInputStream(file.getAbsolutePath()); HSSFWorkbook document = new HSSFWorkbook(fileInputStream); extractor = new ExcelExtractor(document); extractor.setFormulasNotResults(true); extractor.setIncludeSheetNames(true); texto.append(extractor.getText()); } catch (Exception ex) { ex.printStackTrace(); } finally { try { if(fileInputStream != null) fileInputStream.close(); if(extractor != null) extractor.close(); } catch (IOException e) { e.printStackTrace(); } } return texto; } /** * Extrai o texto de um documento no formato PDF. * * @param caminhoDocumento * @param nomeArquivo * @return StringBuilder * @throws IOException */ private StringBuilder extrairFormatoPDF(String caminhoDocumento) throws IOException { StringBuilder texto = new StringBuilder(); PDFParser parser; FileInputStream fi = null; COSDocument cd = null; try { fi = new FileInputStream(new File(caminhoDocumento)); parser = new PDFParser(fi); parser.parse(); cd = parser.getDocument(); texto.append(new PDFTextStripper().getText(new PDDocument(cd))); } catch (FileNotFoundException e1) { e1.printStackTrace(); } catch (IOException e1) { e1.printStackTrace(); } finally { if(cd != null) cd.close(); if(fi != null) fi.close(); } return texto; } /** * Extrai o texto de um arquivo no formato txt. * * @param caminhoDocumento * @param nomeArquivo * @return StringBuilder */ private StringBuilder extrairFormatoTxt(String caminhoDocumento) { File file = null; FileInputStream fis = null; StringBuilder texto = new StringBuilder(""); try { file = new File(caminhoDocumento); fis = new FileInputStream(file); int ln; while ((ln = fis.read()) != -1) { texto.append((char) ln); } } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally { try { if(fis != null) fis.close(); } catch (IOException e) { e.printStackTrace(); } } return texto; } /** * Retorna Link do arquivo Decriptografado do GED. * * @param idControleGed * @return * @throws Exception */ public String getFromGed(ControleGEDDTO controleGEDDTO) throws Exception { Integer idEmpresa = 1; String pasta = ""; if (controleGEDDTO != null) { pasta = controleGEDDTO.getPasta(); } String PRONTUARIO_GED_DIRETORIO = ParametroUtil.getValorParametroCitSmartHashMap(Enumerados.ParametroSistema.GedDiretorio, "/usr/local/gedCitsmart/"); if (PRONTUARIO_GED_DIRETORIO == null || PRONTUARIO_GED_DIRETORIO.trim().equalsIgnoreCase("")) { PRONTUARIO_GED_DIRETORIO = ""; } if (PRONTUARIO_GED_DIRETORIO.equalsIgnoreCase("")) { PRONTUARIO_GED_DIRETORIO = Constantes.getValue("DIRETORIO_GED"); } if (PRONTUARIO_GED_DIRETORIO == null || PRONTUARIO_GED_DIRETORIO.equalsIgnoreCase("")) { PRONTUARIO_GED_DIRETORIO = "/ged"; } String PRONTUARIO_GED_INTERNO = ParametroUtil.getValorParametroCitSmartHashMap(Enumerados.ParametroSistema.GedInterno, "S"); if (PRONTUARIO_GED_INTERNO == null) { PRONTUARIO_GED_INTERNO = "S"; } String prontuarioGedInternoBancoDados = ParametroUtil.getValorParametroCitSmartHashMap(Enumerados.ParametroSistema.GedInternoBD, "N"); if (!UtilStrings.isNotVazio(prontuarioGedInternoBancoDados)) prontuarioGedInternoBancoDados = "N"; if (PRONTUARIO_GED_INTERNO.equalsIgnoreCase("S")) { String fileRec = CITCorporeUtil.CAMINHO_REAL_APP + "tempUpload/REC_FROM_GED_" + controleGEDDTO.getIdControleGED() + "." + controleGEDDTO.getExtensaoArquivo(); File arquivo = new File(PRONTUARIO_GED_DIRETORIO + "/" + idEmpresa + "/" + pasta + "/" + controleGEDDTO.getIdControleGED() + ".ged"); if (arquivo.exists()){ CriptoUtils.decryptFile(PRONTUARIO_GED_DIRETORIO + "/" + idEmpresa + "/" + pasta + "/" + controleGEDDTO.getIdControleGED() + ".ged", fileRec, System.getProperties().get("user.dir") + Constantes.getValue("CAMINHO_CHAVE_PRIVADA")); } else { System.out.println("Arquivo : "+arquivo.getPath()+" N�o Encontrado!"); } return fileRec; } return null; } public static boolean verificaSeArquivoExiste(String caminhoDocumento){ File arquivo = null; try { arquivo = new File(caminhoDocumento); return arquivo.exists(); } catch (Exception e) {} return false; } public static String getDirUploadImagem(UploadDTO uploadDTO){ return "../../tempUpload/" + uploadDTO.getNameFile(); } }