目前尝试过
tecnickcom/tcpdf、dompdf/dompdf 这两种 php 工具包,虽然能将 html 转成 pdf,但是都有个致命的问题就是对 css 支持的不好,构建的 html 样式在被转换成 pdf 之后样式都变形了,并未完全生效,查了一下百度,说是这种方案对 css 的支持有限,支持全部的 css 样式。
另一种解决方案
wkhtmltopdf 安装部署,php 调用的方法
- 安装 wkhtmltopdf
- php 调用 wkhtmlpdf
- composer 安装
- 安装 mikehaertl/phpwkhtmltopdf 依赖
- php 调用 wkhtmltopdf
1. 官网安装软件 https://wkhtmltopdf.org/downloads.html
2. 设置软件环境变量,wkhtmltopdf -V
查看环境变量是否设置成功
3. 创建一个简单的 html,命名为 test.html,内容如下(参考),在 cmd 命令行中打开 test.html
所在文件夹然后使用命令 wkhtmltopdf test.html test.pdf
就会发现当前文件夹下出现了 test.pdf 的文件
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
</head>
<body>
<p>hello, you are succeed</p>
</body>
</html>
4.php 调用 wkhtmlpdf,使用 composer 中的 mikehaertl/phpwkhtmltopdf 包
5.php 调用 wkhtmltopdf
use mikehaertl\wkhtmlto\Pdf;
// You can pass a filename, a HTML string, an URL or an options array to the constructor
$pdf = new Pdf('/path/to/page.html');
// On some systems you may have to set the path to the wkhtmltopdf executable
// $pdf->binary = 'C:\...';
if (!$pdf->saveAs('/path/to/page.pdf')) {$error = $pdf->getError();
// ... handle error here
}
使用教程 https://www.jianshu.com/p/823dea67b6b9
但是即使使用wkhtmltopdf 可以直接解决字体和样式问题。但是生成的 pdf 的宽高比,不是我想要的。
wkhtmltopdf用 php 调用的时候发生 未知错误,”Failed without error message: wkhtmltopdf “C:\Users\PC\AppData\Local\Temp\tmpDDE1.tmp.html” “C:\Users\PC\AppData\Local\Temp\tmpDDF1.tmp.pdf” (Exit code: 1)“
找不到解决愿意。已放弃 pdf 调试
各种尝试,还是没找到完美的解决方案