卡纳达语在 TCPDF 中没有得到正确支持
kannada language is not supporting properly in TCPDF
我想在 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.
这是我在字母之间 space 得到的输出
下面是我的预期输出
ಮುಂದಿನ ನಿಲ್ದಾಣ ಉದ್ಯಾನ ನಗರ
尝试将 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');
由于您使用的是非嵌入字体,因此渲染将在某种程度上取决于您的 PDF reader 软件。对于 CJK 语言,我发现只需添加一个嵌入式字体就可以很容易地解决问题。据我所知,由于在 TCPDF 中缺乏支持,这不适用于像卡纳达语这样的印度文字。 (例如,使用 Lohit-Kannada.ttf
解决了间距问题,但最终文本呈现不正确。)
您是否在项目中使用了明确支持卡纳达语的 mPDF
?这是我能够从 TCPDF 和 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');
我想在 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.
这是我在字母之间 space 得到的输出
下面是我的预期输出
ಮುಂದಿನ ನಿಲ್ದಾಣ ಉದ್ಯಾನ ನಗರ
尝试将 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');
由于您使用的是非嵌入字体,因此渲染将在某种程度上取决于您的 PDF reader 软件。对于 CJK 语言,我发现只需添加一个嵌入式字体就可以很容易地解决问题。据我所知,由于在 TCPDF 中缺乏支持,这不适用于像卡纳达语这样的印度文字。 (例如,使用 Lohit-Kannada.ttf
解决了间距问题,但最终文本呈现不正确。)
您是否在项目中使用了明确支持卡纳达语的 mPDF
?这是我能够从 TCPDF 和 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');