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();
}
}
}
}
}
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.
[code]
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();
}
}
}
}
}[/code]
não funcionou amigo ficou assim o codigo:
[code]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();
}
}
}
}
} [/code]
Obs: não está jogando a string do pdf no texto nem gerando um arquivo de texto para cada pdf.
Ele esta abrindo todos os arquivos porem não esta salvando cada arquivo em um .txt
Correção então:
// Seta o endereço do arquivo
pdf.setEnderecoRecurso(arq.getPath());
String retorno = pdf.getConteudo();
String arquivoTxt = arq.getPath()+".txt";