0

0

# Dompdf 中 $pdf 变量和 page_text 函数的使用详解

心靈之曲

心靈之曲

发布时间:2025-10-18 09:42:07

|

285人浏览过

|

来源于php中文网

原创

# Dompdf 中 $pdf 变量和 page_text 函数的使用详解

zuojiankuohaophpcnp>本文档旨在详细介绍 Dompdf 中 `$pdf` 变量的含义及其用法,并深入探讨如何利用 `page_text` 函数在生成的 PDF 文档中添加自定义文本,特别是在需要进行分页和在特定页面添加内容时。通过本文,您将能够理解如何在 PHP 代码和 HTML 模板中使用这些功能,并掌握 Dompdf 的高级用法,从而更好地控制 PDF 文档的生成。</p> ## 理解 Dompdf 中的 $pdf 变量 在 Dompdf 中,`$pdf` 变量是一个在页面脚本中可用的特殊变量,它代表了 `Canvas` 对象的一个引用。`Canvas` 对象提供了对底层 PDF 写入后端(如 `CPDF`)的直接访问。因此,你可以使用 `$pdf` 变量以及 `Canvas` 对象提供的方法来直接操作 PDF 文档的内容。 需要注意的是,`Canvas` 对象主要用于绘制原始的 PDF 元素,例如文本、线条和形状。它**不**支持直接渲染 HTML 代码。这意味着你不能像使用 HTML 元素那样,直接将包含样式信息的 HTML 代码传递给 `Canvas` 对象的方法。所有文本的样式,例如字体、大小和颜色,都必须手动设置。 ## 使用 page_text 函数添加文本 `page_text` 函数是 `Canvas` 对象的一个方法,它允许你在 PDF 文档的每一页上添加文本。与 `Canvas` 对象的其他方法(如 `text`)不同,`page_text` 函数是在 HTML 文档完全渲染后,针对每一页执行的。这使得它非常适合添加页眉、页脚、页码等需要在每一页上重复出现的内容。 以下是如何使用 `page_text` 函数的示例: **PHP 代码中:** ```php <?php use Dompdf\Dompdf; use Dompdf\FontMetrics; // 实例化 Dompdf 对象 $dompdf = new Dompdf(['isPhpEnabled' => true]); // 加载 HTML 内容 $html = '<html><body><h1>Hello, Dompdf!</h1><p>This is page 1.</p><div style="page-break-after: always;"></div><p>This is page 2.</p></body></html>'; $dompdf->loadHtml($html); // (Optional) 设置纸张大小和方向 $dompdf->setPaper('A4', 'portrait'); // 渲染 HTML 为 PDF $dompdf->render(); // 获取 Canvas 对象 $canvas = $dompdf->getCanvas(); // 获取 FontMetrics 对象 $fontMetrics = $dompdf->getFontMetrics(); // 使用 page_script 添加页码 $canvas->page_script(function($pageNumber, $pageCount, $fontMetrics) use ($canvas) { $font = $fontMetrics->get_font("helvetica", "bold"); $canvas->page_text(540, 815, "Page $pageNumber of $pageCount", $font, 8, array(0,0,0)); }); // 输出 PDF 到浏览器 $dompdf->stream("dompdf_output.pdf", ["Attachment" => false]); ?>

html 代码中(需要启用 php):

<script type="text/php">
    if ( isset($pdf) ) {
        $font = Font_Metrics::get_font("helvetica", "bold");
        $pdf->page_text(72, 18, "Header: {PAGE_NUM} of {PAGE_COUNT}",
                        $font, 6, array(0,0,0));
    }
</script>

在上面的例子中,PAGE_NUM 和 PAGE_COUNT 是 Dompdf 提供的预定义常量,分别代表当前页码和总页数。这些常量只能在 HTML 嵌入的 PHP 脚本中使用。

注意事项:

  • 为了在 HTML 代码中使用 PHP 脚本,你需要在实例化 Dompdf 对象时启用 isPhpEnabled 选项。
  • Font_Metrics::get_font() 方法用于获取字体对象,你需要指定字体名称和样式(例如 "helvetica", "bold")。
  • $pdf->page_text() 方法的参数依次为:x 坐标、y 坐标、文本内容、字体对象、字体大小和颜色(RGB 数组)。

在特定页面添加内容

你可以结合条件判断语句,在特定页面上添加内容。例如,以下代码只会在第二页上添加页眉:

<script type="text/php">
    if ( isset($pdf) && PAGE_NUM === 2 ) {
        $font = Font_Metrics::get_font("helvetica", "bold");
        $pdf->page_text(72, 18, "Header: Page 2",
                        $font, 6, array(0,0,0));
    }
</script>

使用 Canvas 对象直接操作 PDF

除了使用 page_text 函数,你还可以使用 Canvas 对象的其他方法来直接操作 PDF 文档。例如,你可以使用 text 方法在当前页面的指定位置添加文本,使用 line 方法绘制线条,使用 rectangle 方法绘制矩形等等。

