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


使用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>
                    <div class="aritcle_card">
                        <a class="aritcle_card_img" href="/ai/1726">
                            <img src="https://img.php.cn/upload/ai_manual/000/000/000/175680317332855.png" alt="Viggle AI Video">
                        </a>
                        <div class="aritcle_card_info">
                            <a href="/ai/1726">Viggle AI Video</a>
                            <p>Powerful AI-powered animation tool and image-to-video AI generator.</p>
                            <div class="">
                                <img src="/static/images/card_xiazai.png" alt="Viggle AI Video">
                                <span>115</span>
                            </div>
                        </div>
                        <a href="/ai/1726" class="aritcle_card_btn">
                            <span>查看详情</span>
                            <img src="/static/images/cardxiayige-3.png" alt="Viggle AI Video">
                        </a>
                    </div>
                
</body>
</html>

在上述模板中:

  • [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/s*e/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中文网其它相关文章!


# php  # 这段  # 并结合  # 如果你  # 是一个  # 加载  # 文档  # AI-powered  # ai  # 中文乱码  # 工具  # ppt  # 电脑  # 浏览器  # 编码  # html5  # composer  # html  # css  # office  # 黄梅seo优化技巧  # 郑州网站建设知识点优化  # 承德网站推广优化技巧  # 学seo上升空间  # 佳得乐市场推广营销策略  # 瓜州网络营销推广  # 公司业务营销推广用词怎么说  # 关于珠海网站建设的优势  # 品牌推广策略网站  # 昆明做网站优化的公司  # 文本文件  # 转换为  # 包含了 


相关栏目: 【 Google疑问12 】 【 Facebook疑问10 】 【 优化推广96088 】 【 技术知识133117 】 【 IDC资讯59369 】 【 网络运营7196 】 【 IT资讯61894


相关推荐: 附近酒吧怎么找?  空腹吃苹果好吗 苹果空腹摄入指南  PDF如何批量加注释_PDF多文件批注高亮操作教程  《绝区零》2.3前瞻|直播|内容介绍  网易云音乐闹钟铃声设置教程  三星M34录音变声问题_Samsung M34麦克风调整  Firefox OS应用开发:解决XMLHttpRequest跨域请求阻塞问题  163邮箱网页版入口 163邮箱在线使用  豆包AI怎样为教育场景定制答疑逻辑_为教育场景定制豆包AI答疑逻辑方案【方案】  哔哩哔哩在线观看入口 B站官网免费进入  OPPO手机参数配置如何开启护眼模式_OPPO手机参数配置护眼模式开启指南  windows server2019显卡驱动怎么安装_winserver2019显卡驱动安装与远程桌面优化  疯狂小鸟微信小游戏入口 疯狂小鸟网页版秒玩  《下一站江湖2》独孤剑诀习得方法  我的世界官方网址入口 我的世界游戏主页直达入口  使用Google服务账号实现Google Drive API无缝集成与文件访问  Win11怎么设置分辨率 Win11显示设置调整分辨率及刷新率修改  《广发易淘金》国债逆回购操作教程  《宝可梦大集结》S4冠军之路开始时间介绍  《海底捞》点外卖方法  PHP odbc_fetch_array 返回值处理:如何正确访问嵌套数组元素  win11资源管理器标签页怎么用 Win11文件管理器多标签高效操作【新功能】  抖音火山版注销账号抖音会注销吗 抖音火山版与抖音账号注销关系  天堂漫画网页版在线阅读 天堂漫画手机版入口  《饿了么》拼好饭点外卖教程2025  4399小游戏下装链接 4399小游戏下载链接入口  2025SNH48年度青春盛典门票价格及购买方式  可米酷漫画在线阅读入口_ 可米酷漫画官网直达链接  C++如何实现单例模式_C++线程安全的单例模式写法  FotoBalloon图片左右镜像教程  Scipy Sparse CSR 矩阵非零元素行级遍历的最佳实践  J*a列表元素格式化输出教程  谷歌浏览器如何查找和删除恶意软件 谷歌浏览器内置安全清理工具使用教程  谷歌浏览器官方镜像获取方法_谷歌浏览器网页版入口极速直达  j*a中赋值运算符是什么?  视频号视频怎么免费保存到相册?保存到相册需要注意什么?  edge浏览器怎么修改语言为中文_Edge界面语言切换教程  Excel如何快速找到并断开外部数据源链接_Excel外部数据源断开方法  解决Pandas DataFrame高度碎片化警告:高效创建多列的策略  cad加载的线型看不见怎么办_cad线型不可见问题解决方法  Lar*el 关联查询:同时筛选父表与子表数据的高效策略  《领英》查看屏蔽名单方法  c++20的指定初始化(Designated Initializers)怎么用_c++ C风格结构体初始化  视频号视频怎么提取文案?提取的文案如何优化与使用?  excel怎么制作考勤表 excel考勤模板与函数公式讲解  顺丰快递在线查询系统 顺丰快递官方查单入口  百度输入法在AutoCAD中无法输入中文怎么办_百度输入法CAD输入异常解决方法  网页版网易云音乐入口_网易云音乐在线官网登录  《360浏览器》自动保存账号密码设置方法  Yandex无需登录畅游 俄罗斯搜索引擎最新官网指南 

 2025-11-29

了解您产品搜索量及市场趋势,制定营销计划

同行竞争及网站分析保障您的广告效果

点击免费数据支持

提交您的需求,1小时内享受我们的专业解答。

运城市盐湖区信雨科技有限公司


运城市盐湖区信雨科技有限公司

运城市盐湖区信雨科技有限公司是一家深耕海外推广领域十年的专业服务商,作为谷歌推广与Facebook广告全球合作伙伴,聚焦外贸企业出海痛点,以数字化营销为核心,提供一站式海外营销解决方案。公司凭借十年行业沉淀与平台官方资源加持,打破传统外贸获客壁垒,助力企业高效开拓全球市场,成为中小企业出海的可靠合作伙伴。

 8156699

 13765294890

 8156699@qq.com

Notice

We and selected third parties use cookies or similar technologies for technical purposes and, with your consent, for other purposes as specified in the cookie policy.
You can consent to the use of such technologies by closing this notice, by interacting with any link or button outside of this notice or by continuing to browse otherwise.