【问题标题】:DOMPDF How to make PDFs height automaticDOMPDF 如何使 PDF 高度自动
【发布时间】:2014-12-28 18:07:38
【问题描述】:

恐怕这个问题没有答案,但还是这样吧。

我想做的是让人们在我的网站上填写关于他们自己的各种信息,然后在 HTML 模板文件中回显所有这些信息(稍后会转换为 PDF)。由于所有用户都有不同数量的条目和条目长度,因此无法预测文档的最终结果高度。

换句话说:用户提供的关于他们自己的信息越多,文档的大小就越大。而且没有办法设置DOMPDF根据HTML模板的最终结果生成PDF高度。

我在这里错过了一个解决方案吗?

【问题讨论】:

    标签: html css pdf height dompdf


    【解决方案1】:

    没有内置的方法可以做到这一点,但这并不意味着不可能。你碰巧是第二个问这个问题的人,而我第一次确实想出了一个可以做到的方法。

    以下内容来自dompdf support group上的原帖。


    首先,您需要对文档的样式表进行少量修改。您想将顶部和底部页边距设置为零,这样它们就不会添加到高度计算中。因此,在您的第一遍 HTML 中添加以下附加样式声明:

    @page { margin-top: 0px; margin-bottom: 0px; }
    

    接下来,您必须确定最佳的首次通过文档大小。我使用的是一个简单的文档,所以我选择了一个简单的 8cm x 8cm 页面大小。您可能希望使用更大的高度来避免与分页相关的任何错误。 8cm 大约是 226.77pt。所以我设置了第一遍以使用定义了适当尺寸的文档:

    $dompdf = new DOMPDF( );
    $dompdf->set_paper( array( 0 , 0 , 226.77 , 226.77 ) );
    $dompdf->load_html( $first_pass_html );
    $dompdf->render( );
    

    然后我们获取此遍产生的页数并取消设置 $dompdf 变量,以便我们可以进行第二遍:

    $page_count = $dompdf->get_canvas( )->get_page_number( );
    unset( $dompdf );
    

    最后,使用由第一次传递中使用的页面高度乘以生成的页面数(加上一点额外的填充以适应边距)计算出的页面高度来第二次呈现文档。

    $dompdf = new DOMPDF( );
    $dompdf->set_paper( array( 0 , 0 , 226.77 , 226.77 * $page_count + 20 ) );
    $dompdf->load_html( $original_html );
    $dompdf->render( );
    $dompdf->stream( 'sample.pdf' , array( 'Attachment' => 0 ) );
    

    【讨论】:

    • 我相信这行不通。因为这种方法是一种“对齐网格”,所以没有更好的术语。我需要它是完全像素完美的坚韧。非常感谢您的详细回答:)
    • 是的,对不起。这绝对不会为您提供像素完美的尺寸。在某个时候,我会花时间弄清楚如何提取当前位置。
    • @BrianS 我很想知道如何在加载一些 html 以实现自动高度功能后找出位置。如果您有机会对此进行研究,请在此处发布。由于这个限制,目前我们无法使用 domPdf,我们使用 mPdf,您可以在其中实现自动高度 (stackoverflow.com/questions/33022101/…)。谢谢,汉内斯
    猜你喜欢
    • 1970-01-01
    • 2019-03-16
    • 1970-01-01
    • 1970-01-01
    • 2017-06-25
    • 1970-01-01
    • 1970-01-01
    • 2014-03-21
    • 2015-05-17
    相关资源
    最近更新 更多