0


0

ezpdfドキュメントの特殊文字(ö)

ezPDF(バージョン0.9)でPDFドキュメントを作成しています。

ドキュメントに挿入するデータは、「latin1_swedish_ci」というエンコーディングのMySQLデータベースからのものです。

特殊文字(特に、現在最も重要なö)は、ギリシャの前史的藻類(リテラル)のようにドキュメントに表示されます。

これまでに試したことがあります。

iconv();
htmlspecialchars();
htmlentities();
mb_convert_encoding();
utf8_encode();
include with chr(148);
mb_detect_encoding() returns 'UTF-8';

これらはすべて機能せず、キャラクターは表示されないか、奇妙なマークアップを持っています。

他に何を試すことができますか?

アップデート:新しいバージョンをダウンロードしましたが、まだ問題が残っています:こちらをご覧ください:image:https://i.stack.imgur.com/Ewlft.png [alt text]

4 Answer


1


MySQLからUTF-8としてデータをフェッチしていますか? そうでない場合、PDFジェネレーターに渡す前に、そのステップで既に二重エンコードされている可能性がありますか?

やってみました?

$link = mysql_connect('localhost', 'mysql_user', 'mysql_password');
mysql_set_charset('utf8',$link);

編集:ああすみません、私は誤解しました。 ただし、データベースの設定内容に関係なく、DBのコンテンツはutf-8エンコードまたはその他の形式でエンコードされている可能性があります。

さまざまなステップでどのキャラクターを獲得できるかを正確に示していただけますか?

編集2:

ダウンロード:http://www.ros.co.nz/pdf/からhttp://www.ros.co.nz/pdf/downloads.php?f=pdfClassesAndFonts_009e.zip

そして、zipを解凍した同じディレクトリでこのスクリプトを実行します:

ezText("\xf6\n",0,array('justification'=>'centre'));
$pdf->ezStream();
?>

少なくともドキュメント内で適切なöを取得します。

検出されたエンコーディングがutf-8であると言った場合は、utf8_decodeをラップしてみてください:

ezText(utf8_decode("\xc3\xb6\n"),0,array('justification'=>'centre'));
$pdf->ezStream();
?>

それでも動作しない場合は、古いバージョンのezpdfをお持ちですか? ずっと前ですが、非ASCII文字の修正を何回も追加しなければならなかったようです。


1


この記事のすべてを試しましたが、運はありませんでした。 ブログ投稿でつまずいたのは、次のことを示唆しています。

class.ezpdf.php`の関数 ezProcessText() および class.pdf.php`の `addText()`に次の行を追加します。

$text = mb_convert_encoding($text, "ISO-8859-1", "UTF-8");

私の場合、 `class.pdf.php`に追加しただけですが、うまくいきました!

(出典:http://natealberg.wordpress.com/2010/07/26/ezpdf-and-special-characters-copyright-trademark-and-registered-trademark/)


0


特殊文字のリストはhttp://www.utf8-chartable.de/にあり、先頭に「\ x」を追加するだけで、pdf内のすべての特殊文字を取得できます。

ei:

  1. " \ x24 "$

  2. " \ x5b "[

`$ pdfObject→ ezText(" \ x5b ");`は `[`を出力します


0


残念ながら、CezpdfにUTF-8でエンコードされたテキストを受け入れるように指示する方法はありません。 このスニペットを使用すると、この問題を回避できます。

class UTF8_Cezpdf extends Cezpdf {
    function ezText($text, $size=0, $options=array(), $test=0) {
        $text = utf8_decode($text); // or use mb_convert_encoding(), according to your needs
        return parent::ezText($text, $size, $options, $test);
    }
}

もちろん、古いクラスの新しいクラスのインスタンスをインスタンス化する必要があります。

$pdf = new UTF8_Cezpdf('a4','portrait');

1つの欠点:テーブル内のテキスト($ pdf→ ezTable()を介して追加された)は適切にエンコードされません。