讲师中心 微信公众号
AI工具推荐 视频效率加速

如何使用 PHP 基于上传的 PDF 模板动态生成新 PDF 文档

云辰酱_4600

云辰酱_4600

发布时间:2026-02-02 19:27:22

|

729人浏览过

|

来源于php中文网

原创

如何使用 PHP 基于上传的 PDF 模板动态生成新 PDF 文档

本文介绍如何在 php 中利用 fpdi 库,以用户上传的 pdf 文件为模板,动态填充或叠加内容并生成新的 pdf 文档,适用于合同、发票、证书等场景。

在 PHP 开发中,若需基于用户上传的 PDF 模板(如已设计好的合同、报表或证书)生成个性化 PDF,核心需求是:保留原模板的版式、字体、矢量图形和页面布局,仅在指定位置插入动态文本、图像或签名。此时,直接使用 FPDF 或 TCPDF 等纯生成类库并不适用——它们无法读取/复用现有 PDF 页面。正确方案是采用支持“导入 + 覆盖”能力的库,其中 FPDI(Free PDF Importer) 是最成熟、稳定且广泛使用的开源选择。

FPDI 并非独立 PDF 生成器,而是 FPDF/TCPDF 的扩展插件,它允许你:

  • 加载任意 PDF 文件作为源模板;
  • 读取其页面数量与尺寸;
  • 将指定页面作为背景导入到新文档中;
  • 在其上使用 FPDF/TCPDF 的绘图与文字方法进行精准叠加。

✅ 推荐技术栈组合:FPDI + FPDF(轻量级)或 FPDI + TCPDF(功能更全,支持 Unicode/中文)。

以下是一个完整、可运行的示例(基于 FPDI v2 + FPDF):

图片转Word
图片转Word

将扫描图像、截图或表单、文档及以文字为主的图片内容,转换为可编辑的 Word(.docx)文件。 当用户提供包含文本内容的图片,并要求将其转为 Word 文档时,应使用此技能; 或用户表达类似“把图片搞成 word 文字版”、“convert image to docx”、“extract text from image to Word”等需求时,也应调用此技能。

下载

立即学习“PHP免费学习笔记(深入)”;

<?php
use setasign\Fpdi\Fpdi;
use setasign\Fpdi\PdfReader;

// 引入依赖(请通过 Composer 安装:composer require setasign/fpdi)
require_once 'vendor/autoload.php';

// 实例化 FPDI(自动兼容 FPDF)
$pdf = new Fpdi();

// 加载用户上传的模板 PDF(注意:路径需校验并确保安全)
$templatePath = $_FILES['template']['tmp_name'] ?? 'templates/invoice-template.pdf';
if (!file_exists($templatePath) || pathinfo($templatePath, PATHINFO_EXTENSION) !== 'pdf') {
    die('Invalid or missing PDF template.');
}

// 导入模板第 1 页(支持多页循环处理)
$pageCount = $pdf->setSourceFile($templatePath);
$pageId = $pdf->importPage(1, PdfReader\PageBoundaries::MEDIA_BOX);

// 添加新页面(尺寸与模板页一致)
$pdf->addPage();

// 将模板页作为背景绘制(x=10, y=10, width=90mm;单位默认为 mm)
$pdf->useImportedPage($pageId, 10, 10, 90);

// ✅ 在模板上方叠加动态内容(例如填写客户姓名、金额)
$pdf->SetFont('Helvetica', '', 12);
$pdf->SetTextColor(0, 0, 0);
$pdf->SetXY(100, 65); // 精确坐标需根据模板实际位置调试
$pdf->Cell(0, 0, '张三先生', 0, 1);

$pdf->SetXY(100, 80);
$pdf->Cell(0, 0, '¥12,800.00', 0, 1);

// 输出 PDF(I=浏览器预览,D=强制下载,F=保存到服务器)
$pdf->Output('D', 'invoice_2024_' . date('YmdHis') . '.pdf');

⚠️ 关键注意事项:

  • 安全第一:务必校验上传文件类型(mime_content_type() + 文件头检测)、重命名临时文件、禁止执行权限,并限制上传目录不可被 Web 直接访问;
  • 中文支持:FPDF 默认不支持 UTF-8 中文。如需显示中文,请改用 TCPDF 作为底层引擎,并加载支持 GBK/UTF-8 的 TrueType 字体(如 simhei.ttf);
  • 坐标调试:SetXY() 坐标需结合模板实际尺寸反复测试,建议先用 PDF 查看器测量关键字段的左上角坐标(单位:mm);
  • 性能提示:FPDI 导入复杂模板(含大量矢量图/透明层)可能较慢,生产环境建议缓存模板解析结果(如预解析后存为序列化对象);
  • 替代方案参考:若需同时支持 Word(.docx)模板,可考虑 PHPWord + TemplateProcessor;但 PDF 场景下 FPDI 仍是事实标准。

