Как сгенерировать PDF-файлы _with_ utf-8 многобайтовых символов с помощью Zend Framework

У меня есть "маленькая" проблема с Zend Framework Zend_Pdf классом. Многобайтовые символы извлекаются из сгенерированных файлов PDF. Например, когда я пишу aąbcčdeę, он становится abcd с разорванными литовскими буквами.

Я не уверен, является ли это проблемой Zend_Pdf или php в целом.

Исходный текст кодируется в utf-8, а также исходный файл php, который делает эту работу.

Заранее спасибо за вашу помощь;)

PS Я запускаю Zend Framework v. 1.6 и использую шрифт FONT_TIMES_BOLD. FONT_TIMES_ROMAN работает

4 ответа

Решение

Zend_Pdf поддерживает UTF-8 в версии 1.5 Zend Framework. Однако стандартные шрифты PDF поддерживают только набор символов Latin1. Это означает, что вы не можете использовать Zend_Pdf_Font::FONT_TIMES_BOLD или любой другой "встроенный" шрифт. Чтобы использовать специальные символы, вы должны загрузить другой шрифт TTF, который включает символы из других наборов символов.

Я использую Mac OS X, поэтому я попробовал следующий код, и он создает PDF-документ с правильными символами.

$pdfDoc = new Zend_Pdf();
$pdfPage = $pdfDoc->newPage(Zend_Pdf_Page::SIZE_LETTER);

// load TTF font from Mac system library
$font = Zend_Pdf_Font::fontWithPath('/Library/Fonts/Times New Roman Bold.ttf');
$pdfPage->setFont($font, 36);

$unicodeString = 'aąbcčdeę';
$pdfPage->drawText($unicodeString, 72, 720, 'UTF-8');

$pdfDoc->pages[] = $pdfPage;
$pdfDoc->save('utf8.pdf');

Смотрите также этот журнал ошибок: http://framework.zend.com/issues/browse/ZF-3649

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

// Draw the string on the page
$pdfPage->drawText($unicodeString, 72, 720, 'UTF-8');

Если вы застряли в необходимости использовать жирный шрифт, возможно, попробуйте один из других жирных шрифтов?

Zend_Pdf_Font::FONT_COURIER_BOLD
Zend_Pdf_Font::FONT_TIMES_BOLD
Zend_Pdf_Font::FONT_HELVETICA_BOLD

Я считаю, что Zend_Pdf получил поддержку UTF-8 в версии 1.5 - Какую версию Zend Framework вы используете?

Кроме того - каким шрифтом вы пытаетесь визуализировать? Вы пробовали альтернативные шрифты?

ZF v. 1.6, TIMES_BOLD (насколько я понимаю, это единственный способ сделать текст жирным?)

Другие вопросы по тегам