PHP HTMl转换为PDF、图片

2021-03-22

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();

 

{/if}