1
0
mirror of https://github.com/fumiama/go-docx.git synced 2026-06-04 23:30:25 +08:00

优化 pic String

This commit is contained in:
源文雨
2023-03-07 14:05:47 +08:00
parent 32cb2064cd
commit ae6c05a8f2
2 changed files with 126 additions and 108 deletions

View File

@@ -21,6 +21,8 @@
package docx
import (
"crypto/md5"
"encoding/hex"
"encoding/xml"
"io"
"strconv"
@@ -215,6 +217,64 @@ func (r *WPInline) UnmarshalXML(d *xml.Decoder, start xml.StartElement) (err err
return nil
}
// String ...
func (r *WPInline) String() string {
sb := strings.Builder{}
if r.Graphic.GraphicData.Pic != nil {
sb.WriteString("![inlnim ")
switch {
case r.DocPr != nil:
sb.WriteString(r.DocPr.Name)
case r.Graphic.GraphicData.Pic.NonVisualPicProperties != nil:
sb.WriteString(r.Graphic.GraphicData.Pic.NonVisualPicProperties.NonVisualDrawingProperties.Name)
default:
sb.WriteString(r.Graphic.GraphicData.Pic.BlipFill.Blip.Embed)
}
sb.WriteString("](")
if r.Graphic.GraphicData.Pic.BlipFill != nil {
tgt, err := r.file.ReferTarget(r.Graphic.GraphicData.Pic.BlipFill.Blip.Embed)
if err != nil {
sb.WriteString(err.Error())
} else {
h := md5.Sum(r.file.Media(tgt[6:]).Data)
sb.WriteString(hex.EncodeToString(h[:]))
}
}
sb.WriteByte(')')
return sb.String()
}
if r.Graphic.GraphicData.Shape != nil {
sb.WriteString("![inlnsp ")
switch {
case r.DocPr != nil:
sb.WriteString(r.DocPr.Name)
case r.Graphic.GraphicData.Shape.CNvPr != nil:
sb.WriteString(r.Graphic.GraphicData.Shape.CNvPr.Name)
case r.Graphic.GraphicData.Shape.SpPr != nil:
sb.WriteString(r.Graphic.GraphicData.Shape.SpPr.PrstGeom.Prst)
default:
sb.WriteString("nil")
}
sb.WriteString("](")
if r.Graphic.GraphicData.Shape.SpPr != nil {
sb.WriteString(r.Graphic.GraphicData.Shape.SpPr.PrstGeom.Prst)
}
sb.WriteByte(')')
return sb.String()
}
if r.Graphic.GraphicData.Canvas != nil {
sb.WriteString("![inlncv ")
if r.DocPr != nil {
sb.WriteString(r.DocPr.Name)
} else {
sb.WriteString("nil")
}
sb.WriteString("]()")
return sb.String()
}
return "![inln?](unknown)"
}
// WPExtent represents the extent of a drawing in a Word document.
//
// CX CY 's unit is English Metric Units, which is 1/914400 inch
@@ -1230,6 +1290,66 @@ func (r *WPAnchor) UnmarshalXML(d *xml.Decoder, start xml.StartElement) (err err
return nil
}
// String ...
func (r *WPAnchor) String() string {
sb := strings.Builder{}
if r.Graphic != nil && r.Graphic.GraphicData != nil {
if r.Graphic.GraphicData.Pic != nil {
sb.WriteString("![anchim ")
switch {
case r.DocPr != nil:
sb.WriteString(r.DocPr.Name)
case r.Graphic.GraphicData.Pic.NonVisualPicProperties != nil:
sb.WriteString(r.Graphic.GraphicData.Pic.NonVisualPicProperties.NonVisualDrawingProperties.Name)
default:
sb.WriteString(r.Graphic.GraphicData.Pic.BlipFill.Blip.Embed)
}
sb.WriteString("](")
if r.Graphic.GraphicData.Pic.BlipFill != nil {
tgt, err := r.file.ReferTarget(r.Graphic.GraphicData.Pic.BlipFill.Blip.Embed)
if err != nil {
sb.WriteString(err.Error())
} else {
h := md5.Sum(r.file.Media(tgt[6:]).Data)
sb.WriteString(hex.EncodeToString(h[:]))
}
}
sb.WriteByte(')')
return sb.String()
}
if r.Graphic.GraphicData.Shape != nil {
sb.WriteString("![anchsp ")
switch {
case r.DocPr != nil:
sb.WriteString(r.DocPr.Name)
case r.Graphic.GraphicData.Shape.CNvPr != nil:
sb.WriteString(r.Graphic.GraphicData.Shape.CNvPr.Name)
case r.Graphic.GraphicData.Shape.SpPr != nil:
sb.WriteString(r.Graphic.GraphicData.Shape.SpPr.PrstGeom.Prst)
default:
sb.WriteString("nil")
}
sb.WriteString("](")
if r.Graphic.GraphicData.Shape.SpPr != nil {
sb.WriteString(r.Graphic.GraphicData.Shape.SpPr.PrstGeom.Prst)
}
sb.WriteByte(')')
return sb.String()
}
if r.Graphic.GraphicData.Canvas != nil {
sb.WriteString("![anchcv ")
if r.DocPr != nil {
sb.WriteString(r.DocPr.Name)
} else {
sb.WriteString("nil")
}
sb.WriteString("]()")
return sb.String()
}
}
return "![anch?](unknown)"
}
// WPSimplePos represents the position of an object in a Word document.
type WPSimplePos struct {
XMLName xml.Name `xml:"wp:simplePos,omitempty"`

View File

@@ -21,8 +21,6 @@
package docx
import (
"crypto/md5"
"encoding/hex"
"encoding/xml"
"io"
"strconv"
@@ -202,113 +200,13 @@ func (p *Paragraph) String() string {
case *BarterRabbet:
sb.WriteByte('\n')
case *Drawing:
if x.Inline != nil && x.Inline.Graphic != nil && x.Inline.Graphic.GraphicData != nil {
if x.Inline.Graphic.GraphicData.Pic != nil {
sb.WriteString("![inlnim ")
switch {
case x.Inline.DocPr != nil:
sb.WriteString(x.Inline.DocPr.Name)
case x.Inline.Graphic.GraphicData.Pic.NonVisualPicProperties != nil:
sb.WriteString(x.Inline.Graphic.GraphicData.Pic.NonVisualPicProperties.NonVisualDrawingProperties.Name)
default:
sb.WriteString(x.Inline.Graphic.GraphicData.Pic.BlipFill.Blip.Embed)
}
sb.WriteString("](")
if x.Inline.Graphic.GraphicData.Pic.BlipFill != nil {
tgt, err := p.file.ReferTarget(x.Inline.Graphic.GraphicData.Pic.BlipFill.Blip.Embed)
if err != nil {
sb.WriteString(err.Error())
} else {
h := md5.Sum(p.file.Media(tgt[6:]).Data)
sb.WriteString(hex.EncodeToString(h[:]))
}
}
sb.WriteByte(')')
continue
}
if x.Inline.Graphic.GraphicData.Shape != nil {
sb.WriteString("![inlnsp ")
switch {
case x.Inline.DocPr != nil:
sb.WriteString(x.Inline.DocPr.Name)
case x.Inline.Graphic.GraphicData.Shape.CNvPr != nil:
sb.WriteString(x.Inline.Graphic.GraphicData.Shape.CNvPr.Name)
case x.Inline.Graphic.GraphicData.Shape.SpPr != nil:
sb.WriteString(x.Inline.Graphic.GraphicData.Shape.SpPr.PrstGeom.Prst)
default:
sb.WriteString("nil")
}
sb.WriteString("](")
if x.Inline.Graphic.GraphicData.Shape.SpPr != nil {
sb.WriteString(x.Inline.Graphic.GraphicData.Shape.SpPr.PrstGeom.Prst)
}
sb.WriteByte(')')
continue
}
if x.Inline.Graphic.GraphicData.Canvas != nil {
sb.WriteString("![inlncv ")
if x.Inline.DocPr != nil {
sb.WriteString(x.Inline.DocPr.Name)
} else {
sb.WriteString("nil")
}
sb.WriteString("]()")
continue
}
if x.Inline != nil {
sb.WriteString(x.Inline.String())
continue
}
if x.Anchor != nil && x.Anchor.Graphic != nil && x.Anchor.Graphic.GraphicData != nil {
if x.Anchor.Graphic.GraphicData.Pic != nil {
sb.WriteString("![anchim ")
switch {
case x.Anchor.DocPr != nil:
sb.WriteString(x.Anchor.DocPr.Name)
case x.Anchor.Graphic.GraphicData.Pic.NonVisualPicProperties != nil:
sb.WriteString(x.Anchor.Graphic.GraphicData.Pic.NonVisualPicProperties.NonVisualDrawingProperties.Name)
default:
sb.WriteString(x.Anchor.Graphic.GraphicData.Pic.BlipFill.Blip.Embed)
}
sb.WriteString("](")
if x.Anchor.Graphic.GraphicData.Pic.BlipFill != nil {
tgt, err := p.file.ReferTarget(x.Anchor.Graphic.GraphicData.Pic.BlipFill.Blip.Embed)
if err != nil {
sb.WriteString(err.Error())
} else {
h := md5.Sum(p.file.Media(tgt[6:]).Data)
sb.WriteString(hex.EncodeToString(h[:]))
}
}
sb.WriteByte(')')
continue
}
if x.Anchor.Graphic.GraphicData.Shape != nil {
sb.WriteString("![anchsp ")
switch {
case x.Anchor.DocPr != nil:
sb.WriteString(x.Anchor.DocPr.Name)
case x.Anchor.Graphic.GraphicData.Shape.CNvPr != nil:
sb.WriteString(x.Anchor.Graphic.GraphicData.Shape.CNvPr.Name)
case x.Anchor.Graphic.GraphicData.Shape.SpPr != nil:
sb.WriteString(x.Anchor.Graphic.GraphicData.Shape.SpPr.PrstGeom.Prst)
default:
sb.WriteString("nil")
}
sb.WriteString("](")
if x.Anchor.Graphic.GraphicData.Shape.SpPr != nil {
sb.WriteString(x.Anchor.Graphic.GraphicData.Shape.SpPr.PrstGeom.Prst)
}
sb.WriteByte(')')
continue
}
if x.Anchor.Graphic.GraphicData.Canvas != nil {
sb.WriteString("![anchcv ")
if x.Anchor.DocPr != nil {
sb.WriteString(x.Anchor.DocPr.Name)
} else {
sb.WriteString("nil")
}
sb.WriteString("]()")
continue
}
if x.Anchor != nil {
sb.WriteString(x.Anchor.String())
continue
}
}
}