libwkhtmltox是一个开放源代码LGPLv3库,用于使用QtWebKit渲染引擎将HTML渲染为PDF和各种图像格式。
libwkhtmltox源代码和二进制发行版位于wkhtmltopdf.org
源码:https://github.com/krakjoe/wkhtmltox
安装
git clone https://github.com/krakjoe/wkhtmltox
cd wkhtmltox
phpize
./configure --with-wkhtmltox=/path/to/wkhtmltox/installation
make
sudo make install
wkhtmltox\PDF\Converter类
将一个或一组HTML输入转换为PDF输出
创建PDF转换器
// 使用可选的配置$settings创建PDF转换器
new wkhtmltox\PDF\Converter($settings);
$settings = [
'size.pageSize', // 输出文件的纸张尺寸,默认A4
'size.width', // 输出文件的宽度,默认210毫米
'size.height', // 输出文件的高度,默认297毫米
'orientation', // 输出文件的方向:Landscape(横向)/Portrait(纵向)
'resolution', // 分解输出文件
'colorMode', // 输出文件的色彩模式:Color(彩色)/Greyscale(灰度)
'dpi', // 打印时使用的dpi(分辨率),默认80
'pageOffset', // 添加到页码的整数,生成页眉,页脚和目录
'copies', // 副本
'collate', // 自动分页:true/false
'outline', // 生成PDF大纲:true/false
'outlineDepth', // 最大大纲深度
'dumpOutline', // 转储大纲XML的文件路径
'out', // 如果使用“-” stdout时输出文件的路径
'documentTitle', // 输出文件的标题
'useCompression', // 启用或禁用无损压缩:true/false
'margin.top', // 上边距的大小,默认2厘米
'margin.bottom', // 下边距的大小,默认2厘米
'margin.left', // 左边距的大小,默认2厘米
'margin.right', // 右边距的大小,默认2厘米
'imageDPI', // 输出文档中图像的最大DPI
'imageQuality', // 输出文档中图像的jpeg压缩因子,默认94
'load.cookieJar', // 用于加载和存储cookie的文件的路径,默认/tmp/cookies.txt
];
转换
// 将wkhtmltox\PDF\Object对象$object添加到DPF转换器中
$converter->add($object);
// 将添加的对象执行转换,将转换后的文件存在对象实例化时指定的位置$out
$converter->convert();
获取libwkhtmltox的版本
// 获取libwkhtmltox的版本信息
$converter->getVersion();
wkhtmltox\PDF\Object类
创建一个HTML-PDF对象,用于PDF转换
// 将给定的缓冲区HTML$buffer使用可选配置$settings创建一个PDF对象
new wkhtmltox\PDF\Object($buffer, $settings);
$settings = [
'page', // 要转换的HTML的URL或路径
'useExternalLinks', // 设置为true可将输入中的外部链接转换为输出中的外部PDF链接:true/false
'useLocalLinks', // 设置为true可将输入中的内部链接转换为输出中的内部PDF链接:true/false
'produceForms', // 设置为true可以将HTML表单转换为PDF表单:true/false
'includeInOutline', // 设置为true以在大纲和toc中包含该对象的部分:true/false
'pagesCount', // 设置为true以使toc中的页面计数包括此对象中的页面数:true/false
'tocXsl', // 设置为样式表以将该对象转换为toc对象
'toc.useDottedLines', // 设置为true以在toc中使用虚线:true/false
'toc.captionText', // toc的标题文字
'toc.forwardLinks', // 设置为true以创建从toc到内容的链接:true/false
'toc.backLinks', // 设置为true以创建从内容到目录的链接:true/false
'toc.indentation', // 缩进,默认2em
'toc.fontScale', // 在每个toc级别缩小字体的因素,默认0.8
'header.fontSize', // 标头中使用的字体大小,默认13
'header.fontName', // 标头中使用的字体名称
'header.left', // 标头左侧的文本
'header.center', // 标头中心的文字
'header.right', // 标题右侧的文本
'header.line', // 启用或禁用标题下的水平尺:true/false
'header.spacing', // 标头和内容之间的空间,默认1.8
'header.htmlUrl', // 标头中使用的URL或HTML路径
'footer.fontSize', // 页脚中使用的字体大小,默认13
'footer.fontName', // 页脚中使用的字体名称
'footer.left', // 页脚左侧的文本
'footer.center', // 页脚中心的文字
'footer.right', // 页脚右边的文本
'footer.line', // 在页脚下启用或禁用水平尺:true/false
'footer.spacing', // 页脚和内容之间的空间:1.8
'footer.htmlUrl', // 页脚中使用的URL或HTML路径
'load.username', // 登录网站时使用的用户名
'load.password', // 登录网站时使用的密码
'load.jsdelay', // 页面加载后直到被捕获之前要等待的时间(以毫秒为单位),默认1200
'load.zoomFactor', // 应将多少缩放应用于内容,默认2.2
'load.customHeaders', // 请求主网页时发送的自定义标头
'load.repertCustomHeaders', // 设置为true以发送所有请求:true/false
'load.cookies', // 请求主页时发送的cookie字符串
'load.post', // 请求主网页时要发送的帖子字符串
'load.blockLocalFileAccess', // 禁止本地和管道文件访问其他本地文件:true/false
'load.stopSlowScript', // 停止运行缓慢的javascript:true/false
'load.debugJavascript', // 允许javascript引发警告:true/false
'load.loadErrorHandling' => [ // 设置错误处理策略
'abort', // 中止转换过程',
'skip', // 不要将对象添加到最终输出中',
'ignore', // 尝试将对象添加到最终输出',
],
'load.proxy', // 负载代理
'web.background', // 在输出中包含背景图像:true/false
'web.loadImages', // 在输出中包含图像:true/false
'web.enableJavascript', // 启用或禁用JavaScript:true/false
'web.enableIntelligentShrinking', // 允许尝试在页面上容纳更多内容,仅适用于PDF输出:true/false
'web.minimumFontSize', // 允许的最小字体大小,默认9
'web.printMediaType', // 使用打印媒体类型而不是屏幕媒体类型打印内容:true/false
'web.defaultEncoding', // 在未指定编码的情况下使用的内容,默认utf-8
'web.userStyleSheet', // 用户指定样式表的URL或路径,默认/path/to/style.css
'web.enablePlugins', // 启用或禁用NS插件:true/false
];
wkhtmltox\Image\Converter类
将HTML输入转换为各种图像格式
创建图像转换器
// 将给定的缓冲区HTML$buffer使用可选配置$settings创建一个图像转换器
new wkhtmltox\Image\Converter($buffer, $settings);
$settings = [
'in', // 输入文件的URL或路径(如果使用“-” stdin),例:/path/to/markup.html
'out', // 输出文件的路径(如果使用“-” stdout)则默认使用内部缓冲区,例:/path/to/output.png
'fmt' => [ // 使用的输出格式
'""' , // 默认,
'jpg', // 输出为JPEG,
'png', // 输出为PNG,
'bmp', // 输出为位图,
'svg', // 输出为SVG,
],
'transparent', // 输出PNG或SVG时,使白色背景透明:true/false
'screenWidth', // 用于以像素为单位渲染的屏幕的,默认800
'smartWidth', // 如果为true,则将screenWidth扩展为内容宽度:true/false
'quality', // 输出JPEG图像时要使用的压缩系数,默认94
'crop.left', // 窗口的左/x坐标,以像素为单位捕获,默认200
'crop.top', // 以像素为单位捕获的窗口的上/y坐标,默认200
'crop.width', // 捕获的窗口宽度(以像素为单位),默认200
'crop.height', // 捕获的窗口高度(以像素为单位),默认200
'load.cookieJar', // 用于加载和存储cookie的文件的路径,默认/tmp/cookies.txt
'load.username', // 登录网站时使用的用户名
'load.password', // 登录网站时使用的密码
'load.jsdelay', // 页面加载后直到被捕获之前要等待的时间(以毫秒为单位),默认1200
'load.zoomFactor', // 应将多少缩放应用于内容,默认2.2
'load.customHeaders', // 请求主网页时发送的自定义标头
'load.repertCustomHeaders', // 设置为true以发送所有请求:true/false
'load.cookies', // 请求主页时发送的cookie字符串
'load.post', // 请求主网页时要发送的帖子字符串
'load.blockLocalFileAccess', // 禁止本地和管道文件访问其他本地文件:true/false
'load.stopSlowScript', // 停止运行缓慢的javascript:true/false
'load.debugJavascript', // 允许javascript引发警告:true/false
'load.loadErrorHandling' => [ // 设置错误处理策略
'abort', // 中止转换过程
'skip', // 不要将对象添加到最终输出中
'ignore', // 尝试将对象添加到最终输出
],
'load.proxy', // 负载代理
'web.background', // 在输出中包含背景图像:true/false
'web.loadImages', // 在输出中包含图像:true/false
'web.enableJavascript', // 启用或禁用JavaScript:true/false
'web.enableIntelligentShrinking', // 允许尝试在页面上容纳更多内容,仅适用于PDF输出:true/false
'web.minimumFontSize', // 允许的最小字体大小,默认9
'web.printMediaType', // 使用打印媒体类型而不是屏幕媒体类型打印内容:true/false
'web.defaultEncoding', // 在未指定编码的情况下使用的内容,默认utf-8
'web.userStyleSheet', // 用户指定样式表的URL或路径,默认/path/to/style.css
'web.enablePlugins', // 启用或禁用NS插件:true/false
];
执行转换
// 执行转换,将转换后的文件存在对象实例化时指定的位置$out
$converter->convert();