返回

在 PHP 中使用 dompdf 将 PDF 页面一分为二:一份详尽的指南

php

在 PHP 开发中,使用 dompdf 库可以方便地生成 PDF 文件。但有时我们需要将一个 PDF 页面分成两部分,例如简历的左右两栏布局。虽然 dompdf 没有直接提供页面分割的功能,但我们可以利用 CSS 样式和 HTML 结构的巧妙组合来实现这个目标。

首先,我们需要明确一点,dompdf 本质上是将 HTML 渲染成 PDF。因此,我们可以像设计网页布局一样,利用 CSS 的浮动和定位属性来控制页面元素的位置。

假设我们要创建一个简历 PDF,左侧显示个人信息和技能,右侧显示工作经历和教育背景。我们可以先构建一个简单的 HTML 结构:

<div class="container">
  <div class="left">
    <h2>个人信息</h2>
    <p>姓名:张三</p>
    <p>联系方式:1234567890</p>

    <h2>技能</h2>
    <ul>
      <li>PHP</li>
      <li>MySQL</li>
      <li>JavaScript</li>
    </ul>
  </div>
  <div class="right">
    <h2>工作经历</h2>
    <p>2020-至今:XX公司 PHP 开发工程师</p>

    <h2>教育背景</h2>
    <p>2016-2020:XX大学 计算机科学与技术</p>
  </div>
</div>

接下来,我们需要使用 CSS 来控制左右两部分的布局。我们可以使用 float 属性让 .left 部分左浮动,.right 部分右浮动,并设置它们的宽度,使其占据页面的一半空间:

.container {
  width: 100%;
  overflow: hidden; 
}

.left {
  width: 50%;
  float: left;
  box-sizing: border-box; 
  padding: 20px;
}

.right {
  width: 50%;
  float: right;
  box-sizing: border-box;
  padding: 20px;
}

这里需要注意的是,我们使用了 box-sizing: border-box; 来确保 padding 值包含在元素的总宽度内,避免左右两部分的宽度加起来超过页面宽度。另外,overflow: hidden; 可以清除浮动,防止 .container 的高度塌陷。

完成 HTML 和 CSS 的编写后,我们就可以使用 dompdf 生成 PDF 了。代码如下:

require_once 'dompdf/autoload.inc.php';

use Dompdf\Dompdf;

// 实例化 dompdf
$dompdf = new Dompdf();

// 加载 HTML 内容
$html = file_get_contents('resume.html'); 
$dompdf->loadHtml($html);

// 设置页面大小和方向
$dompdf->setPaper('A4', 'portrait');

// 渲染 PDF
$dompdf->render();

// 输出 PDF
$dompdf->stream("resume.pdf"); 

这样,我们就可以得到一个 PDF 文件,其中页面被分成左右两部分,分别显示了简历的不同内容。

当然,这只是一个简单的例子,你可以根据自己的需求调整 HTML 结构和 CSS 样式,例如添加页眉、页脚、表格等元素,来创建更复杂的 PDF 布局。

常见问题解答

1. 如何调整左右两部分的宽度比例?

只需要修改 .left.rightwidth 属性即可,例如将 .left 的宽度设置为 40%.right 的宽度设置为 60%

2. 如何控制左右两部分的内容高度一致?

可以使用一些 CSS 技巧来实现,例如设置 min-height 属性,或者使用 Flexbox 布局。

3. 如何在左右两部分之间添加分割线?

可以在 .left.right 的 CSS 中添加 border-rightborder-left 属性来设置分割线。

4. 如何处理内容过多导致页面溢出的问题?

可以尝试减小字体大小、调整页面边距,或者将内容分成多个页面。

5. 如何在 PDF 中添加页码?

dompdf 提供了 page_script 选项,可以在页眉或页脚中添加 JavaScript 代码来实现页码功能。具体方法可以参考 dompdf 的官方文档。