【问题标题】:Add CSS to DomPDF将 CSS 添加到 DomPDF
【发布时间】:2019-07-06 07:48:48
【问题描述】:

我有这段代码可以将一些数据导出为 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 的文件是未知的,因此我的 pdf 中有一个没有 css 的表格。 我尝试直接在我的 html 中添加样式表,但导入也不是那样工作。但是我反正不想在html里加,加载的css是一个更高级别的模板。

如何从此结构中添加外部文件(如引导程序等)?我不知道这是否可能。感谢您的帮助;)

【问题讨论】:

  • @TOH19 不是没有提供答案 + 该人说:您的 CSS 应该是您提供给 dompdf 的 HTML 的一部分。我不想要这个,我的 css 已经在别处了。
  • user_table.html 只是一个带有 的文件 => 你的意思是没有引用你想包含在你给 dompdf 的 html 中的 css ?它应该如何猜测您要包含哪个文件?
  • @ᴄʀᴏᴢᴇᴛ 不是,他们正在将 CSS 加载到 html 中……正如我所说,我不是。用户模板知道这一点,因为模板是从其他页面加载的。但正如您所注意到的......对于 dom pdf......没有对 css 文件的引用。所以这里有一个问题,如何添加它,而不将它添加到 html 文件中。我不知道。

标签: php symfony dompdf


【解决方案1】:

您提供给 DomPDF 的 HTML 中必须引用 css 文件。

如果你不想改变你的树枝模板,你可以使用这样的解决方法:

$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);

请注意,根据 HTML 规范,在正文中添加 link 标记是无效的。使用当前的 Dompdf 版本,它可以工作,但在未来的版本中可能无法工作。

【讨论】:

  • 请记住,浏览器可能会通过将 LINK 元素移动到头部来“修复”错误放置的 LINK 元素。我仍然会使用链接元素,但您可以添加具有“dompdf”媒体类型的媒体属性来定位 dompdf,例如&lt;link type="text/css" media="dompdf" href="/absolute/path/to/pdf.css" rel="stylesheet" /&gt;.
【解决方案2】:

您始终可以使用像 Including a non-twig file from twig 这样的解决方案,将外部文件内容直接读取到模板属性中,因此 css 将内联呈现并与 mpdf 兼容。

【讨论】:

  • 不确定我理解你的意思。
  • 尝试将外部文件内容直接呈现到您传递给 dompdf 的 html 内容中。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-16
  • 2023-03-18
  • 2012-08-24
  • 2012-05-19
相关资源
最近更新 更多