Erro ao converter PDF com PDFBox

1 resposta
eulen

Saudações galera do GUJ, estou com problemas ao realizar a extração de texto de alguns arquivos PDF. Estou obtendo a seguinte pilha:

Caused by: java.lang.NoSuchMethodError: org.apache.fontbox.cmap.CMap.lookup(II)Ljava/lang/String;
	at org.apache.pdfbox.pdmodel.font.PDFont.cmapEncoding(PDFont.java:449)
	at org.apache.pdfbox.pdmodel.font.PDFont.encode(PDFont.java:474)
	at org.apache.pdfbox.pdmodel.font.PDType0Font.encode(PDType0Font.java:178)
	at org.apache.pdfbox.util.PDFStreamEngine.processEncodedText(PDFStreamEngine.java:394)
	at org.apache.pdfbox.util.operator.ShowTextGlyph.process(ShowTextGlyph.java:62)
	at org.apache.pdfbox.util.PDFStreamEngine.processOperator(PDFStreamEngine.java:551)
	at org.apache.pdfbox.util.PDFStreamEngine.processSubStream(PDFStreamEngine.java:274)
	at org.apache.pdfbox.util.PDFStreamEngine.processSubStream(PDFStreamEngine.java:251)
	at org.apache.pdfbox.util.PDFStreamEngine.processStream(PDFStreamEngine.java:225)
	at org.apache.pdfbox.util.PDFTextStripper.processPage(PDFTextStripper.java:442)
	at org.apache.pdfbox.util.PDFTextStripper.processPages(PDFTextStripper.java:366)
	at org.apache.pdfbox.util.PDFTextStripper.writeText(PDFTextStripper.java:322)
	at br.jus.tjac.legis.util.LeitorPDF.lerPDF(LeitorPDF.java:21)
	at br.jus.tjac.legis.contoller.DocumentoController.tratarArquivo(DocumentoController.java:106)
	at br.jus.tjac.legis.contoller.DocumentoController.adicionar(DocumentoController.java:90)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
	at java.lang.reflect.Method.invoke(Unknown Source)
	at br.com.caelum.vraptor.interceptor.ExecuteMethodInterceptor.intercept(ExecuteMethodInterceptor.java:61)

A classe responsável pela extração é a seguinte:

package br.jus.tjac.legis.util;

import java.io.File;
import java.io.IOException;
import java.io.StringWriter;
import java.io.UnsupportedEncodingException;
import java.util.Properties;

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

public class LeitorPDF {
	public static String lerPDF(File file) throws IOException {
		PDDocument doc = null;
		StringWriter sw = new StringWriter();
		try{
			doc = PDDocument.load(file);
			PDFTextStripper stripper = new PDFTextStripper();
			stripper.setStartPage( 1 );
			stripper.setEndPage(Integer.MAX_VALUE);
			stripper.writeText(doc, sw);
			
		}finally {
			if (doc!=null)
				doc.close();
		}
		
		String texto=mudarEncoding(sw);
		return texto;
		
	}

	private static String mudarEncoding(StringWriter sw)
			throws UnsupportedEncodingException {
		String texto=sw.toString();
		byte[] textoUtf8=texto.getBytes("UTF8");
		String textoIso=new String(textoUtf8, "ISO-8859-1");
		return textoIso;
	}
}

O que pode estar acontecendo? Funciona na maioria dos arquivos, mas em alguns tenho o erro acima descrito. Por favor alguem me socorra. Forte abraço a todos.

1 Resposta

L

Pelo tipo do erro, parece ser alguma incompatibilidade de versão de suas bibliotecas. Ou falta alguma lib que forneça o org.apache.fontbox, ou a que você está usando não é a versão esperada pela PDFBox. Faz o download da versão mais nova de todas as libs e/ou verifica que a dependência da PDFBox seja da mesma versão que você está usando para prover org.apache.fontbox.

(Não conheço as libs, só estou dizendo o que conheço desse tipo de erros, que normalmente acontece quando você tem uma API dependendo de outra, e as versões estão incompatíveis)

Criado 31 de maio de 2011
Ultima resposta 31 de mai. de 2011
Respostas 1
Participantes 2