ruby-on-rails - 使用 Dragonfly 将 PDF 转换为 PNG

标签 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) 图像中间的一个小块。

最佳答案

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

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

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

关于ruby-on-rails - 使用 Dragonfly 将 PDF 转换为 PNG,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9977829/

相关文章:

ruby-on-rails - Rails 以单数形式命名 Controller 有什么缺点?

java - 分割 PDF 并在 PDF 文件中添加密码

pdf - Ghostscript Merge pdf 并从合并的文件创建目录页面

ruby-on-rails - 在 docker 的 ubuntu 镜像中运行网络服务器

ruby-on-rails - 在 Rails 中,如何计算集合中关联记录的数量?

Ruby: 未初始化常量 Log4r::DEBUG (NameError) 问题

mysql - 在存储数组的列中搜索

.net - 在服务器上生成 PDF 的最佳方法

ruby-on-rails - 有没有办法让 Resque 平均分配给定的工作?

ruby-on-rails - 验证电子邮件未通过Heroku/Mailgun发送