специальные символы (ö) в документе ezpdf - PullRequest
0 голосов
/ 18 августа 2010

Я создаю документ PDF с ezPDF (версия 0.9).

Данные, которые я вставляю в документ, взяты из базы данных MySQL с кодировкой: "latin1_swedish_ci".

Специальные символы (особенноö, что наиболее важно сейчас), отображаются как греческая доисторическая алгабра (буквальная) в документе.

Что я пробовал до сих пор:

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

Все это не сработает,символ либо не отображается, либо имеет странную разметку.

Что еще можно попробовать?

ОБНОВЛЕНИЕ : Загружена новая версия, проблема все еще остается: См. здесь:alt text

Ответы [ 4 ]

2 голосов
/ 19 августа 2010

Вы извлекаете данные из MySQL как UTF-8?Если нет, возможно, он уже был дважды закодирован на этом шаге перед передачей его в генератор PDF?

Вы пробовали?

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

Редактировать: О, извините, я неправильно понял.НО, имейте в виду, что содержимое в БД может быть закодировано в формате utf-8 или закодировано в любом другом формате, независимо от того, что вы установили для базы данных, предположительно содержащейся.

Можете ли вы показать нам, какие именно символы вы получаете на различных этапах?

Edit2:

Я скачал: http://www.ros.co.nz/pdf/downloads.php?f=pdfClassesAndFonts_009e.zip из http://www.ros.co.nz/pdf/

и запустите этот скрипт в том же каталоге, я распаковал zip:

<?php
include 'class.ezpdf.php';
$pdf = new Cezpdf('a4','portrait');
$pdf->ezText("\xf6\n",0,array('justification'=>'centre'));
$pdf->ezStream();
?>

и, по крайней мере, получил правильный ö в документе.

, если вы сказали, что обнаруженная кодировкаutf-8, попробуйте обернуть вокруг него код utf8_dede:

<?php
include 'class.ezpdf.php';
$pdf = new Cezpdf('a4','portrait');
$pdf->ezText(utf8_decode("\xc3\xb6\n"),0,array('justification'=>'centre'));
$pdf->ezStream();
?>

Если он все еще не работает, возможно, у вас установлена ​​более старая версия ezpdf?Кажется, что они действительно должны были добавить некоторые исправления для не-ascii персонажей, хотя это было давно.

1 голос
/ 01 октября 2013

Я попробовал все в этом посте, но без везения. Наткнулся на пост в блоге, предлагает следующее:

Добавьте следующую строку к функциям ezProcessText() в class.ezpdf.php и addText() в class.pdf.php:

$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 голосов
/ 02 января 2014

К сожалению, нет способа заставить 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');

Один недостаток: текст в таблицах (добавленочерез $ pdf-> ezTable ()) не будет правильно закодирован.

0 голосов
/ 23 апреля 2011

Список специальных символов можно найти по адресу http://www.utf8 -chartable.de / , и, просто добавив «\ x» в начале, вы можете получить все специальные символы в своем PDF-файле.

EI:

  1. "\x24" => $
  2. "\x5b" => [

$pdfObject->ezText("\x5b"); напечатает [

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...