我想在pdf中使用fontawesome。我使用php库fpdf和字体嵌入生成我的pdf。但是我无法使其发挥作用。
我使用此工具生成afm文件:http://fpdf.fruit-lab.de/
但是当我尝试使用fontawesome时,我总是得到白色方块而不是图标。
我使用此语法添加图标:
MultiCell(0,8,"\uF000 ",0,'C')
答案 0 :(得分:2)
我无法回答fpdf因为我从未使用过它。但是,我确实使用mPDF并且我经常使用fontawesome - 根本没有问题。我唯一需要确保的是,我输出到PDF文档的内容(mPDF采用HTML标记的形式)是UTF8编码的。
mPDF非常好,所以如果您处于项目的早期阶段,您可能只考虑切换到它。否则,值得探讨的是您是否也遇到了UTF8编码问题。
答案 1 :(得分:2)
即使这个帖子超过一年,我也想到了这一点。 可以使用font-awesome,尽管每个子集最多只能使用256个字符。我创建了几个字符映射,以包含字体真棒版本4.3.0的所有字形。您只需使用包含您要使用的字符的地图,或者您可以制作三个子集。它不一定像其他解决方案一样高效,但 fPDF 仍然比某些替代方案快得多,因为它缺少许多更现代的功能,如unicode支持。
首先,您需要使用 ttf2pt1 为字体创建afm文件。
ttf2pt1 -a fontawesome-webfont.ttf fontawesome-webfont
我制作了三个webfont副本来运行makefont.php并在相应的字体上使用每个编码。
require "makefont.php";
makefont('fontawesome-webfont1.ttf','fa1.map');
makefont('fontawesome-webfont2.ttf','fa2.map');
makefont('fontawesome-webfont3.ttf','fa3.map');
要在fPDF中使用它们,请将生成的文件放在font文件夹中,然后像这样添加它们:
$pdf->AddFont('FA1','',fontawesome-webfont1.php);
$pdf->AddFont('FA2','',fontawesome-webfont2.php);
$pdf->AddFont('FA3','',fontawesome-webfont3.php);
然后使用字符编号为相应的font-awesome子集渲染字形。上面的三个字体映射包含要使用的字符编号:
$pdf->SetFont('FA1','',14);
$WineGlass = chr(32);
$pdf->Cell(40,10,$WineGlass);
我还创建了一个字符映射生成器,它将显示字形下面的字符编号。
<?php
require_once($_SERVER['DOCUMENT_ROOT'] . '/pdf/fpdf.php');
// Establish / Get variables
function GETVAR($key, $default = null, $prefix = null, $suffix = null) {
return isset($_GET[$key]) ? $prefix . $_GET[$key] . $suffix : $prefix . $default . $suffix;
}
$font = GETVAR('font','fontawesome-webfont1','','.php');
$pdf = new FPDF('L','mm',array(268.33,415.3));
$pdf->AddPage();
$pdf->SetMargins(0,0,0);
$pdf->SetAutoPageBreak(0,0);
// add custom fonts
$pdf->AddFont('H','','helvetica.php');
$pdf->AddFont('FA','',$font);
$pdf->SetFillColor(200,200,200);
$pdf->SetXY(9,9);
for ($i = 32; $i <= 256; $i++) {
$y = $pdf->GetY();
$x = $pdf->GetX();
$pdf->SetX($x);
$pdf->SetTextColor(0, 0, 0);
$pdf->SetFont('FA','',14);
$pdf->Cell(12,12,chr($i),1,0,'C');
$pdf->SetXY($x,$y+12);
$pdf->SetTextColor(0, 0, 0);
$pdf->SetFont('H','',14);
$pdf->Cell(12,12,$i,1,0,'C',1);
$y = $pdf->GetY();
$x = $pdf->GetX();
$pdf->SetXY($x,$y-12);
if ($x > 400) {
$pdf->SetXY(9,$y+14);
}
if ($i == 328){
$pdf->AddPage();
}
}
$pdf->Output("charmap.pdf",'I');