使用PHP将带有样式(css)的html转换为pdf
我的代码有一些问题!我正在尝试将我的使用PHP将带有样式(css)的html转换为pdf,php,html,css,pdf,Php,Html,Css,Pdf,我的代码有一些问题!我正在尝试将我的html发票转换为pdf发票。付款后,根据以下代码生成发票。然后pdf文件存储在服务器上,并通过邮件发送给用户。这是我正在使用的发票:。但是,当我将html转换为pdf时,不会应用样式,也不会显示图像 这是我的PHP代码,用于使用DomPDF将html转换为pdf: <?php require 'vendor/autoload.php'; // reference the Dompdf namespace $files = glob("/in
html
发票转换为pdf发票。付款后,根据以下代码生成发票。然后pdf文件存储在服务器上,并通过邮件发送给用户。这是我正在使用的发票:。但是,当我将html
转换为pdf时,不会应用样式,也不会显示图像
这是我的PHP
代码,用于使用DomPDF将html
转换为pdf:
<?php
require 'vendor/autoload.php';
// reference the Dompdf namespace
$files = glob("/invoices/*.pdf");
foreach ($files as $file) include_once($file);
// instantiate and use the dompdf class
$dompdf = new Dompdf();
$dompdf->loadHtml($html);
$dompdf->setPaper('A4', 'portrait'); //landscape / portrait
$options = new Options();
$options->set('isRemoteEnabled', true);
$options->set('defaultFont', 'OpenSans');
// Render the HTML as PDF
$dompdf->render();
$output = $dompdf->output();
file_put_contents($_SERVER['DOCUMENT_ROOT'] . "/invoices/" . $order_id . ".pdf", $output);
这不管用。我对css
的想法已经没有了
图像的问题
当html
代码包含如下img
时:
<style>
/* my css here */
</style>
<img src="/path/to/file" alt="" />
图像没有显示出来。即使我将src
更改为https://pathtoimg.com/path/to/file/img.png
希望您知道图像的解决方案以及我正在努力解决的css
问题!谢谢你的努力
编辑
我愿意接受其他图书馆或其他方法的建议。我还没有找到一个稳定的解决方案,所以我可能找错了方向。如果还有其他解决方案,请告诉我 确保您的HTML以
并且在头部还包含以下标签
使用以下内容更新Dompdf脚本
$dompdf = new Dompdf();
$dompdf->setPaper('A4', 'portrait');
$dompdf->set_option( 'isHtml5ParserEnabled', true);
$dompdf->set_option( 'isRemoteEnabled', true);
$dompdf->set_option( 'defaultMediaType', 'all' );
$dompdf->set_option( 'isFontSubsettingEnabled', true );
$dompdf->set_option('defaultFont', 'OpenSans');
$dompdf->loadHtml( $html, 'UTF-8' );
$dompdf->render();
// Attachment value 1 for download and 0 for preview PDF
//$dompdf->stream( 'testing.pdf', array( 'Attachment' => 1 ) );
$output = $dompdf->output();
file_put_contents($_SERVER['DOCUMENT_ROOT'] . "/invoices/" . $order_id . ".pdf", $output);
这不是一个完整的答案,但我至少可以帮助您解决一些与图像相关的问题,并解释为什么
Dompdf
无法使用
问题
首先,看看您的代码,您似乎也使用了过时的函数set(..)
,$options
也没有传递给Dompdf
。可以在中找到新的示例,以便我们可以解决以下方面的第一个问题:
//包括自动加载器
需要“vendor/autoload.php”;
//引用Dompdf名称空间
$files=glob(“/invoices/*.pdf”);
foreach($files as$file)包含一次($file);
//引用Dompdf名称空间
使用Dompdf\Dompdf;
//还要引用选项名称空间
使用Dompdf\Options;
//首先初始化选项
$options=新选项();
//这种设置选项的方法是新的,请参见:https://github.com/dompdf/dompdf/issues/2181
$options->setIsRemoteEnabled(true);
$options->setDefaultFont('OpenSans');
//实例化并使用dompdf类和选项
$dompdf=新的dompdf($options);
//从html文件加载内容
$html=//文件获取内容(“invoice.html”);
$dompdf->loadHtml($html);
$dompdf->setPaper('A4','肖像')//风景画/肖像画
//将HTML呈现为PDF格式
$dompdf->render();
$output=$dompd->output();
文件内容($服务器['DOCUMENT\u ROOT'].“/invoices/”$order\u id..pdf“,$output);
使用此代码,我们得到以下结果:
(使用jsFiddle
防止图像占用太多空间。现在它们是内联的)
请包括
$dompd->set_base_path('localhost/exampls/style.css')代码>
我以前用过mpdf,所以决定试试。在我的windows 10上使用xampp和PHP7.4.8
composer require mpdf/mpdf
代码
输出
第二页
是否尝试将图像转换为base64,然后添加为url?它也将使它独立于URL
这可以帮助您转换为base64
对于CSS,我尝试过,它对我有效。这正是stackoverflow上的一个好问题。关于图像,请尝试以下操作:您是否尝试将域包含在CSS href中?我正在使用另一个库生成PDF,这就是我需要做的。@MeesEgberts在我的评论中有一个链接。dompdf:“dompdf的核心(大部分)是兼容CSS 2.1的HTML布局,处理大多数CSS 2.1和一些CSS3属性,”我建议只使用其他更新的内容。我使用并且没有任何问题。@fubar谢谢你的回答!我来看看,试试看!回答得好!这肯定会帮助人们摆脱困境@MeesEgberts谢谢,很高兴听到你能不能从图像创建一个pdf并存储在服务器上?通过这种方式,您可以通过邮件将发票发送给客户@MeesEgberts你的意思是截图,将图像发送到服务器,然后在服务器上创建pdf?是的,类似的!通过这种方式,您可以将pdf文件存储在服务器上,并将其发送到客户端!
composer require mpdf/mpdf
<?php
//Fadil Eldin
//8/16/2020
require_once __DIR__ . '/vendor/autoload.php';
$mpdf = new \Mpdf\Mpdf();
$html = file_get_contents('https://gostreamlabs.com/front/html/pages/invoice.html');
$mpdf->WriteHTML("");
$mpdf->WriteHTML($html);
$mpdf->Output();
?>