【问题标题】:How to convert PDF to Excel or CSV in Rails 4如何在 Rails 4 中将 PDF 转换为 Excel 或 CSV
【发布时间】:2023-03-27 07:23:02
【问题描述】:

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

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

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

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

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

示例 PDF

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

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

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

谢谢。

【问题讨论】:

  • 真的吗??为什么给它一个减分。我问了一个问题。你可以简单地说这不属于这里而不是给它一个减分>:(
  • 您是从您的程序生成 pdf 还是外部 pdf??
  • 刚刚更新了我的问题。谢谢

标签: ruby-on-rails ruby api csv pdf


【解决方案1】:

好的,经过大量研究,我找不到 API,甚至找不到合适的软件。这是我的做法。

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

然后我将 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 在后台运行它并将结果移动到主线程。

【讨论】:

  • 非常好的解决方案!!重构是如何结合在一起的?您能否改进解决方案?
  • 不抱歉,我交付了项目,然后继续前进。 pdftable API 自从我使用它以来得到了改进。祝你好运。客户一直在使用它,并且没有报告错误或崩溃。我用sidekiq Gem 只是让事情表现得更好。不过方法相同。
【解决方案2】:

检查Tabula-Extractor 项目,并检查它在NYPD Moving Summonses ParserCompStat criminal complaints parser 等项目中的使用情况。

【讨论】:

    【解决方案3】:

    Ryan Bates 在他的 rails casts 中介绍了 csv 导出 > http://railscasts.com/episodes/362-exporting-csv-and-excel 这可能会给你一些建议。

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

    extract text from pdf in 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 
    

    【讨论】:

    • 感谢您的回复。我看过这对这件事没有帮助。我的 PDF 需要读取然后转换为 CSV,Ryan 表示从原始数据转换为 CSV。
    • 你没有说你试过什么,所以我不知道那没有帮助。也许这就是您的问题被其他用户标记的原因。我已经用另一个资源编辑了我的答案,以展示您如何阅读 PDF 并填充导出数据 =) 我希望这会有所帮助
    • 好的,如果您查看我在脚本将其作为文本返回时附加的示例表,我将在最后得到一行 \n。当我将其转换为 CSV 时,我将在一行中获取所有字段,然后下一行将包含所有字段。我将生成它并现在将其放入问题中。
    猜你喜欢
    • 2023-01-24
    • 1970-01-01
    • 2018-07-17
    • 2012-04-24
    • 1970-01-01
    • 2011-08-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多