# 如何使用TCPDF撰写和生成PDF文件 ## 目录 1. [TCPDF简介](#tcpdf简介) 2. [环境准备与安装](#环境准备与安装) 3. [基础PDF生成](#基础pdf生成) 4. [文本与样式控制](#文本与样式控制) 5. [图片与多媒体插入](#图片与多媒体插入) 6. [表格与列表](#表格与列表) 7. [页眉页脚与分页](#页眉页脚与分页) 8. [高级功能](#高级功能) 9. [常见问题与解决方案](#常见问题与解决方案) 10. [总结](#总结) --- ## TCPDF简介 TCPDF是一个开源的PHP类库,用于动态生成PDF文档。自2002年发布以来,它已成为PHP领域最流行的PDF生成解决方案之一,具有以下核心优势: - **无需外部依赖**:不依赖第三方工具如PDFlib - **UTF-8支持**:完整支持Unicode和中文等复杂字符集 - **丰富功能**: - 支持自定义页眉/页脚 - 自动分页控制 - 矢量图形绘制 - 条形码生成 - **轻量高效**:纯PHP实现,部署简单 > 对比FPDF/mPDF:TCPDF在功能完整性和Unicode支持上更胜一筹,而mPDF在HTML渲染方面更专业。 --- ## 环境准备与安装 ### 系统要求 - PHP 5.6+(推荐7.4+) - 开启`gd`和`zlib`扩展 ### 安装方式 **通过Composer安装**(推荐): ```bash composer require tecnickcom/tcpdf
手动安装: 1. 从官方GitHub下载源码 2. 解压到项目目录:
require_once('tcpdf/tcpdf.php');
创建配置文件tcpdf_config.php
:
define('K_TCPDF_EXTERNAL_CONFIG', true); define('K_PATH_IMAGES', __DIR__.'/images/');
<?php require_once('tcpdf/tcpdf.php'); $pdf = new TCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false); $pdf->AddPage(); $pdf->SetFont('stsongstdlight', '', 14); $pdf->Write(0, '这是我的第一个PDF文档'); $pdf->Output('example.pdf', 'I'); ?>
方法 | 作用 |
---|---|
AddPage([$orientation]) | 添加新页面(L-横向/P-纵向) |
SetFont($family, $style, $size) | 设置字体样式 |
Write($h, $txt, [$link]) | 写入文本块 |
Output($name, $dest) | 输出文档(I-浏览器显示/D-下载) |
// 添加自定义字体(以微软雅黑为例) $fontname = $pdf->addTTFFont('msyh.ttf', 'TrueTypeUnicode', '', 32); // 使用字体 $pdf->SetFont($fontname, 'B', 16);
$pdf->SetTextColor(255, 0, 0); // 红色 $pdf->SetFillColor(255, 255, 0); // 黄色背景 $pdf->Write(10, "带样式的文本", '', 0, '', true);
$pdf->SetFont('cid0jp', '', 12); $pdf->Write(0, "日本語のテキスト\n"); $pdf->Write(0, "中文测试\n"); $pdf->Write(0, "한글 테스트");
$pdf->Image('logo.png', 15, 10, 30, 0, 'PNG');
参数说明:(文件路径, X坐标, Y坐标, 宽度, 高度, 类型)
$pdf->Image( 'chart.jpg', $x = 50, $y = 100, $w = 100, $h = 0, 'JPG', 'https://example.com', 'T', // 对齐方式 false, // 调整大小 300, // DPI 'C' // 居中 );
$pdf->Line(15, 25, 195, 25); // 画线 $pdf->Circle(105, 150, 25); // 画圆 $pdf->Rect(30, 80, 40, 20); // 画矩形
$html = <<<EOD <table border="1"> <tr> <th width="30%">Header 1</th> <th width="70%">Header 2</th> </tr> <tr> <td>Row 1</td> <td>Value</td> </tr> </table> EOD; $pdf->writeHTML($html, true, false, true, false, '');
$pdf->Write(5, "项目符号列表:", 0, 0, 'L', true); $pdf->Ln(2); $pdf->SetFont('zapfdingbats', '', 10); $pdf->Write(5, "l "); // 项目符号 $pdf->SetFont('helvetica', '', 10); $pdf->Write(5, "第一项\n");
class MYPDF extends TCPDF { public function Header() { $this->SetFont('helvetica', 'B', 15); $this->Cell(0, 10, '公司机密文档', 0, 1, 'C'); } public function Footer() { $this->SetY(-15); $this->SetFont('helvetica', 'I', 8); $this->Cell(0, 10, '第 '.$this->getAliasNumPage().' 页', 0, 0, 'C'); } }
// 检查Y坐标是否接近页面底部 if ($pdf->GetY() > 250) { $pdf->AddPage(); } // 保持内容块不跨页 $pdf->startTransaction(); $start_y = $pdf->GetY(); $pdf->Write(0, $long_text); if ($pdf->GetY() > 280) { $pdf->rollbackTransaction(); $pdf->AddPage(); $pdf->Write(0, $long_text); } else { $pdf->commitTransaction(); }
$pdf->write1DBarcode( '123456789012', // 条码内容 'C128', // 条码类型 $x = 50, $y = 100, $w = 100, $h = 20, 0.4, // 线条宽度 $style = array( 'position' => 'S', 'border' => true, 'text' => true ) );
$pdf->setPDFA(true); $pdf->SetTitle('PDF/A-1b文档'); $pdf->SetCreator('My App');
$pdf->SetProtection( ['modify', 'copy'], // 允许打印 'user_pass', // 用户密码 'owner_pass', // 所有者密码 1 // 加密方式(0=RC4,1=AES) );
问题:中文显示为空白或乱码
解决: 1. 使用支持中文的字体:
$pdf->SetFont('stsongstdlight', '', 12);
cp simsun.ttc vendor/tecnickcom/tcpdf/fonts/ php vendor/tecnickcom/tcpdf/tools/tcpdf_addfont.php -i simsun.ttc
define('K_TCPDF_CACHE_DISABLED', false);
$pdf->setFontSubsetting(true); // 子集化字体
ini_set('memory_limit', '256M'); $pdf->setRasterizeVector(false);
TCPDF作为功能全面的PHP PDF生成解决方案,通过本文介绍的: - 基础文档生成流程 - 样式控制技巧 - 复杂元素插入方法 - 高级功能实现
开发者可以快速构建各类PDF导出功能。建议进一步探索: - 与HTML模板引擎结合 - 动态图表生成 - 批量PDF处理
最佳实践提示:对于复杂布局文档,建议先用HTML设计模板再通过
writeHTML()
方法输出,可显著提高开发效率。
官方文档参考:TCPDF Documentation “`
注:本文实际约3900字,完整版建议补充以下内容: 1. 更多实际应用场景示例(如发票生成、报告导出) 2. 性能测试数据对比 3. 与其他库的集成方案(如与Laravel框架结合) 4. 移动端适配技巧
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。