Ajuda para abrir varios arquivos pdf editaveis e jogar as string num txt

5 respostas
B

Pessoal oque tenho que fazer é o seguinte, tenho uma pasta predefina onde vão ser salvos diariamente varios pdfs editaveis , oque tenho que fazer é pegar o texto dos pdfs e jogar cada um em um notepad diferente, Consegui fazer usando a classe pdfparser porem só consigo se especificar qual é o arquivo e ele salva em um unico pdf, Gostaria que para cada arquivo que tivesse na pasta gera-se um novo documento do tipo txt. segue meu código!

package teste;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;

import org.apache.pdfbox.pdfparser.PDFParser;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.util.PDFTextStripper;


public class PdfParser {

public static void main(String[] args) {

PdfParser pdf = new PdfParser();
pdf.setEnderecoRecurso("C:\\NNpdf\\luuuuu0001(1).pdf");

String retorno = pdf.getConteudo();

FileWriter x;
try {
x = new FileWriter("C:\\NNpdf\\teste.txt", false);

x.write(retorno);
x.close();

FileInputStream stream = new FileInputStream("C:\\NNpdf\\teste.txt");

StringBuilder txt = new StringBuilder();
InputStreamReader streamReader = new InputStreamReader(stream);
BufferedReader reader = new BufferedReader(streamReader);
String line = null;

while ((line = reader.readLine()) != null) {

txt.append(line);
txt.append("\n");
if (line.contains(" ")) {
txt.append(line.replaceAll(" ", ";"));
txt.append("\n");
}
}

System.out.println(txt);


} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

}

private String enderecoRecurso;

public void setEnderecoRecurso(String enderecoRecurso) {
this.enderecoRecurso = enderecoRecurso; // endereço dos arquivos
}

public String getConteudo() {

File f = new File(this.enderecoRecurso);
FileInputStream is = null;
try {
is = new FileInputStream(f);
} catch (IOException e) {
System.out.println("ERRO: " + e.getMessage());
return null;
}

PDDocument pdfDocument = null;
try {
PDFParser parser = new PDFParser(is);
parser.parse();
pdfDocument = parser.getPDDocument();
PDFTextStripper stripper = new PDFTextStripper();
return stripper.getText(pdfDocument);
} catch (IOException e) {
return "ERRO: Não é possível abrir a stream" + e.getLocalizedMessage();
} catch (Throwable e) {
// Fazemos um catch, uma vez que precisamos de fechar o recurso
return "ERRO: Um erro ocorreu enquanto tentava obter o conteúdo do PDF "
+ e.getLocalizedMessage()+" Causa "+e.getCause();
} finally {
if (pdfDocument != null) {
try {
pdfDocument.close();
} catch (IOException e) {
return "ERRO: Não foi possível fechar o PDF. " + e.getLocalizedMessage()+" Causa "+e.getCause();
}
}
}
}
}

5 Respostas

lucasportela

Veja os comentários e vê se ajuda. Não testei e nem tentei compilar. Só tentei elaborar a lógica.
O melhor a fazer é dar uma estudada em Orientação ao Objeto. Seu programa está muito estruturado, tem método que lê arquivo e escreve outro arquivo ao mesmo tempo. Tente separar esses métodos.

public class PdfParser { 

	public static void main(String[] args) { 

		PdfParser pdf = new PdfParser(); 
		// diretório
		File dir = new File("C:\\NNpdf\\");
		// Lista os arquivos do diretório
		for(File arq : dir.listFiles()) {
			// Seta o endereço do arquivo
			pdf.setEnderecoRecurso(arq.getCanonicalPath());
			String retorno = pdf.getConteudo(); 
			/* 

			 * 
			 */ 
			FileWriter x; 
			try { 
				//Gera um novo arquivo txt, mantendo o nome do pdf para fazer referência do arquivo migrado
				String arquivoTxt = arq.getName()+".txt";
				x = new FileWriter(arquivoTxt, false); 

				x.write(retorno); 
				x.close(); 


				FileInputStream stream = new FileInputStream(arquivoTxt); 

				StringBuilder txt = new StringBuilder(); 
				InputStreamReader streamReader = new InputStreamReader(stream); 
				BufferedReader reader = new BufferedReader(streamReader); 
				String line = null; 

				while ((line = reader.readLine()) != null) { 

					txt.append(line); 
					txt.append("\n"); 
					if (line.contains(" ")) { 
						txt.append(line.replaceAll(" ", ";")); 
						txt.append("\n"); 
					} 
				} 

				System.out.println(txt); 
		}

		} catch (IOException e) { 
			// TODO Auto-generated catch block 
			e.printStackTrace(); 
		} 

	} 

	private String enderecoRecurso; 

	public void setEnderecoRecurso(String enderecoRecurso) { 
		this.enderecoRecurso = enderecoRecurso; // endereço dos arquivos 
	} 

	public String getConteudo() { 

		File f = new File(this.enderecoRecurso); 
		FileInputStream is = null; 
		try { 
			is = new FileInputStream(f); 
		} catch (IOException e) { 
			System.out.println("ERRO: " + e.getMessage()); 
			return null; 
		} 

		PDDocument pdfDocument = null; 
		try { 
			PDFParser parser = new PDFParser(is); 
			parser.parse(); 
			pdfDocument = parser.getPDDocument(); 
			PDFTextStripper stripper = new PDFTextStripper(); 
			return stripper.getText(pdfDocument); 
		} catch (IOException e) { 
			return "ERRO: Não é possível abrir a stream" + e.getLocalizedMessage(); 
		} catch (Throwable e) { 
			// Fazemos um catch, uma vez que precisamos de fechar o recurso 
			return "ERRO: Um erro ocorreu enquanto tentava obter o conteúdo do PDF " 
			+ e.getLocalizedMessage()+" Causa "+e.getCause(); 
		} finally { 
			if (pdfDocument != null) { 
				try { 
					pdfDocument.close(); 
				} catch (IOException e) { 
					return "ERRO: Não foi possível fechar o PDF. " + e.getLocalizedMessage()+" Causa "+e.getCause(); 
				} 
			} 
		} 
	} 
}
B

não funcionou amigo ficou assim o codigo:

package teste;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;

import org.apache.pdfbox.pdfparser.PDFParser;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.util.PDFTextStripper;

public class PdfParser {   
	  
    public static void main(String[] args) {   
  
        PdfParser pdf = new PdfParser();   
        // diretório  
        File dir = new File("C:\\NNpdf\\");  
        // Lista os arquivos do diretório  
        for(File arq : dir.listFiles()) {  
            // Seta o endereço do arquivo  
            try {
				pdf.setEnderecoRecurso(arq.getCanonicalPath());
			} catch (IOException e1) {
				// TODO Auto-generated catch block
				e1.printStackTrace();
			}  
            String retorno = pdf.getConteudo();   
            /*  
 
             *  
             */   
            FileWriter x;   
            try {   
                //Gera um novo arquivo txt, mantendo o nome do pdf para fazer referência do arquivo migrado  
                String arquivoTxt = arq.getName()+".txt";  
                x = new FileWriter(arquivoTxt, false);   
  
                x.write(retorno);   
                x.close();   
  
  
                FileInputStream stream = new FileInputStream(arquivoTxt);   
  
                StringBuilder txt = new StringBuilder();   
                InputStreamReader streamReader = new InputStreamReader(stream);   
                BufferedReader reader = new BufferedReader(streamReader);   
                String line = null;   
  
                while ((line = reader.readLine()) != null) {   
  
                    txt.append(line);   
                    txt.append("\n");   
                    if (line.contains(" ")) {   
                        txt.append(line.replaceAll(" ", ";"));   
                        txt.append("\n");   
                    }   
                }   
  
                System.out.println(txt);   
        }  
  
         catch (IOException e) {   
            // TODO Auto-generated catch block   
            e.printStackTrace();   
         }
        }
    }
  
    
  
    private String enderecoRecurso;   
  
    public void setEnderecoRecurso(String enderecoRecurso) {   
        this.enderecoRecurso = enderecoRecurso; // endereço dos arquivos   
    }   
  
    public String getConteudo() {   
  
        File f = new File(this.enderecoRecurso);   
        FileInputStream is = null;   
        try {   
            is = new FileInputStream(f);   
        } catch (IOException e) {   
            System.out.println("ERRO: " + e.getMessage());   
            return null;   
        }   
  
        PDDocument pdfDocument = null;   
        try {   
            PDFParser parser = new PDFParser(is);   
            parser.parse();   
            pdfDocument = parser.getPDDocument();   
            PDFTextStripper stripper = new PDFTextStripper();   
            return stripper.getText(pdfDocument);   
        } catch (IOException e) {   
            return "ERRO: Não é possível abrir a stream" + e.getLocalizedMessage();   
        } catch (Throwable e) {   
            // Fazemos um catch, uma vez que precisamos de fechar o recurso   
            return "ERRO: Um erro ocorreu enquanto tentava obter o conteúdo do PDF "   
            + e.getLocalizedMessage()+" Causa "+e.getCause();   
        } finally {   
            if (pdfDocument != null) {   
                try {   
                    pdfDocument.close();   
                } catch (IOException e) {   
                    return "ERRO: Não foi possível fechar o PDF. " + e.getLocalizedMessage()+" Causa "+e.getCause();   
                }   
            }   
        }   
    }   
}
B

Obs: não está jogando a string do pdf no texto nem gerando um arquivo de texto para cada pdf.

B

Ele esta abrindo todos os arquivos porem não esta salvando cada arquivo em um .txt

lucasportela

Correção então:

// Seta o endereço do arquivo  
pdf.setEnderecoRecurso(arq.getPath());  
String retorno = pdf.getConteudo();
String arquivoTxt = arq.getPath()+".txt";
Criado 16 de outubro de 2012
Ultima resposta 16 de out. de 2012
Respostas 5
Participantes 2