生成PDF时,它完全忽略了应用于CSS的font-family
属性。而不是说 Verdana ,它使用 Times New Roman。所以我的CSS看起来像:
.sub-header {
font-size: 1.4rem;
text-transform: uppercase;
font-family: NeutraText-Book !important;
padding-bottom: 1.5rem;
}
PDF生成如下:
$pdf = PDF::loadHTML($view);
return $pdf->stream();
如何设置我想要的字体?
答案 0 :(得分:23)
PDF文档内部支持以下字体:Helvetica,Times-Roman,Courier,Zapf-Dingbats,&符号(全部使用Windows ANSI编码)。 dompdf将在PDF中嵌入任何引用的字体,只要它已预先加载或可由dompdf访问并在CSS @font-face
规则中引用。加载过程是必要的,以便生成用于类型设置的字体度量。
dompdf支持与基础R& OS PDF类相同的字体:只要字体指标(.afm / .ufm)可用,就输入类型1(.pfb)和TrueType(.ttf)。捆绑的基于PHP的php-font-lib支持加载和子设置字体。
加载字体的过程因您的需求和服务器访问而异。加载字体有三种方法:
使用CSS @ font-face规则在运行时加载字体
无需命令行访问权限。只要您想要加载的字体在线可用,您就可以通过CSS轻松加载。
@font-face {
font-family: 'Open Sans';
font-style: normal;
font-weight: normal;
src: url(http://themes.googleusercontent.com/static/fonts/opensans/v8/cJZKeOuBrn4kERxqtaUH3aCWcynf_cDxXwCLxiixG1c.ttf) format('truetype');
}
从命令行使用dompdf / load_font.php
如果您可以访问命令行,则加载字体非常简单:
[php] load_font.php "NeutraText-Book" /path/to/neutratext.ttf
运行不带任何参数的命令以查看帮助文本。但很快,参数是:字体名称,普通字体文件,粗体字体文件,斜体字体文件,粗体斜体字体文件
浏览包含的管理网站中的dompdf / www / fonts.php
不言自明(sample)。您唯一需要做的就是确保您已修改了管理员用户名/密码组合
注意:默认情况下不会包含load_font.php和管理网站,以dompdf 0.7.0开头
改编自dompdf wiki(Unicode How-To,About Fonts and Character Encoding)和其他来源。
答案 1 :(得分:12)
我有类似的问题,我一直在寻找解决方案2天......对于新版本,接受的答案不再适用。
@ jay-bienvenu答案是对的。 新版本的DomPDF并不包含所有内容,而且文档也很差。
所以你必须:
下载load_font.php并将其放入您的根目录
项目:
curl -o load_font.php https://raw.githubusercontent.com/dompdf/utils/master/load_font.php
然后用您的编辑器打开load_font.php并将正确的路径放到autoload.inc.php中,
例如require_once 'lib/dompdf/autoload.inc.php';
打开命令行,转到项目的根文件夹,然后运行该实用程序,其中包含您要注册的字体的名称以及TFF文件的路径
例如php load_font.php SourceSansPro ./pathToYourFolder/lib/dompdf/SourceSansPro-Regular.ttf ./pathToYourFolder/lib/dompdf/SourceSansPro-Bold.ttf
现在已安装字体。您可以像在html中一样使用它作为webfont:
<html>
<head>
<meta http-equiv="Content-Type" content="charset=utf-8" />
<style type="text/css">
@page {
margin: 0;
}
* { padding: 0; margin: 0; }
@font-face {
font-family: "source_sans_proregular";
src: local("Source Sans Pro"), url("fonts/sourcesans/sourcesanspro-regular-webfont.ttf") format("truetype");
font-weight: normal;
font-style: normal;
}
body{
font-family: "source_sans_proregular", Calibri,Candara,Segoe,Segoe UI,Optima,Arial,sans-serif;
}
</style>
</head>
<body>
Your code here ....
</body>
</html>
&#13;
并在php中制作pdf:
require_once 'lib/dompdf/autoload.inc.php';
use Dompdf\Dompdf;
// instantiate and use the dompdf class
$dompdf = new Dompdf();
$dompdf->loadHtml($html, 'UTF-8');
// (Optional) Setup the paper size and orientation
$dompdf->setPaper('A4');
$dompdf->set_option('defaultMediaType', 'all');
$dompdf->set_option('isFontSubsettingEnabled', true);
// Render the HTML as PDF
$dompdf->render();
编辑:我发了一篇关于如何使用dompdf并应用自定义字体的博文,以便更加详细:https://www.blog.lab21.gr/using-domdpf-create-pdf-php
答案 2 :(得分:3)
Dompdf About Fonts and Character Encoding说字体实用程序已包含但未告诉您如何获取并运行它。以下是:
将load_font.php下载到项目的根目录。 curl -o load_font.php https://raw.githubusercontent.com/dompdf/utils/master/load_font.php
使用文本编辑器(例如vim)打开load_font.php。将require_once "autoload.inc.php";
更改为require_once "vendor/autoload.php";
使用您要注册的字体名称和TFF文件的路径运行该实用程序。例如:php load_font.php 'Brush Script MT' https/fonts/brush-script-mt.ttf
阅读load_font.php的代码,了解有关如何使用此命令的更多信息。
答案 3 :(得分:1)
您需要在DomPDF中加载字体。查看this pag e了解详情。
答案 4 :(得分:1)
感谢上面Brians的回答,但在我的情况下只有一个选项可以使用“dompdf / www / fonts.php”安装字体
它安装了字体 浏览包含的管理站点中的dompdf / www / fonts.php。 (它将类似于http://yoursite.com/sites/all/modules/print/lib/dompdf/www/fonts.php)
转到页面底部,然后点击链接
[Authenticate to access this section][1]
它提示警告说“必须在dompdf_config.custom.inc.php中更改密码”。
现在,再次点击[Authenticate to access this section][2]
,它会问
用户名和密码。输入您在第一步中提供的用户名和密码。
如果您在浏览器中再次浏览相同的fonts.php路径,您可以在页面底部找到安装新字体部分(您可以在图片中看到),(但是,我搬了我的rockwell.ttf和rockwell.afm文件首先到了fonts文件夹,然后我安装在这里)
选择所需的字体ttf文件,然后进行安装。它安装并显示安装的字体,但它不适合我。所以我不得不为我的新字体创建.afm文件。(这里我想使用rockwell字体)
我创建了rockwell.afm文件的步骤。 1
我这样做就像dompdf其他14种原生字体一样,我不确定这是多么可以接受。但它对我有用。我只是想完成它。
我添加了我的rockwell字体,我在php文件中找到了dompdf原生字体名称
在dompdf / include / dompdf.cls.php文件中向public static $native_fonts
数组添加了“rockwell”
就是这样。它为我生成了rockwell.afm文件,如
只需使用您想要使用的任何字体系列,例如
body {
font-family: 'rockwell';
font-size:10;
}
答案 5 :(得分:0)
您需要使用dompdf库来生成具有特定字体系列的pdf。
$html ='<!doctype html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>';
$html.='</head><body>';
$html.="<style>
@font-face { font-family: 'Roboto Regular'; font-weight: normal; src: url(\'fonts/Roboto-Regular.ttf\') format(\'truetype\'); }
@font-face { font-family: 'Roboto Bold'; font-weight: bold; src: url(\'fonts/Roboto-Bold.ttf\') format(\'truetype\'); }
body{ font-family: 'Roboto Regular', sans-serif; font-weight: normal; line-height:1.6em; font-size:17pt; }
h1,h2{ font-family: 'Roboto Bold', sans-serif; font-weight: bold; line-height:1.2em; }
</style>";
$html.='test <br>
<span style="font-family:\'Open Sans\'"> test </span> <br> ';
$html.= '</body></html>';
$dompdf = new Dompdf\Dompdf();
$dompdf->load_html($html,'UTF-8');
$dompdf->set_paper('A4', 'portrait');
$dompdf->render();
$dompdf->stream();
答案 6 :(得分:0)
这里有很多答案,很难获得可靠的跨语言支持。我相信,对于我们这些生产分布式软件的人来说,还有一些服务器设置块可以阻止pdfdom中的@import
和src:url()
之类的某些功能,这些功能会自动嵌入字体。
以下解决方案已在许多服务器和本地托管站点上运行,并且不需要命令行访问: