使用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


相关推荐: 解决Go encoding/json 将JSON大数字解析为浮点数的问题  小米手机截图后如何查看历史_小米手机截图历史记录查看方法  PDF如何批量加注释_PDF多文件批注高亮操作教程  手机坏了微信聊天记录怎么导出来 新手机恢复聊天记录技巧  泰拉瑞亚水晶无法放置问题  Win10如何彻底关闭OneDrive Win10禁用云同步功能【纯净】  抖音作品被限流怎么办 抖音内容优化与流量恢复方法  歌词怎么展示在|直播|间视频号?有什么注意事项?  京东快递物流信息不更新怎么办_物流停滞原因与处理方法  POKI小游戏在线免费入口链接 POKI小游戏无下载秒玩玩  在VS Code中进行数据科学和机器学习开发  漫蛙app官方版手机正版入口-漫蛙漫画manwa在线漫画正版入口  铁路12306座位怎么选_12306官方选座操作方法  电脑开不了机怎么办 电脑无法开机的解决方法  多闪APP官方下载安装入口_多闪最新版本获取入口  Microsoft Edge网页字体太淡看不清怎么办_Microsoft Edge字体渲染优化技巧  怎样让Windows 11的开始菜单恢复经典样式_Open-Shell工具使用指南【怀旧】  Yandex世界探索 最新官方免登录入口全知道  菜鸟驿站的取件码忘了怎么办 手机快速查询指南  《华夏千秋》龙女试炼功法获取方法  c++如何实现观察者设计模式_c++行为型设计模式实战  百度输入法在AutoCAD中无法输入中文怎么办_百度输入法CAD输入异常解决方法  B站怎么开|直播| B站|直播|申请需要什么条件【新手必看】  在J*a里什么是行为抽象_抽象行为对代码复用的提升作用  画质怪兽120帧安卓和平精英免费版  Excel如何制作月度销售统计图_Excel动态图表制作与控件应用  智慧团建活动报名入口 智慧团建活动报名入口手机端官网​  苹果手机聊天记录删除了如何恢复  J*aScript大数运算_BigInt使用指南  如何使用 composer 和 aop-php 实现 AOP 编程?  Go语言反射机制:如何访问被嵌入结构体遮蔽的方法  《360浏览器》设置摄像头权限方法  解决J*aScript动态图片上传中ID重复问题:在同一页面显示多张独立图片  WooCommerce 新客户订单自动添加管理员备注教程  b站如何剪辑视频_b站必剪app使用教程  汽水音乐官网网页版入口 汽水音乐官网网页版在线入口  Python中深度嵌套字典与列表的数据提取与条件过滤指南  AO3中文版手机快速通道_AO3最新稳定链接更新  使用jQuery精确检测除指定元素外任意位置的点击事件  PDF文件去水印平台入口 PDF水印删除网址  AO3中文入口稳定分享_AO3官网HTTPS看文详解  vivo云服务一直提示空间不足怎么办 怎么办vivo云服务老是提示空间不足  win11如何诊断DirectX问题 Win11运行dxdiag工具排查显卡故障【排错】  macosmonterey系统外接显示器驱动怎么安装_macosmonterey外接显示器驱动与分辨率调整  b站怎么用微信登录_b站微信登录方法  win11怎么更改账户类型 Win11标准用户和管理员权限切换【教程】  HTML与J*aScript实现下拉菜单驱动的动态表格:构建交互式维修表单  Win10如何关闭开机锁屏界面_Windows10跳过锁屏直接登录设置  diskgenius分区工具如何设置Bios启动项  苹果手机缓存怎么清除_苹果手机缓存如何清除iphone各版本操作步骤 

 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.