本文概述
- 要求
- 1.安装Dompdf
- 2.通过创建PDF文件
Dompdf是用PHP编写的CSS 2.1兼容HTML布局和呈现引擎。它是样式驱动的渲染器:它将下载和读取外部样式表, 内联样式标签以及单个HTML元素的样式属性。它还支持大多数演示HTML属性。
在本文中, 我们将向你展示如何在基于Symfony 4的项目中使用Dompdf库从HTML生成PDF文件。
要求在本教程中, 我们将使用Symfony 4的传统Web应用程序版本, 其中包括Twig, Doctrine等。我们将基于symfony控制器编写示例并生成PDF。我们的示例HTML将存储在/project/templates/default/mypdf.html.twig的Twig文件中, 并包含以下将显示为PDF的HTML:
{# ./templates/default/mypdf.html.twig #}<
!DOCTYPE html>
<
html>
<
head>
<
meta charset="UTF-8">
<
title>
Title of the PDF<
/title>
<
/head>
<
body>
<
h4>
{{ title }}<
/h4>
<
p>
Lorem Ipsum<
/p>
<
/body>
<
/html>
我们将从控制器发送一个变量, 即title。知道了这一点, 让我们开始吧!
1.安装Dompdf处理Symfony 4中依赖性的首选方法是通过Composer。在packagist网站上有一个dompdf软件包。你可以使用以下命令在你的Symfony项目中安装Dompdf库:
composer require dompdf/dompdf
【如何使用Dompdf在Symfony 4中从HTML创建PDF】安装后, 你将能够使用该库及其名称空间。有关该库的更多信息, 请访问其在Github上的官方存储库或在此处的官方网站。
2.通过创建PDF文件作为开发人员, 你将边做边学, 这意味着编写并运行一些代码!我们将向你展示一些你经常需要的传统示例, 这种情况是在磁盘中创建PDF文件(在路径中保存excel文件)和流式响应(用于查看PDF的内联处置文件)在浏览器中)或强制下载pdf文件(附件):
A.生成并强制PDF文件下载
如果你愿意创建PDF文件并将其作为文件使用, 以便用户下载, 则无需将其写入磁盘。你可以改为发送响应:
<
?phpnamespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
// Include Dompdf required namespacesuse Dompdf\Dompdf;
use Dompdf\Options;
class DefaultController extends Controller{public function index(){// Configure Dompdf according to your needs$pdfOptions = new Options();
$pdfOptions->
set('defaultFont', 'Arial');
// Instantiate Dompdf with our options$dompdf = new Dompdf($pdfOptions);
// Retrieve the HTML generated in our twig file$html = $this->
renderView('default/mypdf.html.twig', ['title' =>
"Welcome to our PDF Test"]);
// Load HTML to Dompdf$dompdf->
loadHtml($html);
// (Optional) Setup the paper size and orientation 'portrait' or 'portrait'$dompdf->
setPaper('A4', 'portrait');
// Render the HTML as PDF$dompdf->
render();
// Output the generated PDF to Browser (force download)$dompdf->
stream("mypdf.pdf", ["Attachment" =>
true]);
}}
B.在浏览器中生成并查看PDF
如果要在浏览器中直接查看生成的PDF, 只需在流期间将附件选项设置为false:
<
?phpnamespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
// Include Dompdf required namespacesuse Dompdf\Dompdf;
use Dompdf\Options;
class DefaultController extends Controller{public function index(){// Configure Dompdf according to your needs$pdfOptions = new Options();
$pdfOptions->
set('defaultFont', 'Arial');
// Instantiate Dompdf with our options$dompdf = new Dompdf($pdfOptions);
// Retrieve the HTML generated in our twig file$html = $this->
renderView('default/mypdf.html.twig', ['title' =>
"Welcome to our PDF Test"]);
// Load HTML to Dompdf$dompdf->
loadHtml($html);
// (Optional) Setup the paper size and orientation 'portrait' or 'portrait'$dompdf->
setPaper('A4', 'portrait');
// Render the HTML as PDF$dompdf->
render();
// Output the generated PDF to Browser (inline view)$dompdf->
stream("mypdf.pdf", ["Attachment" =>
false]);
}}
C.生成PDF并将其存储在磁盘中
如果要将PDF保存在存储器中, 只需检索PDF的二进制数据并将其保存到文件中, 就可以使用file_put_contents进行操作:
<
?phpnamespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\Response;
// Include Dompdf required namespacesuse Dompdf\Dompdf;
use Dompdf\Options;
class DefaultController extends Controller{public function index(){// Configure Dompdf according to your needs$pdfOptions = new Options();
$pdfOptions->
set('defaultFont', 'Arial');
// Instantiate Dompdf with our options$dompdf = new Dompdf($pdfOptions);
// Retrieve the HTML generated in our twig file$html = $this->
renderView('default/mypdf.html.twig', ['title' =>
"Welcome to our PDF Test"]);
// Load HTML to Dompdf$dompdf->
loadHtml($html);
// (Optional) Setup the paper size and orientation 'portrait' or 'portrait'$dompdf->
setPaper('A4', 'portrait');
// Render the HTML as PDF$dompdf->
render();
// Store PDF Binary Data$output = $dompdf->
output();
// In this case, we want to write the file in the public directory$publicDirectory = $this->
get('kernel')->
getProjectDir() . '/public';
// e.g /var/www/project/public/mypdf.pdf$pdfFilepath =$publicDirectory . '/mypdf.pdf';
// Write file to the desired pathfile_put_contents($pdfFilepath, $output);
// Send some text responsereturn new Response("The PDF file has been succesfully generated !");
}}
编码愉快!
推荐阅读
- 如何使用CLI从Subversion存储库中列出目录
- 中间人攻击的详细指南
- 如何解决TCPDF错误(setPage()函数上的页码错误:0)
- 如何确定是否使用WinForms中的C#启用Windows更新
- 如何在不检出整个目录的情况下从子版本库中读取/提取文件的内容
- 如何在Symfony 4中使用PHP创建Excel文件
- android上的nullpointer异常[重复]
- 我在我的android应用程序类中有错误我正在检查auth!= null但仍然在if if语句中()
- Android studio错误(java.lang.NullPointerException [重复])