【问题标题】:kannada language is not supporting properly in TCPDF卡纳达语在 TCPDF 中没有得到正确支持
【发布时间】:2019-10-20 14:18:11
【问题描述】:

我想在 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.

这是我得到的输出,字母之间有空格

下面是我的预期输出

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

【问题讨论】:

    标签: php pdf tcpdf


    【解决方案1】:

    由于您使用的是非嵌入式字体,因此渲染将在一定程度上取决于您的 PDF 阅读器软件。使用 CJK 语言,我发现只需将嵌入的字体放入其中就可以很容易地解决问题。据我所知,这不适用于像卡纳达语这样的印度文字,因为 TCPDF 缺乏支持。 (例如,使用Lohit-Kannada.ttf 解决了间距问题,但最终文本未正确呈现。)

    您是否在项目中走得太远而无法使用明确支持卡纳达语的mPDF?以下是我从 TCPDF 和 mPDF 中获得的内容的并排比较(每个代码如下图):

    TCPPDF:

    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');
    

    【讨论】:

    • 你能把下载'vendor/autoload.php'的链接发给我吗?或 mpdf 库。 Bcz 我找不到这个。
    • 我认为如果我下载 autoload.php 并检查这将起作用。
    • 哦,vendor/autoload.php 是 composer 创建的。 mPDF库的官方安装方法是用composer。 mpdf.github.io/installation-setup/installation-v7-x.html你可以从这个链接获取作曲家:getcomposer.org
    • 感谢您的@EPB 它正在工作,但如何在下载前预览它。 ?
    • 您的意思是在浏览器中内联显示它?如果是这样,我认为这应该已经是默认设置了,但是查看output 方法的文档可能是有意义的。 mpdf.github.io/reference/mpdf-functions/output.html
    【解决方案2】:

    尝试将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');
    

    【讨论】:

    • 不工作,它给出了相同的输出,字母之间有空格。
    猜你喜欢
    • 2014-04-22
    • 2013-04-13
    • 1970-01-01
    • 2018-07-28
    • 1970-01-01
    • 2019-06-12
    • 2013-01-06
    • 2013-05-03
    • 2011-11-02
    相关资源
    最近更新 更多