fix(图片渲染): 修复一个图片渲染的回归问题
build.yaml / build (push) Successful in 36s

This commit is contained in:
2026-07-15 14:23:04 +08:00
parent e5265a21d5
commit e2896381e2
5 changed files with 36 additions and 4 deletions
+9
View File
@@ -38,6 +38,7 @@ type Reader struct {
Stamps map[string][]Stamp
Annots map[string][]Annotation
fileIndex map[string]*zip.File
fileIndexFold map[string]*zip.File
}
// Close 关闭阅读器
@@ -53,9 +54,14 @@ func (r *Reader) Close() error {
// 返回: error 错误信息
func (r *Reader) initRoot() error {
r.fileIndex = make(map[string]*zip.File)
r.fileIndexFold = make(map[string]*zip.File)
for _, f := range r.Zip.File {
name := cleanPackagePath(f.Name)
r.fileIndex[name] = f
fold := strings.ToLower(name)
if _, ok := r.fileIndexFold[fold]; !ok {
r.fileIndexFold[fold] = f
}
}
data, err := r.readFile("OFD.xml")
if err != nil {
@@ -111,6 +117,9 @@ func (r *Reader) packageFile(name string) (*zip.File, bool) {
if f, ok := r.fileIndex[name]; ok {
return f, true
}
if f, ok := r.fileIndexFold[strings.ToLower(name)]; ok {
return f, true
}
return nil, false
}
+4 -1
View File
@@ -38,6 +38,7 @@ type Renderer struct {
templatePageCache map[string]*PageContent
fontDirs []string
fontFS []fs.FS
decodeImages bool
}
// RendererOption 渲染器配置选项
@@ -168,5 +169,7 @@ func (r *Renderer) childRenderer(reader *Reader) *Renderer {
if len(r.fontFS) > 0 {
opts = append(opts, WithFontFS(r.fontFS...))
}
return NewRenderer(reader, opts...)
renderer := NewRenderer(reader, opts...)
renderer.decodeImages = r.decodeImages
return renderer
}
+16 -2
View File
@@ -88,10 +88,24 @@ func (r *Renderer) decodeImageResource(resPath string) (image.Image, error) {
reader := bufio.NewReaderSize(rc, 8)
header, _ := reader.Peek(8)
if isJPEGData(header) {
return canvasimage.NewJPEGImage(reader)
img, err := canvasimage.NewJPEGImage(reader)
if err != nil {
return nil, err
}
if r.decodeImages {
return img.Image()
}
return img, nil
}
if isPNGData(header) {
return canvasimage.NewPNGImage(reader)
img, err := canvasimage.NewPNGImage(reader)
if err != nil {
return nil, err
}
if r.decodeImages {
return img.Image()
}
return img, nil
}
data, err := io.ReadAll(reader)
if err != nil {
+3 -1
View File
@@ -30,7 +30,9 @@ import (
// 入参: page 页面内容
// 返回: image.Image 图像对象, error 错误信息
func (r *Renderer) RenderToImage(page *PageContent) (image.Image, error) {
c, err := r.RenderPage(page)
renderer := *r
renderer.decodeImages = true
c, err := renderer.RenderPage(page)
if err != nil {
return nil, err
}
+4
View File
@@ -63,6 +63,9 @@ func (r *Renderer) renderStamp(ctx *canvas.Context, s Stamp, pageH float64) {
if len(s.Data) > 0 {
img, _, err := decodeImageData(s.Data)
if err == nil {
if r.decodeImages {
img = imagePixelSource(img)
}
r.renderStampImage(ctx, stampImageWithTransparentWhite(img), s, pageH)
return
}
@@ -83,6 +86,7 @@ func (r *Renderer) renderOFDStampImage(data []byte) image.Image {
return nil
}
renderer := r.childRenderer(reader)
renderer.decodeImages = true
for _, pageRef := range doc.Pages.Page {
content, err := reader.PageContent(pageRef)
if err != nil {