API pra ler PDF

10 respostas
R

Senhores,

preciso ler um arquivo .pdf e salvar informações no banco,dei uma pesquisada e achei essa ferramenta http://pdfbox.apache.org/,mas ainda não testei,alguém que já tenha feito isso poderia me dar uma opinião?

10 Respostas

pedruhenrik

utilizei o pdfbox sem problemas em uma aplicação desktop.

o detalhe detalhe q eu tive os pdfs tem q ter algum tipo de padrão de layout.

no restante sem problemas.

att,

R

pedruhenrik:
utilizei o pdfbox sem problemas em uma aplicação desktop.

o detalhe detalhe q eu tive os pdfs tem q ter algum tipo de padrão de layout.

no restante sem problemas.

att,

Fala Pedro,vc teria algum exemplo que eu pudesse ver?

Victor_Neves

Existe tambem o iText (http://itextpdf.com/), é uma ferramenta para gerar PDF, mas lê também, eu acho… tenho quase certeza que lê.

eu prefiro as versoes 2.1.x, nao gosto das versoes 5.x

pedruhenrik

tem exemplos melhores no guj, mas segue um ai:

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) throws IOException {

		PdfParser pdf = new PdfParser();
		pdf.setEnderecoRecurso("c:\\spedfiscal2.pdf");
		
		String retorno = pdf.getConteudo();

		FileWriter x = new FileWriter("c:\\teste.txt", false);
		x.write(retorno);
		x.close();
		
		
		FileInputStream stream = new FileInputStream("c:\\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);
		
	}

	private String enderecoRecurso;

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

	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;
		} 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;
		} finally {
			if (pdfDocument != null) {
				try {
					pdfDocument.close();
				} catch (IOException e) {
					return "ERRO: Não foi possível fechar o PDF." + e;
				}
			}
		}
	}
}

att,

Marcos_Perboni

Mas pedruhenrik você sabe me dizer se tem como eu mudar as propriedades com essa API?

Ex:. eu tenho um arquivo .doc e estou convertendo para PDF, e eu queria que quando fizesse a conversão o usuário teria a permissão de somente visualizar, a opção de salver e imprimir tem que estar bloqueada.

pedruhenrik

marcosvperboni realmente não sei.

rsrs

boa sorte!

vielmateus

Boa tarde,

Estou usando este código, porém quando na linha 17 passo um diretório em que o arquivo PDF contenha mais do que uma página
acontece o IOException. Este acontece na Linha 37 parser.parse();

Alguém sabe o motivo?

pedruhenrik

o código eh exatamente igual?

posta a exception completa pf

att

Marcos_Perboni

pedruhenrik estou tentando inserir uma varial no rodapé do PDF, mas eu nem sei por onde comerçar… tipo assim quando alguém imprimir um documento em pdf no rodapé tem que aparecer assim: “Documento impresso: x vezes”, isso é por questão de controle de impressão, você poderia me ajudar por favor?.. ou me passar algum caminho das pedras para eu começar a minha pesquisa, pois eu ja procurei no google e não achei nada equivalente.

pedruhenrik

http://pdfbox.apache.org/


Features

PDF to text extraction
Merge PDF Documents
PDF Document Encryption/Decryption
Lucene Search Engine Integration
Fill in form data FDF and XFDF
Create a PDF from a text file
Create images from PDF pages
Print a PDF</blockquote>

nunca fiz isso antes! rsrs

mas eu tentaria:

[list]extrair o texto[/list]
[list]adicionar variavel[/list]
[list]gerar pdf novamente[/list]

att

Criado 23 de maio de 2011
Ultima resposta 18 de set. de 2012
Respostas 10
Participantes 5