跳到主要内容

在 SharePoint 中创建新项时填写并签署 PDF — Power Automate

23 min read
SEO and Content Writer

Fill a PDF Form 是这样一个 Power Automate 操作:它接受一个可填写的 PDF 模板和一段 JSON 负载,然后返回每个字段都已填好的同一个 PDF。将它与 PDF - Sign 以及一个 SharePoint When an item is created 触发器搭配,发票生成便可自行运转:有人添加一行,Power Automate 组装出已签署的 PDF,Dropbox 则以带时间戳的名称将其归档。

发票类工作流的瓶颈从来都不是 PDF 本身,而是卡在中间的那个手动步骤。有人打开模板,从电子表格的一行里重新键入八个值,打印出来,签字,再扫描回去,最后上传结果。这些字段中的每一个,都是又一次拼错客户姓名或漏掉合计中一位数字的机会。本指南用七个 Power Automate 操作替换掉整套流程:SharePoint 发起触发,Dropbox 交出模板和签名图片,PDF4me 填写表单并应用签名,Dropbox 保存完成的文件。每一张截图都是真实的,Compose 表达式已完整写出,SharePoint 架构已列出,示例签署发票也任您下载。

流程一览
1. When an item is created
监视 SharePoint 中的 New Customer Invoices 列表,一旦出现新行便启动流程。
2. Get file content
从 Dropbox 的 /blog data/fill a pdf/ 中拉取 sample_fill_form.pdf。将 Infer Content Type 保持为 Yes,以便二进制数据完好无损。
3. Get file content 1
从同一个 Dropbox 文件夹中取出 signature.png,同样将 Infer Content Type 设为 Yes。
4. Compose
从 SharePoint 行组装出单一的 JSON 负载:customerName、email、phone、invoiceNumber、invoiceDate、address、amount。
5. Fill a PDF Form
PDF4me 步骤。将 PDF 二进制数据送入 Template File Data,将 Compose 结果送入 JSON Data,并将 Keep PDF template Editable 设为 No。
6. PDF - Sign
PDF4me 步骤。将 signature.png 放在第 1 页右下角,宽 50、高 20,边距 15,全不透明度 100。
7. Create file
以 concat(Signed_, invoiceNumber, _, ticks(utcNow()), .pdf) 构建的 File Name 写入 Dropbox /blog data/fill a pdf/output。
简短版

每当有新的发票行,SharePoint 列表触发器就会触发。Dropbox 提供可填写的 PDF 模板和一张 PNG 签名。Compose 把该行变成一段 JSON 负载。PDF4me Fill a PDF Form 把这些数据写入模板,PDF4me PDF - Sign 加上签名,Dropbox 则以一个同时带有时间戳和发票编号的文件名保存结果。

为什么每个步骤都在这里,都是有意为之​

为什么用 SharePoint 作为触发器?
几乎每个销售、运营和财务团队都已经在 SharePoint 列表中记录客户或发票行。依靠 When an item is created,让大家完全照今天的习惯继续工作,只需添加一行即可。
为什么把 Compose 放在中间?
PDF4me 想要单一的 JSON 负载。Compose 让你粘贴一个 JSON 骨架,并把触发器字段作为动态内容放进去,这样你就无需把 JSON 处理穿插到下游的每个操作中。
为什么用 Fill a PDF Form 而不是 Convert?
模板本身已带有命名的表单字段。Fill a PDF Form 按名称写入这些字段,并让你的版式和设计原封不动,而 Convert 会把文件压平并从零重建。
为什么在同一个流程里用 PDF - Sign?
另一种做法,即单独的 DocuSign 或 Adobe Sign 步骤,仍然需要有人点击。对于内部、低风险的发票,一枚盖上去的签名就能胜任,并让整个流程都不必经手人工。

你最终会得到什么​

