mirror of
https://github.com/xiaoqidun/ofdgo.git
synced 2026-08-30 12:12:40 +08:00
@@ -38,6 +38,7 @@ type Reader struct {
|
|||||||
Stamps map[string][]Stamp
|
Stamps map[string][]Stamp
|
||||||
Annots map[string][]Annotation
|
Annots map[string][]Annotation
|
||||||
fileIndex map[string]*zip.File
|
fileIndex map[string]*zip.File
|
||||||
|
fileIndexFold map[string]*zip.File
|
||||||
}
|
}
|
||||||
|
|
||||||
// Close 关闭阅读器
|
// Close 关闭阅读器
|
||||||
@@ -53,9 +54,14 @@ func (r *Reader) Close() error {
|
|||||||
// 返回: error 错误信息
|
// 返回: error 错误信息
|
||||||
func (r *Reader) initRoot() error {
|
func (r *Reader) initRoot() error {
|
||||||
r.fileIndex = make(map[string]*zip.File)
|
r.fileIndex = make(map[string]*zip.File)
|
||||||
|
r.fileIndexFold = make(map[string]*zip.File)
|
||||||
for _, f := range r.Zip.File {
|
for _, f := range r.Zip.File {
|
||||||
name := cleanPackagePath(f.Name)
|
name := cleanPackagePath(f.Name)
|
||||||
r.fileIndex[name] = f
|
r.fileIndex[name] = f
|
||||||
|
fold := strings.ToLower(name)
|
||||||
|
if _, ok := r.fileIndexFold[fold]; !ok {
|
||||||
|
r.fileIndexFold[fold] = f
|
||||||
|
}
|
||||||
}
|
}
|
||||||
data, err := r.readFile("OFD.xml")
|
data, err := r.readFile("OFD.xml")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@@ -111,6 +117,9 @@ func (r *Reader) packageFile(name string) (*zip.File, bool) {
|
|||||||
if f, ok := r.fileIndex[name]; ok {
|
if f, ok := r.fileIndex[name]; ok {
|
||||||
return f, true
|
return f, true
|
||||||
}
|
}
|
||||||
|
if f, ok := r.fileIndexFold[strings.ToLower(name)]; ok {
|
||||||
|
return f, true
|
||||||
|
}
|
||||||
return nil, false
|
return nil, false
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+4
-1
@@ -38,6 +38,7 @@ type Renderer struct {
|
|||||||
templatePageCache map[string]*PageContent
|
templatePageCache map[string]*PageContent
|
||||||
fontDirs []string
|
fontDirs []string
|
||||||
fontFS []fs.FS
|
fontFS []fs.FS
|
||||||
|
decodeImages bool
|
||||||
}
|
}
|
||||||
|
|
||||||
// RendererOption 渲染器配置选项
|
// RendererOption 渲染器配置选项
|
||||||
@@ -168,5 +169,7 @@ func (r *Renderer) childRenderer(reader *Reader) *Renderer {
|
|||||||
if len(r.fontFS) > 0 {
|
if len(r.fontFS) > 0 {
|
||||||
opts = append(opts, WithFontFS(r.fontFS...))
|
opts = append(opts, WithFontFS(r.fontFS...))
|
||||||
}
|
}
|
||||||
return NewRenderer(reader, opts...)
|
renderer := NewRenderer(reader, opts...)
|
||||||
|
renderer.decodeImages = r.decodeImages
|
||||||
|
return renderer
|
||||||
}
|
}
|
||||||
|
|||||||
+16
-2
@@ -88,10 +88,24 @@ func (r *Renderer) decodeImageResource(resPath string) (image.Image, error) {
|
|||||||
reader := bufio.NewReaderSize(rc, 8)
|
reader := bufio.NewReaderSize(rc, 8)
|
||||||
header, _ := reader.Peek(8)
|
header, _ := reader.Peek(8)
|
||||||
if isJPEGData(header) {
|
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) {
|
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)
|
data, err := io.ReadAll(reader)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|||||||
@@ -30,7 +30,9 @@ import (
|
|||||||
// 入参: page 页面内容
|
// 入参: page 页面内容
|
||||||
// 返回: image.Image 图像对象, error 错误信息
|
// 返回: image.Image 图像对象, error 错误信息
|
||||||
func (r *Renderer) RenderToImage(page *PageContent) (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 {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -63,6 +63,9 @@ func (r *Renderer) renderStamp(ctx *canvas.Context, s Stamp, pageH float64) {
|
|||||||
if len(s.Data) > 0 {
|
if len(s.Data) > 0 {
|
||||||
img, _, err := decodeImageData(s.Data)
|
img, _, err := decodeImageData(s.Data)
|
||||||
if err == nil {
|
if err == nil {
|
||||||
|
if r.decodeImages {
|
||||||
|
img = imagePixelSource(img)
|
||||||
|
}
|
||||||
r.renderStampImage(ctx, stampImageWithTransparentWhite(img), s, pageH)
|
r.renderStampImage(ctx, stampImageWithTransparentWhite(img), s, pageH)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@@ -83,6 +86,7 @@ func (r *Renderer) renderOFDStampImage(data []byte) image.Image {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
renderer := r.childRenderer(reader)
|
renderer := r.childRenderer(reader)
|
||||||
|
renderer.decodeImages = true
|
||||||
for _, pageRef := range doc.Pages.Page {
|
for _, pageRef := range doc.Pages.Page {
|
||||||
content, err := reader.PageContent(pageRef)
|
content, err := reader.PageContent(pageRef)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|||||||
Reference in New Issue
Block a user