【问题标题】:Why my image doesn't load when using wicked_pdf_image_tag?为什么使用 wicked_pdf_image_tag 时我的图像无法加载?
【发布时间】:2021-11-11 18:38:55
【问题描述】:

我正在创建一项服务以在客户端 pdf 文件的顶部添加水印。当我将它添加到 pdf 源时,html 文本加载正常,但图像加载不正常(显示的是一个小方块)。

这是我的一些代码:

add_online_signature_to_partner_quote_pdf_service.rb:

class AddOnlineSignatureToPartnerQuotePdfService
  def initialize(quote)
    @quote = quote
  end

  def call
    pdf = CombinePDF.new

    source = CombinePDF.parse(@quote.document.download, { allow_optional_content: true })
    signature = CombinePDF.parse(generate_signature(@quote))

    pdf << source
    pdf << signature

    update_quote_with_signature(@quote, pdf)
  end

  private

  def generate_signature(quote)
    project = quote.project

    ac = ApplicationController.new

    pdf = WickedPdf.new.pdf_from_string(
      ac.render_to_string(
        template: "advanced_admin/quotes/form/_partner_quote_signature.pdf.erb",
        layout: "pdf.html",
        locals: { quote: quote, project: project, pdf: true }
      )
    )
  end

  def update_quote_with_signature(quote, pdf)
    quote.document.attach(
      io: StringIO.new(pdf.to_pdf),
      filename: "quote_complete.pdf",
      content_type: "application/pdf"
    )
  end
end

_partner_quote_signature.pdf.erb:

<div>
  <h1>my title</h1>
  <%= wicked_pdf_image_tag "logo-blue.png" %>
  <p>my paragraph</p>
</div>

我想在我的 PDF 中生成的图像通常位于我的资产管道app/assets/images/logo-blue.png

我尝试了很多我在其他主题上看到的不同语法,但似乎没有任何效果......“wkhtmltopdf-binary”gem 版本是 0.12.6.5

您知道如何使我的代码正常工作吗?非常感谢!

【问题讨论】:

    标签: ruby-on-rails ruby pdf-generation wicked-pdf combine-pdf


    【解决方案1】:

    正如他们在documentation 中所说的:

    wkhtmltopdf 二进制文件在 Rails 应用程序之外运行;因此,您的正常布局将不起作用。如果您计划使用任何 CSS、JavaScript 或图像文件,则必须修改布局,以便提供对这些文件的绝对引用。没有资产管道的 Rails 的最佳选择是使用 wicked_pdf_stylesheet_link_tag、wicked_pdf_image_tag 和 wicked_pdf_javascript_include_tag 帮助程序,或者直接使用 jQuery 等流行库的 CDN(内容交付网络)。

    将 wicked_pdf_helpers 与资产管道一起使用会引发传递给助手的资产名称不应包含“/assets/”前缀。错误。要解决此问题,您可以将 wicked_pdf_asset_base64 与普通的 Rails 助手一起使用,但请注意,这将对您的内容进行 base64 编码并将其内联到页面中。这对于小型资产来说非常快,但大型资产可能需要很长时间。

    所以你可以这样做:

    <%= image_tag wicked_pdf_asset_base64("logo-blue.png"), height: 300 %>
    

    【讨论】:

    • 糟糕,我错过了那部分...非常感谢您的回答,它非常有效!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-02-19
    • 1970-01-01
    • 1970-01-01
    • 2023-03-16
    • 1970-01-01
    • 1970-01-01
    • 2021-07-10
    相关资源
    最近更新 更多