英文字符与TCPDF

我正在使用TCPDF库为音乐网站导出专辑/目录发行信息,该专辑包含可能是英语/中文或任何其他语言的歌曲标签,我有问题可以正确打印非英语字符TCPDF。 我想说的一些观点。

  • 我正在使用zend framework 1.12
  • 数据库连接排序规则utf8
  • 表字段整理utf8_unicode_ci
  • 我的情景是,信息来自数据库,我使用视图来显示与HTML相关的特定格式的相关信息。 发布名称是中文奥马尔阿斯拉姆 ,我试图通过在初始化TCPDF对象时设置字体和更改字符排序相关的stackover流来搜索所有选项,但是每当我打印它时都会显示这样的名称奥马尔阿斯æ‹Â我试图utf8_encode()utf8_decode()周围推出名称内HTML但没有什么帮助。 另一个例子是拉丁字符,其中专辑的名称是Extraña EP ,当在pdf中打印时,它将显示为Extraña EP

    这是我在视图中使用的HTML。

    <table width="100%" cellpadding="0" cellspacing="0">
                    <tr>
                        <td align="left" valign="top">
                            <img src="/images/release_details.png">
                        </td>
                    </tr>
                    <tr>
                        <td align="left" valign="top">
                            <table width="100%" cellpadding="0" cellspacing="0" class="release_table">
                                <tr>
                                    <td align="left" valign="top" class="label">CATALOG #:</td>
                                    <td align="right" valign="top" class="data"><?= $this->release->Catalog ?></td>
                                </tr>
                                <tr>
                                    <td align="left" valign="top" class="label">RELEASE NAME:</td>
                                    <td align="right" valign="top" class="data"><?= $this->release->Name ?></td>
                                </tr>
                                <tr>
                                    <td align="left" valign="top" class="label">RELEASE TYPE:</td>
                                    <td align="right" valign="top" class="data"><?= $releaseType ?></td>
                                </tr>
                                <tr>
                                    <td align="left" valign="top" class="label">UPC CODE:</td>
                                    <td align="right" valign="top" class="data"><?= $this->release->UPCCode ?></td>
                                </tr>
                                <tr>
                                    <td align="left" valign="top" class="label">NUMBER OF SONGS:</td>
                                    <td align="right" valign="top" class="data"><?= $this->release->TracksQty ?></td>
                                </tr>
                                <tr>
                                    <td align="left" valign="top" class="label">PRIMARY ARTIST:</td>
                                    <td align="right" valign="top"
                                        class="data"><?= $this->release->PrimaryArtist ?></td>
                                </tr>
                                <tr>
                                    <td align="left" valign="top" class="label">LABEL:</td>
                                    <td align="right" valign="top" class="data"><?= $this->release->LabelName ?></td>
                                </tr>
                                <tr>
                                    <td align="left" valign="top" class="label">MAIN GENRE:</td>
                                    <td align="right" valign="top" class="data"><?= $this->release->MainGenre ?></td>
                                </tr>
                                <tr>
                                    <td align="left" valign="top" class="label">GENRE:</td>
                                    <td align="right" valign="top" class="data"><?= $this->release->Genre ?></td>
                                </tr>
                                <tr>
                                    <td align="left" valign="top" class="label">(C):</td>
                                    <td align="right" valign="top"
                                        class="data"><?= $this->release->CLine . " " . $this->release->CYear ?></td>
                                </tr>
                                <tr>
                                    <td align="left" valign="top" class="label">(P):</td>
                                    <td align="right" valign="top"
                                        class="data"><?= $this->release->PLine . " " . $this->release->PYear ?></td>
                                </tr>
                                <?php if ($this->release->Howlong > 0 && $this->release->EffectiveDate > 0) { ?>
                                    <tr>
                                        <td align="left" valign="top" class="label">EXCLUSIVE DATE:</td>
                                        <td align="right" valign="top"
                                            class="data"><?= $this->release->EffectiveDate ?></td>
                                    </tr>
                                <?php } ?>
    
                                <tr>
                                    <td align="left" valign="top" class="label">RELEASE DATE:</td>
                                    <td align="right" valign="top" class="data"><?= $this->release->ReleaseDate ?></td>
                                </tr>
                            </table>
                        </td>
                    </tr>
                    <tr>
                        <td align="center" valign="middle">&nbsp;</td>
                    </tr>
                    <tr>
                        <td align="center" valign="middle">
    
                            <img src="/images/symphonic_logo.png"/>
    
                        </td>
                    </tr>
                </table>
    

    这里是我发送内容以pdf格式打印之前我称之为视图的代码。

    require_once(APPLICATION_PATH . 'library/tcpdf/tcpdf.php');
        $pdf = new TCPDF("L", "mm", "A4", FALSE, 'ISO-8859-1', false);
        $pdf->setPrintHeader(false);
        $pdf->setPrintFooter(false);
        $pdf->SetFont('helvetica', '', 11, '', true);
        $pdf->SetMargins(1, -1, -1, false);
        //$pdf->SetFont('dejavusans', '', 12);
        //whole TCPDF's settings goes here
        $this->view->songs = $releaseSongs;
        $this->view->release = $releasInformation;
        $htmlcontent = $this->view->render('exportpdf.phtml');
    
        // output the HTML content
        $pdf->AddPage();
        $pdf->writeHTML($htmlcontent, true, false, true, false, '');
        $pdf->lastPage();
        $pdf->deletePage($pages + 1);
        $pdf->Output($filename, 'D');
        exit();
    

    这里是我为纠正我的代码所做的一些事情。

  • 使用自定义字体选项来添加Ms arial unicode真实类型字体。

  • 我添加了CSS样式标签,其中我在视图中设置了字体系列,导致在非英文字符的情况下出现垃圾字符。 这是我犯的主要错误。

  • 这是他最后的工作代码

     require_once(APPLICATION_PATH . 'library/tcpdf/tcpdf.php');
        $pdf = new TCPDF("L", "mm", "A4", TRUE, 'utf-8', false);
        $fontname   =   TCPDF_FONTS::addTTFfont(APPLICATION_PATH.'/../library/tcpdf/fonts/ARIALUNI.TTF','TrueTypeUnicode', '', 32);
        $pdf->AddFont($fontname);
        $pdf->setPrintHeader(false);
        $pdf->setPrintFooter(false);
        $pdf->setFontSubsetting(true);
        $pdf->SetFont($fontname, '', 12, '', true);
        $pdf->SetMargins(1, -1, -1, false);
        //$pdf->SetFont('dejavusans', '', 12);
        //whole TCPDF's settings goes here
    
    
        $htmlcontent = $this->view->render('exportpdf.phtml');
    
        // output the HTML content
        $pdf->AddPage();
        $pdf->writeHTML($htmlcontent, true, false, true, false, '');
        $pdf->lastPage();
        $pdf->deletePage($pages + 1);
        $pdf->Output($filename, 'D');
    

    如果您想使用UTF-8,整理不起作用,它只会确定排序顺序。 你需要的是设置数据库连接的字符集,在进行任何查询/插入之前,你应该设置这个字符集:

    // tells the mysqli connection to deliver UTF-8 encoded strings.
    $db = new mysqli($dbHost, $dbUser, $dbPassword, $dbName);
    $db->set_charset('utf8');
    
    // tells the pdo connection to deliver UTF-8 encoded strings.
    $dsn = "mysql:host=$dbHost;dbname=$dbName;charset=utf8";
    $db = new PDO($dsn, $dbUser, $dbPassword);
    

    通过此连接读取和写入数据,您应该能够将PDF的编码设置为UTF-8。

    链接地址: http://www.djcxy.com/p/88681.html

    上一篇: english characters with TCPDF

    下一篇: Bangla (Unicode) font not rendering correctly in tcpdf