5

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

4 回答 4

10

Zend_PdfZend 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

于 2008-10-27T17:33:14.223 回答
1

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

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

于 2008-10-06T11:37:50.570 回答
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
于 2008-10-09T01:56:48.980 回答
0

ZF v. 1.6,TIMES_BOLD(据我所知,这是使文本变粗的唯一方法?)

于 2008-10-07T07:03:23.463 回答