一个单一的 Power Automate 流程,它盯着一个 SharePoint 列表,对于每一行到来的数据,都在你的 Dropbox 输出文件夹中生成一份名为 Signed_INV-YYYY-NNN_<ticks>.pdf 的已填写并签署的 PDF 发票。签名位于第 1 页的右下角,模板中的其余一切都完全保持你的设计师所排布的样子。


你首先需要准备什么​

  • 一个 SharePoint 网站,其中有一个名为 New Customer Invoices 的列表(按你的喜好重命名),包含以下列:
    • Title、CustomerName、Email、Phone(都是 Single line of text)
    • InvoiceNumber(Single line of text,例如 INV-2026-207)
    • InvoiceDate(Date)、Address(Single line of text)、Amount(Number)
  • 一个 PDF 模板,其命名的表单字段与 JSON 键一一对应(customerName、email、phone、invoiceNumber、invoiceDate、address、amount)。
  • 一张透明背景上的 PNG 签名。
  • Power Automate 内的一个 PDF4me 连接。第一个流程?获取一个 API 密钥来完成配置。
  • Power Automate 中的一个 Dropbox 连接 — SharePoint、OneDrive 或任何其他存储都能同样干净地接入。
示例签署 PDF 输出
获取此流程为 INV-2026-207 行(Mark Jagar)实际生成的那份已签署发票。
↓ signed-invoice-sample.pdf

七个操作,从头到尾​

七个 Power Automate 操作排成一条直线 — 没有并行分支,没有 Apply to each,没有变量。一个步骤的输出直接喂给下一个。

Power Automate 流程总览,展示七个顺序操作:SharePoint When an item is created、Dropbox Get file content、Dropbox Get file content 1、Compose、PDF4me Fill a PDF Form、PDF4me PDF - Sign 和 Dropbox Create file,每个都带有绿色对勾和运行时长
完整的设计器视图:从触发器到 Create file,一共七个操作。

SharePoint 列表在这里就是那份契约。每一行到来的数据都恰好变成一份已签署的 PDF。

名为 New Customer Invoices 的 SharePoint 列表,共八行。Mark Jagar 那一行被选中,显示 CustomerName Mark Jagar、Email markjagar at email.com、Phone plus1 567 736 8923、InvoiceNumber INV-2026-207、InvoiceDate 28.08.2026、Address Park street、Amount 20458
New Customer Invoices 列表。INV-2026-207 行(Mark Jagar)正是上面示例背后的那一行。

当出现新的 SharePoint 行时,如何启动流程?​

目前的流程: 仅有触发器。

  1. 新建一个 Automated cloud flow,搜索 SharePoint,并选择 When an item is created。
  2. 将 Site Address 指向你的 SharePoint 网站(截图中使用的是 https://ynoox1.sharepoint.com/sites/PDF4meSupport 上的 PDF4me Support)。
  3. 将 List Name 设为 New Customer Invoices。
  4. 让 Advanced parameters 保持原样。行一落地,触发器就会触发,无需摆弄任何轮询间隔。
Power Automate When an item is created 触发器,Site Address 设为 PDF4me Support SharePoint 网站,List Name 设为 New Customer Invoices
网站加列表就是触发器的全部设置 — 变更检测由 SharePoint 负责。

提示。 在可能的地方,把 SharePoint 列重命名为与 PDF 字段名一致(customerName、email、……)。这样能让你在后面的 Compose 步骤中免去重新标注键的麻烦。


如何把 PDF 模板和签名送入流程?​

目前的流程: 触发器 → Get file content → Get file content 1。

两次 Dropbox 读取:一次读 PDF 模板,一次读 PNG 签名。把两者放在同一个文件夹里,意味着日后无人需要去到处翻找它们。

  1. 添加 Dropbox - Get file content using path,将 File 设为 /blog data/fill a pdf/sample_fill_form.pdf。
  2. 打开 Advanced parameters,把 Infer Content Type 切换为 Yes,否则 PDF 二进制数据可能在传输途中损坏。
Dropbox Get file content using path 操作,File 设为 /blog data/fill a pdf/sample_fill_form.pdf,Infer Content Type 设为 Yes
第 2 步 — Fill a PDF Form 即将填写的那份空白模板。
  1. 放入第二个 Dropbox - Get file content using path;Power Automate 会自动把它重命名为 Get file content 1。
  2. 将 File 设为 /blog data/fill a pdf/signature.png。
  3. 把同一个 Infer Content Type 开关切换为 Yes。
第二个 Dropbox Get file content 1 操作,File 设为 /blog data/fill a pdf/signature.png,Infer Content Type 设为 Yes
第 3 步 — PDF - Sign 将要覆盖到第 1 页上的那张签名。

如何把 SharePoint 行变成一段 JSON 负载?​

目前的流程: 触发器 → 取模板 → 取签名 → Compose。

Compose 就是那个"构建 JSON"的步骤。它把触发器字段作为动态内容取进来,并将它们排布进一个 PDF4me Fill a PDF Form 能读取的单一 JSON 对象。

  1. 添加一个 Compose 操作。
  2. 点击 Inputs,粘贴下面的 JSON 骨架,并把每个右侧的值换成动态内容选择器中对应的 SharePoint 列,让每个胶囊都保持在引号之间:
{
"customerName": "CustomerName",
"email": "Email",
"phone": "Phone",
"invoiceNumber": "InvoiceNumber",
"invoiceDate": "InvoiceDate",
"address": "Address",
"amount": "Amount"
}
Compose 操作,Inputs 字段显示一个 JSON 对象,其七个值都是放在每个键引号之间的 SharePoint 触发器字段动态内容胶囊
Compose 返回一个单一的 JSON 对象。让每个胶囊都待在它的引号之内,好让数字和日期以字符串形式传入,并确保键与 PDF 字段名逐字一致。

负载参考:

JSON 键来源(SharePoint 列)类型备注
customerNameCustomerName文本原样传递。
emailEmail文本任意字符串;此处不校验格式。
phonePhone文本保留为文本 — 不要转换为 Number,因为分机号和连字符很重要。
invoiceNumberInvoiceNumber文本稍后也会在输出文件名中被重复使用。
invoiceDateInvoiceDate日期胶囊在引号内时,Compose 会把它作为文本发送,而不是 ISO 日期对象。
addressAddress文本单行。
amountAmount数字在引号内,因此 JSON 以带引号的值来承载它。

提示。 始终把动态内容胶囊放在每个值的两个引号之间。放在引号外面时,胶囊会输出一个裸数字或日期,而字符串中间一个未加引号的数字后面跟着一个 ,,会毫无预警地破坏负载。


如何根据 JSON 填写 PDF 表单?​

目前的流程: 触发器 → 取模板 → 取签名 → Compose → Fill a PDF Form。

这是第一个 PDF4me 操作。它接收模板 PDF 加上 JSON 负载,并把每个值写入同名的表单字段。

  1. 添加 PDF4me PDF 连接器,并选择 Fill a PDF Form 操作。
  2. Template File Data:动态内容,Get file content → File Content(模板 PDF 二进制数据)。
  3. Template File Name:sample_fill_form.pdf(或你自己的文件名)。
  4. JSON Data:动态内容,即 Compose 步骤的 Outputs。
  5. Keep PDF template Editable:No — 这会在填写后把表单压平,使收件人无法清除字段。
PDF4me Fill a PDF Form 操作,Template File Data 从 Dropbox Body 映射,Template File Name 为 sample_fill_form.pdf,JSON Data 从 Compose Outputs 映射,Keep PDF Template Editable 设为 No
Fill a PDF Form 的设置。当 Keep PDF template Editable 为 No 时,字段会被压平成静态文本。

提示。 想让收件人日后仍能编辑某些字段(比如添加一条备注)?把 Keep PDF template Editable 设为 Yes。你填好的值会保留;改变的只是字段锁定。


如何用 PDF - Sign 盖上签名?​

目前的流程: 触发器 → 取模板 → 取签名 → Compose → Fill a PDF Form → PDF - Sign。

PDF - Sign 把你的 PNG 签名以固定位置和你设定的不透明度覆盖到已填写的 PDF 上。

  1. 添加 PDF4me PDF 连接器,操作为 PDF - Sign。
  2. PDF File content:动态内容,Fill a PDF Form → Body(已填写的 PDF 二进制数据)。
  3. PDF File Name:表达式 concat(triggerBody()?['InvoiceNumber'], '.pdf'),它会得到 INV-2026-207.pdf,好让发票编号出现在后续日志中。
  4. Sign File Content:动态内容,Get file content 1 → Body(PNG 签名)。
  5. Sign Image File Name:signature.png。
  6. Align Horizontal:right。Align Vertical:bottom。
  7. Pages:1(仅第 1 页 — 用 1,3 表示第 1 页和第 3 页,或留空以签署每一页)。
  8. Height:20。Width:50。Margin Horizontal:15。Margin Vertical:15。Opacity:100。
PDF4me PDF - Sign 操作,PDF File content 来自 Fill a PDF Form Body,PDF File Name 为一个 concat 表达式,Sign File Content 来自 Get file content 1 Body,Align Horizontal right,Align Vertical bottom,Pages 1,Height 20,Width 50,Margin 15,Opacity 100
签名落在第 1 页右下角:宽 50、高 20、边距 15 个单位,完全不透明。

定位参考:

字段它控制什么示例
Align Horizontal从左到右的哪条边left、center、right
Align Vertical顶部、中部或底部带top、center、bottom
Pages哪些页会被盖章1(仅首页)、1,3(第一和第三页)、留空(每一页)
Height / Width以 PDF 单位表示的签名框大小与你的 signature.png 比例匹配,否则会被拉伸
Margin Horizontal / Vertical距对齐边的距离当 Align 为 right 时,15 = 距右边缘向内 15 个单位
Opacity0 到 100100 为完全不透明;降到 70 可获得水印效果

如何把已签署的 PDF 写回 Dropbox?​

目前的流程: 触发器 → 取模板 → 取签名 → Compose → Fill a PDF Form → PDF - Sign → Create file。

最后一步。完成的 PDF 落入一个专用的输出文件夹,其文件名经过精心设计,让两次运行绝不可能相撞。

  1. 添加 Dropbox - Create file。
  2. Folder Path:/blog data/fill a pdf/output。
  3. File Name:表达式 concat('Signed_', string(triggerBody()?['InvoiceNumber']), '_', string(ticks(utcNow())), '.pdf'),它会生成诸如 Signed_INV-2026-207_639235162128009339.pdf 这样的名称。
  4. File Content:动态内容,PDF - Sign → Body(已签署的 PDF 二进制数据)。
Dropbox Create file 操作,Folder Path 为 /blog data/fill a pdf/output,File Name 由一个 concat 表达式构建,组合了 Signed_、InvoiceNumber 触发器字段、utcNow 的 ticks 和 .pdf,File Content 从 PDF - Sign Body 映射
即便两行在同一秒内触发,ticks(utcNow()) 时间戳也能让文件名保持唯一。

提示。 把 Dropbox 换成 SharePoint - Create file 或 OneDrive - Create file,流程中的其他一切都不用动。PDF 二进制数据完全相同;不同的只是存储适配器。

运行它并检查结果​

那么,你刚刚搭建了什么?
往 New Customer Invoices 里放一行(Title Mark - Form、CustomerName Mark Jagar,依此类推)。几秒钟后,Signed_INV-2026-207_639235162128009339.pdf 就会出现在 Dropbox 的 /blog data/fill a pdf/output 中。打开它,你会看到八个字段都已填好,签名在第 1 页右下角 — 正是本文顶部所链接的那个文件。

无需重建即可加装的变体​

也把已签署的 PDF 用邮件发出
在 Create file 之后插入一个 Outlook Send an email (V2),并原样附上 PDF - Sign Body。客户会在 Dropbox 收到它的同一秒收到发票。
跳过 Dropbox,改用 SharePoint
把三个 Dropbox 操作换成 SharePoint Get file content 和 SharePoint Create file。两个 PDF4me 操作丝毫不变。
签署每一页,而不只是第 1 页
清空 PDF - Sign 中的 Pages 字段,或用逗号分隔列出(1,2,3)。同一枚签名会应用到你点名的每一页。
PDF4me 对比 Nutrient / Encodian / Plumsail
那些连接器把 Fill 和 Sign 拆到不同流程里,或按用户席位收费。PDF4me 用单个高级连接器、单个 API 密钥就能两者兼办。

常见问题​

如何用 Power Automate 填写 PDF 表单?​

把 PDF4me Fill a PDF Form 操作放在一个读取你的 PDF 模板的步骤(一个 Dropbox、SharePoint 或 OneDrive 的 Get file content)以及一个根据触发器字段构建 JSON 负载的 Compose 步骤之后。把 Template File Data 映射到 PDF 二进制数据,把 JSON Data 映射到 Compose 输出。JSON 键必须与模板的表单字段名完全一致。

Power Automate 能填写 PDF 表单吗?​

能 — 只需一个连接器操作,前提是已安装 PDF 连接器。Power Automate 本身无法写入可填写的 PDF,但 PDF4me Fill a PDF Form 操作能在单个步骤中完成整个填写与压平,由你用 Compose 或直接从 SharePoint 或 Excel 行组装的 JSON 负载来驱动。

如何自动填充 PDF 表单字段?​

在你的数据源(一个 SharePoint 列表、一个 Excel 行、一次表单提交)上触发,构建一个键与 PDF 字段名相匹配的 JSON 对象,然后把该 JSON 和模板 PDF 交给 PDF4me Fill a PDF Form。它会返回每个命名字段都已填好的同一个 PDF。把 Keep PDF template Editable 设为 No 来锁定这些值,使收件人无法清除它们。

如何用 Power Automate 从 SharePoint 列表项创建 PDF?​

用 When an item is created 作为触发器,添加一个 Get file content 步骤来加载 PDF 模板,一个 Compose 步骤把该行整形为 JSON,再用 PDF4me Fill a PDF Form 把它们合并。你会得到一份填好的 PDF,可以用邮件发送、推送到 SharePoint、OneDrive 或 Dropbox,或送入审批流程。本文正是搭建这样一套,并在其上加盖签名。

如何在 Power Automate 中自动签署 PDF?​

在任何产出 PDF 二进制数据的步骤之后添加 PDF4me PDF - Sign。把 PDF File content 映射到已填写的 PDF,把 Sign File Content 映射到一张 PNG 签名,然后设置对齐(right / bottom)、大小(Height / Width)、边距和不透明度。PDF - Sign 会把图片盖到你所列出的页面上;把 Pages 留空即可签署全部页面。


疑难排查​

Fill a PDF Form 原封不动地返回了模板
JSON 键与 PDF 字段名不匹配。在 Adobe Acrobat 中打开模板,选择 Prepare Form,然后原样复制字段名 — 它们区分大小写。
签名出来被拉伸或过小
Height 和 Width 是 PDF 单位,不是像素。让比例与你的 signature.png 匹配,以免变形;宽 50、高 20 适合大多数横向签名。
Compose 输出了无效的 JSON
一个动态内容胶囊落到了它的引号外面,或者某个 SharePoint 值里含有一个多余的双引号或换行。让每个胶囊都待在它的引号之间,并在上游的 SharePoint 中清理用户输入的文本。
Dropbox Create file 覆盖了先前的运行
File Name 两次解析成了同一个字符串。concat 中的 ticks(utcNow()) 后缀正是保证唯一性的东西 — 去掉它,各次运行就会相撞。

后续步骤​

这是从一行 SharePoint 数据到一份已签署并已存储的 PDF 之间最短的、无需动手的路径 — 而中间那两个 PDF4me 操作,正是你无法单靠 Microsoft 自身获得的部分。

参考资料​