mirror of
https://github.com/unidoc/unipdf.git
synced 2025-04-27 13:48:51 +08:00
Fix annotation copy on paragraph chunk split
This commit is contained in:
parent
d340ce57e0
commit
affe2f74c0
@ -327,8 +327,15 @@ func (p *StyledParagraph) wrapText() error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
annotation := *src
|
var annotation *model.PdfAnnotation
|
||||||
return &annotation
|
switch t := src.GetContext().(type) {
|
||||||
|
case *model.PdfAnnotationLink:
|
||||||
|
if annot := copyLinkAnnotation(t); annot != nil {
|
||||||
|
annotation = annot.PdfAnnotation
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return annotation
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, chunk := range p.chunks {
|
for _, chunk := range p.chunks {
|
||||||
@ -698,8 +705,7 @@ func drawStyledParagraphOnBlock(blk *Block, p *StyledParagraph, ctx DrawContext)
|
|||||||
|
|
||||||
// Process annotation.
|
// Process annotation.
|
||||||
if !chunk.annotationProcessed {
|
if !chunk.annotationProcessed {
|
||||||
annotCtx := chunk.annotation.GetContext()
|
switch t := chunk.annotation.GetContext().(type) {
|
||||||
switch t := annotCtx.(type) {
|
|
||||||
case *model.PdfAnnotationLink:
|
case *model.PdfAnnotationLink:
|
||||||
// Initialize annotation rectangle.
|
// Initialize annotation rectangle.
|
||||||
annotRect = core.MakeArray()
|
annotRect = core.MakeArray()
|
||||||
|
@ -76,3 +76,20 @@ func newInternalLinkAnnotation(page int64, x, y, zoom float64) *model.PdfAnnotat
|
|||||||
|
|
||||||
return annotation.PdfAnnotation
|
return annotation.PdfAnnotation
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// copyLinkAnnotation returns a new link annotation based on an existing one.
|
||||||
|
func copyLinkAnnotation(link *model.PdfAnnotationLink) *model.PdfAnnotationLink {
|
||||||
|
if link == nil {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
annotation := model.NewPdfAnnotationLink()
|
||||||
|
annotation.BS = link.BS
|
||||||
|
annotation.A = link.A
|
||||||
|
|
||||||
|
if annotDest, ok := link.Dest.(*core.PdfObjectArray); ok {
|
||||||
|
annotation.Dest = core.MakeArray(annotDest.Elements()...)
|
||||||
|
}
|
||||||
|
|
||||||
|
return annotation
|
||||||
|
}
|
||||||
|
@ -158,8 +158,8 @@ func (tl *TOCLine) SetLink(page int64, x, y float64) {
|
|||||||
tl.SetStyle(tl.sp.defaultLinkStyle)
|
tl.SetStyle(tl.sp.defaultLinkStyle)
|
||||||
}
|
}
|
||||||
|
|
||||||
// getLink returns a new annotation if the line has a link set.
|
// getLineLink returns a new annotation if the line has a link set.
|
||||||
func (tl *TOCLine) getLink() *model.PdfAnnotation {
|
func (tl *TOCLine) getLineLink() *model.PdfAnnotation {
|
||||||
if tl.linkPage <= 0 {
|
if tl.linkPage <= 0 {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
@ -186,17 +186,17 @@ func (tl *TOCLine) prepareParagraph(sp *StyledParagraph, ctx DrawContext) {
|
|||||||
{
|
{
|
||||||
Text: tl.Number.Text,
|
Text: tl.Number.Text,
|
||||||
Style: tl.Number.Style,
|
Style: tl.Number.Style,
|
||||||
annotation: tl.getLink(),
|
annotation: tl.getLineLink(),
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
Text: title,
|
Text: title,
|
||||||
Style: tl.Title.Style,
|
Style: tl.Title.Style,
|
||||||
annotation: tl.getLink(),
|
annotation: tl.getLineLink(),
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
Text: page,
|
Text: page,
|
||||||
Style: tl.Page.Style,
|
Style: tl.Page.Style,
|
||||||
annotation: tl.getLink(),
|
annotation: tl.getLineLink(),
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -216,7 +216,7 @@ func (tl *TOCLine) prepareParagraph(sp *StyledParagraph, ctx DrawContext) {
|
|||||||
|
|
||||||
chunk := sp.Insert(2, sepText)
|
chunk := sp.Insert(2, sepText)
|
||||||
chunk.Style = sepStyle
|
chunk.Style = sepStyle
|
||||||
chunk.annotation = tl.getLink()
|
chunk.annotation = tl.getLineLink()
|
||||||
|
|
||||||
// Push page numbers to the end of the line.
|
// Push page numbers to the end of the line.
|
||||||
availWidth = availWidth - float64(sepCount)*sepWidth
|
availWidth = availWidth - float64(sepCount)*sepWidth
|
||||||
@ -230,7 +230,7 @@ func (tl *TOCLine) prepareParagraph(sp *StyledParagraph, ctx DrawContext) {
|
|||||||
|
|
||||||
chunk = sp.Insert(2, strings.Repeat(" ", spaces))
|
chunk = sp.Insert(2, strings.Repeat(" ", spaces))
|
||||||
chunk.Style = style
|
chunk.Style = style
|
||||||
chunk.annotation = tl.getLink()
|
chunk.annotation = tl.getLineLink()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user