У меня возникает следующая проблема при использовании tFPDF для генерации PDF-файлов в PHP. Я получаю строки UTF-8 на всех языках (японский, китайский, арабский, хинди и т. Д.), Которые мне нужно правильно распечатать в pdf.
Однако, поскольку нет шрифта OTF / TTF (по крайней мере, я об этом не знаю), который бы поддерживал все виды алфавитов одновременно, всегда есть некоторые буквы, которые не напечатаны правильно в pdf.
Например, делать:
$pdf->AddFont('AsianFonts', '', 'mplus-2c-regular.ttf', true);
$pdf->AddFont('Arabic', '', 'aealarabiya.ttf', true);
добавляет шрифт «AsianFonts», поддерживающий символы японского, китайского и т. Д., И отдельные шрифты «арабский» для арабского, хинди и т. Д.
Однако я не могу сделать:
$pdf->SetFont('AsianFonts', '', 10);
$pdf->Cell($string_to_be_printed);
, поскольку $string_to_be_printed
может иметь любой символ UTF-8, и в этом случае арабские буквы не будут правильными (они будут заменены на некоторые фиктивные квадраты).
Моя идея состояла в том, чтобы как-то определить язык входной строки (на основе юникода?) И на основании этого я бы установил конкретный шрифт. Что-то вроде:
$language = detect_language($string);
switch ($language) {
case 'asian'
$pdf->SetFont('AsianFonts', '', 10);
case 'arabic'
$pdf->SetFont('Arabic', '', 10);
}
$pdf->Cell($string);
У меня вопрос - есть ли у кого-нибудь подобная проблема / опыт? Может быть, есть какое-то лучшее решение (например, «один шрифт, чтобы управлять ими всеми» - стандартный Dejavu, Arial, похоже, не работает)? Каков наилучший способ определения языка по строке (UTF-8)?
Спасибо.
OFF-TOPIC: как это делается в «стандартных редакторах» (например, Notepad ++), что у них нет проблем с каким-либо символом (даже в командной строке консоли замазки все символы отображаются правильно).