在 FDPI 中使用汉字

Using chinese characters in FDPI

我有一个pdf模板,上面写了英文字母,效果很好。

$fontPath = public_path('fonts/');
define('FPDF_FONTPATH', $fontPath);

$pdf = new Fpdi();
$template = public_path('template.pdf');
$pdf->setSourceFile($template);

$pdf->AddFont('NotoSans-Regular');
$pdf->SetFont('NotoSans-Regular', '', 9);

$pdf->Write(2, "This is working");

现在我也在尝试写汉字,但是一直遇到问题

我做错了什么?如何使用FDPI唤醒中文文本?

我看到有些人用 FDPF 做,但我不知道如何在 FDPI 中做。

旧方法:

我从 DCgithub21 找到了 solution buried in a github repo,您可以像下面这样扩展和修改它。

适当扩展classes后,可以在Fpdi里面使用汉字了

$pdf = new ChineseFpdi();
$template = public_path('template.pdf');
$pdf->setSourceFile($template);

$pdf->AddGBFont('arial');
$pdf->SetFont('arial', '', 9);

$pdf->Write(2, iconv("utf-8", "gbk", "会写中文"));
$pdf->Write(2, iconv("utf-8", "gbk", "Can write Latin"));

在官方回购中:

class Fpdi extends FpdfTpl {}
class FpdfTpl extends \FPDF {}

您需要做的是创建一个名为 PdfChinese 的桥梁 class,这样您的前景将是:

class Fpdi extends FpdfTpl {}
class FpdfTpl extends PDFChinese {}
class PdfChinese extends FPDF {}

正确的方法:

显然,tFPDF 是一种更好的方法。参考:https://www.setasign.com/products/fpdi/demos/tfpdf-demo/

define("_SYSTEM_TTFONTS", public_path('fonts/'));

$pdf = new \setasign\Fpdi\Tfpdf\Fpdi();
$template = public_path('template.pdf');
$pdf->setSourceFile($template);

$pdf->AddFont('Code200365k','','Code200365k.ttf', true);
$pdf->SetFont('Code200365k','',42);

$pdf->Write(2, "会写中文");