Pdf java

13 respostas
F

Caros,
Uma forma de ler pdf linha por linha com Java :?: Estou tentando PDFBox mas sem éxito, alguém poderia me ajudar :?:

13 Respostas

J

Cara tem esse tutorial aki >> http://www.flaviojmendes.com/blog/2012/02/27/lendo-e-escrevendo-arquivos-pdf-com-java/.

F

Cara infelizmente não resolve. Alguém sabe :?:

F

Então alguém sabe como posso detectar o fim de um PDF :?:

E

Você pode postar o PDF que está tentando extrair texto? Pode ser que você não consiga :frowning:

Um exemplo de PDF onde o texto não pode ser extraído é um PDF contendo um livro escaneado. Tais PDFs costumam ter apenas figuras, não texto aproveitável. (Se o PDF foi escaneado com o Adobe Acrobat ou o ABBYY pode ser que tenha sido usada a opção de OCR, mas mesmo assim o texto pode não ser aproveitável.)

E

http://pdfbox.apache.org/apidocs/org/apache/pdfbox/util/PDFTextStripper.html

F

Essa PDFTextStripper me permite ler linha por linha, que nem a classe ReadBuffered :?:

E

Boa pergunta. Leia a documentação :slight_smile:

F

entanglement:
Você pode postar o PDF que está tentando extrair texto? Pode ser que você não consiga :frowning:

Um exemplo de PDF onde o texto não pode ser extraído é um PDF contendo um livro escaneado. Tais PDFs costumam ter apenas figuras, não texto aproveitável. (Se o PDF foi escaneado com o Adobe Acrobat ou o ABBYY pode ser que tenha sido usada a opção de OCR, mas mesmo assim o texto pode não ser aproveitável.)

PDFBox:

How come I am not getting any text from the PDF document?

Text extraction from a pdf document is a complicated task and there are many factors involved that effect the possibility and accuracy of text extraction. It would be helpful to the PDFBox team if you could try a couple things.

    Open the PDF in Acrobat and try to extract text from there. If Acrobat can extract text then PDFBox should be able to as well and it is a bug if it cannot. If Acrobat cannot extract text then PDFBox 'probably' cannot either.
    It might really be an image instead of text. Some PDF documents are just images that have been scanned in. You can tell by using the selection tool in Acrobat, if you can't select any text then it is probably an image.

How come I am getting gibberish(G38G43G36G51G5) when extracting text?

This is because the characters in a PDF document can use a custom encoding instead of unicode or ASCII. When you see gibberish text then it probably means that a meaningless internal encoding is being used. The only way to access the text is to use OCR. This may be a future enhancement.

What does “java.io.IOException: Can’t handle font width” mean?

This probably means that the "Resources" directory is not in your classpath. The Resources directory is included in the PDFBox jar so this is only a problem if you are building PDFBox yourself and not using the binary.

Why do I get “You do not have permission to extract text” on some documents?

PDF documents have certain security permissions that can be applied to them and two passwords associated with them, a user password and a master password. If the "cannot extract text" permission bit is set then you need to decrypt the document with the master password in order to extract the text.

Can’t we just extract the text without parsing the whole document or extract text as it is parsed.

Not really, for a couple reasons.

    If the document is encrypted then you need to parse at least until the encryption dictionary before you can decrypt.
    Sometimes the PDFont contains vital information needed for text extraction.
    Text on a page does not have to be drawn in reading order. For example; if the page said "Hello World", the pdf could have been written such that "World" gets drawn and then the cursor moves to the left and the word "Hello" is drawn.


Valeu pela ajuda cara. É o seguinte
A página está aí e não é uma imagem. Tenho que ler uma lista de ramais. Meu código lê as informações de forma sequêncial o que atrapalha quando tenho que pular a página!!!



F

Esse código ler string por string, mas não é isso que quero

PdfReader reader = new PdfReader("2.pdf"); PdfDictionary page = reader.getPageN(1); PRIndirectReference objectReference = (PRIndirectReference) page.get(PdfName.CONTENTS); PRStream stream = (PRStream) PdfReader.getPdfObject(objectReference); byte[] streamBytes = PdfReader.getStreamBytes(stream); PRTokeniser tokenizer = new PRTokeniser(streamBytes); while (tokenizer.nextToken()) { if (tokenizer.getTokenType() == PRTokeniser.TK_STRING) { System.out.println(tokenizer.getStringValue()); } }
Quero ler linha por linha…A lib que tem essa classe é a Itext.2.0

