您的位置:首页 > 房产 > 建筑 > 大连建设招标网_怎么做网页关联小程序_广州seo效果_网络营销八大目标是什么

大连建设招标网_怎么做网页关联小程序_广州seo效果_网络营销八大目标是什么

2025/2/25 2:30:17 来源:https://blog.csdn.net/luoluoyu2013/article/details/143712359  浏览:    关键词:大连建设招标网_怎么做网页关联小程序_广州seo效果_网络营销八大目标是什么
大连建设招标网_怎么做网页关联小程序_广州seo效果_网络营销八大目标是什么

目录

 1、前言

2、使用环境

3、安装dompdf

4、使用dompdf

5、中文乱码问题

6、页面设置问题

7、PDF生成问题

8、模板变量读取

结语


1、前言


  最近搞生成合同模板功能时,需要使用PHP生成PDF,开始接触dompdf这个类库,dompdf可以把HTML文件生成PDF。

        遇到一些问题,参考了一些网上的解决方法,特汇总备用。

2、使用环境


  版本不同,可能会导致解决方案行不通,故记录使用环境。
  1、Nginx1.15 (Win64) PHP/7.4.3
  2、ThinkPHP6.1
  3、dompdf v2.0.8

3、安装dompdf


  1、使用命令行进入到项目根目录;
  2、使用composer安装dompdf;

composer require dompdf/dompdf

       3、检查是否安装成功,在vendor 中查看是否有dompdf文件夹。

4、使用dompdf

4.1)在common.php文件中构建html_to_pdf函数

// 文件路径:common.phpuse Dompdf\Dompdf;
use Dompdf\Options;if (!function_exists('html_to_pdf')) {function html_to_pdf($html, $filename = 'document.pdf', $stream = true) {$options = new Options();//设置使用远程图片填充pdf内容$options->set('isRemoteEnabled', true);//$options->setIsRemoteEnabled(true);//设置html文件编码$html = mb_convert_encoding($html, 'UTF-8');$dompdf = new Dompdf($options);$dompdf->loadHtml($html);//设置纸张大小和方向$dompdf->setPaper('A4', 'portrait');$dompdf->render();if ($stream) {//直接在浏览器下载生成的pdf文件$dompdf->stream($filename, ['Attachment' => 0]);} else {//将生成的pdf保存到服务器file_put_contents($filename,$dompdf->output());return $dompdf->output();}}
}

4.2) 在项目中调用html_to_pdf函数生成pdf文件

$template_content = '<html lang=\"en\">'.'<head>'.'<meta charset=\"UTF-8\">'.'<title>这是pdf</title>'.'<link rel="stylesheet" href="http://www.pdf.com/static/css/admin/main.css">'.'</head>'.'<body>'.'<div>'.'<p class="p01">我是html文件哈:{$name}----{$email}</p>'.'<p style="color: #ff4036; font-size: 30px; font-weight: bold;text-align: center;">标题一:----{$name}</p>'.'<p>标题二:----{$email}<br/><br/> 我换行啦,我是用来测试<br/>中文换行的啦,请换行看结果,不支持中文换行</p>'.'<p>标题三:----{$email}</p>'.'</div>'.'</body>'.'</html>';$html =  View::display($template_content, ['name' => '这是变量名字啦', 'email' => 'pdf@qq.com']);html_to_pdf($html, 'template01.pdf', false);//生成pdf文件,不显示、不直接下载

备注:

view模板变量的调用这里不再赘述,大家看tp文档即可。
ThinkPHP官方手册


5、中文乱码问题

错误1

{"code":0,"msg":"Malformed UTF-8 characters, possibly incorrectly encoded","data":{"code":0,"line":50,"file":"D:\\myweb\\ytems\\vendor\\topthink\\framework\\src\\think\\response\\Json.php","message":"Malformed UTF-8 characters, possibly incorrectly encoded","trace":[{"file":"D:\\myweb\\ytems\\vendor\\topthink\\framework\\src\\think\\Response.php","line":388,"function":"output","class":"think\\response\\Json","type":"->","args":[false]},{"file":"D:\\myweb\\ytems\\vendor\\topthink\\framework\\src\\think\\Response.php","line":131,"function":"getContent","class":"think\\Response","type":"->","args":[]},{"file":"D:\\myweb\\ytems\\public\\index.php","line":22,"function":"send","class":"think\\Response","type":"->","args":[]}]}}

