代码之家  ›  专栏  ›  技术社区  ›  Sejanus

如何使用Zend框架生成带有UTF-8多字节字符的PDF文件

  •  5
  • Sejanus  · 技术社区  · 16 年前

    Zend框架Zend_PDF类有一个“小”问题。从生成的PDF文件中去除多字节字符。例如,当我写一个BC_ de_时,它变成abcd,去掉立陶宛字母。

    我不确定它是不是特别的Zend_PDF问题还是一般的PHP问题。

    源文本以UTF-8以及执行该任务的PHP源文件编码。

    事先感谢您的帮助;)

    P.S.I运行Zend Framework 1.6版,使用字体“Times”加粗字体。字体\u Times \u Roman有效

    4 回复  |  直到 14 年前
        1
  •  10
  •   Bill Karwin    16 年前

    Zend_Pdf 支持Zend框架1.5版中的UTF-8。但是,标准PDF字体只支持Latin1字符集。这意味着你不能使用 Zend_Pdf_Font::FONT_TIMES_BOLD 或任何其他“内置”字体。要使用特殊字符,您必须加载另一个TTF字体,其中包含来自其他字符集的字符。

    我使用MacOSX,所以我尝试了下面的代码,它生成了一个包含正确字符的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

        2
  •  1
  •   leek Bharat Chodvadiya    16 年前

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

    还有-你想用什么字体渲染?你试过其他字体吗?

        3
  •  1
  •   leek Bharat Chodvadiya    16 年前

    您确定要将字符编码设置为手册中的这个示例吗?

    // 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
    
        4
  •  0
  •   Sejanus    16 年前

    zf v.1.6,倍加粗(据我所知,这是使文本加粗的唯一方法?)