在 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");
- 我下载了Noto Sans CJK SC因为它支持中文
- 我去 http://www.fpdf.org/makefont/ 转换 NotoSans-Regular(编码
cp1252
)。
现在我也在尝试写汉字,但是一直遇到问题
- 如果我尝试
$pdf->Write(2, "This is working");
它会显示:
- 如果我尝试
$pdf->Write(2, iconv('UTF-8', 'UCS-4BE', '我的名字是约翰'));
它会显示:
我做错了什么?如何使用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, "会写中文");
我有一个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");
- 我下载了Noto Sans CJK SC因为它支持中文
- 我去 http://www.fpdf.org/makefont/ 转换 NotoSans-Regular(编码
cp1252
)。
现在我也在尝试写汉字,但是一直遇到问题
- 如果我尝试
$pdf->Write(2, "This is working");
它会显示:
- 如果我尝试
$pdf->Write(2, iconv('UTF-8', 'UCS-4BE', '我的名字是约翰'));
它会显示:
我做错了什么?如何使用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, "会写中文");