Ley*_*yla 6 php cakephp tcpdf cakephp-3.0
我在文档后面安装了插件"CakePDF":https://github.com/FriendsOfCake/CakePdf
现在我想构建第一个PDF,我收到以下错误:
这是我在bootstrap.php中的配置:
Configure::write('CakePdf', [
'engine' => 'CakePdf.Tcpdf',
'margin' => [
'bottom' => 15,
'left' => 50,
'right' => 30,
'top' => 45
],
'download' => true,
'encoding' => 'UTF-8'
]);
Run Code Online (Sandbox Code Playgroud)
我编写的唯一代码是模板中的以下代码:
$pdf = new TCPDF('P', 'mm', 'A4', true, 'UTF-8', false);
Run Code Online (Sandbox Code Playgroud)
这是functions.php中第68行的代码:
function h($text, $double = true, $charset = null)
{
if (is_string($text)) {
//optimize for strings
} elseif (is_array($text)) {
$texts = [];
foreach ($text as $k => $t) {
$texts[$k] = h($t, $double, $charset);
}
return $texts;
} elseif (is_object($text)) {
if (method_exists($text, '__toString')) {
$text = (string)$text;
} else {
$text = '(object)' . get_class($text);
}
} elseif (is_bool($text)) {
return $text;
}
static $defaultCharset = false;
if ($defaultCharset === false) {
$defaultCharset = mb_internal_encoding();
if ($defaultCharset === null) {
$defaultCharset = 'UTF-8';
}
}
if (is_string($double)) {
$charset = $double;
}
return htmlspecialchars($text, ENT_QUOTES | ENT_SUBSTITUTE, ($charset) ? $charset : $defaultCharset, $double);
}
Run Code Online (Sandbox Code Playgroud)
我非常困惑,无法找到任何解决方案.有人有想法吗?
lor*_*key 10
在尝试查找和调试相同的错误超过一个小时后,我只是将值重置UTF-8为使用TCPDF后 - 一切都像以前一样工作:
$pdf = new TCPDF('P', 'mm', 'A4', true, 'UTF-8', false);
///...create, save, display your pdf
// Reset the encoding forced from tcpdf
mb_internal_encoding('UTF-8');
Run Code Online (Sandbox Code Playgroud)
我也尝试在调用之后直接重置它new TCPDF,一切都很好.我不知道这个重置会出现什么问题:)我的PDF在此之后仍然看起来一样,但电子邮件再次发送.
正如您所想到的,问题是 TCPDF 类与 混淆mb_internal_encoding(),它在 CakePHPsh()函数中使用来确定应用程序的默认编码,以防没有明确的编码作为参数传递。
我不是 TCPDF 专家,已经很久没有使用它了,但是从快速浏览当前的源代码来看,我很难理解为什么它会干扰内部编码,因为这是mb_*该库的唯一功能使用 is mb_convert_encoding(),其中两个编码参数都被传递,因此根本不使用内部编码。话虽这么说,我会将其作为错误/问题报告给 TCPDF 开发人员。
无论如何,您遇到这个问题只是因为您使用 CakePDF 的方式错误。无需手动创建 PDF 引擎实例,这就是 CakePDF 自动为您做的事情,这几乎是该插件的全部要点,它抽象了 PDF 创建,以便您只需在视图模板中构建适当的 HTML。这样,您还可以避免当前遇到的 TCPDF 编码问题,因为视图模板是在创建 PDF 引擎实例之前渲染的。
长话短说,仅在视图模板中构建 HTML,如果您确实需要访问 PDF 引擎实例,因为您需要做的事情只能通过这种方式实现,那么 CakePDF 不是您正在寻找的插件为了。
| 归档时间: |
|
| 查看次数: |
3435 次 |
| 最近记录: |