Создание PDF-файлов с использованием TCPDF, который поддерживает все языки, особенно CJK

Может кто-нибудь собрать ясный и краткий пример того, как вы можете создать PDF с использованием TCPDF, который будет поддерживать текстовые строки из любого языка?

Похоже, нет ни одного шрифта, который будет поддерживать все языки. Я предполагаю, что шрифт будет слишком большим?

Я предполагаю, что правильным способом было бы определить язык строки и динамически установить тип шрифта для совместимого шрифта. Если это так, то становится очень сложно определить язык для каждой строки.

Большинство языков поддерживаются, если вы используете шрифт "freeserif". Однако он не поддерживает шрифты CJK. Я пробовал много шрифтов (kozminproregular, cid0jp, cid0kr, cid0jp, stsongstdlight), чтобы получить поддержку китайского, японского и корейского языков, но ни один из них не поддерживает все три языка.

5 ответов

Это отлично сработало для меня. Спасибо!

Чтобы убедиться, что сгенерированный PDF-файл не будет большим, используйте FontSubsetting - у меня есть 10-страничный PDF-файл, сгенерированный только с несколькими строчками на китайском языке (имена на дипломах)

$ Pdf->setFontSubsetting(истина); => PDF файл немного больше 925 КБ против 755 КБ без китайских имен, если вы используете $pdf->setFontSubsetting(false); => PDF размер файла около 17,5 МБ...

В моем приложении мне необходимо поддерживать почти 50+ языков. При создании PDF-файла все языки не отображаются в PDF-файле должным образом.

Решение

  1. Загрузите и добавьте новые шрифты (arialuni.tff) вtcpdf/fonts/папку с помощьюaddTTfontметод. Он будет генерироватьphp,ctg.z,zфайлы. После создания файлов мы можем удалитьtffфайл из папки шрифтов.

            TCPDF_FONTS::addTTFfont('path/to/folder'.'/lib/tcpdf/fonts/arialuni.ttf',
       'TrueTypeUnicode', '', 96); 
    
  2. Определите код страны и соответствующим образом измените тип шрифта. Большинство языков будут поддерживать freeserif . Языки CJK будут поддерживать arialuni.

            switch($iomadcertificate->lang){ 
        case 'my': 
        case 'az': $font = 'zawgyi'; 
            break; 
        case 'ja': 
        case 'ko': $font = 'arialuni'; 
            break; 
        case 'zhtw': $font = 'stsongstdlight'; 
            break; 
        default : $font = 'freeserif'; 
            break; 
    }
    $pdf->setFont($font, $style, $size);
    

Решил эту проблему, сделав свой собственный шрифт из unicode arial ms с помощью этих шагов:

Во временный скрипт поставь и выполни это
1. Поместите копию ARIALUNI.ttf в папку fonts под установкой tcpdf (я взял свою копию из папки windows\fonts.
2. создайте временный скрипт в папке примеров tcpdf и выполните его следующим образом:
$ fontname = $ pdf-> addTTFfont ('../ fonts / ARIALUNI.ttf', 'TrueTypeUnicode', '', 32);
3. установите новый шрифт в вашем скрипте генератора PDF:
$ pdf-> SetFont ('arialuni', '', 20);

Теперь PDF должен правильно показывать символы CJK.
Надеюсь, что это помогает так много людей.

Я только что попробовал решение Etiennez0r, и оно не сработало для меня. Необходимо внести незначительные изменения, как показано ниже:

$fontname = TCPDF_FONTS::addTTFfont('../fonts/ARIALUNI.TTF', 'TrueTypeUnicode', '', 96);

Я установил:

$fontname = TCPDF_FONTS::addTTFfont(FCPATH . 'TCPDF/fonts/ARIALUNI.ttf', 'TrueTypeUnicode', '', 32);

....... // установить шрифт

$pdf->SetFont('dejavusans', '', 14);
$pdf->SetFont('cid0cs', '', 14);

Японский экспорт работает хорошо

Другие вопросы по тегам