Добавьте CSS в DomPDF

У меня есть этот код для экспорта некоторых данных в PDF. И я хотел бы добавить css из внешнего файла css (который не упоминается в используемом html)

/*********************************** Export PDF ****************************************************/
if ($request->query->get('exportPDF')!= null){
    // Configure Dompdf according to your needs
    $pdfOptions = new Options();
    $pdfOptions->set('defaultFont', 'Arial');
    // Instantiate Dompdf with our options
    $dompdf = new Dompdf($pdfOptions);
    // Retrieve the HTML generated in our twig file
    $html = $this->renderView('dashboard/user_table.html.twig', [
        'users' => $users
    ]);
    // Load HTML to Dompdf
    $dompdf->loadHtml($html);
    // (Optional) Setup the paper size and orientation 'portrait' or 'portrait'
    $dompdf->setPaper('A3', 'landscape');
    // Render the HTML as PDF
    $dompdf->render();
    // Output the generated PDF to Browser (force download)
    $dompdf->stream("exportUsers.pdf", [
        "Attachment" => true
    ]);
}

user_table.html — это всего лишь файл с <table>

у кого какой-то класс из файла css загружен в другой шаблон. Это означает, что для DomPDF файл, содержащий css, неизвестен, и в результате у меня есть таблица без css в моем pdf. Я пытался добавить таблицу стилей в свой html напрямую, но импорт тоже не работает. Но я все равно не хочу добавлять его в html, загруженный css - это шаблон более высокого уровня.

Как добавить внешние файлы (например, бутстрап и т. д.) из этой структуры? Я не знаю, возможно ли это вообще. Спасибо за помощь ;)

Возможный дубликат Как включить внешнюю таблицу стилей в dom pdf

TOH19 12.02.2019 17:00

@ TOH19 это не так, ответ не предоставлен + мужчина говорит: ваш CSS должен быть частью HTML, который вы отправляете в dompdf. Я не хочу этого, мой css уже в другом месте.

Minirock 12.02.2019 17:02
user_table.html — это только файл с <table> => вы имеете в виду, что нет ссылки на css, который вы хотите включить в html, который вы даете dompdf? как он должен угадать, какой файл вы хотите включить?
ᴄʀᴏᴢᴇᴛ 12.02.2019 17:17

@ ᴄʀᴏᴢᴇᴛ Это не так, они загружают CSS внутри html ... как я уже сказал, это не так. Пользовательские шаблоны знают об этом, потому что шаблоны загружаются с другой страницы. Но, как вы заметили... для dom pdf... нет ссылки на файл css. Так вот вопрос, как его добавить, не добавляя в html файл. Я не знаю.

Minirock 12.02.2019 17:18
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
4
20 852
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Вы всегда можете использовать решения, подобные этому Включение файла без ветки из ветки, считывать содержимое внешнего файла прямо в атрибут шаблонов, поэтому css будет отображаться встроенным и будет совместимым с mpdf.

Не уверен, что понимаю, что вы имеете в виду здесь.

Minirock 12.02.2019 17:17

Попробуйте визуализировать содержимое внешнего файла прямо в ваш html-контент, который вы передаете в dompdf.

vytsci 12.02.2019 17:18
Ответ принят как подходящий

ссылка на файл css должна быть указана в HTML-коде, который вы предоставляете DomPDF.

Если вы не хотите менять свой шаблон ветки, вы можете использовать такой обходной путь:

$dompdf = new Dompdf();
$html = $this->renderView('dashboard/user_table.html.twig', [
    'users' => $users
]);
$html .= '<link type = "text/css" href = "/absolute/path/to/pdf.css" rel = "stylesheet" />';
$dompdf->loadHtml($html);

Обратите внимание, что добавление тега link к телу недопустимо в соответствии со спецификациями HTML. В текущей версии Dompdf это работает, но может не работать в будущих версиях.

Имейте в виду, что браузеры могут «исправить» неправильно размещенный элемент LINK, переместив его в заголовок. Я бы по-прежнему использовал элемент ссылки, но вы можете добавить атрибут мультимедиа с типом мультимедиа «dompdf», чтобы настроить таргетинг на dompdf, например. <link type = "text/css" media = "dompdf" href = "/absolute/path/to/pdf.css" rel = "stylesheet" />.

BrianS 16.02.2019 22:37

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