如何解决在 FDPI 中使用汉字
$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,您可以像下面那样对其进行扩展和修改。
正确扩展类后,可以在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,"Can write Latin"));
在官方仓库中:
class Fpdi extends FpdfTpl {}
class FpdfTpl extends \FPDF {}
您需要做的是创建一个名为 PdfChinese 的桥接类,因此您的前景将是:
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,"会写中文");
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。