php - Using chinese characters in FDPI

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");

Now I am trying to write Chinese letters too, but I have been facing problems.

  • If I try $pdf->Write(2, "This is working"); it shows me:

enter image description here

  • If I try $pdf->Write(2, iconv('UTF-8', 'UCS-4BE', '?��??�????��?????�??�')); it shows me:

enter image description here

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.

Answer

Solution:

The Old Way:

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 {}

The Right Way:

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, "????��??�?��");

Source