I have a pdf template that I write English letters on it and it works fine.
$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");
cp1252
).Now I am trying to write Chinese letters too, but I have been facing problems.
$pdf->Write(2, "This is working");
it shows me:$pdf->Write(2, iconv('UTF-8', 'UCS-4BE', '我的名字是约翰'));
it shows me:What am I doing wrong? How can I wake the Chinese text work with FDPI?
I have seen some people doing it with FDPF but I couldn't figure out how to do it in FDPI.
I found the solution buried in a github repo from DCgithub21 which you can extend and modify like below.
After extending the the classes properly, you can use Chinese characters inside 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"));
In official repo:
class Fpdi extends FpdfTpl {}
class FpdfTpl extends \FPDF {}
What you need to do is create a bridge class called PdfChinese, so your outlook will be:
class Fpdi extends FpdfTpl {}
class FpdfTpl extends PDFChinese {}
class PdfChinese extends FPDF {}
Apparently tFPDF was a better way to do it. Reference: 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, "会写中文");