【问题标题】:How to use TCPDF with FPDI in a laravel project如何在 laravel 项目中使用 TCPDF 和 FPDI
【发布时间】:2018-01-09 18:26:27
【问题描述】:

我正在使用 FPDI 从 Laravel 5 项目中的 template.pdf 文件生成 PDF,但由于 FDPI 本身不支持编码,所以我遇到了 UTF-8 名称的问题。

我做了很多搜索,tFPDF 和 TCPDF 似乎是这个问题最常用的解决方案,尽管我似乎无法成功地将它们中的任何一个集成到我的 laravel 应用程序中。

我已经参考了这些链接,但没有运气:

带有 tFPDF 的 FPDI:https://www.setasign.com/products/fpdi/demos/legacy-v1/
带有 TCPDF 的 FPDI:https://www.setasign.com/products/fpdi/demos/tcpdf-demo/

这是我在 laravel 控制器中使用的 PHP 函数。

public static function generateCertificate($firstname, $fullname, $course_name, $level, $date, $output, $email = null, $certificate_link = null)
{

    $fullname = stripslashes($fullname);
    $fullname = 'Witaj świecie'; //Added to debug issue

    //Start PDF Generation
    $pdf = new \setasign\Fpdi\Fpdi();

    //Set Template
    $path = app()->publicpath().'/assets/templates/examination_level100_certificate.pdf';


    $pageCount = $pdf->setSourceFile($path);
    $template  = $pdf->importPage(1);
    $size = $pdf->getTemplateSize($template);

    $pdf->addPage();
    $pdf->useTemplate($template, null, null, null, null, true);

    //Add the fonts
    $pdf->AddFont('Myriad-pro', '', 'myriad-pro-regular.php');
    $pdf->AddFont('Myriad-pro-semibold', '', 'myriad-pro-semibold.php');

    //Set Title
    $pdf->SetTitle($fullname.' - '.str_replace(' - ', ' ', $course_name).' - Certicifate');

    //Add User Name
    $pdf->SetFont('Arial', '', 40);
    $pdf->SetTextColor(67, 156, 209);
    $pdf->SetY(164);
    $pdf->Cell(0, 20, $fullname, 0, 1, 'C');

    $pdf->Output('I', str_slug($fullname.'-'.$course_name).'.pdf', true);
}

【问题讨论】:

    标签: php laravel fpdf fpdi


    【解决方案1】:

    实际上这是 FPDI 使用的 TCPDF/FPDF 问题(为了与 FPDI 合作,我建议您使用 FPDF 而不是 TCPDF)

    首先,您需要添加具有您的编码的字体。 更多:http://www.fpdf.org/en/tutorial/tuto7.htm

    例如:

    $pdf->AddFont('DejaVu','','DejaVuSansCondensed.php');
    $pdf->SetFont('DejaVu', '', 10, '', false);
    

    其次,关于 FPDI 用户的 FPDF 库:有可能的编码:

    cp1250 (Central Europe)
    cp1251 (Cyrillic)
    cp1252 (Western Europe)
    cp1253 (Greek)
    cp1254 (Turkish)
    cp1255 (Hebrew)
    cp1257 (Baltic)
    cp1258 (Vietnamese)
    cp874 (Thai)
    ISO-8859-1 (Western Europe)
    ISO-8859-2 (Central Europe)
    ISO-8859-4 (Baltic)
    ISO-8859-5 (Cyrillic)
    ISO-8859-7 (Greek)
    ISO-8859-9 (Turkish)
    ISO-8859-11 (Thai)
    ISO-8859-15 (Western Europe)
    ISO-8859-16 (Central Europe)
    KOI8-R (Russian)
    KOI8-U (Ukrainian)
    

    我发送到 pdf 的字符串是 UTF-8(我通过 mb_detect_encoding 函数检查了它),需要在 cp1250 上进行转换。

    第三,只需转换:

    $str = iconv('UTF-8', 'cp1250', 'zazółcić gęślą jaźń');
    

    也有用:https://www.setasign.com/products/fpdi/manual/

    【讨论】:

    • FPDI 默认已经使用 FPDF 库。我已经尝试过 iconv() 解决方案,但在使用诸如“Здравствулте мир”之类的名称时出现异常。 iconv():在输入字符串中检测到非法字符。如果我使用 KOI8-U 编码,它不会失败,但这就是它在 pdf 'úÄÒÁ×ÓÔ×ÕÌÔÅ ÍÉÒ' 上打印的内容
    • 我遇到了同样的问题,不得不花几天时间来解决它。我理解你。按照我写的方式就行了。首先,您需要包含您的编码的字体。你安装了新字体吗?
    猜你喜欢
    • 1970-01-01
    • 2013-11-23
    • 1970-01-01
    • 2016-08-19
    • 1970-01-01
    • 1970-01-01
    • 2011-01-22
    • 2015-07-19
    • 1970-01-01
    相关资源
    最近更新 更多