将PDF转换为.txt会给我一个空的.txt文件

时间:2012-11-28 08:57:44

标签: ruby pdf text

您好我正在尝试在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

我的代码出了什么问题?谢谢!

3 个答案:

答案 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


更新:您的代码不完整且看起来有问题。

  1. 不能说什么是path
  2. 您似乎正在尝试阅读要编写的文本文件file.readlines.each
  3. 拼写检查length您拥有l.lenght
  4. 您可能想要粘贴实际代码。


    检查这个要点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获取内容并将其写入文本文件。基本上代码的第一行会改变。