如何将Rails ActiveStorage附件放入Prawn PDF中?

4

我多年来一直在使用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)

在处理这个问题时,我遇到了一些错误......目前页面在40000ms超时,无法查看其他潜在的错误。

有人已经将ActiveStorage图像嵌入到Prawn::Document中了吗?


文档中说,在调用 @user.avatar 后会发生重定向,也许这是超时问题的结果。不确定是否有效,但如果尝试使用下载链接语法:rails_blob_path(user.avatar)呢? - oneWorkingHeadphone
2个回答

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) - hellion

0
获取URL的代码如下:
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参数,但没有改变任何东西。 - Tintin81
1
我记得好像见过类似的东西...但是,自从上次处理这个问题以来已经有一段时间了。我刚刚查看了我的代码,发现我成功地使用了"user.avatar.variant(resize: "100x100").service_url"。如果我想起来有相关解决你评论的信息,我会再次发布的。 - hellion
那太好了,谢谢!我想知道你是否使用过这里描述的任何 黑客技巧 - Tintin81

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接