ruby-on-rails - 如何在 Rails 4 中将 PDF 转换为 Excel 或 CSV

标签 ruby-on-rails ruby api csv pdf

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

我也不确定这里是否是问这个问题的最佳地点。

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

更多信息: 用户通过表单上传 PDF,然后我需要抓取 PDF 将其解析为 CSV 并阅读内容。我尝试使用 PDF Reader Gem 阅读内容,但结果并不乐观。

我用过:freepdfconvert.com/pdf-excel不幸的是不提供 API。 (我联系过他们)

示例 PDF

enter image description here

这段代码将 PDF 转换为文本,非常方便。 gem :pdf阅读器

 def self.parse
    reader = PDF::Reader.new("pdf_uploaded_by_user.pdf")
    reader.pages.each do |page|
      puts page.text
    end
  end

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

谢谢。

最佳答案

好的,经过大量研究后,我找不到 API,甚至找不到合适的软件来执行此操作。这是我是如何做到的。

我首先使用此 API 将 PDF 中的表格提取到表格中 pdftables .它很便宜。

然后我将 HTML 表格转换为 CSV。

(这并不理想,但它有效)

代码如下:

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

现在像这样运行它:

#> page = PageTextReceiver.new
#> page.run
#> page.convert

它没有被重构。只是概念证明。你需要考虑性能。

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

关于ruby-on-rails - 如何在 Rails 4 中将 PDF 转换为 Excel 或 CSV,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30183738/

相关文章:

ruby - 如何模拟 Fixnum 变量的整数溢出?

ruby-on-rails - 遍历对象数组并返回属性

ruby-on-rails - 如何更改 Controller /:id to controller/:name in Rails 3? 的 Rails 路由

ruby-on-rails - RESTful 网站与 RESTful API - 有什么区别,重要吗?

ruby - 精简读取已配置的用户环境

ruby-on-rails - Slim 中的 Ruby Each 循环

security - 保护移动设备的 Web API

php - 谷歌图表 API 数据

django - Django REST Framework 中的分页关系?

javascript - 目录 : Accept File Upload and Copy&Paste Upload