Skip to content

Images fail to render in header/footer - Protocol error when using base64, normal <img> ignored #288

@p4s3r0

Description

@p4s3r0

Hi,

I’m unable to embed an image in the header/footer when generating a PDF with Grover in ruby on rails.

  1. Plain image <img src="img.jpg"> renders fine in the body, but is silently omitted from the header (even if the image is below 8kb).
header_html = "<h1>Test</h1><img src='https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcT7AvKmIcAF9QUdS96opCZooZxVua16crDwkg&s'>"
        
html = "<h1>test</h1>#{header_html}"
grover = Grover.new(html,
          :print_background => true,
          :display_header_footer => true,
          :wait_until => "networkidle0",
          :header_template => header_html,
          :margin => {
            :top => "3cm",
            :bottom => "3cm"
          })

pdf = grover.to_pdf
return send_data(pdf, :filename => "my_pdf_#{Time.now.to_i}.pdf", :type => "application/pdf", :disposition => "inline")

Result:

Image

  1. Base64‑encoded causes the entire Page.printToPDF call to fail with: Protocol error (Page.printToPDF): Printing failed.
base64_image = "data:image/jpg;base64,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"
header_html = "<h1>Test</h1><img alt='no-image' src='#{base64_image}'>"

html = "<h1>test</h1>#{header_html}"
grover = Grover.new(html,
          :print_background => true,
          :display_header_footer => true,
          :wait_until => "networkidle0",
          :header_template => header_html,
          :margin => {
            :top => "3cm",
            :bottom => "3cm"
          })

pdf = grover.to_pdf
return send_data(pdf, :filename => "my_pdf_#{Time.now.to_i}.pdf", :type => "application/pdf", :disposition => "inline")

Removing :header_template (so the PDF has no header) makes the PDF generation succeed again.

Am i doing something wrong, or could you tell me the current limitations Grover has when it comes to rendering images in header and footer templates?

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions