Фон
Я использую Puppeteer в экспресс-приложении, которое выполняется в образе Docker.Нам необходимо работать в Docker из-за необходимых зависимостей, в которых нуждается Debian, к которым у нас нет доступа для установки.Использование Docker позволяет нам устанавливать то, что нам нужно.
Мы видели, как у многих людей возникают проблемы с правильным отображением их шрифтов в PDF-файлах, и в каждом случае, который я видел, установка шрифта так близко к этому - всегда ответ,
apt-get install -yq --allow-unauthenticated ttf-mscorefonts-installer
В этом случае они устанавливают определенные шрифты, для которых есть apt-get
.Я видел, как другие устанавливали шрифты Puppeteer по умолчанию также с RUN apt-get install -yyq fonts-liberation
.
Пример кода
const browser = await puppeteer.launch({
args: ['--no-sandbox', '--disable-setuid-sandbox'],
ignoreHTTPSErrors: true,
dumpio: false,
});
const page = await browser.newPage();
await page.goto(
`http://localhost:3000/${template}?data=${JSON.stringify(req.body)}`,
);
const pdfBuffer = await page.pdf({
format: 'A4',
margin: {
top: '20px',
left: '20px',
right: '20px',
bottom: '20px',
},
});
await browser.close();
Проблема
Нам нужно установить около 10 шрифтов, которые различные части приложения будут использовать в разных случаях.Для этого у нас есть файлы ttf
и woff
.Мы решили добавить их в систему так, как это делает apt-get
с другими установленными нами шрифтами.Мы сделали это, добавив наши шрифты в каталог Debian,
/ usr / local / share / fonts
Мы видим, что шрифты правильно настроены в системе с помощьюrunning,
fc-list
Когда мы добавляем подобные шрифты, они не отображаются.Вместо этого мы получаем странные символы, где эти шрифты должны быть.
Пример
Мы добавляем наши шрифты вот так, используя Dockerfile,
RUN apt-get install -yyq fonts-liberation
COPY /fonts/*.ttf /usr/local/share/fonts/
COPY /fonts/*.woff /usr/local/share/fonts/
Вопрос
Так как у нас есть куча файлов шрифтов ttf
и woff
, которые необходимо визуализировать в PDF-файлах с помощью Puppeteer, как правильно добавить их в наш образ Debian, работающий в Docker, чтобы Puppeteer использовал ихкак и ожидалось?