司的某项业务需要与用户线上签订协议,即用户在线手写一个签名,后台将公司公章信息和用户的签名以及合同信息生成一份PDF文件,供用户查看和下载。
比对了一些插件,我们最终决定使用dompdf这个插件,插件的github在这里:https://github.com/dompdf/dompdf。
1. 使用方法
// 引入命名空间 use Dompdf\Dompdf; // 初始化dompdf对象 $dompdf = new Dompdf(); // 加载html文档内容 $dompdf->loadHtml('hello world'); // 设置纸张类型和方向 $dompdf->setPaper('A4', 'landscape'); // 渲染HTML为PDF $dompdf->render(); // 流输出 $dompdf->stream();
2. 常见问题和解决办法
2.1 中文乱码的问题
插件对于字体和编码问题是这样形容的:
PDF documents internally support the following fonts: Helvetica, Times-Roman, Courier, Zapf-Dingbats, & Symbol. These fonts only support Windows ANSI encoding. In order for a PDF to display characters that are not available in Windows ANSI, you must supply an external font. Dompdf will embed any referenced font in the PDF so long as it has been pre-loaded or is accessible to dompdf and reference in CSS @font-face rules. See the font overview for more information on how to use fonts.The DejaVu TrueType fonts have been pre-installed to give dompdf decent Unicode character coverage by default. To use the DejaVu fonts reference the font in your stylesheet, e.g. body { font-family: DejaVu Sans; } (for DejaVu Sans). The following DejaVu 2.34 fonts are available: DejaVu Sans, DejaVu Serif, and DejaVu Sans Mono.
尝试了一下,默认带的字体是无法渲染中文的,使用CSS的@font-face引入会报错(也可能是我打开方式不对)。这样就只好自己引入一个字体了。
插件给了一个安装语言文件的工具,地址再这里:https://github.com/dompdf/utils。
使用步骤:
这样,我们就可以在html文档的css中使用font-family属性来指定字体了。
html { font-family: simkai; }
2.2 图片无法展示
插件应该是无法直接显示网络图片,所以需要将图片转换为BASE64格式才能显示。
将HTML文档中的所有图片转换为BASE64的方式:
function imgToBase64($html) { $html = preg_replace_callback('/<img(?:.*?)src="(.*?)"(?:.*?)\/?>/', function($matches) { $imageInfo = getimagesize($matches[1]); $base64 = "" . chunk_split(base64_encode(file_get_contents($matches[1]))); $base64_image = 'data:' . $imageInfo['mime'] . ';base64,' . $base64; return str_replace($matches[1], $base64_image, $matches[0]); }, $html); return $html; }
这样转换其实性能影响挺大的,感觉性能不太好可以加一下缓存。
当今数字时代,网站是企业和个人的必需品。而HTML是创建网站的基础,它赋予了网站结构、内容和交互性。本文将深入探讨HTML,提供一个全面的指南,帮助你掌握网站设计的关键。
什么是HTML?
HTML(超文本标记语言)是一种标记语言,用于描述网页的结构和内容。它由一组元素和属性组成,这些元素和属性定义了文本、图像、链接和其他网页组件。
HTML元素
HTML元素是构成网页基本构建块的标签。每个元素都有一个开始标签和一个结束标签,它们之间包含元素的内容。最常见的元素包括:
HTML属性
属性用于修改元素的行为或外观。每个元素可以具有多个属性,这些属性由名称和值对组成。例如,<img>元素可以具有src属性来指定图像文件的路径。
HTML结构
HTML文档遵循一个特定的结构,包括:
HTML交互性
虽然HTML本质上是静态的,但它可以与其他技术结合使用,如JavaScript和CSS,以创建交互式网站。例如,JavaScript可以用于验证表单输入或创建动画效果。
学习HTML
学习HTML相对容易,有许多在线资源和教程可供使用。以下是一些提示:
掌握HTML的好处
掌握HTML有很多好处,包括:
结论
HTML是网站设计的基石。通过理解其基本原理、元素和结构,你可以解锁创建引人入胜且功能丰富的网页的能力。无论你是想建立自己的网站还是提升你的职业生涯,掌握HTML都是必不可少的。
、简介
在PHP中,htmlentities()函数是一个常用的字符串处理函数,用于将字符串中的特殊字符(如<>等)转换为HTML实体,以防止跨站点脚本攻击(XSS)。
二、语法
htmlentities(string $string, int $flags = ENT_COMPAT | ENT_HTML401, string|null $encoding = ini_get("default_charset"), bool $double_encode = true)
三、参数解释
$string:必需,要处理的字符串,字符串类型。
$flags:可选,指定转换过程中的一些规则和选项,整数类型,默认为ENT_COMPAT | ENT_HTML401。
$encoding:可选,指定要使用的字符编码,字符串类型,如果未指定,则使用ini_get("default_charset")函数获取默认字符编码。
$double_encode:可选,指定是否对已存在的HTML实体进行转义,布尔类型,默认为true。
四、返回值
htmlentities()函数返回一个新的字符串,其中的特殊字符被转换为了HTML实体。
五、使用实例
下面是一个简单的使用实例:
在上面的例子中,我们使用htmlentities()函数将字符串中的特殊字符(如<>等)转换为了HTML实体,以防止跨站点脚本攻击(XSS)。
六、注意事项
1、在使用htmlentities()函数时,需要注意转换规则。例如,它只会将特殊字符转换为HTML实体,但不会对其他类型的攻击进行防护,例如SQL注入攻击、跨站点请求伪造(CSRF)攻击等。
2、在使用htmlentities()函数时,需要注意字符编码。例如,如果在使用htmlentities()函数时未指定字符编码,可能会导致转换结果不正确,从而引发安全性问题。
3在处理用户输入的文本时,我们需要注意安全性问题。例如,可以使用addslashes()函数来防止SQL注入攻击,在输出到HTML页面中时,需要使用htmlentities()函数防止跨站点脚本攻击(XSS)。
*请认真填写需求信息,我们会在24小时内与您取得联系。