Handlebars загрузка изображений в формате png - PullRequest
0 голосов
/ 25 марта 2020

Я создаю отчет в формате PDF с рулем и кукловодом, чтобы сохранить его в моей БД. PDF отлично работает, за исключением того, что я не могу получить изображения, которые я сохранил в каталоге ресурсов для загрузки. Я консоль, регистрирующая filePath, к которому я обращаюсь, когда пытаюсь получить изображения, и они проходят соответственно. Просто не знаю, почему изображения не загружаются, любая помощь приветствуется.

Вот мой код.

const puppeteer = require("puppeteer");
const hbs = require("handlebars");
const fs = require("fs-extra");
const path = require("path");

// compiles the handlebars docs
const compile = async (templateName, data) => {
  const filePath = path.join(__dirname, "templates", `${templateName}.hbs`);
  if (!filePath) {
    throw new Error(`Could not find ${templateName}.hbs in generatePDF`);
  }
  const html = await fs.readFile(filePath, "utf-8");
  return hbs.compile(html)(data);
};

// helper for getting the images
hbs.registerHelper("getIntro", (context, idx) => {
  const filePath = path.join(
    __dirname,
    "assets",
    `${context}_intro_${idx}.png`
  );
  return filePath;
});


// use puppeteer to take in compiled hbs doc and create a pdf
const generatePDF = async (fileName, data) => {
  const preparedData = prepareDataForPDF(data);
  const browser = await puppeteer.launch({
    args: ["--no-sandbox"],
    headless: true
  });
  const page = await browser.newPage();
  const content = await compile(fileName, preparedData);
  await page.goto(`data: text/html;charset=UTF-8, ${content}`, {
    waitUntil: "networkidle0"
  });
  await page.setContent(content);
  await page.emulateMedia("screen");
  await page.waitFor(100);

  const pdf = await page.pdf({
    format: "A4",
    printBackground: true
  });
  return pdf;
};

module.exports = generatePDF;
<!-- handlebars partial that handles image loading -->
    {{#loop 14}}
        <div class="page">
          <img src="{{getIntro assessmentType this}}" class="intro-page-content">
        </div>
    {{/loop}}

<!-- used like this in my main file -->
    {{> intro assessmentType="Leadership"}}
...