# open-sign
**Repository Path**: BlacksMoon/open-sign
## Basic Information
- **Project Name**: open-sign
- **Description**: 签章管理
- **Primary Language**: Unknown
- **License**: MIT
- **Default Branch**: main
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 1
- **Created**: 2026-06-05
- **Last Updated**: 2026-06-05
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
开放签电子签章工具
#### 项目简介
开放签(open-sign)是一个开源的电子签章工具服务,采用 MIT 开源协议,不受商业限制。基于 Spring Boot 2.7 + Java 8 构建,提供 RESTful API,支持电子印章制作、手写签名生成、数字证书生成、PDF 文件转图片、电子签章(关键字签署、指定位置签署)、文件验签等功能。
无数据库依赖,无外部服务依赖,开箱即用。
#### 项目源码
| | 后端源码 | 前端源码 |
|---|---|---|
| GitHub | https://github.com/kaifangqian/open-sign | https://github.com/kaifangqian/open-sign-vue |
| 码云 | https://gitee.com/kaifangqian/open-sign | https://gitee.com/kaifangqian/open-sign-vue |
#### 官网与体验
- 官网:[https://www.kaifangqian.com](https://www.kaifangqian.com)
- 体验:[https://demo.kaifangqian.com](https://demo.kaifangqian.com)
---
#### API 接口文档
服务地址:`http://host:8666/openSign`
Swagger UI:`http://host:8666/openSign/swagger-ui/index.html`
##### 1. 健康检查
```
GET /openSign/api/test
```
返回 `ok` 表示服务正常。
##### 2. 生成企业印章(参数生成)
```
POST /openSign/generate/seal
```
根据企业名称自动生成圆形企业印章图片(含五角星、弧形文字、横排文字)。
**请求参数:**
| 字段 | 类型 | 说明 |
|---|---|---|
| topText | String | 印章环绕文字(企业名称) |
| middleText | String | 印章中间横排文字(如部门名称) |
**返回:** `result.entSeal` — 印章图片(Base64 编码 PNG)
##### 3. 生成企业印章(印模抠图)
```
POST /openSign/clip/seal
```
上传印章照片,自动去除背景生成透明印章图片。
**请求参数:**
| 字段 | 类型 | 说明 |
|---|---|---|
| image | String | 印章照片(Base64 编码) |
| colorRange | Integer | 背景色差阈值(0-255),值越大抠图越激进 |
**返回:** `result.entSeal` — 透明印章图片(Base64 编码 PNG)
##### 4. PDF 签署(演示)
```
POST /openSign/sign
```
对演示 PDF 文件进行数字签章(使用内置演示文件,非上传文件)。自动生成 RSA 数字证书并完成 PKCS7 签名。
**请求参数:**
| 字段 | 类型 | 说明 |
|---|---|---|
| signType | Integer | 签署方式:1=指定位置,2=关键字 |
| entSeal | String | 企业印章图片(Base64,可选) |
| entName | String | 企业名称(用于证书生成) |
| personalSeal | String | 个人签名图片(Base64,可选) |
| personalName | String | 个人姓名(用于证书生成) |
| entPositionList | List | 企业印章签署位置(signType=1 时使用) |
| personalPositionList | List | 个人签名签署位置(signType=1 时使用) |
| entKeyword | String | 企业印章定位关键字(signType=2 时使用) |
| personalKeyword | String | 个人签名定位关键字(signType=2 时使用) |
**Position 参数:**
| 字段 | 类型 | 说明 |
|---|---|---|
| offsetX | String | X 坐标 |
| offsetY | String | Y 坐标 |
| width | String | 签章宽度 |
| height | String | 签章高度 |
| page | Integer | 页码 |
| pageWidth | String | 页面显示宽度 |
| pageHeight | String | 页面显示高度 |
**返回:** `result.signFile` — 签署后的 PDF 文件(Base64 编码)
##### 5. 上传 PDF 并签章
```
POST /openSign/upload/sign
```
上传 PDF 文件,根据企业名称生成印章,在每页右下角加盖印章,返回签署后的 PDF 文件。
**请求:** `multipart/form-data`
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
| file | MultipartFile | 是 | PDF 文件 |
| entName | String | 否 | 企业名称(默认"西北工业大学") |
**返回:** 签署后的 PDF 文件(直接下载)
##### 6. PDF 验签
```
POST /openSign/verify
```
验证 PDF 文件是否被篡改,提取签名详细信息(印章图片、证书信息、签名时间等)。
**请求参数:**
| 字段 | 类型 | 说明 |
|---|---|---|
| verifyFile | String | PDF 文件(Base64 编码) |
| fileName | String | 文件名 |
**返回:** `result.vo` 包含以下信息:
| 字段 | 说明 |
|---|---|
| pdfSingResult | 验签结果:1=无签名,2=签名错误,3=文件被篡改,4=验证通过 |
| signatureDetails | 签名详细信息列表(印章图片、证书、签名时间、有效期等) |
---
#### 统一返回格式
```json
{
"success": true,
"code": 200,
"message": "",
"result": { },
"timestamp": 1683987654321
}
```
---
#### 功能说明
##### 电子印章制作
提供两种印章生成方式:
- **参数生成**:根据企业名称、部门名称自动绘制圆形印章(五角星 + 弧形文字 + 横排文字)
- **印模生成**:上传纸质印章照片,自动去除背景,生成透明 PNG 印章

##### 个人签名
支持 4 种个人印章样式(方框/无边框 x 正方形/长方形),支持 3-4 字中文姓名,支持红/蓝/黑三种颜色。
##### 数字证书生成
使用 RSA 2048 位公钥加密技术生成 PKCS12 数字证书,用于测试电子签章流程。**注意:非 CA 机构签发,不具备法律效力。**

##### PDF 文件签署
支持两种签章方式:
- **关键字签署**:指定关键字,自动定位并签章
- **指定位置签署**:直接指定页码和坐标位置签章

##### 签署文件验证
验证 PDF 签名有效性:
- 无数字签名(未签章)
- 签名错误(签名数据损坏)
- 文件被篡改(验证不通过)
- 验证通过

##### PDF 转图片
提供 PDF 文件转图片工具,用于网页预览、指定签署位置等场景。
---
#### 快速开始
##### 本地运行
```bash
# 打包
mvn clean package -DskipTests
# 运行
java -jar target/opensign.jar
```
##### Docker 部署
```bash
# 构建并启动
docker-compose up -d --build
# 查看日志
docker-compose logs -f open-sign
```
##### 配置说明
配置文件:`src/main/resources/application.yml`
```yaml
server:
port: 8666 # 服务端口
tomcat:
max-swallow-size: -1 # 上传文件无限制
servlet:
context-path: /openSign # 接口路径前缀
```
Docker 部署时可通过挂载 `./config` 目录覆盖配置。
---
#### 技术栈
| 技术 | 版本 | 说明 |
|---|---|---|
| Spring Boot | 2.7.18 | Web 框架 |
| Java | 8 | 运行环境 |
| iText | 5.5.13.3 | PDF 签署 |
| Apache PDFBox | 2.0.27 | PDF 渲染与文字提取 |
| BouncyCastle | 1.70 | 数字证书生成 |
| springdoc | 1.7.0 | Swagger API 文档 |
---
#### 代码结构
```
open-sign
├── controller # API 接口
│ ├── OpenSignController # 印章生成、PDF签署、验签
│ ├── UploadSignController # 上传PDF签章
│ └── TestController # 健康检查
├── service
│ ├── cert # RSA 数字证书生成
│ ├── image # 印章图片生成、印模抠图、PDF转图片
│ ├── pdf # PDF 签署、位置计算
│ └── verify # PDF 验签
├── enums # 枚举(签章颜色、签署类型、验签状态)
├── config # Swagger 配置
└── utils # 工具类(Base64)
```
---
#### 反馈交流
- QQ 交流群:482074553