【问题标题】:HTML2PDF with TCPDF not rendering Chinese characters in final PDF document带有TCPDF的HTML2PDF未在最终PDF文档中呈现中文字符
【发布时间】:2013-01-01 05:10:35
【问题描述】:

我正在为此创建一个新线程,将尝试尽可能具体。

这是我们的销售人员应用程序的一部分,允许他们使用他们的联系信息自定义页面,在他们点击提交后,会创建一个 PDF 页面,然后将其附加到较大文档的末尾。

文档的第一页也是根据他们填写的同一个表单动态创建的。在他们按下提交后,会创建 2 个 PDF 文件,一个首页和一个后页,然后将两个页面都附加到一个更大的文档中,从而创建一个报告。

除非他们输入汉字,否则一切都很好,那么我得到的只是像这样的垃圾字符 - (质釕俕试æμ•程)。即使在与更大的文档合并之前,文档仍然看起来像这样。

我已经尝试了所有可能的方案(似乎),从使用 Unicode 字体到使用我自己创建的字体,然后逐个尝试 TCPDF 文件夹中的每种字体。我完全不知所措,而且已经有一段时间了。我觉得我几乎去过所有提到 TCPDF 的网站。

这是创建后页的代码,回到我开始使用的基本命令。我希望这是一个我缺少的简单命令:

require_once(dirname(__FILE__).'/html2pdf.class.php');
try
{
    $html2pdf = new HTML2PDF('L','LETTER','en', false, 'ISO-8859-15', array(mL, mT, mR, mB)); 
    $html2pdf->setDefaultFont('Arial');
    $html2pdf->writeHTML($html, isset($_GET['vuehtml']));

//Line below saves PDF to file
    $html2pdf->Output('created/'.$lastname[1].'_html2pdf.pdf', 'F');

}

catch(HTML2PDF_exception $e) {
    echo $e;

}

值得一提的是,运行 Centos 5.5 服务器来创建文档。提前谢谢你。


在对 HTML2PDF 的这个问题进行了一些调查后,我被告知字体 arialuni.ttf 应该支持我需要的所有字符。话虽如此,当我在下面看到的脚本中使用 HTML2PDF 时,它不会加载此字体。

require_once(dirname(__FILE__).'/html2pdf.class.php');
try
{

    $html2pdf = new HTML2PDF('L','LETTER','en', false, '', array(mL, mT, mR, mB));      
    $html2pdf->pdf->AddTTFFont('ARIALUNI.TTF');
    $html2pdf->pdf->setFont('arialuni');
    $html2pdf->writeHTML($html, isset($_GET['vuehtml']));

    //Line below sends output to the screen only
    //$html2pdf->Output('exemple00.pdf');

    //Line below saves PDF to file
   $html2pdf->Output('created/'.$lastname[1].'_html2pdf.pdf', 'F');

}

catch(HTML2PDF_exception $e) {
    echo $e;

}

*我能想到的只是语法不是 100% 正确的。我已经运行了 tt2fm 和 makefont 来获取文件,但不觉得这些例程是 100% 成功的。

请帮忙 - 我已经断断续续地研究这件事好几个月了。我几乎准备把它报废然后敲门。

谢谢。

【问题讨论】:

  • 字体需要安装和更改吗?

标签: php fonts tcpdf html2pdf asianfonts


【解决方案1】:

根据您的代码:

require_once(dirname(__FILE__).'/html2pdf.class.php');
try
{
    $html2pdf = new HTML2PDF('L','LETTER','en', false, 'ISO-8859-15', array(mL, mT, mR, mB));
    //$html2pdf->setDefaultFont('Arial');  //Please remove this
    $html2pdf->setDefaultFont('stsongstdlight'); //And change with this, it works 101% for me
    $html2pdf->writeHTML($html, isset($_GET['vuehtml']));

//Line below saves PDF to file
    $html2pdf->Output('created/'.$lastname[1].'_html2pdf.pdf', 'F');

}

catch(HTML2PDF_exception $e) {
    echo $e;

}

...这是我 101% 的工作代码,可以在 pdf 输出中包含中文字符:

<?php
require_once ROOT_DIRECTORY.'/{it's your own location where you put the class at}/html2pdf-4.4.0/html2pdf.class.php'; //ROOT DIRECTORY is my own "defined" so do not use this line.
/* or use this:
* require_once(dirname(__FILE__).'/html2pdf.class.php');
* it depends on what you need
*/ 
try
{
    $html2pdf = new HTML2PDF('L', 'A6', 'en', true, 'UTF-8', 0); //I'm using UTF-8 //Also I'm working on A6 page in my project here, so if you need to have A4 size change A6 back to A4 or change to the size you need
    $html2pdf->pdf->SetDisplayMode('fullpage');
    $html2pdf->setDefaultFont('stsongstdlight'); //this is all you need to have the CHINESE character.
    $content = ob_get_clean();
    $html2pdf->writeHTML($content);

    $html2pdf->Output('Sticker-'.$this->invNumber.'-'.$this->custCode.'.pdf');
    exit;
}
catch(HTML2PDF_exception $e) {
    echo $e;
    exit;
}

希望它在您的代码中也能正常工作!

编码愉快:)

【讨论】:

  • 嗨@MayurBhamre 哇,很高兴听到这个消息,我很高兴可以帮助某人:)
【解决方案2】:

您可以使用

在 PDF 文档中呈现汉字

cid0jp 字体在 TCPDF 中。

供您参考:-

PHP 代码:-

http://www.tcpdf.org/examples/example_038.phps

生成的 PDF:-

http://www.tcpdf.org/examples/example_038.pdf

请确保文件 cid0jp.php 应该在字体目录中。

tcpdf/fonts/cid0jp.php 

【讨论】:

  • 非常感谢您的回复。我还没有机会在我的项目中对此进行测试,但计划在今天或明天进行。
  • 好的,终于有机会解决这个问题并计划直到它正常工作。我在我的服务器和环境中执行了 example_038.phps,我现在得到:TCPDF 错误:无法包含字体定义文件:arial。要回答显而易见的问题,是的 arial 在文件夹中,是的,该文件夹是完全可写的。有任何想法吗?谢谢。
  • 如果您已经设置了font目录的写权限,请同时添加cache目录的写权限
  • 是的,写权限也在那里。还是找不到。感谢您回顾这一点,从我的研究来看,这似乎是一个问题。积极的一面是,我在我的项目中从我自己的服务器上运行了示例 38,它工作正常。我正在四处寻找,看看某处是否存在路径问题。
【解决方案3】:
$html2pdf = new HTML2PDF('L','LETTER','en', true, 'UTF-8', array(mL, mT, mR, mB));

【讨论】:

    【解决方案4】:

    所以html2pdf 是基于tcpdf,但它们有点不同: html2pdf不支持中文。

    但是,您可以从包含目录/tcpdf/fonts/ 中获取javiergb.php。然后将此文件复制到html2pdf/_tcpdf5.xxxx/fonts/ 目录。

    之后,您只需将行 $html2pdf-&gt;setDefaultFont('javiergb'); 添加到您的 html2pdf 设置中,如下所示:

    $html2pdf = new HTML2PDF('P', 'A4', 'en');
    $html2pdf->setDefaultFont('javiergb');
    $html2pdf->writeHTML($html);
    $html2pdf->Output('example_zh_cn.pdf');
    

    你可以看我的叉子:https://github.com/cychai/html2pdf

    【讨论】:

      猜你喜欢
      • 2010-11-27
      • 2014-04-01
      • 2013-01-11
      • 1970-01-01
      • 2012-04-18
      • 2015-02-24
      • 2019-02-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多