2008-10-06 63 views
5

我对Zend Framework Zend_Pdf类有一个“小”的问题。多字节字符从生成的pdf文件中剥离。例如。当我写aąbcčdeę它变成abcd与立陶宛信件被剥夺。如何使用Zend Framework生成pdf文件_with_ utf-8多字节字符

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

源文本以utf-8编码,以及执行该工作的php源文件。

非常感谢您的帮助;)

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

回答

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

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

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

0

ZF诉1.6,TIMES_BOLD(我的理解这就是加粗文本的唯一途径?)

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