2016-07-21 72 views
-1

我正在使用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(); 
+0

我在行#2上看到'ISO-8859-1' ... –

+0

是啊,那是因爲我嘗試了不同的選項,並且已經嘗試了UTF-8選項,並使用'$ pdf = new TCPDF(「L」 ,「mm」,「A4」,TRUE,'UTF-8',false);'將'Extra'a EP'這個字符輸出爲'Extran?a EP'和'奧馬爾阿斯拉姆'作爲'???? ???'。 –

回答

0

這裏是我做了幾件事來糾正我的代碼。

  1. 使用的自定義字體選項添加女士宋體unicode的True Type字體。

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

,如果你想使用UTF-8工作的整理沒有幫助,它只是決定了排序順序。你propably需要的是設置數據庫連接的字符集,這個你做任何查詢/插入之前,應設置:

// 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。

+0

是的你是對的我在ini文件中將這些設置定義爲'database.params.charset \t \t =「utf8」'用於數據庫連接,並在引導時加載。 –

+0

@MuhammadOmerAslam - 然後我會檢查你的HTML頁面是否被正確編碼,這個[W3C檢查器](http://validator.w3.org/i18n-checker/)可以給你更多的提示。 – martinstoeckli

+0

大聲笑@martinstoeckli可能是你錯過了我的答覆,我發佈之前你的答覆,我已經修復它,謝謝你的關注。 –