总结:从零开始实现模板 PDF 动态生成,应首选 FPDI 生态。它学习成本低、社区完善、无外部服务依赖,适合绝大多数企业级 PDF 填充需求。只需三步:安装 → 导入模板 → 叠加内容 → 输出,即可交付专业级结果。

相关文章

极轻PDF
极轻PDF

专业的在线PDF工具,支持PDF编辑、转换、合并、压缩等多种功能,操作简单,处理高效,满足日常办公与学习中的PDF处理需求。

下载

相关标签:

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
切问学术

切问学术是一款AI论文写作工具,复旦大学NLP团队推出的AI学术智能体。

小橡皮AI

一款AI工具,主要用于小橡皮一键去AI味,将机器味重的内容改得更有活人感,防止因为 AI 内容被平台打上 AI 标签,以及限流,适合需要提升相关任务效率的用户。

Loomy
Loomy Hot

一款AI工具,主要用于科大讯飞发布的桌面级 AI 助理,比 OpenClaw 更易用、更安全!,适合需要提升相关任务效率的用户。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

讯飞智作

讯飞智作是一款AI视频创作工具,AI文本配音工具,数字人课程、营销视频制作。

VibeKnow
VibeKnow Hot

一款AI视频创作工具,主要用于全球首个AI知识视频创作平台,文档、文章、网页,一键生成视频,适合需要提升相关任务效率的用户。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

墨刀AI
墨刀AI Hot

一款AI图像与设计工具,主要用于产品经理的专属智能体,适合需要提升相关任务效率的用户。

相关专题

更多
堆和栈的区别
堆和栈的区别

堆和栈的区别:1、内存分配方式不同;2、大小不同;3、数据访问方式不同;4、数据的生命周期。本专题为大家提供堆和栈的区别的相关的文章、下载、课程内容,供大家免费下载体验。

6427

2023.07.18

堆和栈区别
堆和栈区别

堆(Heap)和栈(Stack)是计算机中两种常见的内存分配机制。它们在内存管理的方式、分配方式以及使用场景上有很大的区别。本文将详细介绍堆和栈的特点、区别以及各自的使用场景。php中文网给大家带来了相关的教程以及文章欢迎大家前来学习阅读。

2688

2023.08.10

word背景色怎么改成白色
word背景色怎么改成白色

Word是微软公司的一个文字处理器软件。word为用户提供了专业而优雅的文档工具,帮助用户节省时间并得到优雅美观的结果。word提供了许多易于使用的文档创建工具,同时也提供了丰富的功能供创建复杂的文档使用。怎么word背景色怎么该呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

4551

2023.07.21

word最后一页空白页怎么删除
word最后一页空白页怎么删除

word最后一页空白页删除方法有:通过删除回车符、调整页边距、删除分节符或调整分页符位置,您可以轻松去除最后一页的空白页。根据您实际的文档情况,选择适合您的方法进行操作,使您的文档更加美观和整洁。本专题为大家提供word最后一页空白页怎么删除不了相关的各种文章、以及下载和课程。

1100

2023.07.24

word最后一页空白页怎么删除不了
word最后一页空白页怎么删除不了

word删除最后一页空白页,可以尝试使用Backspace键删除空白页,如果无效,查找和删除分页符,或者调整页面边距和行距。还可以尝试将文档保存为其他格式并重新打开和保存。本专题为大家提供word最后一页空白页为啥删除不了的相关的文章、下载、课程内容,供大家免费下载体验。

3222

2023.07.25

word单页改变纸张方向
word单页改变纸张方向

word单页改变纸张方向:1、在界面上选择文档纸张方向;2、自定义页面设置;3、分节功能。本专题为大家提供word单页改变纸张方向的相关的文章、下载、课程内容,供大家免费下载体验。

1360

2023.07.27

word转ppt
word转ppt

Word是一款常用的文字处理软件,而PowerPoint则是一款专门用于制作演示文稿的软件。在某些情况下,我们可能需要将Word文档转换为PowerPoint演示文稿,以便更好地展示我们的内容。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

1277

2023.08.03

word页码从第三页开始为1教程
word页码从第三页开始为1教程

如何将word页码从第三页开始为1,本专题为大家提供相关的文章,希望可以帮助大家解决问题。

8352

2023.08.04

Uvicorn使用教程
Uvicorn使用教程

本专题汇总了Uvicorn使用教程与启动运行指南,涵盖其作为Python ASGI服务器的定位与特点,以及命令行启动(uvicorn main:app --reload)、参数配置(host/port/workers)、程序内嵌运行与Gunicorn结合部署等核心用法。同时整理了热重载调试、日志配置与生产环境部署优化等技巧,助你快速掌握Uvicorn的运行与配置。

0

2026.11.02

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
墨刀帮助中心
墨刀帮助中心

共0课时 | 0人学习

MyEclipse学习中心
MyEclipse学习中心

共0课时 | 0人学习

Apache Subversion 官方手册
Apache Subversion 官方手册

共0课时 | 0人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn