使用Dragonfly将PDF转换为PNG

时间:2012-04-02 13:57:39

标签: ruby-on-rails ruby pdf imagemagick dragonfly-gem

我有一个Dragonfly处理器,它应该获取给定的PDF并返回文档第一页的PNG。

当我通过控制台运行此处理器时,我按预期返回PNG,但是,在Rails的上下文中,我将其作为PDF格式获取。

我的代码与此类似:

  def to_pdf_thumbnail(temp_object)
    tempfile = new_tempfile('png')
    args = "'#{temp_object.path}[0]' '#{tempfile.path}'"
    full_command = "convert #{args}"
    result = `#{full_command}`
    tempfile
  end

  def new_tempfile(ext=nil)
    tempfile = ext ? Tempfile.new(['dragonfly', ".#{ext}"]) : Tempfile.new('dragonfly')
    tempfile.binmode
    tempfile.close
    tempfile
  end

现在,tempfile肯定会创建一个.png文件,但转换生成一个PDF(从Rails 3中运行时)。

关于这个问题可能存在的任何想法?对内容类型感到困惑的是什么?

我应该补充说,这个和标准转换(asset.png.url)都会产生一个PDF,其中PDF内容是(A4)图像中间的一个小块。

3 个答案:

答案 0 :(得分:4)

我正在使用的方法是通过Dragonfly的ImageMagick插件中的thumb方法动态生成缩略图PNG:

<%= image_tag rails_model.file.thumb('100x100#', format: 'png', frame: 0).url %>

只要安装了Ghostscript,ImageMagick / Dragonfly就会尊重格式/框架(即PDF的页面)设置。如果file是图像而不是PDF,则会将其转换为PNG,并忽略帧编号(除非它是GIF)。

答案 1 :(得分:0)

试试这个

def to_pdf_thumbnail(temp_object)
  ret = ''
  tempfile = new_tempfile('png')
  system("convert",tmp_object.path[0],tmpfile.path)
  tempfile.open {|f| ret = f.read }
  ret
end

问题是你可能会把转换一个参数换成两个

答案 2 :(得分:0)

不转换依赖于扩展来确定类型?你确定临时文件有适当的扩展吗?