Как показать различные алфавиты в tfPDF в PHP? - PullRequest
0 голосов
/ 06 сентября 2018

У меня возникает следующая проблема при использовании 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 ++), что у них нет проблем с каким-либо символом (даже в командной строке консоли замазки все символы отображаются правильно).

...