如何使用Zend Framework生成pdf文件_with_ utf-8多字节字符

时间:2008-10-06 07:50:32

标签: php zend-framework pdf unicode

我对Zend Framework Zend_Pdf类有一个“小”问题。从生成的pdf文件中删除多字节字符。例如。当我写aąbcčdeę时,它会变成带有立法字母剥离的abcd。

我不确定它是否特别是Zend_Pdf问题或一般的php。

源文本以utf-8编码,以及完成工作的php源文件。

提前感谢您的帮助;)

P.S。我运行Zend Framework v.1.6并使用FONT_TIMES_BOLD字体。 FONT_TIMES_ROMAN可以正常工作

4 个答案:

答案 0 :(得分:10)

Zend_Pdf支持Zend Framework 1.5版中的UTF-8。但是,标准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

答案 1 :(得分:1)

我相信Zend_Pdf在1.5中获得了UTF-8支持 - 您运行的是什么版本的Zend Framework?

另外 - 你想用什么字体渲染?你尝试过替代字体吗?

答案 2 :(得分:1)

您是否确保从手册中将此字符编码设置为此示例?

// 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

答案 3 :(得分:0)

ZF v.1.6,TIMES BOLD(据我所知,这是使文字变粗的唯一方法吗?)