整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:

PHP转换HTML为PDF文档的方法和常见问题

司的某项业务需要与用户线上签订协议,即用户在线手写一个签名,后台将公司公章信息和用户的签名以及合同信息生成一份PDF文件,供用户查看和下载。



比对了一些插件,我们最终决定使用dompdf这个插件,插件的github在这里:https://github.com/dompdf/dompdf。

1. 使用方法

  • 安装可以使用composer或者直接下载源代码,使用require或者include引入。
  • 具体的使用方式,可以参考以下示例代码。
// 引入命名空间
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。

使用步骤:

  • 下载或者复制load_font.php文件,放到dompdf文件夹内,与src和test文件夹同级
  • 修改load_font.php文件中引入的autoload.php为项目实际的位置
  • 在命令行中执行php load_font.php simkai /path/to/simkai.ttf

这样,我们就可以在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;
}

这样转换其实性能影响挺大的,感觉性能不太好可以加一下缓存。

HP将HTML实体转换为普通字符,我们可以使用PHP htmlspecialchars_decode()函数将特殊的HTML实体转换为正常字符,如&,<,>(即&,<,>)等HTML实体字符恢复到正常字符。



下面我们就结合代码示例,为大家介绍PHP将HTML实体转换为普通字符的实现方法。

代码示例如下:

<?php
$my_str = "I'm good & <b>"boy "</b>.";
echo htmlspecialchars_decode($my_str);
echo "<br>";
echo htmlspecialchars_decode($my_str, ENT_QUOTES);
echo "<br>";
echo $my_str;

输出结果如下:



htmlspecialchars_decode函数表示将特殊的 HTML 实体转换回普通字符。

说明 :

string htmlspecialchars_decode ( string $string [, int $flags = ENT_COMPAT | ENT_HTML401 ] )

其参数:string表示要解码的字符串,flags表示用下列标记中的一个或多个作为一个位掩码,来指定如何处理引号和使用哪种文档类型。默认为 ENT_COMPAT | ENT_HTML401。

此函数的作用和 htmlspecialchars() 刚好相反。它将特殊的HTML实体转换回普通字符。

被转换的实体有:&, " (没有设置ENT_NOQUOTES 时), ' (设置了 ENT_QUOTES 时), < 以及>。

该htmlspecialchars_decode()函数与htmlspecialchars()将特殊HTML字符转换为HTML实体的函数相反。

本篇文章就是关于PHP将HTML实体转换为普通字符的方法介绍,简单易懂,希望对需要的朋友有所帮助!

以上就是PHP怎么将HTML实体转换为普通字符的详细内容,更多请关注其它相关文章!

更多技巧请《转发 + 关注》哦!

khtmltopdf是一个非常有用的应用程序,用于从html(网页)创建pdf。本篇文章将介绍关于如何使用php脚本和Linux命令行工具创建网页的pdf。



步骤1:在Linux中安装wkhtmltopdf

从google code下载wkhtmltopdf并安装到Linux系统。

# cd /opt

# wget https://wkhtmltopdf.googlecode.com/files/wkhtmltopdf-0.9.9-static-i386.tar.bz2

# tar xjf wkhtmltopdf-0.9.9-static-i386.tar.bz2

# mv wkhtmltopdf-i386 /usr/bin/wkhtmltopdf

# chown apache:apache /usr/bin/wkhtmltopdf

# chmod +x /usr/bin/wkhtmltopdf

步骤2:使用命令行创建PDF

首先检查wkhtmltopdf脚本,它在命令行中正常工作。下面的命令将创建http://google.com网页的pdf。

# /usr/bin/wkhtmltopdf http://google.com google.pdf

步骤3:使用wkhtmltopdf创建pdf的php代码

使用下面的PHP代码块从HTML(网页)生成PDF。此脚本需要为Apache启用shell_exec函数。大多数共享主机不允许此函数。

使用下面的代码创建一个文件名getpdf.php,并将其放到网站文档根目录中。

<?php

$url = $_GET['url']; // Website URL to Create pdf

$name = $_GET['pdf']; // Output pdf name

$command = "/usr/bin/wkhtmltopdf ";

$pdf_dir = "/var/www/html/pdfs/"; // Pdf files will be saved here

$ex_cmd = "$command $url " . $pdf_dir . $name;

$output = shell_exec($ex_cmd);

?>

打开以下网址生成网站的pdf(html)。

语法:http:

//youdomain.com/getPdf.php?url = <website url>&pdf = <pdf name>

示例:

https : //tecadmin.net/getPdf.php?url = http : //google.com&pdf=google.pdf

本篇文章到这里就已经全部结束了,更多其他精彩内容可以关注的Linux视频教程栏目!

以上就是使用Qtwebkit和PHP将HTML转换为PDF的详细内容,更多请关注其它相关文章!

更多技巧请《转发 + 关注》哦!