kaystrobach / pdf
该软件包最新版本(6.2.0)没有可用的许可证信息。
直接使用mpdf或dompdf库将HTML转换为PDF。
6.2.0
2023-09-13 11:54 UTC
README
此软件包可以使您直接使用mpdf或dompdf库将渲染的HTML转换为PDF。为了方便地实现即时渲染,它使用了一个流视图助手。
您需要通过composer安装以下软件包之一,该软件包会检查库是否存在,并提示您安装它。
dompdf/dompdf(已弃用)- mpdf/mpdf
控制器使用 - 不要再使用viewHelper了,坚持使用专用视图!
该软件包的最近版本包含一个新视图。这个视图可以直接在控制器中使用,例如像这样
class FormulareController extends \Neos\Flow\Mvc\Controller\ActionController {
/**
* @Flow\Inject
* @var \SBS\LaPo\Domain\Repository\StudentRepository
*/
protected $studentRepository;
/**
* @var array
*/
protected $viewFormatToObjectNameMap = array(
'pdf.html' => 'KayStrobach\Pdf\View\PdfTemplateView'
);
此示例使用pdf.html格式,使其更容易使用您喜欢的IDE编辑模板文件。
在名为Some.Package的FLOW软件包中的示例用法
在FLOW布局中,您可以使用以下ViewHelper将生成的HTML包装起来,输出将被转换为PDF。
{namespace pdf=KayStrobach\Pdf\ViewHelpers}
<pdf:pdf enableHtml5Parser="1" disable="0" debug="1" dpi="120" renderer="mpdf">
some html content
</pdf:pdf>
参数文档可以直接从viewHelper获取,请参阅Classes/KayStrobach/Pdf/ViewHelpers/PdfViewHelper.php
一个完整的示例可能如下所示:(取自project/Packages/Application/Some.Package/Resources/Private/Layouts/Pdf.html)
{namespace pdf=KayStrobach\Pdf\ViewHelpers}
<pdf:pdf enableHtml5Parser="1" disable="0" debug="1" dpi="120" renderer="mpdf">
<!DOCTYPE html>
<html xmlns:f="http://typo3.org/ns/TYPO3/Fluid/ViewHelpers">
<head>
<meta charset="utf-8">
<title><f:render section="Title" /></title>
<!-- Custom styles for this template -->
<style type="text/css">
table {
border-collapse: collapse;
}
table.formblock td{
border: 0.1mm solid black;
vertical-align: top;
padding: 1mm;
width: 50%;
height: 8mm;
}
table.formblock .halfcell {
width: 25%;
}
table.formblockAbstand {
margin-top: 5mm;
}
.label {
font-size: 6pt;
}
</style>
<f:base />
</head>
<body>
<f:render section="Content" />
</body>
</html>
</pdf:pdf>
定义页眉和页脚
将此放入head
<style>
@page {
header: html_Header;
footer: html_Footer;
}
</style>
然后在body中放入类似的内容
<htmlpageheader name="Header">
<div style="text-align: right; border-bottom: 1px solid #000000; font-weight: bold; font-size: 10pt;">
<f:render section="Title" optional="1" />
</div>
</htmlpageheader>
<htmlpagefooter name="Footer">
<f:if condition="{f:render(section:'footer', optional:true)}">
<f:then>
<f:render section="Title" optional="1" />
</f:then>
<f:else>
<div style="text-align:center; border-top: 1px solid #000000;">
<small>Seite {PAGENO} von {nbpg} - Ausdruck vom {DATE d.m.Y H:i}</small>
</div>
</f:else>
</f:if>
</htmlpagefooter>
渲染条码
<barcode code="{barcode}" type="C39" size="0.8" height="0.6" />