使用TinyButStrong生成HTML并结合Dompdf创建PDF教程

霞舞
发布: 2025-11-29 12:51:17
原创
428人浏览过

使用tinybutstrong生成html并结合dompdf创建pdf教程

针对希望通过TinyButStrong(TBS)生成HTML并进一步使用Dompdf转换为PDF的开发者,本文将澄清TinyButStrong与OpenTBS插件的功能区别。我们将重点介绍如何利用纯TinyButStrong作为通用模板引擎处理HTML模板,从而为Dompdf提供有效的输入,实现高效的HTML到PDF转换流程,避免对OpenTBS的误用。

1. 理解TinyButStrong与OpenTBS的功能边界

在尝试使用TinyButStrong(TBS)及其插件生成特定格式文件时,首先需要明确其核心功能与插件的特定用途。

  • TinyButStrong (TBS):TBS是一个功能强大的通用PHP模板引擎。它的设计宗旨是能够处理任何文本文件作为模板,包括但不限于HTML页面、XML文件、纯文本文件甚至是自定义格式的数据文件。TBS通过其灵活的标签系统,允许开发者将动态数据合并到静态模板中,生成最终的输出内容。当处理HTML文件时,TBS能够高效地进行数据替换和循环渲染,生成完整的HTML结构。

  • OpenTBS 插件:OpenTBS是TinyButStrong的一个专用插件,其核心功能是扩展TBS,使其能够处理基于OpenDocument Format (ODF) 和 Office Open XML (OOXML) 标准的文档。这意味着OpenTBS专门用于合并Microsoft Office(如.docx, .xlsx, .pptx)和LibreOffice(如.odt, .ods, .odp)文档。这些文档在技术上是包含XML子文件的ZIP压缩包,OpenTBS能够解析这些结构并进行数据合并。

    立即学习前端免费学习笔记(深入)”;

核心区别:OpenTBS并非用于生成HTML,而是用于处理Office文档。如果你需要生成HTML,TinyButStrong本身就具备这个能力,无需加载OpenTBS插件。将OpenTBS用于生成HTML并期望其为Dompdf提供输入是错误的用法,因为它会尝试将HTML作为Office文档处理,这显然不是其设计目的。

2. 使用TinyButStrong生成HTML

要使用TinyButStrong生成HTML内容,你只需要使用TBS核心库,而无需安装或加载OpenTBS插件。以下是具体步骤和示例代码:

2.1 准备HTML模板

