Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/230.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用PHP将带有样式(css)的html转换为pdf_Php_Html_Css_Pdf - Fatal编程技术网

使用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();
?>