我搜索了很多。我别无选择,除非在这里问这个。你们知道有 API 或 Gem/s 可以将 PDF 转换为 Excel 或 CSV 文件的在线转换器吗?
我也不确定这里是否是问这个问题的最佳地点。
我的应用程序是在 Rails 4.2 中。 PDF 文件包含一个标题和一个包含大约 10 列的大表格。
更多信息: 用户通过表单上传 PDF,然后我需要抓取 PDF 将其解析为 CSV 并阅读内容。我尝试使用 PDF Reader Gem 阅读内容,但结果并不乐观。
我用过:freepdfconvert.com/pdf-excel不幸的是不提供 API。 (我联系过他们)
示例 PDF
这段代码将 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/