Wicked PDF — отображение шрифтовых значков в виде квадратного поля

Я использую wicked-pdf gem (v1.2.2) для создания отчета в формате PDF, который содержит значок шрифта awesome.

Я сохранил файл fontawesome по этому пути:

vendor/assets/fonts/fontawesome.css.erb

и соответствующие шрифты по этому пути:

vendor/assets/fonts/fontawesome/fa-brands-400.eot

Пример фрагмента из шрифтawesome.css.erb: (так называются шрифты)


/*!
 * Font Awesome Free 5.5.0 by @fontawesome - https://fontawesome.com
 * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)
 */

@font-face {
  font-family: 'Font Awesome 5 Brands';
  font-style: normal;
  font-weight: normal;
  src: url('<%= asset_path 'fontawesome/fa-brands-400.eot' %>');
  src: url('<%= asset_path 'fontawesome/fa-brands-400.eot' %>?#iefix') format("embedded-opentype"), url('<%= asset_path 'fontawesome/fa-brands-400.woff2' %>') format("woff2"), url('<%= asset_path 'fontawesome/fa-brands-400.woff' %>') format("woff"), url('<%= asset_path 'fontawesome/fa-brands-400.ttf' %>') format("truetype"), url('<%= asset_path 'fontawesome/fa-brands-400.svg#fontawesome' %>') format("svg"); }

I am using asset pipeline.

Я включил шрифт в макет отчета (report.html.erb), как показано ниже:

<%= stylesheet_link_tag wicked_pdf_asset_base64('fontawesome.css') %>

Когда я загружаю PDF в режиме отладки, я получаю только квадратные коробки и ничего не вижу в PDF.Wicked PDF — отображение шрифтовых значков в виде квадратного поля

Я сослался на этот вопрос: Шрифт Awesome не работает, значки отображаются в виде квадратов

и добавил ссылку CDN на fontawesome вместо локального файла. Работало только в режим отладки.

Когда я попробовал в режиме PDF, потребовалось много времени для загрузки, и, наконец, шрифт не отображался. Следовательно, это не решение для меня.

Ждем ваших отзывов. Спасибо


Изменения: I updated the fontawesome.css.erb with absolute reference to font file:
@font-face {
  font-family: 'Font Awesome 5 Free';
  font-style: normal;
  font-weight: 400;
  src: url('<%= ActionController::Base.helpers.wicked_pdf_asset_path('fontawesome/fa-brands-400.woff') %>');
}

В режиме отладки я получаю следующую ошибку в браузере Chrome.

Not allowed to load local resource: file:///home/Projects/my_app/vendor/assets/fonts/fontawesome/fa-brands-400.woff


Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
4
0
1 247
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Wickedpdf открывает html как локальный файл, поэтому все URL-адреса должны быть либо относительными к какой-либо временной папке, либо полными локальными путями к файлам (они генерируются помощниками Wicked PDF), либо абсолютными URL-адресами с хостами.

Ваш fontawesome.css содержит URL-адреса файлов шрифтов, которые по умолчанию не содержат host. Вы можете либо создать отдельную версию для генерации pdf, либо включить в сам html-шаблон head:

<style>
@font-face {
  font-family: 'Font Awesome 5 Brands';
  font-style: normal; font-weight: normal;
  src: url('<%= wicked_pdf_asset_path 'fontawesome/fa-brands-400.woff' %>');
}
</style>

(нет необходимости в iefix и может использовать меньше форматов, потому что мы уверены, что wkhtmltopdf не IE, также была ошибка с неработающими резервными URL-адресами для шрифтов)

Спасибо за ответ. Я изменил файл шрифта и теперь получаю ошибку Not allowed to load local resource. Я добавил код к вопросу в разделе Изменения выше, пожалуйста, посмотрите.

dp7 28.05.2019 15:14

@dp7 для режима отладки это нормально, для более быстрой разметки удобно менять asset_path/wicked_pdf_asset_path в зависимости от режима рендеринга

Vasfed 28.05.2019 15:51

Помощники wicked_pdf_stylesheet_pack_tag и wicked_pdf_stylesheet_link_tag, похоже, не очень хорошо работают с fontawesome из-за ссылки на относительный путь к веб-шрифтам.

У меня сработало следующее (используя webpacker)...

yarn add @fortawesome/fontawesome-free

В app/javascript/packs/reports.js (назовите пакет как хотите):

import '@fortawesome/fontawesome-free/scss/fontawesome.scss'
import '@fortawesome/fontawesome-free/scss/solid.scss'
// add other icons as necessary

И затем в вашем файле макета:

= stylesheet_link_tag asset_pack_url('reports.css')

Использование asset_pack_url вместо asset_pack_path важно, поскольку для wicked_pdf требуется полный URL-адрес, и он не будет работать с относительным путем.

Другие вопросы по теме