最新のTCPDFバージョン(5.9)を使用しています。しかし、エンコードにいくつかの奇妙な問題があります。 ąčęėįšųūžのようなリトアニア語の記号が必要です。しかし、ほんの少しだけ入手してください。その他は?????だから私は何をすべきですか?デフォルトの時間フォントを使用します(TCPDFダウンロードに付属しています)。
任意の助けをいただければ幸いです。
TCPDFコンストラクターの$unicode
パラメーターをfalse
に設定し、$encoding
パラメーターを'ISO-8859-1'
またはその他の文字マップに設定します。
これ はあなたを助けます:
UTF-8ユニコードのデフォルト:
$pdf = new TCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false);
欧州文字セットのコンストラクターの例:
$pdf = new TCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, false, 'ISO-8859-1', false);
TCPDFはutf8では非常に注意が必要です。必要なものを実現する最良の方法は、生成されたPDFファイル自体にフォントを埋め込むことです。TCPDFパッケージのfreeserifフォントを使用できます。言語ですが、出力ファイルに〜700kbを追加します。これはおそらく、ファイルサイズが重要でない場合に必要なシンボルを取得する最も簡単な方法です。
また、必要な文字を含む独自の埋め込みフォントを作成することもできます。おそらくそれが最良の解決策であり、普遍的で小さなサイズを維持しますが、より複雑です。
または、システムから取得したコアフォントを中継し、見つからない場合は代替フォントで置き換えることができます。これにより、出力ファイルが非常に軽くなりますが、エキゾチックな文字を取得するためにフォントのサブセット化の必要性が追加されます。個人的にはこれで成功していませんので、フォントを埋め込むことが最良の解決策であると考えています。
cPDFコアフォントに含まれているフォント-dejavusans、すべてのリトアニア語の文字が表示されます。以下を追加してください:
$pdf->setHeaderFont(Array('dejavusans', '', 10, '', false));
$pdf->setFooterFont(Array('dejavusans', '', 8, '', false));
$pdf->SetFont('dejavusans', '', 10, '', false);
フォントをfreeserifに設定して、動作するようにします。テストしました。
$pdf->SetFont('freeserif', '', 14, '', true);
デフォルトのHelveticaフォントを使用してルーマニア語のテキストをレンダリングしようとしたときに、この同じ状況を発見しました。いくつかの調査を行うと、tcpdfライブラリはデフォルトのフォント(「コア」フォントと呼ばれる)をLatin1文字として扱うため、UTF-8エンコードを使用してunicodeフラグを設定するように指示しても、テキストは文字通り翻訳されますレンダリングの前に、Latin1の同等物に。ライブラリのデフォルトの動作は、Latin1で同等のものが見つかった場合、同等の文字を見つけることができる各文字を翻訳します。
これは、次のメソッドチェーンのTCPDFクラス内にあります。Write()
-> Cell()
-> getCellCode()
-> _escapetext()
。
_escapetext()
の内部では、_$this->isunicode
_をチェックしてから、選択したフォントをチェックして、そのタイプがcore | TrueType | Type1であるかどうかを確認しています。ある場合は、UTF8ToLatin1()
メソッドを使用して、文字列を「ラテン化」します。これは、「?」翻訳が行われています。
私がお勧めするのは、使用しているデフォルトのフォントに似たカスタムのUnicodeフォント(Deja Vu Sansなど)を使用することです。私の現在の状況ではそれがうまくいきました。
TCPDFを฿、포などの特殊文字とともに使用するには、unicodeフォント:
downloadフォントはこちら: ftp://ftp.fu-berlin.de/unix/X11/multimedia/MPlayer/contrib/fonts /arialuni.ttf.bz2
テストPDFファイルを作成し、このフォントをTCPDFの例にロードします。
$fontname = $pdf->addTTFfont('/var/www/app/images/fonts/arialuni.ttf', 'TrueTypeUnicode', '', 32);
これにより、次のようなフォントが作成されます。
application/libraries/tcpdf/fonts/arialuni.ctg.z
application/libraries/tcpdf/fonts/arialuni.php
application/libraries/tcpdf/fonts/arialuni.z
これで新しいフォントを設定できます:$ pdf-> SetFont( 'arialuni'、 ''、10.5);
そして今、あなたは฿などのような特別なユニコード文字を使用することができます...
Karnātakaのような文字をデータベースから読み取り、次のように表示するのに問題がありますkarn?takaつまり"?"は不要ですその後、次のことを行います:
接続の文字セットを定義します(mysql_set_charset()
):
_$con = mysql_connect("localhost","root","");
if (!$con)
{
die('Could not connect: ' . mysql_error());
}
mysql_select_db("database_name", $con) or die(mysql_error());
mysql_set_charset('utf8',$con);
_
$pdf->SetFont('DejaVuSerif', '', 10);
の代わりに$pdf->SetFont('helvetica', 'B', 12);
を使用します
IIRCでは、新しいフォントを作成するときにエンコードを定義できます ここで説明 。それ以外の場合は、フォントの作成時に定義されたエンコードを使用する必要があります。 TCPDFに同梱されているフォントはすべてWinAnsiEncoding ... a.k.a.コードページ1252を使用しているようです。
不器用だが効果的。
私にとっては、フォントの問題でした。フォントtimes
を使用しましたが、ローカルのマルチバイトクラスが正しく表示されませんでした。 freeserif
に変更したとき、それらは正常に動作していました:)
Dejavusansフォントを使用すると、ロシア文字とラトビア文字の両方で正常に機能しました。
デフォルトのTCPDFパッケージではdejavusansおよびfreeserifがテストされており、両方のフォントはリトアニア文字で動作します。私もいくつかのロシア語の文字を入力しましたが、それらも機能しました。このコードを使用してテストしました。
$this->pdf = new \TCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false);
$this->pdf->AddPage();
$this->pdf->SetFont('dejavusans', 'B', 20); // UTF8 fonts with lithuanian support: freeserif, dejavusans
$this->pdf->Write(0, 'ąžūčšęėųįĄŽŪČŠĘĖŲĮ Превед Кросавчег!', '', 0, 'C', true, 0, false, false, 0);
$fontname = $pdf->addTTFfont('C:\xampp\htdocs\copyshop\fonts\07-TH-Sarabun-PSK\THSarabun.ttf', 'TrueTypeUnicode', '', 32);
$pdf->SetFont($fontname, '', 16,'',FALSE); //Working
フォントを変更して、通常の£およびリトアニア語の記号を表示する
$pdf->SetFont('cid0cs', '', 12);
私はルーマニア語の文字で同じ問題を抱えていましたが、問題はエンコーディングではありませんでした、LC_CTYPEまたは[ 〜#〜] tcpdf [〜#〜]、しかし私が使用したフォント。私はTWIG Courierフォントでテンプレートを作成しました。フォントをfreeserifに変更してみてください。
このためには、パラメーターTCPDFコンストラクターの次のコードを使用します
$pdf = new TCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, false, 'ISO-8859-1', false);
それはあなたを助けます。