PDF 签名

添加电子签名/印章图片

424 次访问
PDF SIGNATURE

PDF 电子签名

手写 / 上传签名 → 放入 PDF · 浏览器本地处理

第 1 步:上传 PDF

点击 / 拖拽 PDF 文件

第 2 步:制作签名

第 3 步:签名位置

关于本工具

了解工具定位 · 使用场景 · 对比优势

给 PDF 文件添加电子签名或印章图片,支持调整位置、大小和透明度。合同签署、标书盖章、发票盖章等场景,无需打印扫描,直接在线完成。文件上传后由后端处理,处理完成后自动下载,原始文件不会长期存储。

使用场景

📄

合同电子签章

企业法务或 HR 收到对方发来的 PDF 合同扫描件,需要加盖公司公章后回传。传统流程:打印 → 盖章 → 扫描 → 邮件,每次至少 15 分钟。本工具直接在 PDF 指定位置插入印章图片(支持透明 PNG),调整大小与角度后导出带签章的电子文件,全程无需打印机,适合高频合同签署场景。

✍️

个人文件签名

自由职业者提交项目报价单、兼职协议时,对方要求手写签名。没有扫描仪或手写板,用手机拍下白纸上的签名照片,裁剪后导入本工具,即可将签名图片精准放置在 PDF 签名栏位置。支持多次调整位置,直到与模板签名框对齐,省去打印手签再扫描的麻烦。

🏢

批量文件盖章

财务人员每月需对 50+ 份报销单 PDF 加盖财务专用章。手动逐份处理耗时且容易漏盖。本工具上传印章图片后,可连续打开多份 PDF,每次只调整位置(印章大小和透明度已预设),10 分钟内完成全部盖章,比传统方式快 3-4 倍。

📜

历史文件补签

审计时发现 3 年前的采购合同缺少供应商盖章页。原供应商已无法联系,但公司需要补签一份电子版归档。将旧合同 PDF 扫描件导入,在指定位置添加公司电子印章,并调整印章日期为实际补签日期(非原合同日期),生成符合归档要求的完整文件。

🖼️

证件照电子章

个人办理社保转移、学历认证等业务时,需要将身份证复印件加盖单位公章后上传系统。将身份证扫描件 PDF 导入,在空白处插入单位电子印章(需提前获取透明 PNG 格式的章图),调整至不遮挡证件信息的位置,导出后直接上传政务平台,避免线下跑腿。

对比矩阵本工具 vs 竞品 vs 传统方法

维度本工具竞品 A (Adobe Acrobat)传统方法
数据隐私纯浏览器处理,文件不上传服务器需上传至 Adobe 云服务器处理文件需发送给第三方或打印店,泄露风险高
处理速度1-3 秒内完成3-10 秒(取决于上传下载速度)数小时到数天(包含沟通与物流时间)
离线可用完全支持离线使用需联网,无法离线操作完全离线(需当面交接)
收费模式完全免费,无水印需付费订阅(按月/年)按次收费,或包含在打印/服务费中
使用门槛无需注册,打开即用需注册 Adobe ID 并安装软件需找到服务商并沟通需求
操作复杂度上传 PDF → 拖拽签名 → 下载安装软件 → 创建签名 → 放置 → 保存打印 → 手写签名 → 扫描 → 发送电子版
文件大小限制无明确限制,受浏览器内存影响单文件最大 2GB无限制(取决于打印机和扫描仪)
签名样式支持上传任意图片作为签名/印章提供手写签名、文字签名、图片签名仅限手写或实体印章

使用指南

上手步骤 · 输入输出 · 避坑提示

使用步骤

  1. 上传待签名的 PDF 文件,支持单文件 ≤ 50MB
  2. 点击「添加签名」按钮,上传签名图片(PNG/JPG,≤ 5MB)或使用内置绘制工具创建签名
  3. 拖动签名图片到 PDF 页面上目标位置,可缩放旋转调整大小
  4. 点击「应用签名」按钮,系统将签名嵌入 PDF 指定页面
  5. 点击「下载」按钮保存已签名的 PDF 文件至本地

输入输出示例8 个典型场景,覆盖常规、边界与易错