E

Bote uma coisa na sua cabeça.
PDFs não são documentos como o Word, no sentido em que eles são separados por linhas.
Eles são a representação gráfica de um desenho que é mandado para uma impressora PostScript.
No caso em que há texto, o PDF basicamente é um conjunto de comandos que contém o texto e a posição onde ele é desenhado na impressora.
Portanto, ao interpretar um PDF, ele pode lhe apresentar os dados em virtualmente qualquer ordem.
Você ainda teve um pouco de sorte, já que isso é uma lista de ramais e provavelmente o programa que gerou esse PDF (você consegue anexar esse PDF aqui no post, ou é informação da sua empresa?) desenhou as strings mais ou menos na ordem em que você lê as coisas na tela. O programa poderia ter sido mais chato, por exemplo, e ter desenhado as strings por colunas, não por linhas.
Eu já vi alguns PDFs em que o texto era apresentado em uma espiral. O que é uma “linha” nesse caso?
(Pegue a página 317 (ou 324) deste PDF: http://www.math.washington.edu/~reu/docs/pstricks-doc.pdf ) e veja um texto em espiral em um PDF. )
Você vai ter de pular os cabeçalhos e rodapés e ignorá-los, já que o PDFBox, por exemplo, irá também lhe voltar os cabeçalhos.


E

A propósito, o Adobe Reader, para o texto acima, me voltou o texto em espiral ( que deveria ser 3,14159265358979323846264338327950288419716939937510582097494459230781640) como:

3,14
1
5
9
2
6 5
3 5 8 9 7 9 3 2 3 8 4 6 2 6 4 3 3 8 3 2 7 9 5 0 2 8 8 4 1 9 7 1 6 9 3 9 9 3 7 5 1 0 5 8 2 0 9 7 4 9 4 4 5 9 2 3 0 7 8 1 6 4 0

O que é estranho porque o texto foi gerado de uma só vez, não em várias linhas.

F

entanglement:
Bote uma coisa na sua cabeça.
PDFs não são documentos como o Word, no sentido em que eles são separados por linhas.
Eles são a representação gráfica de um desenho que é mandado para uma impressora PostScript.
No caso em que há texto, o PDF basicamente é um conjunto de comandos que contém o texto e a posição onde ele é desenhado na impressora.
Portanto, ao interpretar um PDF, ele pode lhe apresentar os dados em virtualmente qualquer ordem.
Você ainda teve um pouco de sorte, já que isso é uma lista de ramais e provavelmente o programa que gerou esse PDF (você consegue anexar esse PDF aqui no post, ou é informação da sua empresa?) desenhou as strings mais ou menos na ordem em que você lê as coisas na tela. O programa poderia ter sido mais chato, por exemplo, e ter desenhado as strings por colunas, não por linhas.
Eu já vi alguns PDFs em que o texto era apresentado em uma espiral. O que é uma “linha” nesse caso?
(Pegue a página 317 (ou 324) deste PDF: http://www.math.washington.edu/~reu/docs/pstricks-doc.pdf ) e veja um texto em espiral em um PDF. )
Você vai ter de pular os cabeçalhos e rodapés e ignorá-los, já que o PDFBox, por exemplo, irá também lhe voltar os cabeçalhos.

Blz, mas então o código faz muito bem o trabalho, pois consegue ler na sequência de tudo que encontrar no que refere a texto. Tem como ignorar o cabeçalho e o radapé?

E

Parece que o PDFTextStripper permite que você estipule a área onde o desenho vai ser feito, e ignore tudo que for desenhado fora dessa área. No seu caso, você pode estipular uma área que exclua as margens, e portanto remova o cabeçalho e o rodapé.
Para achar essa área, provavelmente você vai ter de pegar uma régua e ver quantos centímetros você tem de descontar de cada lado :slight_smile:

Criado 8 de setembro de 2012
Ultima resposta 5 de dez. de 2012
Respostas 13
Participantes 3