【问题标题】:How to Center a bordered content when converting from html to pdf从html转换为pdf时如何将有边框的内容居中
【发布时间】:2021-06-22 05:47:31
【问题描述】:

我有一个 html 页面,其内容包含在 7px 的边框内,该边框必须是 div、父 div 和子 div,我正在尝试将其转换为 pdf,但是当我这样做时,页面更靠右对齐,在左边留下一个巨大的空间。但是当在 html 中查看同一页面时,它是正确居中的。钍

我需要实现的是将 PDF 文件中的边框及其内容居中。父 div 有以下 css

``` #wrapper{
    width: 740px;
    /*margin: 2px auto;*/
    margin: auto;
    /*border: solid  red;*/
    height: 1000px;
    page-break-after: avoid;
}```

并且子 div 具有以下 css

```#maincontent{
    border: solid 7px black;
    /*margin: 2px auto 100px;*/
    /*margin: 2px auto;*/
    margin: auto;
    height: 98.2%;
    /*width: 98%;*/
    width: 720px;
    display: block;
    page-break-before: avoid;
    break-after: avoid;
}```

【问题讨论】:

  • 您是否使用浏览器打印功能创建 pdf?

标签: html css pdf


【解决方案1】:

laravel-dompdf 是一个不错的库,但是在处理 css 时它不是很好,所以有一个 wkhtmltopdf 这是一个使用 WebKit 渲染引擎的 CLI 工具。有一个名为 laravel-snappy 的 PHP 库,它为 wkhtmltopdf 创建了一个包装器,并将 html 转换为 pdf/image,几乎适用于所有操作系统。完整的说明和手册文档链接可在 [link]https://github.com/barryvdh/laravel-snappy

获得

【讨论】:

  • 感谢您提供我自己刚开始使用 Laravel 的信息,老实说,因为没有很多关于 pdf 的信息,这对我有帮助。我最初的答案是基于 CodeIgniter
【解决方案2】:

使用 MPDF 不要在 HTML 打印页面中设置样式,这将不起作用。将样式添加到您的控制器或 .CSS 或在您的 HTML 上方而不是内部添加样式。请注意,行样式很重要,您需要将其添加到您的样式中。 另请注意,引导程序并非所有引导程序版本都对 MPDF 友好。 3.4.1 版适合我。

<?php
$mpdf = new \Mpdf\Mpdf();
$stylesheet = file_get_contents('https://maxcdn.bootstrapcdn.com/bootstrap/3.4.1/css/bootstrap.min.css');
$mpdf->WriteHTML($stylesheet, \Mpdf\HTMLParserMode::HEADER_CSS);
$stylesheet = '<style>
    .row {
        margin: 10px 0px 0px 0px !important;
        padding: 0px !important;
    }
    .wrapper{
    width: 740px;
    /*margin: 2px auto;*/
    margin: auto;
    /*border: solid  red;*/
    height: 1000px;
    page-break-after: avoid;
    }
    .maincontent{
    border: solid 7px black;
    /*margin: 2px auto 100px;*/
    /*margin: 2px auto;*/
    margin: auto;
    height: 98.2%;
    /*width: 98%;*/
    width: 720px;
    display: block;
    page-break-before: avoid;
    break-after: avoid;
    }
</style>';
$mpdf->WriteHTML($stylesheet, \Mpdf\HTMLParserMode::HEADER_CSS);
$mpdf->WriteHTML(view('/print/print_jobcard', $data), \Mpdf\HTMLParserMode::HTML_BODY);
$mpdf->Output($data['jobcard'][0]['job_number'].'.pdf', 'D');
?>

<!DOCTYPE html>
<html>
<body>

<div >
   
    <br style="height: 15mm; margin: 0;">
    <div class="row">
        <div class="col-xs-8 col-sm-8"><h4>Date</h4></div>
        <div class="col-sm-8"><h4 style= "text-align:center"> Lorem Ipson</h4></div>
    </div>
 
    <br style="height: 30mm; margin: 0;">
    <div class="row">
        <div class="col-xs-4 col-sm-4"><h4>Name</h4></div>
        <div class="col-xs-4 col-sm-4"><h4>Email</h4></div>
        <div class="col-sm-4"><h4>Tel</h4></div>
    </div>
   
</div>

</body>
</html>

【讨论】:

  • 我正在使用 DomPDF 库
  • 基本保持不变,使用外部样式。 DomPDF 支持更多 CSS,但如果我理解正确,它会更慢,但最终结果将是 pdf。如果你能给我你的代码,我会尝试实现我的代码来测试。
  • 复制我的
  • 非常感谢,非常感谢。但是,我发现了一个非常有用的链接,它对我有很大帮助,似乎 laravel-dompdf 包装器在将 html 转换为 pdf 时存在一些问题,还有另一个包装器与 barryvdh/laravel-dompdf 相同,但它叫做 laravel-snappy barryvdh/laravel-snappy,我使用了这个包装器并且像一个魅力
  • 我在 [link] laracasts.com/discuss/channels/general-discussion/… 找到了@Corez64 发布和建议的解决方案
猜你喜欢
  • 1970-01-01
  • 2011-08-13
  • 2017-05-29
  • 2018-03-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-05
  • 2021-04-09
相关资源
最近更新 更多