tp5使用dompdf组件安装字体报错

使用dompdf组件转word到pdf,乱码。

使用load_font.php安装字体,load_font.php和simsun.ttf都放在 \vendor\dompdf\dompdf 下

输入命令,

php load_font.php simsun simsun.ttf

报错:

Fatal error: Uncaught Error: Class 'think\facade\Lang' not found in \vendor\zoujingli\think-library\src\common.php on line 296

Error: Class 'think\facade\Lang' not found in \vendor\zoujingli\think-library\src\common.php on line 296

Call Stack:
    0.0008     422064   1. {main}() \vendor\dompdf\dompdf\load_font.php:0
    0.0015     425624   2. require_once('\vendor\autoload.php') \vendor\dompdf\dompdf\load_font.php:3
    0.0025     434144   3. ComposerAutoloaderInitaf543090a14d5bae306c4ccd766cf053::getLoader() \vendor\autoload.php:25    0.0225     759328   4. {closure:\vendor\composer\autoload_real.php:37-43}(string(32), string(81)) \vendor\composer\autoload_real.php:45
    0.0236     806600   5. require('\vendor\zoujingli\think-library\src\common.php') D:\wwwroot\www_qingkang\vendor\composer\autoload_real.php:41

引用 皆我工具箱 小程序回复内容作答:
这个错误提示是因为在加载字体文件时,dompdf组件使用了thinkphp框架的语言包。但你的环境中没有安装thinkphp框架,所以会报错。

解决方法是将dompdf组件中使用到thinkphp的代码注释掉,可以按照以下步骤操作:

  1. 打开 load_font.php 文件,在第296行找到如下代码:
        /** if (is_file($langPath = dirname(__DIR__) . '/app/lang/' . $locale . '.php')) {
            \think\facade\Lang::load($langPath);
        } else { 
            \think\facade\Lang::load(dirname(__DIR__) . '/vendor/dompdf/dompdf/src/lang/en.php');
        } **/
  1. 将上述代码注释掉,修改为如下代码:
        /** if (is_file($langPath = dirname(__DIR__) . '/app/lang/' . $locale . '.php')) {
            // \think\facade\Lang::load($langPath); // 注释掉这行代码
        } else { 
            // \think\facade\Lang::load(dirname(__DIR__) . '/vendor/dompdf/dompdf/src/lang/en.php'); // 注释掉这行代码
        } **/
  1. 保存文件并重新运行 php load_font.php simsun simsun.ttf 命令,应该就可以成功安装字体了。

注意:这只是临时的解决方案,如果你需要使用thinkphp框架的其他功能,可能会导致其他问题。建议在合适的环境中使用dompdf组件。

该回答通过自己思路及引用到GPTᴼᴾᴱᴺᴬᴵ搜索,得到内容具体如下:
根据报错信息来看,错误是由于找不到think\facade\Lang类而导致的。这个错误是由于在load_font.php文件中使用了ThinkPHP框架的类,而该文件并不在框架的上下文中执行,因此无法加载相关的类。

为了解决这个问题,你可以尝试手动加载所需的类文件,或者将load_font.php文件放置在具有框架上下文的位置,以便能够访问到相关的类。以下是一种可能的解决方案:

1、 将load_font.php文件从\vendor\dompdf\dompdf目录移动到项目的根目录下。
2、 在load_font.php文件的开头,手动加载ThinkPHP框架的自动加载文件和其他所需的类文件。可以使用以下代码替换掉load_font.php文件的开头部分:

<?php
require_once __DIR__.'/../vendor/autoload.php'; // 根据自己的项目目录结构进行调整

use think\facade\Lang; // 使用需要的类

// 其他代码...

3、 执行命令php load_font.php simsun simsun.ttf来安装字体。

这样做的目的是确保load_font.php文件在正确的上下文中执行,可以加载到所需的类文件。请根据你的项目目录结构进行必要的调整,以确保加载文件的路径是正确的。
如果你仍然遇到问题,请提供更多关于你的项目结构和框架使用情况的详细信息,以便我们能够更好地帮助你解决问题。


如果以上回答对您有所帮助,点击一下采纳该答案~谢谢

【相关推荐】



  • 这篇博客: 解决Dompdf中文乱码问题中的 修改load_font.php文件 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:

    因为之前把该文件直接放在了dompdf目录下,因此需要其默认的加载autoloader的路径如下:

    // 1. [Required] Point to the composer or dompdf autoloader
    require_once "../../autoload.php";
    

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^

缺库要用其他的镜像来下载。

结合GPT给出回答如下请题主参考

  1. 确保你已经安装了dompdf组件,如未安装,请在composer.json文件中添加以下代码:
"require": {
    "dompdf/dompdf": "^0.8.5"
}

然后使用命令composer update更新一下。

  1. 确认load_font.php文件和字体文件simsun.ttf已经放置在正确的路径 \vendor\dompdf\dompdf 下。

  2. 在项目根目录下新建一个php文件,比如example.php,然后使用以下代码安装字体:

<?php
require_once 'vendor/autoload.php'; //导入autoload.php文件
$dompdf = new Dompdf\Dompdf(); //实例化Dompdf类
$dompdf->loadFont('simsun'); //安装宋体字体
  1. 保存文件后,使用命令行工具进入到该项目根目录下,运行php example.php命令来执行代码,如果提示simsun字体已经成功安装,则表示安装成功。

  2. 转换word到pdf时,可以使用以下代码:

<?php
require_once 'vendor/autoload.php'; //导入autoload.php文件
$dompdf = new Dompdf\Dompdf(); //实例化Dompdf类
$html = '<html><body><p>你好,世界!</p></body></html>'; //将要转化为pdf的html内容
$dompdf->loadHtml($html); //加载html内容
$dompdf->setPaper('A4', 'landscape'); //设置纸张大小和方向
$dompdf->render(); //渲染pdf文件
$dompdf->stream("example.pdf"); //输出pdf文件到浏览器
  1. 如果仍然出现乱码问题,可以尝试更改字体设置,比如修改为微软雅黑:
<?php
require_once 'vendor/autoload.php'; //导入autoload.php文件
$dompdf = new Dompdf\Dompdf(); //实例化Dompdf类
$dompdf->loadFont('Microsoft-YaHei'); //安装微软雅黑字体
$html = '<html><body><p>你好,世界!</p></body></html>'; //将要转化为pdf的html内容
$dompdf->loadHtml($html); //加载html内容
$dompdf->setPaper('A4', 'landscape'); //设置纸张大小和方向
$dompdf->render(); //渲染pdf文件
$dompdf->stream("example.pdf"); //输出pdf文件到浏览器

PHP dompdf中文乱码、换行解决方案

4、完整例子代码:

         //模板路径
       $path = 'public/templates/1.html';

       //文件生成路径
       $filePath='public/pdf/test.pdf';

       //声明一个DomPDF对象
       $dompdf = new Dompdf();

       //HTML组合
       $html = file_get_contents('public/templates/html/header.html');
       //中间需要替换的部分
       $html .= file_get_contents($path);

       $html .= file_get_contents('public/templates/html/footer.html');

       //注入的变量
       $data['test'] = 'test';

       //HTML注入变量
       $html = $this->inject($html,$data);

       //加载HTML内容
       $dompdf->loadHtml($html);

       //设置PDF纸张、方向 portrait、landscape
       $dompdf->setPaper('A4', 'portrait');

       // 渲染pdf
       $dompdf->render();

       //生成一个pdf文件
       file_put_contents($filePath,$dompdf->output());

引用 皆我百晓生 小程序回复内容作答:
根据错误信息,可以看出是缺少了think\facade\Lang类。这个类是ThinkPHP框架中的一个门面类,用来实现语言包的管理。

由于你正在使用dompdf组件,并不是在ThinkPHP框架中,所以可能导致找不到think\facade\Lang类的错误。

解决方法:

  1. 如果你确实在使用ThinkPHP框架,并且已经安装了thinkphp/library扩展包,那么可以检查一下是否在入口文件index.php中正确引入了autoload.php文件,如果没有引入,可以手动加上require DIR . '/vendor/autoload.php';。

  2. 如果你不是在使用ThinkPHP框架,只是简单地使用dompdf组件,那么可能load_font.php文件有问题。可以尝试使用命令行执行以下命令:
    php -f load_font.php simsun simsun.ttf

  3. 如果以上方法都无效,可以尝试使用其他的字体文件,或者尝试其他的PDF转换工具,如mPDF或TCPDF等。

希望以上方法能够解决你的问题。如果还有其他疑问,请随时提问。

该回答引用ChatGPT,希望对题主有所帮助,如有帮助,还望采纳。


根据报错信息,发现是在加载dompdf组件的字体时出现了错误,调用了think\facade\Lang类,但是该类无法找到。这个问题可能是因为dompdf组件的依赖库和你的项目的依赖库发生冲突,导致加载错误。

可以尝试使用composer安装dompdf组件,或者更新think-library组件版本来解决这个问题。另外,也可以尝试在load_font.php中使用绝对路径来加载字体文件,避免文件路径的问题。

你的问题主要集中在两个部分:一是使用dompdf组件转换Word到PDF时出现乱码,二是运行load_font.php文件时报错,提示“Class 'think\facade\Lang' not found”。

第一个问题,使用dompdf组件转换Word到PDF时出现乱码。这可能是由于字体问题导致的。确保simsun.ttf字体文件已经正确安装并在系统中可用。如果问题仍然存在,你可能需要尝试其他字体或者使用默认字体。

第二个问题。这个问题的原因是找不到think\facade\Lang这个类。这个类应该是ThinkPHP框架的一部分。你需要确认你的项目中是否已经安装了ThinkPHP框架,并且确保ThinkPHP框架的路径已经被正确引入。

问题似乎与ThinkPHP框架的自动加载机制有关,确保 load_font.php 脚本在一个独立的PHP环境中运行,而不是与ThinkPHP应用程序混合在一起。这将确保脚本不会受到不相关的框架配置的干扰。
你可以尝试手动加载字体而不使用 load_font.php 脚本。在 dompdf_config.custom.inc.php 中,添加以下内容来加载字体:

// 设置字体路径
define('DOMPDF_FONT_DIR', 'path/to/fonts');

// 设置默认字体
define('DOMPDF_FONT_CACHE', 'path/to/font_cache');

// 加载字体
require_once 'path/to/fonts/load_font.php';

// 添加字体
load_font('simsun', 'simsun.ttf');


将 'path/to/fonts' 替换为你实际字体文件和缓存文件的路径。这将手动加载字体,而不会涉及ThinkPHP框架的自动加载机制。