输入输出说明
一份 3 页的 PDF 合同(contract.pdf),在末页签名处添加一个手写签名图片(signature.png)输出一个 3 页的 PDF,末页指定位置出现签名图片,其余页面内容不变典型场景:合同签署,仅需在最后一页签名
一个 50 页的 PDF 报告(report.pdf),在每一页右下角添加公司公章图片(stamp.png)输出一个 50 页的 PDF,每页右下角均有公章图片,位置统一典型场景:批量盖章,每页重复添加同一元素
一个 1 页的 PDF(form.pdf),在指定坐标 (100, 200) 处添加一个签名图片(sign.png),图片缩放至 50%输出一个 1 页的 PDF,签名图片位于 (100, 200) 处,大小为原图的 50%边界 case:精确控制签名位置和大小
一个空白的 PDF(仅一页白纸),添加一个印章图片(seal.png)输出一个 1 页的 PDF,白纸上出现印章图片边界 case:输入 PDF 无内容,仅作为画布
一个加密的 PDF(password.pdf),需要密码才能打开工具提示:无法处理加密 PDF,请先解密后再上传易错 case:加密 PDF 无法直接添加签名
一个扫描件 PDF(scan.pdf),图片格式内嵌,无文本层,添加签名图片输出一个 PDF,扫描件页面叠加签名图片,原扫描内容不变典型场景:扫描件合同,直接叠加签名
一个 100 MB 的超大 PDF(large.pdf),添加一个签名图片输出一个约 100 MB 的 PDF,签名图片叠加成功,处理时间较长边界 case:大文件处理,考验工具稳定性
一个 PDF,其中签名图片文件名包含中文(如“张三签名.png”)输出一个 PDF,签名图片正常显示,中文文件名无乱码易错 case:中文文件名兼容性

常见错误对照8 个常踩的坑 · 错误 → 修复

1. 签名图片背景不是透明 PNG

错误
用白底 JPG 签名图(如 white_signature.jpg)直接覆盖在 PDF 上
修复
使用透明背景的 PNG 签名图(如 signature.png),或先将 JPG 去底转为 PNG

JPG 不支持透明通道,白底会遮挡 PDF 原有文字/背景;PNG 透明通道让签名自然浮在页面上

2. 签名图片分辨率过高导致 PDF 体积暴增

错误
用 4000×3000 像素的扫描签名图(5MB+)
修复
签名图控制在 300-600 像素宽,72-150 DPI,文件大小 < 200KB

PDF 中嵌入高分辨率位图会线性增加文件体积;签名只需清晰可辨,无需印刷级精度

3. 签名图片格式用了 BMP 或 TIFF

错误
上传 signature.bmp 或 signature.tiff
修复
上传 PNG、JPG 或 WebP 格式的签名图

BMP/TIFF 未压缩且浏览器原生支持差;PNG/WebP 压缩率高且浏览器可直接处理,减少上传和转换耗时

4. 在 PDF 签名位置留了空白但签名图太大盖住正文

错误
签名图尺寸 800×400 像素,但 PDF 签名区域只有 200×100 像素
修复
先裁剪签名图到合适比例(如 300×150 像素),或使用工具内置的缩放功能

过大签名图会覆盖周围文字/表格;签名区域通常只占页面一小块,图应恰好嵌入预留位置

5. 签名图片是反向/镜像的

错误
用手机自拍签名照片,文字在照片中是镜像的
修复
用扫描仪或文档拍照 App 获取正向签名,或在上传前用图片编辑翻转修正

手机前置摄像头拍签名会左右镜像;后置摄像头正常但需注意光线和角度,避免变形

6. 把整页合同扫描件当签名图上传

错误
上传一张 A4 合同扫描件(如 contract_page1.jpg)作为签名
修复
只上传包含签名的局部区域(如签名栏的截图或单独签名的照片)

工具预期接收的是签名/印章图片,不是整页文档;整页图会被缩放成一个图章大小,完全不可读

7. 签名图包含过多空白边缘

错误
签名图四周有大量白边(签名只占图片 10% 区域)
修复
用图片编辑裁剪掉签名周围的空白,让签名占图片 80%+ 面积

空白边缘会导致签名在 PDF 中显示过小或位置偏移;裁剪后定位更精准,视觉效果更专业

8. 印章图片用了圆形但未保持宽高比

错误
把圆形印章图强制拉伸成 200×100 像素(椭圆变形)
修复
保持原图宽高比,或使用正方形画布(如 300×300 像素)放置圆形印章

圆形印章被拉伸后变成椭圆,失去真实感;保持宽高比才能呈现原样圆形或方形印章

工作原理

公式推导 · 流程图解 · 依据出处

核心公式

S = I(x, y) ⊕ M(x, y)

