
针对希望通过TinyButStrong(TBS)生成HTML并进一步使用Dompdf转换为PDF的开发者,本文将澄清TinyButStrong与OpenTBS插件的功能区别。我们将重点介绍如何利用纯TinyButStrong作为通用模板引擎处理HTML模板,从而为Dompdf提供有效的输入,实现高效的HTML到PDF转换流程,避免对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文档处理,这显然不是其设计目的。
要使用TinyButStrong生成HTML内容,你只需要使用TBS核心库,而无需安装或加载OpenTBS插件。以下是具体步骤和示例代码:
首先,创建一个包含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>在上述模板中:
接下来,编写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字符串,其中包含了所有动态数据。
有了TinyButStrong生成的HTML字符串后,下一步就是将其传递给Dompdf进行PDF转换。
如果你尚未安装Dompdf,可以通过Composer进行安装:
composer require dompdf/dompdf
将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文件。
通过本文的详细教程,我们澄清了TinyButStrong与OpenTBS插件的功能差异,并演示了如何利用TinyButStrong作为纯HTML模板引擎来生成动态HTML内容。随后,我们结合Dompdf库,将生成的HTML无缝转换为高质量的PDF文档。掌握这一流程,开发者可以灵活高效地创建各种基于HTML的报告和文档,并将其导出为PDF格式,满足多样化的业务需求。关键在于选择正确的工具来完成特定的任务:使用TinyButStrong处理HTML,而OpenTBS则专用于Office文档。
以上就是使用TinyButStrong生成HTML并结合Dompdf创建PDF教程的详细内容,更多请关注php中文网其它相关文章!
全网最新最细最实用WPS零基础入门到精通全套教程!带你真正掌握WPS办公! 内含Excel基础操作、函数设计、数据透视表等
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号