Skip to content

Support content: url() in <img> elements #31

@btertoolen

Description

@btertoolen

I ran into this issue trying to use plutobook. If I add base64 encoded image data using content: url() it does not get rendered. If I add it directly as a src for the image element it does get rendered. Looking through the documentation it seems like this is supposed to be supported, but I'm not 100% sure.

In the browser using the HTML both pages render the images correctly:
Image

But on the output PDF the first page is missing the gradient image:
Image

Here is a minimal example to reproduce:

#include <plutobook.hpp>

static const char kHTMLContent[] = R"HTML(
<!DOCTYPE html>
<html lang="la">
<head>
  <meta charset="UTF-8">
  <title>Magnum Scopulum Corallinum</title>
  <style>
    body { font-family: "Segoe UI", sans-serif; line-height: 1.6; margin: 40px auto; max-width: 800px; color: #222; }
    h1 { font-size: 2.5em; margin-bottom: 20px; }
    page { width: 210mm; height: 297mm; position: relative; background: white; display: block; margin: 0 auto; margin-bottom: 0.5cm; }
    img.gradient {
		 	content: url(data:image/jpeg;base64,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);
    }

  </style>
</head>
<body>
  <page>
  <img src="https://picsum.photos/id/128/800/400" alt="Magnum Scopulum Corallinum">
  <img class="gradient">
  </page>
  <page>
  <img src="https://picsum.photos/id/128/800/400" alt="Magnum Scopulum Corallinum">
  <img src="data:image/jpeg;base64,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">
  </page>
</body>
</html>
)HTML";

int main() {
  plutobook::Book book(plutobook::PageSize::A4, plutobook::PageMargins::None);
  book.loadHtml(kHTMLContent);
  book.writeToPdf("bug.pdf");
  return 0;
}

Metadata

Metadata

Assignees

No one assigned

    Labels

    documentationImprovements or additions to documentationquestionFurther information is requested

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions