mirror of
https://github.com/fumiama/go-docx.git
synced 2026-06-10 10:14:05 +08:00
add api AppendFile
This commit is contained in:
52
structdoc.go
52
structdoc.go
@@ -284,23 +284,39 @@ newdoclop:
|
||||
return
|
||||
}
|
||||
|
||||
func (r *Run) copymedia(to *Docx) *Run {
|
||||
nr := *r
|
||||
nr.Children = make([]interface{}, 0, len(r.Children))
|
||||
nr.file = to
|
||||
for _, rc := range r.Children {
|
||||
if d, ok := rc.(*Drawing); ok {
|
||||
nr.Children = append(nr.Children, d.copymedia(to))
|
||||
continue
|
||||
}
|
||||
nr.Children = append(nr.Children, rc)
|
||||
}
|
||||
return &nr
|
||||
}
|
||||
|
||||
func (p *Paragraph) copymedia(to *Docx) (np Paragraph) {
|
||||
np = *p
|
||||
np.Children = make([]interface{}, 0, len(p.Children))
|
||||
np.file = to
|
||||
for _, pc := range p.Children {
|
||||
if r, ok := pc.(*Run); ok {
|
||||
nr := *r
|
||||
nr.Children = make([]interface{}, 0, len(r.Children))
|
||||
nr.file = to
|
||||
for _, rc := range r.Children {
|
||||
if d, ok := rc.(*Drawing); ok {
|
||||
nr.Children = append(nr.Children, d.copymedia(to))
|
||||
continue
|
||||
}
|
||||
nr.Children = append(nr.Children, rc)
|
||||
np.Children = append(np.Children, r.copymedia(to))
|
||||
continue
|
||||
}
|
||||
if h, ok := pc.(*Hyperlink); ok {
|
||||
tgt, err := p.file.ReferTarget(h.ID)
|
||||
if err != nil {
|
||||
continue
|
||||
}
|
||||
np.Children = append(np.Children, &nr)
|
||||
rid := to.addLinkRelation(tgt)
|
||||
np.Children = append(np.Children, &Hyperlink{
|
||||
ID: rid,
|
||||
Run: *h.Run.copymedia(to),
|
||||
})
|
||||
continue
|
||||
}
|
||||
np.Children = append(np.Children, pc)
|
||||
@@ -330,3 +346,19 @@ func (t *Table) copymedia(to *Docx) (nt Table) {
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
// AppendFile appends all contents in af to f
|
||||
func (f *Docx) AppendFile(af *Docx) {
|
||||
for _, item := range af.Document.Body.Items {
|
||||
switch o := item.(type) {
|
||||
case *Paragraph:
|
||||
np := o.copymedia(f)
|
||||
f.Document.Body.Items = append(f.Document.Body.Items, &np)
|
||||
case *Table:
|
||||
nt := o.copymedia(f)
|
||||
f.Document.Body.Items = append(f.Document.Body.Items, &nt)
|
||||
default:
|
||||
f.Document.Body.Items = append(f.Document.Body.Items, o)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user