feat(图像签章): 完善图像取消与签章缓存
build.yaml / build (push) Successful in 48s

This commit is contained in:
xiaoqidun committed 2026-10-12 19:18:25 +08:00
1 parent 3d37b0d510
commit 5d1fd593cd
4 files changed
+91 -18

No files matched your search

+38 -5
View File
@@ -16,6 +16,7 @@ package ofdgo
import (
"bytes"
"context"
"image"
"github.com/tdewolff/canvas"
@@ -27,6 +28,19 @@ func (r *Renderer) renderStamp(ctx *canvas.Context, s Stamp, pageH float64) {
if r.textOnly {
return
}
pageContext := r.pageContext
if pageContext == nil {
pageContext = context.Background()
}
defer func() {
if err := pageContext.Err(); err != nil {
r.renderError = err
}
}()
if err := pageContext.Err(); err != nil {
r.renderError = err
return
}
if s.Type == "ofd" && len(s.Data) > 0 {
if s.Clip != nil {
if img := r.renderOFDStampImage(s.Data); img != nil {
@@ -37,12 +51,15 @@ func (r *Renderer) renderStamp(ctx *canvas.Context, s Stamp, pageH float64) {
reader, err := NewReader(bytes.NewReader(s.Data), int64(len(s.Data)))
if err == nil {
defer reader.Close()
doc, err := reader.Doc()
doc, err := reader.DocContext(pageContext)
if err == nil {
renderer := r.childRenderer(reader)
for _, pageRef := range doc.Pages.Page {
content, err := reader.PageContent(pageRef)
content, err := reader.PageContentContext(pageContext, pageRef)
if err != nil {
if pageContext.Err() != nil {
return
}
continue
}
sealBox, err := renderer.GetPageBox(content)
@@ -64,7 +81,7 @@ func (r *Renderer) renderStamp(ctx *canvas.Context, s Stamp, pageH float64) {
}
}
if len(s.Data) > 0 {
img, _, err := decodeImageData(s.Data)
img, _, err := decodeImageDataContext(pageContext, s.Data)
if err == nil {
if r.decodeImages {
img = imagePixelSource(img)
@@ -79,12 +96,25 @@ func (r *Renderer) renderStamp(ctx *canvas.Context, s Stamp, pageH float64) {
// 入参: data OFD印章数据
// 返回: image.Image 印章图像
func (r *Renderer) renderOFDStampImage(data []byte) image.Image {
ctx := r.pageContext
if ctx == nil {
ctx = context.Background()
}
defer func() {
if err := ctx.Err(); err != nil {
r.renderError = err
}
}()
if err := ctx.Err(); err != nil {
r.renderError = err
return nil
}
reader, err := NewReader(bytes.NewReader(data), int64(len(data)))
if err != nil {
return nil
}
defer reader.Close()
doc, err := reader.Doc()
doc, err := reader.DocContext(ctx)
if err != nil {
return nil
}
@@ -92,8 +122,11 @@ func (r *Renderer) renderOFDStampImage(data []byte) image.Image {
renderer.decodeImages = true
renderer.TransparentBackground = true
for _, pageRef := range doc.Pages.Page {
content, err := reader.PageContent(pageRef)
content, err := reader.PageContentContext(ctx, pageRef)
if err != nil {
if ctx.Err() != nil {
return nil
}
continue
}
img, err := renderer.RenderToImage(content)