CSS 不适用于 DOMPDF
Posted
技术标签:
【中文标题】CSS 不适用于 DOMPDF【英文标题】:CSS not working with DOMPDF 【发布时间】:2013-08-03 05:40:57 【问题描述】:我正在使用 DOMPDF (v 0.5.2) 将 html 页面转换为 pdf 文件。
pdf 文件在 php 脚本运行后出现(如预期的那样),但没有任何样式应用于任何内容。据我所知,float 属性不适用于 DOMPDF,所以我必须做一些工作来解决这个问题,但甚至没有应用字体样式。
我已经尝试了所有三种包含样式的方法: 附加样式表,
<link href="styles.css" rel="stylesheet" type="text/css">
标题中的书写样式,
<style>...</style>
和内联样式。
<div class="..." style="...">
用于创建 pdf 的 php 文件如下所示...
<?php
ob_start();
?>
<html>
<head>
<link href="flhaha.css" rel="stylesheet" type="text/css">
</head>
<body>
... content (divs, etc)
</body>
</html>
<?php
require_once("../../scripts/dompdf/dompdf_config.inc.php");
$dompdf = new DOMPDF();
$dompdf->load_html(ob_get_clean());
$dompdf->render();
$dompdf->stream('test.pdf');
?>
内容中有一张图片可以正常加载并在 pdf 打开时正确显示,但仍然没有样式。
提前致谢!
编辑#1:上面的标签是“style”,而不是“styles”。已修正错字。
【问题讨论】:
您的示例链接不适合我。我看不出有什么理由不应用这些样式。您是否收到任何 PHP 错误或通知?你能发布一些示例 HTML+CSS 吗? @BrianS,服务器(bluehost)今天宕机了。现在已备份,链接工作正常。很抱歉! 我意识到它可能是你的主机。我最终确实获得了访问权限。 【参考方案1】:dompdf v0.5.x 不支持浮点数。 v0.6.0 确实如此,尽管它仍然是必须在配置中启用的实验性功能。在测试您的文档后,我可以说 dompdf 处理得不是很好。如果您想坚持使用 dompdf,您可能会考虑使用表格,因为您的文档在本质上有点表格。
【讨论】:
我同意我应该去餐桌。我一直更喜欢div,但改变它没什么大不了的。您提到“坚持使用 dompdf”,还有其他东西可以用来通过 php 代码编写 pdf 文件吗? dompdf 似乎是最受欢迎的选择,所以我就这么做了。 有许多基于 PHP 的库:mPDF、TCPDF、html2pdf。如果你想要更强大的东西,你可以使用无头浏览器可执行文件,比如 PhantomJS。 我最终选择了 mPDF,效果很好!更好的 CSS 支持,并且易于使用。要记住的一件事(对于将来引用此线程的人)是“浮动”样式在带有 标签的 mPDF 中不起作用(仅适用于 标签)。 DOMPDF 不工作的原因是我的 CSS 写的是“.page”而不是“div.page”,但这仍然只解决了一些问题。 mPDF 获胜。感谢您的回答! 很抱歉看到你走了(我是开发人员之一)。但是……我完全理解。其他库现在在某些用例中效果更好。 @Michael 这也对我有用。我从 dompdf 转到 mPDF。【参考方案2】:可以通过在<style>
元素而不是<styles>
元素之间包含样式来创建内部样式表。
下面的stmt是错误的:
<styles>...</styles>
应该是:
<style> ... </style>
内联样式应该如下所示:
<div class="className" style="color:red;text-align: left;">
应包含外部样式表,如下所示:
<link rel="stylesheet" type="text/css" media="screen" href="styles.css" />
如果外部样式表不起作用,请检查源文件路径。
【讨论】:
media="all"
可能是您想要的,因为打印的是 pdf。【参考方案3】:
简单的解决方案是,将您的 css 放在单独的 (.php) 或任何其他服务器脚本文件中,并将其包含在您的 pdf 文件中。 例如。 你有pdf的pdf.blade.php文件
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="description" content="">
<meta name="author" content="">
-- <link rel="icon" href="/favicon.ico"> --
<title>Starter Template for Bootstrap</title>
<style type="text/css">
@include('pdf.style')
</style>
</head>
<body>
<nav class="navbar navbar-inverse navbar-fixed-top">
<div class="container">
<div class="navbar-header">
<button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar" aria-expanded="false" aria-controls="navbar">
<span class="sr-only">Toggle navigation</span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
<a class="navbar-brand" href="#">Project name</a>
</div>
<div id="navbar" class="collapse navbar-collapse">
<ul class="nav navbar-nav">
<li class="active"><a href="#">Home</a></li>
<li><a href="#about">About</a></li>
<li><a href="#contact">Contact</a></li>
</ul>
</div><!--/.nav-collapse -->
</div>
</nav>
<div class="container">
<div class="starter-template">
<h1>Bootstrap starter template</h1>
<p class="lead">Use this document as a way to quickly start any new project.<br> All you get is this text and a mostly barebones HTML document.</p>
</div>
</div><!-- /.container -->
</body>
</html>
假设你有css文件style.css,那么下一步就是复制你的css文件内容并将其粘贴到新的style.blade.php中 你几乎完成了!
现在将它包含在您的 pdf 文件中 例如。
<style>
@include('style')
</style>
这就是对我有用的简单技巧。
【讨论】:
以上是关于CSS 不适用于 DOMPDF的主要内容,如果未能解决你的问题,请参考以下文章