【问题标题】:how to put rails ActiveStorage attachment in a Prawn pdf?如何将 Rails ActiveStorage 附件放入 Prawn pdf 中?
【发布时间】:2018-02-01 01:30:40
【问题描述】:

我多年来一直在使用 Prawn。现在我已经切换到 ActiveStorage,情况发生了一些变化。我在 Prawn::Document 中使用 url_for 或 rails_blob_path 时遇到问题。我想我会在这里发帖,看看是否有人对如何使用 Rails ActiveStorage 在 Prawn::Document 中嵌入图像有一些见解。

我正在尝试在从控制器调用 Pdf 时将路径作为参数传递的方法...如下所示:

pdf = IdBadge.new(@user, avatar_path: url_for(@user.avatar))
send_data pdf.render, filename: 'IDBadge.pdf', type: 'application/pdf'

然后在我设置的大虾文档中

@avatar_path = options[:avatar_path]

然后,从我调用的 pdf 中的方法

image(open(@avatar_path), fit: [100, 100], position: :center)

我在尝试解决这个问题时遇到了一些错误...目前该页面在 40000 毫秒时超时,使我无法看到其他潜在错误。

是否有人在 Prawn::Document 中嵌入了 ActiveStorage 图像?

【问题讨论】:

  • 文档说在您调用@user.avatar 后会发生重定向,这可能是您的超时问题的结果。不知道这是否可行,但如果您尝试下载链接语法:rails_blob_path(user.avatar)

标签: ruby-on-rails-5 prawn rails-activestorage


【解决方案1】:

我今天为此苦苦挣扎,直到我偶然发现了这个 github 问题。 https://github.com/prawnpdf/prawn/issues/1111。在您刚刚放入的 generaterender 方法中:

pdf.image StringIO.open(@model.attachment.download)

如果你把生成方法放在模型中,那就是

pdf.image StringIO.open(attachment.download)

【讨论】:

  • 这也是我使用的方法。下载变体似乎会拉入原始完整大小的文件。你做过类似的事情吗?:pdf.image StringIO.open(attachment..variant(resize: [250,250]).processed.blob.download)
【解决方案2】:

获取网址如下所示:

user.avatar.variant(resize: "100x100").service_url

【讨论】:

  • 这在 Rails 5.2.2 中对我不起作用。它给了我一个错误:Missing host to link to! Please provide the :host parameter, set default_url_options[:host], or set :only_path to true。我尝试在任何地方(在配置文件等中)设置hostonly_path 参数,但这并没有改变任何东西。
  • 我似乎记得看到过类似的东西......但是,我已经有一段时间没有做这个了。我刚刚查看了我的代码,发现我成功使用了 user.avatar.variant(resize: "100x100").service_url。如果我记得与解决您的评论有关的任何事情,我会重新发布。
  • 那太好了,谢谢!我想知道您是否使用过hacks described here 中的任何一个?
猜你喜欢
  • 2018-02-02
  • 2011-06-29
  • 1970-01-01
  • 1970-01-01
  • 2019-04-23
  • 1970-01-01
  • 2016-01-01
  • 1970-01-01
  • 2019-02-18
相关资源
最近更新 更多