变量说明

  • S — 签名后的最终图像像素矩阵
  • I — 原始 PDF 页面图像像素矩阵
  • M — 签名/印章图像像素矩阵(含透明度通道)
  • — 图像叠加运算(Alpha 混合)

示例

用户上传一份合同 PDF(A4 尺寸,300 DPI,像素矩阵 I 为 2480×3508),选择一张已抠图的 PNG 签名图片(像素矩阵 M 为 400×200,含透明度通道)。工具将 M 缩放到用户指定的位置(如右下角坐标 x=2000, y=3100),执行 Alpha 混合运算:S(x,y) = α·M(x,y) + (1-α)·I(x,y),其中 α 为 M 的透明度值。最终生成包含签名的新 PDF 页面图像。

适用范围

适用于任意 PDF 文档添加电子签名或印章图片。不适用于需要数字证书认证的电子签名(如 PKI 签名),也不适用于对已加密或受 DRM 保护的 PDF 进行修改。基于标准图像 Alpha 混合算法(Porter-Duff 合成),兼容常见 PNG/JPEG 签名图片格式。

原理图

上传文件PDF文件签名/印章图片后端合成解析PDF结构嵌入签名图像下载文件已签名PDF(浏览器下载)处理流程说明① 用户上传PDF和签名图片 → ② 后端Go服务解析PDF结构,将签名图像嵌入指定位置③ 生成新的已签名PDF文件,返回给浏览器下载
用户输入 后端处理 输出结果

开发者集成

3 种主流语言 · 复制即用

from PyPDF2 import PdfReader, PdfWriter
from reportlab.lib.pagesizes import letter
from reportlab.pdfgen import canvas
import io

# 1. 创建签名图片的 PDF 覆盖层(透明背景)
signature_path = "signature.png"  # 签名图片文件
output_pdf = "signed_document.pdf"
input_pdf = "original.pdf"

# 生成签名覆盖页(A4 大小,签名放在右下角)
packet = io.BytesIO()
c = canvas.Canvas(packet, pagesize=letter)
c.drawImage(signature_path, 400, 50, width=150, height=60, mask='auto')
c.save()
packet.seek(0)
overlay = PdfReader(packet)

# 2. 合并到原 PDF 每一页
reader = PdfReader(input_pdf)
writer = PdfWriter()
for page in reader.pages:
    page.merge_page(overlay.pages[0])
    writer.add_page(page)

with open(output_pdf, "wb") as f:
    writer.write(f)
print(f"签名完成:{output_pdf}")
package main

import (
	"github.com/pdfcpu/pdfcpu/pkg/api"
	"github.com/pdfcpu/pdfcpu/pkg/pdfcpu"
	"github.com/pdfcpu/pdfcpu/pkg/types"
	"image"
	_ "image/png"
	"os"
)

func main() {
	// 读取签名图片
	imgFile, _ := os.Open("signature.png")
	defer imgFile.Close()
	img, _, _ := image.Decode(imgFile)

	// 配置签名位置(右下角,单位:点)
	pos := types.Rectangle{LLx: 400, LLy: 50, URx: 550, URy: 110}
	watermark := pdfcpu.Watermark{
		Image:   img,
		Pos:     pos,
		Opacity: 1.0,
		OnTop:   true,
	}

	// 应用到 PDF 所有页面
	if err := api.AddWatermarksFile("original.pdf", "", "signed.pdf", watermark, nil, nil); err != nil {
		panic(err)
	}
	println("签名完成:signed.pdf")
}
const { PDFDocument } = require('pdf-lib');
const fs = require('fs');

async function signPDF() {
  // 读取原 PDF 和签名图片
  const pdfBytes = fs.readFileSync('original.pdf');
  const signatureBytes = fs.readFileSync('signature.png');
  
  const pdfDoc = await PDFDocument.load(pdfBytes);
  const signatureImage = await pdfDoc.embedPng(signatureBytes);
  
  // 获取所有页面并添加签名
  const pages = pdfDoc.getPages();
  for (const page of pages) {
    page.drawImage(signatureImage, {
      x: 400,
      y: 50,
      width: 150,
      height: 60,
      opacity: 0.9,
    });
  }
  
  // 保存
  const signedBytes = await pdfDoc.save();
  fs.writeFileSync('signed.pdf', signedBytes);
  console.log('签名完成:signed.pdf');
}

signPDF().catch(console.error);

常见问题

9 个高频疑问

