#php #pdf #unicode #fpdf #fpdi
Вопрос:
У меня есть шаблон 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 без CJK SC, потому что он поддерживает китайский
- Я отправился в http://www.fpdf.org/makefont/ для преобразования NotoSans-Обычный (с кодировкой
cp1252
).
Сейчас я тоже пытаюсь писать китайскими буквами, но у меня возникли проблемы.
- Если я попытаюсь
$pdf->Write(2, "This is working");
, это покажет мне:
- Если я попытаюсь
$pdf->Write(2, iconv('UTF-8', 'UCS-4BE', '我的名字是约翰'));
, это покажет мне:
Что я делаю не так? Как я могу заставить китайский текст работать с FDPI?
Я видел, как некоторые люди делали это с помощью FDPF, но я не мог понять, как это сделать в FDPI.
Ответ №1:
По-Старому:
Я нашел решение, скрытое в репозитории GitHub от DCgithub21, которое вы можете расширить и изменить, как показано ниже.
После правильного расширения классов вы можете использовать китайские иероглифы внутри 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, чтобы ваш outlook был:
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 setasignFpdiTfpdfFpdi();
$template = public_path('template.pdf');
$pdf->setSourceFile($template);
$pdf->AddFont('Code200365k','','Code200365k.ttf', true);
$pdf->SetFont('Code200365k','',42);
$pdf->Write(2, "会写中文");