diff --git a/ofdgo.go b/ofdgo.go index 56c6305..dcb34f7 100644 --- a/ofdgo.go +++ b/ofdgo.go @@ -71,6 +71,8 @@ func NewRenderer(reader *Reader, opts ...RendererOption) *Renderer { DrawParams: reader.drawParamCache, CompositeGraphicUnits: reader.compositeGraphicUnitCache, FontMap: make(map[string]*canvas.FontFamily), + FontGIDMap: make(map[string]map[uint16]rune), + FontCIDMap: make(map[string]map[uint16]rune), fontFSCache: make(map[fontFSKey]*canvas.FontFamily), textGlyphPathCache: make(map[textGlyphPathCacheKey]textGlyphPathCacheValue), templatePageCache: make(map[string]*PageContent), diff --git a/ofdgo_image.go b/ofdgo_image.go index 42793c2..d188a50 100644 --- a/ofdgo_image.go +++ b/ofdgo_image.go @@ -20,10 +20,12 @@ import ( "fmt" "image" "image/color" + _ "image/gif" canvasimage "github.com/tdewolff/canvas/image" _ "github.com/xiaoqidun/jbig2" _ "golang.org/x/image/bmp" + _ "golang.org/x/image/tiff" ) // decodeImageData 解码图片数据 diff --git a/ofdgo_renderer.go b/ofdgo_renderer.go index 926042f..6081d97 100644 --- a/ofdgo_renderer.go +++ b/ofdgo_renderer.go @@ -48,6 +48,15 @@ type RendererOption func(*Renderer) // 入参: page 页面内容 // 返回: *canvas.Canvas 画布实例, error 错误信息 func (r *Renderer) RenderPage(page *PageContent) (*canvas.Canvas, error) { + renderer := *r + renderer.decodeImages = true + return renderer.renderPage(page) +} + +// renderPage 渲染特定页面内容 +// 入参: page 页面内容 +// 返回: *canvas.Canvas 画布实例, error 错误信息 +func (r *Renderer) renderPage(page *PageContent) (*canvas.Canvas, error) { box, err := r.GetPageBox(page) if err != nil { return nil, err @@ -55,7 +64,7 @@ func (r *Renderer) RenderPage(page *PageContent) (*canvas.Canvas, error) { width, height := box.W, box.H c := canvas.New(width, height) ctx := canvas.NewContext(c) - if err := r.RenderPageToContext(ctx, page); err != nil { + if err := r.renderPageToContext(ctx, page, true); err != nil { return nil, err } return c, nil @@ -85,7 +94,9 @@ func (r *Renderer) GetPageBox(page *PageContent) (Box, error) { // 入参: ctx 画布上下文, page 页面内容 // 返回: error 错误信息 func (r *Renderer) RenderPageToContext(ctx *canvas.Context, page *PageContent) error { - return r.renderPageToContext(ctx, page, true) + renderer := *r + renderer.decodeImages = true + return renderer.renderPageToContext(ctx, page, true) } // renderPageToContext 渲染页面到指定上下文 diff --git a/ofdgo_renderer_output.go b/ofdgo_renderer_output.go index 2ad0de3..031e78f 100644 --- a/ofdgo_renderer_output.go +++ b/ofdgo_renderer_output.go @@ -30,9 +30,7 @@ import ( // 入参: page 页面内容 // 返回: image.Image 图像对象, error 错误信息 func (r *Renderer) RenderToImage(page *PageContent) (image.Image, error) { - renderer := *r - renderer.decodeImages = true - c, err := renderer.RenderPage(page) + c, err := r.RenderPage(page) if err != nil { return nil, err } @@ -44,7 +42,7 @@ func (r *Renderer) RenderToImage(page *PageContent) (image.Image, error) { // 入参: page 页面内容, writer 输出流 // 返回: error 错误信息 func (r *Renderer) RenderToSVG(page *PageContent, writer io.Writer) error { - c, err := r.RenderPage(page) + c, err := r.renderPage(page) if err != nil { return err } @@ -69,7 +67,7 @@ func replacePDFProducer(data []byte) []byte { // 入参: page 页面内容, writer 输出流 // 返回: error 错误信息 func (r *Renderer) RenderToPDF(page *PageContent, writer io.Writer) error { - c, err := r.RenderPage(page) + c, err := r.renderPage(page) if err != nil { return err } @@ -88,7 +86,7 @@ func (r *Renderer) RenderToPDF(page *PageContent, writer io.Writer) error { // 入参: page 页面内容, writer 输出流 // 返回: error 错误信息 func (r *Renderer) RenderToEPS(page *PageContent, writer io.Writer) error { - c, err := r.RenderPage(page) + c, err := r.renderPage(page) if err != nil { return err } @@ -113,7 +111,7 @@ func (r *Renderer) RenderToMultiPagePDF(writer io.Writer) error { if err != nil { continue } - c, err := r.RenderPage(page) + c, err := r.renderPage(page) if err != nil { continue }