diff --git a/go.mod b/go.mod index 638074d..9a29d30 100644 --- a/go.mod +++ b/go.mod @@ -9,7 +9,7 @@ require ( github.com/tdewolff/canvas v0.0.0-20260923214215-09804640d00c github.com/tdewolff/font v0.0.0-20260913163313-54f98bb59ee6 github.com/xiaoqidun/jbig2 v1.1.1 - github.com/xiaoqidun/pdfgo v0.0.0-20260928085418-08275755d188 + github.com/xiaoqidun/pdfgo v0.0.0-20260928094736-cdc5f892445c golang.org/x/crypto v0.57.0 golang.org/x/image v0.46.0 golang.org/x/text v0.42.0 diff --git a/go.sum b/go.sum index bbb94e0..fdee27f 100644 --- a/go.sum +++ b/go.sum @@ -62,8 +62,8 @@ github.com/tdewolff/test v1.0.12 h1:7F21DqIajswxuche0geHdrUZRCWE4oko4b7bcmkkrxk= github.com/tdewolff/test v1.0.12/go.mod h1:XPuWBzvdUzhCuxWO1ojpXsyzsA5bFoS3tO/Q3kFuTG8= github.com/xiaoqidun/jbig2 v1.1.1 h1:SjliS9ZO0e9HX5oYUfBuXrfFsXhWricrSz+XY4zORDI= github.com/xiaoqidun/jbig2 v1.1.1/go.mod h1:8QonVWtENmh2kc6l+leqeGl7psb79DWlHDkCpdChjfQ= -github.com/xiaoqidun/pdfgo v0.0.0-20260928085418-08275755d188 h1:XMOU0kQii0LW3BcFxPQLA7tgVfDmZ6zQcpZuU+eP+fk= -github.com/xiaoqidun/pdfgo v0.0.0-20260928085418-08275755d188/go.mod h1:4Pf0JO0BEf1uzRY+uZjlMjN/OPn3PYa0YMi6cqPPTLQ= +github.com/xiaoqidun/pdfgo v0.0.0-20260928094736-cdc5f892445c h1:6idDj210CT1eyGK/fHDw0hD90GSrLqeRV7ECaP9dfyI= +github.com/xiaoqidun/pdfgo v0.0.0-20260928094736-cdc5f892445c/go.mod h1:4Pf0JO0BEf1uzRY+uZjlMjN/OPn3PYa0YMi6cqPPTLQ= github.com/xyproto/randomstring v1.0.5 h1:YtlWPoRdgMu3NZtP45drfy1GKoojuR7hmRcnhZqKjWU= github.com/xyproto/randomstring v1.0.5/go.mod h1:rgmS5DeNXLivK7YprL0pY+lTuhNQW3iGxZ18UQApw/E= github.com/yuin/goldmark v1.8.5 h1:r6N5afV5qj/5S4UTch8agZHJ8UxNCMwX7WjkkJam2NA= diff --git a/ofdgo_pdf.go b/ofdgo_pdf.go index 2b73bcc..f47e7d0 100644 --- a/ofdgo_pdf.go +++ b/ofdgo_pdf.go @@ -75,7 +75,7 @@ type pdfImporter struct { objects []GraphicObject pages map[pdfgo.Reference]*pdfgo.Page pageIDs map[pdfgo.Reference]string - imageIDs map[*pdfgo.Stream]string + imageIDs map[pdfImageKey]string maskClips map[*pdfgo.SoftMask]pdfgo.Path pageBox pdfgo.Rectangle pageWidth float64 diff --git a/ofdgo_pdf_composite_draw.go b/ofdgo_pdf_composite_draw.go index 1a46c7f..b47fb4b 100644 --- a/ofdgo_pdf_composite_draw.go +++ b/ofdgo_pdf_composite_draw.go @@ -390,7 +390,10 @@ func (c *pdfCompositor) mask(mask *pdfgo.SoftMask, inherited *pdfgo.ColorSpace) return nil, err } } - result[i] = mask.Transfer(v) + result[i], err = mask.Transfer(v) + if err != nil { + return nil, err + } } c.masks[mask] = result return result, nil diff --git a/ofdgo_pdf_group.go b/ofdgo_pdf_group.go index da6fa64..bcf8053 100644 --- a/ofdgo_pdf_group.go +++ b/ofdgo_pdf_group.go @@ -522,7 +522,10 @@ func (p *pdfImporter) maskClip(mask *pdfgo.SoftMask) (pdfgo.Path, error) { return pdfgo.Path{}, err } opacity := func(v float64) (bool, error) { - v = mask.Transfer(v) + v, err := mask.Transfer(v) + if err != nil { + return false, err + } if v != 0 && v != 1 { return false, &pdfgo.UnsupportedError{Feature: "nonbinary luminosity mask"} } diff --git a/ofdgo_pdf_object.go b/ofdgo_pdf_object.go index e52b24a..e102564 100644 --- a/ofdgo_pdf_object.go +++ b/ofdgo_pdf_object.go @@ -32,6 +32,12 @@ import ( "github.com/xiaoqidun/pdfgo" ) +// pdfImageKey 区分同一图像流在不同渲染意图下的资源 +type pdfImageKey struct { + stream *pdfgo.Stream + intent pdfgo.Name +} + // image 转换图像样本,不将整页或其他对象栅格化 // 入参: mark PDF图像绘制信息 // 返回: error 错误信息 @@ -59,7 +65,8 @@ func (p *pdfImporter) image(mark pdfgo.ImageMark) error { return &pdfgo.UnsupportedError{Feature: "image color separation overprint"} } source := mark.Image - id := p.imageIDs[source.Stream] + key := pdfImageKey{stream: source.Stream, intent: source.Intent} + id := p.imageIDs[key] if source.ImageMask { id = "" } @@ -125,9 +132,9 @@ func (p *pdfImporter) image(mark pdfgo.ImageMark) error { } if !source.ImageMask { if p.imageIDs == nil { - p.imageIDs = map[*pdfgo.Stream]string{} + p.imageIDs = map[pdfImageKey]string{} } - p.imageIDs[source.Stream] = id + p.imageIDs[key] = id } } return p.appendImage(mark, id)