您好我正在尝试在Ruby中阅读pdf,首先我要将其转换为txt。 path
是PDF的路径,重点是我得到一个.txt文件为空,有人告诉我这是一个pdftotext问题,但我不知道如何解决它。
spec = path.sub(/\.pdf$/, '')
`pdftotext #{spec}.pdf`
file = File.new("#{spec}.txt", "w+")
text = []
file.readlines.each do |l|
if l.length > 0
text << l
Rails.logger.info l
end
end
file.close
我的代码出了什么问题?谢谢!
答案 0 :(得分:2)
无法从 每个 PDF中提取文字。某些PDF文件使用字体编码,因此无法使用pdftotext
等简单工具提取文本(某些PDF文件甚至完全不受 我知道的任何 工具 - 在这些情况下,您必须首先应用OCR才有机会提取文本......)。
因此,如果您一直使用相同的“奇怪”PDF文件测试代码,很可能会因为您对代码感到沮丧,而实际上错误在于PDF。
首先确保pdftotxt
的命令行用法与给定的PDF一致,然后使用该PDF测试(并进一步发展)您的代码。
答案 1 :(得分:1)
问题是你是在写(“w”)模式下打开文件,这会截断文件。您可以在http://ruby-doc.org/core-1.9.3/IO.html看到一个文件模式表及其含义。
尝试这样的事情,它使用pdftotext选项将文本发送到stdout以避免创建临时文件并使用块来获得更多惯用的ruby。
text = `pdftotext #{path} -`
text.split.select { |line|
line.length > 0
}.each { |line|
Rails.logger.info(line)
}
答案 2 :(得分:0)
您需要使用写入权限打开txt文件。
file = File.new("#{spec}.txt", "w")
您可以咨询How to create a file in Ruby
更新:您的代码不完整且看起来有问题。
path
file.readlines.each
length
您拥有l.lenght
您可能想要粘贴实际代码。
检查这个要点https://gist.github.com/4160587
如上所述,您的代码无法正常工作,因为您正在阅读和写入同一文件。
示例强>
Ruby代码file_write.rb
来执行文件写操作
pdf_file = File.open("in.txt")
output_file = File.open("out.txt", "w") # file to which you want to write
#iterate over input file and write the content to output file
pdf_file.readlines.each do |l|
output_file.puts(l)
end
output_file.close
pdf_file.close
示例txt文件in.txt
Some text in file
Another line of text
1. Line 1
2. Not really line 2
运行file_write.rb
后,您应该会看到名为out.txt的新文件,其内容与in.txt
相同。如果需要,您可以更改输入文件的内容。在您的情况下,您将使用pdf reader获取内容并将其写入文本文件。基本上代码的第一行会改变。