feat(签名展示): OFDGo WebUI支持签名展示
build.yaml / build (push) Successful in 35s

This commit is contained in:
2026-07-08 11:02:20 +08:00
parent 98b37d865a
commit 61da0f3f5d
8 changed files with 671 additions and 18 deletions
+45
View File
@@ -81,6 +81,15 @@ type SignatureStamp struct {
Boundary string `xml:"Boundary,attr"`
}
// SignatureStampPosition 签名外观位置信息
type SignatureStampPosition struct {
ID string
Page int
PageID string
Boundary string
Box Box
}
// SignatureReferences 签名保护文件列表
type SignatureReferences struct {
CheckMethod string `xml:"CheckMethod,attr"`
@@ -93,6 +102,29 @@ type SignatureReference struct {
CheckValue string `xml:"CheckValue"`
}
// SignatureStampPositions 获取签名外观位置信息
// 入参: stamps 签名外观列表
// 返回: []SignatureStampPosition 签名外观位置信息, error 错误信息
func (r *Reader) SignatureStampPositions(stamps []SignatureStamp) ([]SignatureStampPosition, error) {
doc, err := r.Doc()
if err != nil {
return nil, err
}
pages := signaturePageNumbers(doc)
positions := make([]SignatureStampPosition, 0, len(stamps))
for _, stamp := range stamps {
box, _ := ParseBox(stamp.Boundary)
positions = append(positions, SignatureStampPosition{
ID: stamp.ID,
Page: pages[stamp.PageRef],
PageID: stamp.PageRef,
Boundary: stamp.Boundary,
Box: box,
})
}
return positions, nil
}
// parseSignatures 解析签名文件
// 入参: doc 文档结构
// 返回: error 错误信息
@@ -153,6 +185,19 @@ func (r *Reader) parseSignatures(doc *Document) error {
return nil
}
// signaturePageNumbers 获取签名页面编号索引
// 入参: doc 文档结构
// 返回: map[string]int 页面编号索引
func signaturePageNumbers(doc *Document) map[string]int {
pages := make(map[string]int, len(doc.Pages.Page))
for index, page := range doc.Pages.Page {
if page.ID != "" {
pages[page.ID] = index + 1
}
}
return pages
}
// extractSeal 尝试提取印章数据
// 入参: data 签名值数据
// 返回: string 印章类型, []byte 印章数据