Jump to content
bushin

Extrair dados de um PDF

Recommended Posts

bushin

Boa noite,

ando à procura de uma livraria que possa usar gratuitamente para extrair dados/texto de um PDF, para poder carregar a BD com o dito texto.

Já googlei... e a informação que encontro é incompleta ou tem um mau feedback sobre a possível resolução!

Agradeço qualquer orientação que me possam dar.

Share this post


Link to post
Share on other sites
nelsonr

Boas,

nunca fiz nada do tipo.

Normalmente uso o PDFSharp para criar PDFs.

Lendo as FAQ's, tem isto:

Can I use PDFsharp to extract text from PDF?

This can be done at a low level. You can get at the characters in the order they are drawn - and most applications draw them from top-left to bottom-right. There are no high-level functions that return words, paragraphs, or whole pages.

É uma questão de experimentares

http://www.pdfsharp.net/Features.ashx

Edited by nelsonr

Share this post


Link to post
Share on other sites
bushin

Obrigado pela sugestão nelsonr,

acabei por optar pelo iText sharp. Nas pesquisas que fiz esta livraria resolvia o pretendido que era extrair parte do texto (ex. Nome, data, montante ... etc).

Este foi o metodo que usei:

public static string GetTextFromAllPages(String pdfPath)	
 {
	 PdfReader reader = new PdfReader(pdfPath);

	 RenderFilter[] filters = new RenderFilter[1];
	 LocationTextExtractionStrategy regionFilter = new LocationTextExtractionStrategy();
											 //Rectangle(float llx, float lly, float urx, float ury)
	 filters[0] = new RegionTextRenderFilter(new Rectangle(31, 15, 356, 1224));
	 FilteredTextRenderListener strategy = new FilteredTextRenderListener(regionFilter, filters);
	 String result = PdfTextExtractor.GetTextFromPage(reader, 1, strategy);

	 return result.ToString();
	 }

O problema é que extrai mais texto que o pretendido (retangulo grande de mais ...). Alguma sugestão para conseguir colocar as coordenadas correctas?

Obrigado ..

Share this post


Link to post
Share on other sites
bushin

Urgente alguém me consegue ajudar,

não consigo obter as coordenadas certas para extrair o texto que pretendo do pdf. Testei com a livraria comercial bytescout, usando a ferramenta que dispoibilizam para apanhar as coordenadas, consigo obter o texto que pretendo. Usando as mesmas coordenadas ou as apanhadas pela ferramenta "VeryPDF PDF Text Replacer" que são diferentes com iText sharp - não funciona.

A questão é, como saber a posição correcta do texto?

Obrigado,

bushin

Share this post


Link to post
Share on other sites
bruno1234

Há uns tempos precisei de indexar conteudos de ficheiros, entre eles pdf, para o Lucene e utilizei uma biblioteca que é o Tika.

O resultado na altura até foi bastante agradável.

Podes ver aqui uns exemplos: http://dovetailsoftware.com/clarify/kmiller/2010/07/02/using-the-tika-java-library-in-your-net-application-with-ikvm/

Está disponivel no nuget.


Matraquilhos para Android.

Gratuito na Play Store.

https://play.google.com/store/apps/details?id=pt.bca.matraquilhos

Share this post


Link to post
Share on other sites
bushin

Desculpa o feedback tardio bruno1234, o Tika não faz o que procuro.

A solução que consegui arranjar até ao momento foi usar a libraria iText. Extrair o texto todo e depois manipular o texto com "Substring", extraindo através da posição os caracteres pretendidos. Contudo não me parece ser a melhor abordagem.

Edited by bushin

Share this post


Link to post
Share on other sites
bushin

Não pretendo todo o texto, apenas parte. O objetivo é abrir faturas que estão em pdf e extrair o nome do cliente, valor pago etc.

A biblioteca obtém o texto em string mas isso já conseguia com PDFSharp, itext ...

Estive a pesquisar informação sobre a Tika e não consegui encontrar informação de como seleccionar só parte do texto sem recorrer a Substring. Penso que não é a melhor abordagem pois sendo as facturas dinamicas, esto é, poderam ter mais ou menos caracteres o que podera levar a uma extracção incorreta.

A biblioteca itext tem um metodo muito bom que é o Rectangle(float llx, float lly, float urx, float ury), permite extrair texto de uma determinada área recorrendo a coordenadas, o meu problema é saber na minha fatura quais são as respetivas coordenas.

Já testei com livrarias pagas, teem uma ferramenta que me permite obter essas coordenas (só funcionam para esta livraria) que depois posso usar no codigo de forma a extrair a zona do pdf pretendido.

PS:

O algoritmos que estou a usar no substring é: 1º pesquiso o campo que pretendo (Exemplo: Nome), devolve a posição, 2º Sabendo a posição, consigo prever o tamanho do campo (Nome: xxxx) para assim extrair "xxx".

Share this post


Link to post
Share on other sites
bushin

A minha ultima tentativa de extrair o pdf foi através de regular expression como descrevi no ultimo email. Tenho algumas coordenadas fixas, outras não. Ainda bem que colocas-te essa questão, faz -me muito mais sentido agora. Fizeste-me pensar melhor sobre a solução, Obrigado.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.