创建 PDF 时出现 iconv 错误 Dot_Pdf,DotKernel with Zend 完全没有特殊字符

iconv error on PDF creation Dot_Pdf, DotKernel with Zend with no special characters at all

我在一个项目中使用 DotKernel 1.8.0,并且在生成一个长 PDF 文件时,其中包含一些数据(经常使用 addText())。我遇到了 iconv() 编码错误 "Detected an illegal character in input string",这是一个非常直接的错误解释。

当我检查产生错误的源代码行时(如提到的回溯),我能够看到哪个 addText() 调用产生了错误但我现在已经尝试使用简单的 "abcdef" 文本, 所以没有特殊字符,错误仍然发生。我的网站使用 UTF-8 字符集。

我猜该错误与 DotKernel 从 ISO 更改为 UTF-8 有关,但我似乎找不到解决问题的方法。任何可能有帮助的想法和猜测?

您应该根据 Zend_Pdf 构建您的 class 来处理 PDF 文件。

因为没有class Dot_Pdf

DotKernel 的整体思想是让您可以直接使用 Zend Framework classes。哪些被认为是生产就绪。不要重新发明轮子。

让我知道这是否解决了问题。如果没有,请 post 一些示例代码。

错误修复已通过将文本绘制的编码设置为 UTF-8 解决。我猜 Zend_Pdf 默认为另一个。

我的修复是快速的,我需要更改 drawText() 调用以添加 'UTF-8' 参数,这样我就有了:

$pdf->drawText("text", $x, $y, "UTF-8");

希望这对以后的任何人都有帮助 ;)

您还可以创建一个 class 允许您为所有文档设置字符集

class Dot_Pdf extends Zend_Pdf
{
    /**
     * The document charset
     * @var string $_charset
     */
    private $_charset;
    /**
     * Constructor for Zend_Pdf with Charset UTF-8
    */
    public function __construct()
    {
        parent::__construct();
        $this->setCharset();
    }

    /**
     * Set text charset
     * @access public
     * @param string $charset
     * @return bool $success
     */
     public function setCharset($charset = 'UTF-8')
     {
        // full charset list here http://a4esl.org/c/charset.html
        $charsetList = ['UTF-8', 'windows-1258', 'macintosh', 'windows-1252' ];

        if(in_array($charset, $charsetList))
        {
            // if valid
            $this->_charset = $charset;
            return true;
        }
        // if not valid
        return false;
     }

     /**
      * Draw Text - with collation
      * @access public
      * @param string $text
      * @param float $x
      * @param float $y
     */
     public function drawText($text, $x, $y)
     {
        parent::drawText($text, $x, $y, $this->_charset);
     }
}

字符集数组太大,目前不相关。 这样设置错误的字符集就没有问题了。