Ruby: Leitura de arquivos PDF
-
13-09-2019 - |
Pergunta
Eu estou procurando uma maneira rápida e confiável para ler / analisar arquivos PDF grandes em Ruby (em Linux e OSX).
Até agora eu encontrei a href="http://pdf-toolkit.rubyforge.org/" bastante antiga e simples PDF-toolkit (a pdftotext -wrapper) e PDF-reader , que era incapaz de ler a maioria dos meus arquivos. Embora as duas bibliotecas fornecer exatamente a funcionalidade que eu estava procurando.
A minha pergunta: eu perdi alguma coisa? Existe uma ferramenta que é mais adequado (mais rápido e mais confiável) para resolver o meu problema?
Solução
Você pode achar Docsplit útil:
Docsplit é um utilitário de linha de comando e biblioteca Ruby para dividir além de documentos em suas partes componentes: pesquisável UTF-8 texto simples, imagens de página ou miniaturas em qualquer formato, PDFs, páginas individuais, e metadados do documento (título, autor, número de páginas ...)
Outras dicas
Depois de tentar métodos diferentes, eu estou usando PDF-Toolkit agora. É bastante antiga, mas é rápido, estável e confiável. Além disso, ele realmente não precisa ser novo, porque só envolve o xpdf Utilitários .
Você pode usar JRuby e um analisador biblioteca PDF Java como ApachePDFBox ( https: //www.ohloh NET / p / pdfbox ). Veja também http://java-source.net/open-source/pdf-libraries .
Aqui estão algumas opções:
http://en.wikipedia.org/wiki/List_of_PDF_software
A partir desse link, e procurando sourceforge, há um par de utilitários de linha de comando que pode fazer o que quiser, como este: http://pdftohtml.sourceforge.net/
Dependendo de suas necessidades e quais os PDFs aparência, você pode olhar para usando a API do Google Docs (fazer o upload do PDF e depois baixá-lo como texto), ou também pode tentar algo como gocr . Eu tive muita sorte analisar o texto da imagem com gocr no passado, e você só tem que saltar para o shell de fazê-lo, como gocr -i whatever.pdf
(acho que trabalha com PDFs).
A desvantagem de tudo isso é que eles são implementações não puro-Ruby, mas lotes do bom (e gratuito) projectos de OCR parecem ser feito dessa forma.
Se você só precisa obter o conteúdo de texto de um arquivo pdf, pdftohtml no SourceForge é eficiente. não é adequado para lidar com imagens.
Você teve uma olhada na CombinePDF biblioteca?
É uma solução rubi puro que permite alguma manipulação PDF, como a extração páginas, sobrepondo uma página PDF em detrimento de outro, a numeração de página, escrevendo textos e tabelas básicas, etc'.
Aqui está um exemplo para stumping um arquivo PDF existente com um logotipo. O exemplo lê um arquivo PDF, extrai uma página para o uso como um selo e selos outro arquivo PDF.
require 'combine_pdf'
company_logo = CombinePDF.load("company_logo.pdf").pages[0]
pdf = CombinePDF.load "content_file.pdf"
pdf.pages.each {|page| page << company_logo}
pdf.save "content_with_logo.pdf"
Você pode texto também selo, páginas número ou use:
require 'combine_pdf'
pdf = CombinePDF.load "content_file.pdf"
pdf.number_pages #adds page numbers. you can add formatting and placement options.
pdf.pages.each {|page| page.textbox "One Way To Stamp"}
#you can a shortcut method to stamp pages
pdf.stamp_pages "Another way to stamp"
#you can use the shortcut method for both text and PDF stamps
company_logo = CombinePDF.load("company_logo.pdf").pages[0]
pdf.stamp_pages company_logo
# you can use write simple tables
pdf.pages[0].write_table headers: ['first name', 'surname'], table_data: [['John', 'Doe'], ['Mr.', 'Smith']]
pdf.save "content_with_logo.pdf"
Não é destinado a operações complexas, mas complementa a maioria das bibliotecas PDF autoria e permite que você use modelos PDF em vez de escrever a coisa toda do zero.