簡體   English   中英

使用TCPDF顯示非英語字符

[英]Display non-english characters with TCPDF

我正在使用TCPDF庫導出音樂網站的專輯/目錄發行信息,專輯由可能是英文,中文或任何其他語言的歌曲標簽組成,我無法在其中正確打印非英文字符tcpdf。 我想講幾點。

  1. 我正在使用Zend framework 1.12
  2. 數據庫連接排序規則utf8
  3. 表字段排序utf8_unicode_ci

我的情況是信息來自數據庫,並且我使用視圖以特定格式顯示與相冊相關的信息以及HTML 該版本名稱是中國奧馬爾阿斯拉姆 ,我嘗試了所有的選項,在其上有關設置字體和更改字符排序在初始化TCPDF對象計算器搜索,但每當我打印出來顯示這樣的名字奥马尔阿斯æ‹Â我試圖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();

這是我為更正代碼所做的幾件事。

  1. 使用自定義字體選項添加Ms arial unicode真型字體。

  2. 我在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。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM