# 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 印章 ![印章制作](./docs/images/seal-template.png) ##### 个人签名 支持 4 种个人印章样式(方框/无边框 x 正方形/长方形),支持 3-4 字中文姓名,支持红/蓝/黑三种颜色。 ##### 数字证书生成 使用 RSA 2048 位公钥加密技术生成 PKCS12 数字证书,用于测试电子签章流程。**注意:非 CA 机构签发,不具备法律效力。** ![数字证书](./docs/images/pdf-cert.png) ##### PDF 文件签署 支持两种签章方式: - **关键字签署**:指定关键字,自动定位并签章 - **指定位置签署**:直接指定页码和坐标位置签章 ![电子文件签署](./docs/images/product.png) ##### 签署文件验证 验证 PDF 签名有效性: - 无数字签名(未签章) - 签名错误(签名数据损坏) - 文件被篡改(验证不通过) - 验证通过 ![签署文件验证](./docs/images/verify.png) ##### 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