Как сгенерировать 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 (насколько я понимаю, это единственный способ сделать текст жирным?)