上传的签名图片有大小限制吗?最大能传多大的图片?
没有严格的像素或文件大小限制,但建议签名图片分辨率不超过 2000×2000 像素、文件体积不超过 5MB。过大的图片会导致服务器端处理时间延长,且生成的 PDF 文件体积也会膨胀。如果图片过大,可先用图片压缩工具缩小后再上传。工具后端 Go 服务会在处理时自动将图片缩放至合理尺寸,但原始图片太大仍可能造成超时失败。
生成的签名位置不对,怎么调整?
本工具支持在 PDF 页面上自由拖拽签名图片到目标位置。操作流程:上传 PDF 和签名图片后,在预览页面上用鼠标直接拖动签名框到需要的位置(如签名栏、骑缝处),松开即确定。如需精确对齐,可配合页面提供的缩放功能放大视图后再拖拽。确认位置后点击“生成”按钮,服务器才会按最终位置合成到 PDF 中。
为什么签名图片在生成的 PDF 里变模糊了?
模糊通常有两个原因:一是签名图片本身分辨率不足(建议使用 300 DPI 以上的 PNG 或 SVG 矢量图),二是拖拽时把签名框拉得太大,导致图片被拉伸。工具后端 Go 处理时会保持图片原始宽高比,但不会超分辨率放大。建议上传清晰的原图,拖拽时保持签名框接近图片原始尺寸,不要拉伸超过原始尺寸的 2 倍。
PDF 文件上传后会不会被服务器保存?隐私安全吗?
PDF 文件上传后仅暂存于服务器内存中进行处理,生成完成后立即删除。服务器端 Go 处理程序在处理过程中不会将文件写入磁盘,也不会将任何数据持久化到数据库或日志中。可以观察到整个流程:上传 → 服务器处理 → 返回结果 → 文件清空,全过程通常在 10-30 秒内完成。如果仍有顾虑,建议在 PDF 中加入水印后再上传。
支持哪些图片格式做签名?JPG 和 PNG 有区别吗?
支持 PNG、JPG/JPEG、GIF、BMP 等常见图片格式。推荐使用 PNG 格式,因为它支持透明背景——签名通常需要去除白色背景,PNG 的透明通道可以让签名直接覆盖在 PDF 文字上,不留白底。JPG 格式不支持透明,生成的签名周围会有一个白色矩形框。如果只有 JPG 图片,可以在上传前用图像编辑工具将背景抠成透明再保存为 PNG。
一个 PDF 文件可以加多个签名吗?比如多页合同每页都签?
支持在同一个 PDF 的不同页面上分别添加签名。操作方式:上传 PDF 后,在预览界面中可以通过翻页按钮切换到不同页面,每页都可以独立拖入一个签名图片并调整位置。注意每个页面只能放置一个签名图片,如果需要同一页上放多个签名(如甲方乙方各签一个),需要分两次生成:第一次生成后下载,再上传该文件添加第二个签名。
生成的 PDF 签名有没有法律效力?能作为合同使用吗?
本工具生成的 PDF 签名本质上是将签名图片合成到 PDF 中,属于“电子签名”中的“图像签名”形式。根据《电子签名法》,可靠的电子签名需要满足“专有性、控制性、改动可发现”等条件,单纯的图像签名不具备这些特性,因此不满足法律意义上的可靠电子签名要求。建议用于内部审批、草稿确认等非正式场景;正式合同建议使用 CA 数字证书签名或第三方电子签约平台。
上传后等了很久还没生成成功,是什么原因?
处理时间取决于两个因素:PDF 文件大小和页数。一个 10 页的 5MB PDF 通常 10-15 秒完成;超过 50 页或 50MB 的大文件可能需要 60 秒以上。如果超过 2 分钟仍未完成,可能是文件过大导致服务器超时。建议:1) 先压缩 PDF 再上传(可缩小到 5MB 以内);2) 如果 PDF 很多页,可以先删除不需要签名的页面再上传。浏览器网络不稳定也可能导致请求中断。
签名图片可以旋转方向吗?我想让签名倾斜一点?
目前不支持在工具内旋转或倾斜签名图片。签名图片上传后保持原始方向,只能调整位置和缩放大小。如果需要在签名上实现倾斜效果,建议在图片编辑软件(如 Photoshop、GIMP 或在线编辑工具)中将签名图片旋转到所需角度,保存为 PNG 后再上传。工具后端 Go 处理时会保持图片的原始旋转状态。
选择 打开 +新窗口 esc关闭