Каннада язык не поддерживает должным образом в TCPDF - PullRequest
1 голос
/ 20 октября 2019

Я хочу отобразить текст каннада в файле tcpdf. Вот мой код

$pdf = new TCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false);    
$pdf->SetCreator(PDF_CREATOR);
$pdf->SetAuthor('PANCARD PDF');
$pdf->SetTitle('PANCARD ID - '.$temp_token);
$pdf->SetSubject('PANCARD PDF');
$pdf->SetKeywords('PANCARD PDF, PDF, example, test, guide');    
$pdf->setFooterData(array(0,64,0), array(0,64,128));  
$pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN));
$pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA));  
$pdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED); 
$pdf->SetMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT);
$pdf->SetHeaderMargin(PDF_MARGIN_HEADER);
$pdf->SetFooterMargin(PDF_MARGIN_FOOTER);    
$pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM); 

if (@file_exists(dirname(__FILE__).'/lang/eng.php')) 
{
  require_once(dirname(__FILE__).'/lang/eng.php'); 
  $pdf->setLanguageArray($l);
}   
$pdf->setFontSubsetting(true);   
$pdf->SetFont('kozgopromedium', '', 11, '', true);   
$pdf->AddPage(); 
$pdf->setTextShadow(array('enabled'=>true, 'depth_w'=>0.2, 'depth_h'=>0.2, 'color'=>array(196,196,196), 'opacity'=>1, 'blend_mode'=>'Normal'));    
$html = 'ಮುಂದಿನ ನಿಲ್ದಾಣ ಉದ್ಯಾನ ನಗರ';
$pdf->writeHTMLCell(0, 0, '', '', $html, 0, 1, 0, true, '', true);   
$pdf->Output('kannada_lang.pdf', 'I');  

Я пытался использовать следующие шрифты, но я не получаю правильный формат 1) kozgopromedium 2) kozminproregular 3) stsongstdlight.

Это вывод, который я получаю с пробелом между буквами

enter image description here

ниже моего ожидаемого результата

ಮುಂದಿನ ನಿಲ್ದಾಣ ಉದ್ಯಾನ ನಗರ

Ответы [ 2 ]

1 голос
/ 21 октября 2019

Поскольку вы используете не встроенный шрифт, рендеринг будет зависеть от вашего программного обеспечения для чтения PDF. С языками CJK я обнаружил, что довольно просто добавить встроенный шрифт, и это решает проблему. Насколько я знаю, это не сработает для таких скриптов, как Kannada, из-за отсутствия поддержки в TCPDF. (Использование Lohit-Kannada.ttf, например, решает проблему пробелов, но окончательный текст отображается неправильно.)

Вы слишком далеко продвинулись в своем проекте, чтобы использовать mPDF, который явно поддерживает Kannada? Вот параллельное сравнение того, что мне удалось получить из TCPDF и mPDF (код каждого приведен ниже под изображением):

Side by side rendering of text for TCPDF vs. mPDF

TCPDF:

require_once('TCPDF/tcpdf.php');
// create new PDF document
$pdf = new TCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false);

$font = TCPDF_FONTS::addTTFfont('Lohit-Kannada.ttf',  'TrueTypeUnicode', '', 96);

$pdf->SetCreator(PDF_CREATOR);
$pdf->SetAuthor('PANCARD PDF');
$pdf->SetTitle('PANCARD ID - '.$temp_token);
$pdf->SetSubject('PANCARD PDF');
$pdf->SetKeywords('PANCARD PDF, PDF, example, test, guide');
$pdf->setFooterData(array(0,64,0), array(0,64,128));
$pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN));
$pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA));
$pdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED);
$pdf->SetMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT);
$pdf->SetHeaderMargin(PDF_MARGIN_HEADER);
$pdf->SetFooterMargin(PDF_MARGIN_FOOTER);
$pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM);

$l['a_meta_charset'] = 'UTF-8';
$l['a_meta_dir'] = 'ltr';
$l['a_meta_language'] = 'kn';
$pdf->setLanguageArray($l);

$pdf->setFontSubsetting(true);
$pdf->SetFont($font, '', 11, '', true);
$pdf->AddPage();
$pdf->setTextShadow(array('enabled'=>true, 'depth_w'=>0.2, 'depth_h'=>0.2, 'color'=>array(196,196,196), 'opacity'=>1, 'blend_mode'=>'Normal'));
$html = 'ಮುಂದಿನ ನಿಲ್ದಾಣ ಉದ್ಯಾನ ನಗರ';
$pdf->writeHTMLCell(0, 0, '', '', $html, 0, 1, 0, true, '', true);
$pdf->Output(dirname(__FILE__).'/kannada_lang.pdf', 'F');

mPDF:

include 'vendor/autoload.php';

$mpdf = new \Mpdf\Mpdf();
//I'm being a little lazy here and letting mPDF select the appropriate
//appropriate font.
$mpdf->autoScriptToLang = true;
$mpdf->baseScript = 1;  // Use values in classes/ucdn.php  1 = LATIN
$mpdf->autoLangToFont = true;
$mpdf->WriteHTML('<span style="text-shadow: 0.2 0.2 2 rgb(196,196,196);">'.
     'ಮುಂದಿನ ನಿಲ್ದಾಣ ಉದ್ಯಾನ ನಗರ</span>');
$mpdf->Output('kannada_mpdf_lang.pdf');
0 голосов
/ 21 октября 2019

Попробуйте отобразить next stop is the garden city как текст, а не как HTML:

$pdf->SetFont('kozgopromedium', '', 11, true);
$pdf->AddPage();

// Cell($w, $h=0, $txt='', $border=0, $ln=0, $align='', $fill=0, $link='', $stretch=0, $ignore_min_height=false, $calign='T', $valign='M')
$pdf->Cell(0, 0, 'ಮುಂದಿನ ನಿಲ್ದಾಣ ಉದ್ಯಾನ ನಗರ', 1, 1, 'C', 0, '', 0);

$pdf->Output('kannada_lang.pdf', 'I');
...