diff --git a/go.mod b/go.mod index 9a29d30..21138ec 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-20260928094736-cdc5f892445c + github.com/xiaoqidun/pdfgo v0.0.0-20260928103444-c1e05032dc3a 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 fdee27f..d65b1e7 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-20260928094736-cdc5f892445c h1:6idDj210CT1eyGK/fHDw0hD90GSrLqeRV7ECaP9dfyI= -github.com/xiaoqidun/pdfgo v0.0.0-20260928094736-cdc5f892445c/go.mod h1:4Pf0JO0BEf1uzRY+uZjlMjN/OPn3PYa0YMi6cqPPTLQ= +github.com/xiaoqidun/pdfgo v0.0.0-20260928103444-c1e05032dc3a h1:ROTJKhSKiF4LHufA5UjBWwGQimvWQV8hU9SxsrkeTWE= +github.com/xiaoqidun/pdfgo v0.0.0-20260928103444-c1e05032dc3a/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_annot.go b/ofdgo_pdf_annot.go index 5f75680..6a2c557 100644 --- a/ofdgo_pdf_annot.go +++ b/ofdgo_pdf_annot.go @@ -69,6 +69,21 @@ func (p *pdfImporter) appearanceAnnotation(ctx context.Context, page *pdfgo.Page stamp.clipTexts = make(map[*pdfgo.TextClip]TextObject) stamp.pageWidth, stamp.pageHeight = box.W, box.H nodes, err := p.collectCompositeNodes(func(visitor pdfgo.Visitor) error { + if annotation.Subtype == "Widget" { + visitor.MarkedContent = func(mark pdfgo.MarkedContentMark) error { + if mark.Tag == "Tx" && len(mark.Properties) == 0 { + return nil + } + if mark.Operator == "EMC" { + return nil + } + if p.warning == nil { + return &pdfgo.UnsupportedError{Feature: "widget marked content " + string(mark.Tag)} + } + p.warning(pdfgo.Diagnostic{Message: "PDF widget marked content " + string(mark.Tag) + " not preserved"}) + return nil + } + } return p.reader.WalkAnnotationAppearance(ctx, page, annotation, visitor) }) if err != nil { @@ -238,7 +253,7 @@ func (p *pdfImporter) formWidget(ctx context.Context, page *pdfgo.Page, annotati p.report.Warnings = append(p.report.Warnings, pdfgo.Diagnostic{Page: p.page + 1, Message: "hidden PDF form field not transferred"}) return nil } - if flags&(8|16) != 0 || annotation.Dictionary["OC"] != nil { + if annotation.Dictionary["OC"] != nil { return &pdfgo.UnsupportedError{Feature: "widget viewing behavior"} } if err := p.appearanceAnnotation(ctx, page, annotation); err != nil {