微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在 FDPI 中使用汉字

如何解决在 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");

现在我也在尝试写中文,但是一直遇到问题。

  • 如果我尝试 $pdf->Write(2,"This is working");,它会显示

enter image description here

  • 如果我尝试 $pdf->Write(2,iconv('UTF-8','UCS-4BE','我的名字是约翰'));,它会显示

enter image description here

我做错了什么?如何使用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] 举报,一经查实,本站将立刻删除。