有可能在fpdf中嵌入fontawesome字体吗?

时间:2013-12-04 07:20:54

标签: php fpdf font-awesome

我想在pdf中使用fontawesome。我使用php库fpdf和字体嵌入生成我的pdf。但是我无法使其发挥作用。

我使用此工具生成afm文件:http://fpdf.fruit-lab.de/

但是当我尝试使用fontawesome时,我总是得到白色方块而不是图标。

我使用此语法添加图标:

MultiCell(0,8,"\uF000 ",0,'C')

enter image description here

2 个答案:

答案 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');