原因

        当出现以上错误时,可能是html文件编码问题(网上查找答案时大多给出的是这个处理方法),然后我用网上提供的方式修改html编码后依旧无法解决这个问题,后来排查发现,竟然是因为我在已经打开的生成pdf文件的基础上再次执行代码重复生成同名的pdf文件导致,关闭打开的pdf文件,再次执行代码,问题解决。


错误2

        生成pdf文件中文乱码问题。

解决:

  1、下载类库语言安装脚本
    https://github.com/dompdf/utils.git

  2、将里面的load_font.php文件拷贝到项目根目录,和vendor同级

PS D:\myweb\ytems>

        3、下载宋体字体文件 simsun.ttf 也放置在项目根目录,如上ytems目录,也与vendor同级,与load_font.php同目录。

        simsun字体下载|simsunttcsimsunttf字体包v6.457袖珍官方-雨林木风系统

     4、开始安装字体,使用命令行进入根目录(即刚刚存储load_font.php文件 和 simsun.ttf文件的ytems目录),并安装字体。

php load_font.php simsun simsun.ttf

命令说明: php load_font.php 字体路径,字体名字

注意,simsun simsun.ttf  两个参数不可以写反成:simsun.ttf simsun

否则会报以下错误:

PS D:\myweb\ytems> php load_font.php simsun.ttf simsun
PHP Fatal error:  Uncaught Dompdf\Exception: Unable to read 'simsun'. in D:\myweb\ytems\load_font.php:86
Stack trace:
#0 D:\myweb\ytems\load_font.php(201): install_font_family(Object(Dompdf\Dompdf), 'simsun.ttf', 'simsun')
#1 {main}thrown in D:\myweb\ytems\load_font.php on line 86

 5、安装结果图,显示这些东西基本就完成字体安装。

PS D:\myweb\ytems> php load_font.php simsun simsun.ttf
Unable to find bold face file.
Unable to find italic face file.
Unable to find bold_italic face file.
Copying simsun.ttf to D:\myweb\ytems\vendor\dompdf\dompdf/lib/fonts/simsun.ttf...
Generating Adobe Font Metrics for D:\myweb\ytems\vendor\dompdf\dompdf/lib/fonts/simsun...

    6、去类库字体目录检查是否安装成功
   vendor\dompdf\dompdf\lib\fonts
     找到是否有simsun.ttf和simsun.ufm2个文件,存在即安装成功

    7、修改路径 vendor\dompdf\dompdf\lib\fonts 下的字体配置文件 installed-fonts.json文件中字体的本地存储路径为相对路径,防止直接上传vendor到线上时出错。

      'simsun' => array('normal' =>  'simsun','bold' =>  'simsun','italic' => 'simsun','bold_italic' =>  'simsun',)

     8、在HTML中使用我们安装的字体,你可以在这个HTML任何地方写这个字体样式,不过为了全文显示正常最好还是在这写。

    <body style="font-family:simsun">中文字体</body>

        这样我们就可以愉快的使用中文字体了。

6、页面设置问题


  不知道什么原因,网上大多的例子都是横向设置,我还纠结半天什么鬼,内容在一个页面显示不了分了好几页,只能说英文不好容易踩坑。

  1、设置页面

      //网上你可能看到很多这样的例子,我要竖着的看啊

      $dompdf->setPaper('A4', 'landscape');//横向设置

      //找了类库说明,发现还有一个参数,这下终于可以正常显示了。

      $dompdf->setPaper('A4', 'portrait');

        2、为了更好将HTML转换成PDF,建议将HTML宽高设置成和A4大小接近,避免不必要的麻烦。个人还是要根据实际pdf显示情况来调节。

body {font-family:simsun;margin: 0;width: 800px;height: 1160px;
}

7、PDF生成问题


  dompdf目前还存在样式问题,没有得到很好的解决,所以需要注意以下两点:

  1、对元素浮动支持不是很友好。如 float

  2、目前不支持css3的属性,所以不要奢望做出很复杂的样式。

8、模板变量读取


结语

 以上为整理的dompdf的完整使用过程,留存备用。

参考链接:

dompdf中文乱码、换行解决方案_dompdf 中文乱码-CSDN博客

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com