grasenhiller / silverstripe-wkhtmltox
使用 WkHtmlToX 从 SilverStripe 创建 PDF 和图像
Requires
This package is auto-updated.
Last update: 2024-09-25 20:15:58 UTC
README
使用 WkHtmlToX 从 SilverStripe 创建 PDF 和图像。基于 WkHtmlToPdf 和 mikehaertl 的 php 封装。
安装
SilverStripe 模块
$ composer require grasenhiller/silverstripe-wkhtmltox
WkHtmlToX 二进制文件
WKHtmlToPdf 必须安装在你的服务器上才能使用此模块。如果没有安装,你可以尝试使用提供的二进制文件(v. 0.12.5)。首先通过 SSH 登录并进入你的家目录。
cd ~
mkdir ~/wkhtmltox
tar -xjvf vendor/grasenhiller/silverstripe-wkhtmltox/wkhtmltox_binaries.tar.bz2 -C ~/wkhtmltox
chmod 755 ~/wkhtmltox/wkhtmltopdf
chmod 755 ~/wkhtmltox/wkhtmltoimage
之后,如果你输入 ./wkhtmltox/wkhtmltopdf -V
,你应该看到版本号。现在它应该 可以 工作 ;)
最后,你需要提供二进制文件的正确路径。在你的 .env
文件中,定义以下环境变量
SS_WKHTMLTOPDF_BINARY='/absolute/path/to/wkhtmltox/wkhtmltopdf'
SS_WKHTMLTOIMAGE_BINARY='/absolute/path/to/wkhtmltox/wkhtmltoimage'
要获取绝对路径,请进入我们的 wkhtmltox 目录并输入 pwd
;
cd ~/wkhtmltox/
pwd
是否在代理后面?
你可以在 .env
文件中定义全局代理设置
SS_PROXY="http://user:password@192.168.1.2:8080"
或者不需要认证
SS_PROXY="http://192.168.1.2:8080"
更改二进制路径
你可以在 .env
文件中为 wkhtmltopdf 和 wkhtmtltoimage 定义不同的二进制路径
SS_WKHTMLTOPDF_BINARY='/path/to/wkhtmltopdf'
SS_WKHTMLTOIMAGE_BINARY='/path/to/wkhtmltoimage'
受基本认证保护的环境?
如果你在一个受保护的环境(开发?)中工作,并想从“locale”内容创建 PDF 或图像,你需要在 .env
文件中定义你的基本认证凭据
SS_WKHTMLTOX_USERNAME
SS_WKHTMLTOX_PASSWORD
WkHtmlToX 帮助/文档和示例?
导航到 http://your-website.tld/gh-wkhtmltox/
配置(YML)
TBD
用于创建 PDF 和图像的方法
这些方法与 new WkPdf()
和 new WkImage()
一起工作
设置文件应保存的文件夹
$pdf = new WkPdf(); $pdf->setFolder('folder/beneath/assets/to/save');
从 SilverStripe 模板生成 html
- $obj: 你想要渲染的数据对象或页面
- $variables: 一个包含额外数据的数组(可选)
- $template: 所需的模板(可选)
$pdf = new WkPdf(); $html = $pdf::get_html($obj, $variables = [], $template = '');
替换相对图像链接
HTMLEditorFields 通常不存储带有绝对链接的图像链接。但 WkHtmlToX 需要绝对链接才能工作。所以只需用这个方法替换它们。
$pdf = new WkPdf(); $html = $pdf::get_html($obj); $html = $pdf::replace_img_paths($html);
获取将创建 PDF 或图像的选项
获取所有选项
$pdf = new WkPdf(); echo '<pre>'; print_r($pdf->getOptions()); echo '</pre>; die();
获取特定选项
$pdf = new WkPdf(); echo $pdf->getOption('name_of_option'); die();
设置(新)或删除(现有)选项
setOptions() setOption() removeOption() removeOptions()
抱歉,现在没有时间完成 README...
覆盖全局选项
简单示例
private static $allowed_actions = [ 'pdfExport', ]; public function pdfExport() { $stylesheet = 'resources/vendor/grasenhiller/silverstripe-intranet-wiki/client/css/pdf.css'; $filter = URLSegmentFilter::create(); $filename = $filter->filter($this->MenuTitle); $filename .= '__' . date('Y-m-d') . '.pdf'; $baseUrl = Director::absoluteBaseURL(); $pdf = new WkPdf(); $pdf->setOption('margin-top', 20); $pdf->setOption('margin-bottom', 20); $pdf->setOption('margin-left', 15); $pdf->setOption('margin-right', 15); $pdf->setOption('user-style-sheet', $stylesheet); $pdf->setOption('header-html', $baseUrl . 'gh-wkhtmltox/header?template=Grasenhiller\Intranet\Wiki\Pages\Pdf\Header'); $pdf->setOption('footer-html', $baseUrl . 'gh-wkhtmltox/footer?template=Grasenhiller\Intranet\Wiki\Pages\Pdf\Footer'); $pdf->setOption('header-spacing', 5); $pdf->setOption('footer-spacing', 5); $html = $pdf::get_html($this); $pdf->add($html); $pdf->download($filename); }
页眉和页脚
gh-wkhtmltox/header gh-wkhtmltox/footer $all_variables + 文档中的变量
特定的基本认证
有用的
viewport-size zoom 1.045 window-status h1 { page-break-before: always; }
像素和 dpi
WkImage
add() 构造
WkPdf
add() 构造
WkImage + WkPdf
preview() download() save() getAsString()
WkController
- 文档
- 演示
- 页眉 + 钩子
- 页脚 + 钩子
配置
- pdf 全局
- pdf "pages" 预定义 + 自定义
- image 全局 + 自定义
- bypass_proxy_for_own_site
模板
html!
待办事项
- 设置选项 设置多个选项 + 设置 / 获取全局选项
- 在 get_html (作为选项) 中替换静态链接
- 样式表(用户样式表)
- 遍历注释
- README!
- IDE 注解
已知错误
- 页眉/页脚无法加载