如何使用dompdf设置pdf的自定义宽度和高度?

问题描述 投票:0回答:2

当我使用 dompdf 创建 pdf 时,它会生成默认宽度和高度。我想设置我创建的 pdf 的自定义宽度和高度。如果在 dompdf 中不可能,请建议其他 php 插件。

php dompdf
2个回答
38
投票

默认情况下,它将呈现在“美国信件”上,您可以使用以下方法更改此设置:

$dompdf->setPaper(DEFAULT_PDF_PAPER_SIZE, 'portrait');

您可以使用“letter”、“legal”、“A4”等..

尽管如此,您可以像这样设置自己的尺寸:

$customPaper = array(0,0,360,360);
$dompdf->setPaper($customPaper);

更多信息:https://github.com/dompdf/dompdf/wiki/Usage


0
投票

我正在寻找如何使文档的高度动态化以在热敏纸卷上打印。这是我使用 DomPDF 得到的最接近的解决方案。

  • 您需要创建包含所有属性的文件并加载 html:

     $pdf = new Dompdf();
    
     $options = $pdf->getOptions();
     $pdf->set_paper(array(0, 0, 164.44, 842.07), 'portrait');
    
     $options->set(array(
         'isRemoteEnabled' => true,
         'isHtml5ParserEnabled' => true
     ));
     $pdf->setOptions($options);
    
     $pdf->loadHtml($template);
    
  • 在渲染之前,定义一个回调函数,并在全局数组中定义一个存储高度的变量,之后,进行渲染并取消设置 pdf 对象,现在您的文件的主体高度加上 100 px .

     /*
     * Workaround to get the body height
     */
     $GLOBALS['bodyHeight'] = 0;
    
     $pdf->setCallbacks([
         'myCallbacks' => [
             'event' => 'end_frame', 
             'f' => function ($frame) {
                 $node = $frame->get_node();
    
                 if (strtolower($node->nodeName) === "body") {
                     $padding_box = $frame->get_padding_box();
                     $GLOBALS['bodyHeight'] += $padding_box['h'];
                 }
             }
         ]
     ]);
    
     $pdf->render();
     unset($pdf);
     $docHeight = $GLOBALS['bodyHeight'] + 100;
    
  • 现在您需要再次创建文件,但现在您已经拥有了需要为 pdf 文件定义的高度。

     $pdf = new Dompdf();
     $options = $pdf->getOptions();
    
     $pdf->setPaper([0,0,227, $docHeight]);
    

来源: 创建具有自动高度的单页 PDF 文件

© www.soinside.com 2019 - 2024. All rights reserved.