首先,创建一个包含TBS字段的HTML模板文件(例如 template.html)。

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <title>[val.title]</title>
    <style>
        body { font-family: sans-serif; margin: 20px; }
        h1 { color: #333; }
        .item { border: 1px solid #eee; padding: 10px; margin-bottom: 10px; }
        .item-name { font-weight: bold; }
    </style>
</head>
<body>
    <h1>[val.header]</h1>
    <p>生成日期:[val.date]</p>

    <h2>商品列表</h2>
    [onshow.block_items]
    <div class="item">
        <div class="item-name">[item.name]</div>
        <div class="item-price">价格:[item.price]</div>
        <div class="item-qty">数量:[item.quantity]</div>
    </div>
    [/onshow.block_items]

    <p>总计:[val.total_amount]</p>
</body>
</html>
登录后复制

在上述模板中:

Quinvio AI
Quinvio AI

AI辅助下快速创建视频,虚拟代言人

Quinvio AI 59
查看详情 Quinvio AI
  • [val.title], [val.header], [val.date], [val.total_amount] 是简单的值替换字段。
  • [onshow.block_items] 和 [/onshow.block_items] 定义了一个数据块,TBS会循环处理 item 数组中的数据来生成多个 div.item 元素。

2.2 使用TinyButStrong合并数据到HTML模板

接下来,编写PHP代码来加载模板、分配数据并生成HTML输出。

<?php
// 引入TinyButStrong库
// 假设TinyButStrong库位于 vendor/tinybutstrong/tinybutstrong.php
require_once 'vendor/tinybutstrong/tinybutstrong.php';

// 实例化TinyButStrong对象
$TBS = new clsTinyButStrong;

// 加载HTML模板
// 注意:这里不需要使用OPENTBS_PLUGIN
$TBS->LoadTemplate('template.html', 'UTF-8'); // 确保编码正确

// 准备数据
$data = array(
    'title' => '产品销售报告',
    'header' => '月度销售概览',
    'date' => date('Y-m-d H:i:s'),
    'items' => array(
        array('name' => '笔记本电脑', 'price' => '¥5000', 'quantity' => 2),
        array('name' => '无线鼠标', 'price' => '¥150', 'quantity' => 5),
        array('name' => '机械键盘', 'price' => '¥400', 'quantity' => 1),
    ),
    'total_amount' => '¥10550',
);

// 分配数据到模板
$TBS->MergeBlock('item', $data['items']); // 合并数据块
$TBS->MergeField('val', $data);          // 合并简单字段

// 生成HTML内容
// 使用 TBS_STRING 参数将输出捕获为字符串,而不是直接输出到浏览器
$html_output = $TBS->Show(TBS_STRING);

// 现在 $html_output 变量包含了完整的、合并了数据的HTML字符串
echo $html_output;

// 如果你想直接输出到浏览器,可以使用:
// $TBS->Show();
?>
登录后复制

运行这段PHP代码,你将得到一个完整的HTML字符串,其中包含了所有动态数据。

3. 结合Dompdf实现HTML到PDF转换

有了TinyButStrong生成的HTML字符串后,下一步就是将其传递给Dompdf进行PDF转换。

3.1 安装Dompdf

如果你尚未安装Dompdf,可以通过Composer进行安装:

composer require dompdf/dompdf
登录后复制

3.2 使用Dompdf转换HTML到PDF

将TinyButStrong生成的 $html_output 字符串作为Dompdf的输入。

<?php
// 引入Dompdf库
require_once 'vendor/autoload.php'; // 假设Dompdf通过Composer安装

use Dompdf\Dompdf;
use Dompdf\Options;

// ... (接上一节TinyButStrong生成HTML的代码) ...
// 假设 $html_output 已经包含了TinyButStrong生成的HTML内容

// 实例化Dompdf并设置选项
$options = new Options();
$options->set('isHtml5ParserEnabled', true);
$options->set('isRemoteEnabled', true); // 如果HTML中包含外部图片或CSS,需要开启此选项

$dompdf = new Dompdf($options);

// 加载HTML内容
$dompdf->loadHtml($html_output);

// 设置纸张大小和方向 (可选)
$dompdf->setPaper('A4', 'portrait');

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

// 输出PDF到浏览器或保存到文件
// 输出到浏览器 (直接下载)
$dompdf->stream("report.pdf", array("Attachment" => true));

// 输出到浏览器 (在浏览器中预览)
// $dompdf->stream("report.pdf", array("Attachment" => false));

// 保存到文件
// file_put_contents("path/to/save/report.pdf", $dompdf->output());

?>
登录后复制

这段代码首先配置Dompdf选项,然后加载由TinyButStrong生成的HTML字符串,最后渲染并输出PDF文件。

4. 注意事项与最佳实践

  • 明确区分用途:再次强调,TinyButStrong是通用模板引擎,OpenTBS是Office文档专用插件。请勿混淆使用。
  • 编码一致性:确保HTML模板文件、PHP脚本以及数据源的编码都是UTF-8,以避免中文乱码问题。在 LoadTemplate 方法中指定 UTF-8 是一个好习惯。
  • Dompdf的CSS支持:Dompdf对CSS的支持并非完全兼容所有现代CSS特性。在设计HTML模板时,应尽量使用基本的CSS样式,并避免复杂的布局(如Flexbox、Grid),以确保在PDF中正确渲染。内联CSS或嵌入式CSS通常比外部CSS文件更稳定。
  • 性能优化:对于包含大量数据或复杂HTML结构的PDF生成,渲染过程可能会耗时较长。考虑在后台任务中生成PDF,或对数据进行分页处理。
  • 错误处理:在实际项目中,应加入适当的错误处理机制,例如检查文件是否存在、数据是否有效等。

总结

通过本文的详细教程,我们澄清了TinyButStrong与OpenTBS插件的功能差异,并演示了如何利用TinyButStrong作为纯HTML模板引擎来生成动态HTML内容。随后,我们结合Dompdf库,将生成的HTML无缝转换为高质量的PDF文档。掌握这一流程,开发者可以灵活高效地创建各种基于HTML的报告和文档,并将其导出为PDF格式,满足多样化的业务需求。关键在于选择正确的工具来完成特定的任务:使用TinyButStrong处理HTML,而OpenTBS则专用于Office文档。

以上就是使用TinyButStrong生成HTML并结合Dompdf创建PDF教程的详细内容,更多请关注php中文网其它相关文章!

WPS零基础入门到精通全套教程!
WPS零基础入门到精通全套教程!

全网最新最细最实用WPS零基础入门到精通全套教程!带你真正掌握WPS办公! 内含Excel基础操作、函数设计、数据透视表等

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

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