Vondy
Vondy

下一代AI应用平台,汇集了一流的工具/应用程序

下载

以下是一个使用 text 方法添加文本的例子:

<?php

use Dompdf\Dompdf;

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

// 加载 HTML 内容
$html = '<html><body><h1>Hello, Dompdf!</h1></body></html>';
$dompdf->loadHtml($html);

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

// 获取 Canvas 对象
$canvas = $dompdf->getCanvas();

// 获取 FontMetrics 对象
$fontMetrics = $dompdf->getFontMetrics();

// 添加文本
$font = $fontMetrics->get_font("helvetica", "bold");
$canvas->text(72, 18, "This is a test text.", $font, 10, array(0, 0, 0));

// 输出 PDF 到浏览器
$dompdf->stream("dompdf_output.pdf", ["Attachment" => false]);

?>

总结

通过本文,你应该对 Dompdf 中 $pdf 变量的含义、page_text 函数的用法以及如何使用 Canvas 对象直接操作 PDF 文档有了更深入的了解。掌握这些知识,你将能够更加灵活地控制 PDF 文档的生成,并实现各种自定义需求。记住,Canvas 对象主要用于绘制原始的 PDF 元素,而 page_text 函数则是在每一页上添加重复内容的最佳选择。在实际应用中,你可以根据具体需求选择合适的方法。

					

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

WorkBuddy
WorkBuddy

腾讯云推出的AI原生桌面智能体工作台

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
java基础知识汇总
java基础知识汇总

java基础知识有Java的历史和特点、Java的开发环境、Java的基本数据类型、变量和常量、运算符和表达式、控制语句、数组和字符串等等知识点。想要知道更多关于java基础知识的朋友,请阅读本专题下面的的有关文章,欢迎大家来php中文网学习。

1569

2023.10.24

java中break的作用
java中break的作用

本专题整合了java中break的用法教程,阅读专题下面的文章了解更多详细内容。

120

2025.10.15

java break和continue
java break和continue

本专题整合了java break和continue的区别相关内容,阅读专题下面的文章了解更多详细内容。

261

2025.10.24

function是什么
function是什么

function是函数的意思,是一段具有特定功能的可重复使用的代码块,是程序的基本组成单元之一,可以接受输入参数,执行特定的操作,并返回结果。本专题为大家提供function是什么的相关的文章、下载、课程内容,供大家免费下载体验。

499

2023.08.04

js函数function用法
js函数function用法

js函数function用法有:1、声明函数;2、调用函数;3、函数参数;4、函数返回值;5、匿名函数;6、函数作为参数;7、函数作用域;8、递归函数。本专题提供js函数function用法的相关文章内容,大家可以免费阅读。

166

2023.10.07

html5动画制作有哪些制作方法
html5动画制作有哪些制作方法

html5动画制作方法有使用CSS3动画、使用JavaScript动画库、使用HTML5 Canvas等。想了解更多html5动画制作方法相关内容,可以阅读本专题下面的文章。

550

2023.10.23

Python异步编程与Asyncio高并发应用实践
Python异步编程与Asyncio高并发应用实践

本专题围绕 Python 异步编程模型展开,深入讲解 Asyncio 框架的核心原理与应用实践。内容包括事件循环机制、协程任务调度、异步 IO 处理以及并发任务管理策略。通过构建高并发网络请求与异步数据处理案例,帮助开发者掌握 Python 在高并发场景中的高效开发方法,并提升系统资源利用率与整体运行性能。

37

2026.03.12

C# ASP.NET Core微服务架构与API网关实践
C# ASP.NET Core微服务架构与API网关实践

本专题围绕 C# 在现代后端架构中的微服务实践展开,系统讲解基于 ASP.NET Core 构建可扩展服务体系的核心方法。内容涵盖服务拆分策略、RESTful API 设计、服务间通信、API 网关统一入口管理以及服务治理机制。通过真实项目案例,帮助开发者掌握构建高可用微服务系统的关键技术,提高系统的可扩展性与维护效率。

136

2026.03.11

Go高并发任务调度与Goroutine池化实践
Go高并发任务调度与Goroutine池化实践

本专题围绕 Go 语言在高并发任务处理场景中的实践展开,系统讲解 Goroutine 调度模型、Channel 通信机制以及并发控制策略。内容包括任务队列设计、Goroutine 池化管理、资源限制控制以及并发任务的性能优化方法。通过实际案例演示,帮助开发者构建稳定高效的 Go 并发任务处理系统,提高系统在高负载环境下的处理能力与稳定性。

47

2026.03.10

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PHP课程
PHP课程

共137课时 | 13.5万人学习

JavaScript ES5基础线上课程教学
JavaScript ES5基础线上课程教学

共6课时 | 11.3万人学习

PHP新手语法线上课程教学
PHP新手语法线上课程教学

共13课时 | 1.0万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号