首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Rails 4中将PDF转换为Excel或CSV

如何在Rails 4中将PDF转换为Excel或CSV
EN

Stack Overflow用户
提问于 2015-05-12 06:50:42
回答 3查看 4.5K关注 0票数 3

我找了很多东西。我别无选择,除非在这里问这个。你们知道一个在线转换器,它有API或Gem/s,可以将PDF转换成Excel或CSV文件吗?

我也不确定这里是不是问这个的最好的地方。

我的应用程序在Rails 4.2中。PDF文件包含一个头部和一个包含大约10列的大表。

更多信息:用户通过表单上传PDF,然后我需要抓取PDF解析到CSV并读取内容。我试着用阅读内容,但是结果并不是很有希望。

我使用了:freepdfconvert.com/pdf-excel,不幸的是,没有提供API。(我已经联系过他们)

样本PDF

这段代码将PDF转换成文本,这很方便。Gem:pdf-reader

代码语言:javascript
复制
 def self.parse
    reader = PDF::Reader.new("pdf_uploaded_by_user.pdf")
    reader.pages.each do |page|
      puts page.text
    end
  end

现在,如果您检查附带的PDF示例,您将看到一些字段可能是空的,这意味着我不能用空格拆分文本行并将其放入数组中,因为我无法将数组映射到正确的字段。

谢谢。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-05-13 01:28:40

好吧,经过大量的研究,我找不到一个API,甚至一个合适的软件来完成它。我是怎么做到的。

我首先使用这个API pdftables将表从PDF中提取到表中。它很便宜。

然后将HTML表转换为CSV。

(这并不理想,但有效)

以下是代码:

代码语言:javascript
复制
require 'httmultiparty'
class PageTextReceiver
  include HTTMultiParty
  base_uri 'http://localhost:3000'

  def run
    response = PageTextReceiver.post('https://pdftables.com/api?key=myapikey', :query => { f: File.new("/path/to/pdf/uploaded_pdf.pdf", "r") })

    File.open('/path/to/save/as/html/response.html', 'w') do |f|
      f.puts response
    end
  end

  def convert
    f = File.open("/path/to/saved/html/response.html")
    doc = Nokogiri::HTML(f)
    csv = CSV.open("path/to/csv/t.csv", 'w',{:col_sep => ",", :quote_char => '\'', :force_quotes => true})
    doc.xpath('//table/tr').each do |row|
      tarray = []
      row.xpath('td').each do |cell|
        tarray << cell.text
      end
      csv << tarray
    end
    csv.close
  end
end

现在像这样运行它:

代码语言:javascript
复制
#> page = PageTextReceiver.new
#> page.run
#> page.convert

这不是被重构的。只是概念的证明。你需要考虑性能。

我可以使用gem Sidekiq在后台运行它,并将结果移动到主线程。

票数 4
EN

Stack Overflow用户

发布于 2015-05-13 17:57:12

检查塔布拉-萃取器项目,并检查如何在纽约警察移动传票分析器CompStat刑事投诉解析器这样的项目中使用它。

票数 2
EN

Stack Overflow用户

发布于 2015-05-12 06:57:06

Ryan在rails中介绍csv导出> http://railscasts.com/episodes/362-exporting-csv-and-excel,这可能会给您提供一些提示。

编辑:正如您现在提到的,您需要从上传的PDF中获取原始数据,您可以使用JavaScript读取PDF文件,并将数据填充到Ryan的导出方法中。阅读PDF的内容在以下问题中得到了很好的介绍:

从Javascript中的pdf中提取文本

我会想象这样的流动:

代码语言:javascript
复制
PDF new action
    user uploads PDF 

PDF show action
    PDF is displayed
    JavaScript reads PDF
    JavaScript populates Ryan's raw data
    Raw data is exported with PDF data included 
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30183738

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档