如何在 mPDF 中使用引导程序?

Posted

技术标签:

【中文标题】如何在 mPDF 中使用引导程序?【英文标题】:How to use bootstrap in mPDF? 【发布时间】:2018-08-12 15:12:20 【问题描述】:

我目前正在使用 mpdf 从 html 生成我的 pdf。到目前为止,使用我传入的当前 html,我能够生成带有页眉和页脚的单页 pdf。但是,如果超过一页,我的页脚会一直到第二页的底部。有没有办法为每个页面添加页眉和页脚?

我已经尝试过 $pdf->setHTMLHeader 但它似乎没有接收我的 css 文件并且它在我的徽标应该是的位置留下了一个 x。我怎样才能做到这一点?我已经尝试在各个地方搜索,但似乎找不到解决方案。

这是我的代码

public function generate_pdf($account_id,$transaction_id,$html)
        $document_folder = $_SERVER['DOCUMENT_ROOT']."/".DOCUMENT_FOLDER."/".PAYMENT_RECEIPTS."/".date("Y");
        $extension = ".pdf";
        if(!is_dir($document_folder))
            mkdir($document_folder, 0777,true);
        
        $file_name = md5($transaction_id.$account_id);
        $this->load->library('m_pdf');
        $pdf = $this->m_pdf->load();
        $header = $this->load->view('pdfs/header','',true);
        $footer = $this->load->view('pdfs/footer','',true);
        $pdf->setHTMLHeader($header);
        $pdf->setHTMLFooter($footer);
        $pdf->AddPage('', // L - landscape, P - portrait 
            '', '', '', '',
            5, // margin_left
            5, // margin right
           60, // margin top
           30, // margin bottom
            0, // margin header
            0
        ); // margin footer
        $pdf->WriteHTML(base64_decode($html));
        $pdf->Output($document_folder."/".$file_name.$extension, "F");
        $result = array(
            'file_name'=>$file_name,
            'file_location'=>$document_folder."/".$file_name.$extension,
            'file_link'=>DOCUMENT_LOCATION."/".DOCUMENT_FOLDER."/".PAYMENT_RECEIPTS."/".date("Y")."/".$file_name.$extension
        );
        return $result;
        exit;

    

另外,有没有办法知道 PDF 的输出是否成功?目前$pdf->输出只返回""

谢谢

【问题讨论】:

对不起,我知道为什么这被否决了吗?? 无法应用外部 CSS 文件尝试使用内联样式表。 嗨@ParamBhat,但是我该如何加载像引导程序这样的项目呢? $header$footer 里面有什么 它只是支持一些内部样式,没有完整的CSS,你仍然不能应用Bootstrap。 【参考方案1】:

这是 mPDF 的 Bootstrap CSS 文件:https://github.com/kartik-v/yii2-mpdf/blob/master/src/assets/kv-mpdf-bootstrap.css

它是封装 mPDF 的kartik-v/yii2-mpdf php 库的一部分。

【讨论】:

【参考方案2】:

就我而言,我使用的是带有 MPDF 6.0 版的 Bootstrap 3.3.7。 它运行良好,没有任何错误。

$stylesheet = file_get_contents('css/bootstrap-3.3.7.min.css');
$pdf->WriteHTML($stylesheet, 1); // CSS Script goes here.
$pdf->WriteHTML($html, 2); //HTML Content goes here.
$pdf->Output();

【讨论】:

【参考方案3】:

mPDF 不完全支持 Bootstrap 样式。一个选项将是一些替代方案,例如基于 headless-chrome 的 wkhtmltopdf。

其中一位 mpdf 人员告诉 mpdf 内不支持开箱即用的引导程序,您必须使用一些自定义样式。 Github link

希望这将有助于解决您的问题。

【讨论】:

我想试试 wkhtmltopdf 但我担心速度。不过谢谢。 我建议使用内联样式表。如果我的回答真的对你有帮助,请投票并接受答案。 我会试试的。现在我会接受答案并给你赏金,谢谢 尝试使用 Bootstrap 3.3.7 它可以正常工作。 @silambarasanR.D - 为什么要投反对票?我说 mPDF 不完全支持 Bootstrap 样式。 Bootstrap 3.3.7 所有标签在 mPDF 中都可以正常工作吗?你试过所有的款式吗?

以上是关于如何在 mPDF 中使用引导程序?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 laravel 邮件模板中使用引导程序

如何在角度 2 中使用引导程序 4?

如何在 reactjs 中使用引导程序

如何在引导程序中正确对齐品牌形象

如何将引导程序 4 升级到引导程序 5? - 纱线

引导分页——如何在代码中插入引导程序?