【发布时间】:2018-05-14 23:34:40
【问题描述】:
长话短说
使用knp-snappy-bundle,我无法在 PDF 中生成页眉,但我实际上可以生成页脚。
是错误、功能还是我做错了什么?
详情
1。环境
我正在测试knp-snappy-bundle,我还从h4cc 安装了wkhtmltopdf 二进制文件。这是我composer.json的一部分:
"h4cc/wkhtmltopdf-amd64": "^0.12.3",
"knplabs/knp-snappy-bundle": "^1.5",
wkhtmltopdf 生成的二进制文件是这样说的:
$ vendor/bin/wkhtmltopdf-amd64 --version
wkhtmltopdf 0.12.3 (with patched qt)
2。 没有页眉或页脚,它可以工作
我已经设置了一个使用knp-snappy-bundle 的控制器并且它可以工作:
这是我的PdfController:
public function downloadPdfAction( string $docName ) : Response
{
$pdf = $this->getPdf( $docName );
return new PdfResponse( $pdf, $this->getFilename( $docName ) );
}
private function getPdf( string $docName ) : string
{
$html = $this->renderView( 'AppBundle:documents:' . $docName . '.pdf.twig' );
$options = [];
$generator = $this->getPdfGenerator();
$pdf = $generator->getOutputFromHtml( $html, $options );
return $pdf;
}
private function getPdfGenerator() : Pdf
{
$generator = $this->get( 'knp_snappy.pdf' );
return $generator;
}
基本上是这样的:
- 有一个
downloadPdf操作- 按名称获取 PDF 文档,作为参数传入。在本例中,我们将使用
'helloWorld'。
- 按名称获取 PDF 文档,作为参数传入。在本例中,我们将使用
- 使用捆绑包中的
PdfResponse类返回使用 PDF 内容创建的新Response。
- 使用捆绑包中的
- 获取 PDF
- 它使用
twigengine 渲染视图。
- 它使用
- 获取服务(拆分成另一个函数
getPdfGenerator())。
- 获取服务(拆分成另一个函数
- 使用
getOutputFromHtml()的服务,没有传入任何选项。
- 使用
这是我的helloWorld.pdf.twig:
<html>
<body>
<div class="pdfPageBody">
<h1>
Hello, World!
</h1>
Lorem ipsum dolor sit amet, consectetur adipiscing elit.
</div>
</body>
</html>
这是生成的 PDF,完全符合预期:
3。 使用页眉和页脚,它会失败!
所以我现在添加页眉和页脚。为此,我只需添加几根树枝,将 HTML 渲染成几个变量,然后将它们传递到 Pdf 渲染器的选项中:
private function getPdf( string $docName ) : string
{
$html = $this->renderView( 'AppBundle:documents:' . $docName . '.pdf.twig' );
$header = $this->renderView( 'AppBundle:documents:header.pdf.twig' );
$footer = $this->renderView( 'AppBundle:documents:footer.pdf.twig' );
$options = [
'header-html' => $header,
'footer-html' => $footer,
];
$generator = $this->getPdfGenerator();
$pdf = $generator->getOutputFromHtml( $html, $options );
return $pdf;
}
除了包含的文本之外,页眉和页脚彼此相同:
这是我的header.pdf.twig:
<html>
<body>
<div style="border: 5px dashed crimson; color: maroon; background-color: darksalmon">
This is a header
</div>
</body>
</html>
还有footer.pdf.twig:
<html>
<body>
<div style="border: 5px dashed crimson; color: maroon; background-color: darksalmon">
This is a footer
</div>
</body>
</html>
哇!!!页脚被渲染,但页眉没有!
这是我得到的:
图片中要注意的:
- 标题中有“某事”。我可以看到页面内容的文本,例如“已剪辑”。
- 页脚未完全呈现,因为它隐藏了所有底部边框线,并且文本基线与页面底部边缘对齐。
太好了,所以我的问题!!
- 我应该怎么做才能使标头也呈现?
- 不应该是我可以通过这个简单的设置看到在 PDF 中呈现的标题吗?为什么没有出现?
【问题讨论】:
标签: pdf rendering wkhtmltopdf knp-snappy