You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

能否将Adobe Acrobat PDF表单连接至数据库?(Laravel环境)

可以实现!Laravel连接数据库填充PDF表单的方案

当然可以做到!我在Laravel项目里多次实现过类似需求——从数据库拉取数据填充到Adobe Acrobat制作的可填写PDF表单中,最终输出供打印的PDF。下面给你两种靠谱的实现方案,按需选择:

方案一:使用FPDF/FPDI(无需额外服务器工具)

这种方案依赖setasign/fpdi-fpdf包,不需要服务器安装额外工具,兼容性强,适合所有Laravel环境。

步骤1:准备可填充PDF模板

用Adobe Acrobat打开你的PDF,进入「表单编辑」模式,给每个需要填充的字段设置唯一且清晰的字段名(比如full_name、email、invoice_no),确保和数据库字段对应,大小写要一致!

步骤2:安装依赖包

在Laravel项目根目录执行:

composer require setasign/fpdi-fpdf

步骤3:编写填充逻辑(示例代码)

在控制器里创建方法,从数据库取数据、加载模板、填充字段:

use setasign\Fpdi\Fpdi;

public function generateFilledPdf()
{
    // 从数据库获取目标数据(这里以用户模型为例)
    $user = \App\Models\User::find(1);

    // 初始化FPDI实例
    $pdf = new Fpdi();
    // 加载PDF模板文件(放在public/templates目录下)
    $pageCount = $pdf->setSourceFile(public_path('templates/user_profile_form.pdf'));

    // 导入模板的第一页(多页模板可循环导入)
    $templateId = $pdf->importPage(1);
    $pdf->AddPage();
    $pdf->useTemplate($templateId);

    // 设置字体和填充样式
    $pdf->SetFont('Arial', '', 12);
    $pdf->SetFillColor(255, 255, 255); // 白色填充,覆盖字段默认背景

    // 填充字段:参数依次为「PDF字段名」「填充值」「X坐标」「Y坐标」「宽度」「高度」
    // 坐标可以在Adobe Acrobat的表单编辑模式下查看字段属性获取
    $pdf->FormTextField('full_name', $user->name, 60, 45, 180, 16);
    $pdf->FormTextField('email', $user->email, 60, 65, 180, 16);
    $pdf->FormTextField('phone', $user->phone, 60, 85, 180, 16);

    // 如果是单选框/复选框,用对应方法:
    // $pdf->FormRadio('gender', 'male', $user->gender === 'male');
    // $pdf->FormCheckbox('agree_terms', $user->has_agreed);

    // 输出PDF到浏览器(inline表示在浏览器打开,方便直接打印)
    return response($pdf->Output('', 'S'), 200, [
        'Content-Type' => 'application/pdf',
        'Content-Disposition' => 'inline; filename="filled_user_form.pdf"'
    ]);
}

方案二:使用PDFtk(更简洁,需服务器支持)

如果你的服务器可以安装PDFtk工具,这个方案更简单——不需要手动设置坐标,直接通过字段名匹配填充,代码更简洁。

步骤1:安装PDFtk工具

  • Ubuntu/Debian:sudo apt-get install pdftk
  • CentOS/RHEL:需要安装pdftk-java(替代原版PDFtk)

步骤2:安装Laravel封装包

composer require barryvdh/laravel-pdftk

步骤3:编写填充逻辑(示例代码)

use Barryvdh\Pdftk\Facades\Pdftk;

public function generateFilledPdfWithPdftk()
{
    // 从数据库获取数据
    $user = \App\Models\User::find(1);

    // 构造字段映射数组(键为PDF字段名,值为数据库数据)
    $fillData = [
        'full_name' => $user->name,
        'email' => $user->email,
        'phone' => $user->phone
    ];

    // 填充PDF并扁平化(扁平化后表单不可编辑,适合打印)
    $filledPdfContent = Pdftk::input(public_path('templates/user_profile_form.pdf'))
        ->fillForm($fillData)
        ->flatten()
        ->output();

    // 输出到浏览器
    return response($filledPdfContent, 200, [
        'Content-Type' => 'application/pdf',
        'Content-Disposition' => 'inline; filename="filled_user_form.pdf"'
    ]);
}

关键注意事项

  • 确保PDF模板的字段名和代码中使用的完全一致(大小写敏感),否则会填充失败
  • 如果使用FPDF/FPDI方案,坐标一定要准确,可通过Adobe Acrobat的字段属性查看
  • 若要批量生成多个PDF,可循环处理数据库数据,逐个填充输出

内容的提问来源于stack exchange,提问作者Atul Stha

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 09:51:26