grasenhiller/silverstripe-wkhtmltox

使用 WkHtmlToX 从 SilverStripe 创建 PDF 和图像

安装量: 5,470

依赖: 0

建议者: 0

安全性: 0

星标: 1

关注者: 1

分支: 3

开放性问题: 2

类型:silverstripe-vendormodule

1.0.2 2019-03-25 08:08 UTC

This package is auto-updated.

Last update: 2024-09-25 20:15:58 UTC


README

使用 WkHtmlToX 从 SilverStripe 创建 PDF 和图像。基于 WkHtmlToPdfmikehaertl 的 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 注解

已知错误

  • 页眉/页脚无法加载