Export Outline and OutlineItem entries

This commit is contained in:
Adrian-George Bostan 2020-01-15 20:04:06 +02:00
parent 2c395a6598
commit 8afe2c21ed

View File

@ -12,9 +12,9 @@ import (
// OutlineDest represents the destination of an outline item. // OutlineDest represents the destination of an outline item.
// It holds the page and the position on the page an outline item points to. // It holds the page and the position on the page an outline item points to.
type OutlineDest struct { type OutlineDest struct {
Page int64 Page int64 `json:"page"`
X float64 X float64 `json:"x"`
Y float64 Y float64 `json:"y"`
} }
// NewOutlineDest returns a new outline destination which can be used // NewOutlineDest returns a new outline destination which can be used
@ -41,7 +41,7 @@ func (od OutlineDest) ToPdfObject() core.PdfObject {
// Outline represents a PDF outline dictionary (Table 152 - p. 376). // Outline represents a PDF outline dictionary (Table 152 - p. 376).
// Currently, the Outline object can only be used to construct PDF outlines. // Currently, the Outline object can only be used to construct PDF outlines.
type Outline struct { type Outline struct {
items []*OutlineItem Entries []*OutlineItem `json:"entries"`
} }
// NewOutline returns a new outline instance. // NewOutline returns a new outline instance.
@ -49,25 +49,28 @@ func NewOutline() *Outline {
return &Outline{} return &Outline{}
} }
func NewOutlineFromOutlineTree(node *PdfOutlineTreeNode) {
}
// Add appends a top level outline item to the outline. // Add appends a top level outline item to the outline.
func (o *Outline) Add(item *OutlineItem) { func (o *Outline) Add(item *OutlineItem) {
o.items = append(o.items, item) o.Entries = append(o.Entries, item)
} }
// Insert adds a top level outline item in the outline, // Insert adds a top level outline item in the outline,
// at the specified index. // at the specified index.
func (o *Outline) Insert(index uint, item *OutlineItem) { func (o *Outline) Insert(index uint, item *OutlineItem) {
l := uint(len(o.items)) l := uint(len(o.Entries))
if index > l { if index > l {
index = l index = l
} }
o.items = append(o.items[:index], append([]*OutlineItem{item}, o.items[index:]...)...) o.Entries = append(o.Entries[:index], append([]*OutlineItem{item}, o.Entries[index:]...)...)
} }
// Items returns all children outline items. // Items returns all children outline items.
func (o *Outline) Items() []*OutlineItem { func (o *Outline) Items() []*OutlineItem {
return o.items return o.Entries
} }
// ToPdfOutline returns a low level PdfOutline object, based on the current // ToPdfOutline returns a low level PdfOutline object, based on the current
@ -80,7 +83,7 @@ func (o *Outline) ToPdfOutline() *PdfOutline {
var outlineItems []*PdfOutlineItem var outlineItems []*PdfOutlineItem
var prev *PdfOutlineItem var prev *PdfOutlineItem
for _, item := range o.items { for _, item := range o.Entries {
outlineItem, _ := item.ToPdfOutlineItem() outlineItem, _ := item.ToPdfOutlineItem()
outlineItem.Parent = &outline.PdfOutlineTreeNode outlineItem.Parent = &outline.PdfOutlineTreeNode
@ -111,10 +114,9 @@ func (o *Outline) ToPdfObject() core.PdfObject {
// OutlineItem represents a PDF outline item dictionary (Table 153 - pp. 376 - 377). // OutlineItem represents a PDF outline item dictionary (Table 153 - pp. 376 - 377).
type OutlineItem struct { type OutlineItem struct {
Title string Title string `json:"title"`
Dest OutlineDest Dest OutlineDest `json:"dest"`
Entries []*OutlineItem `json:"entries"`
items []*OutlineItem
} }
// NewOutlineItem returns a new outline item instance. // NewOutlineItem returns a new outline item instance.
@ -127,23 +129,23 @@ func NewOutlineItem(title string, dest OutlineDest) *OutlineItem {
// Add appends an outline item as a child of the current outline item. // Add appends an outline item as a child of the current outline item.
func (oi *OutlineItem) Add(item *OutlineItem) { func (oi *OutlineItem) Add(item *OutlineItem) {
oi.items = append(oi.items, item) oi.Entries = append(oi.Entries, item)
} }
// Insert adds an outline item as a child of the current outline item, // Insert adds an outline item as a child of the current outline item,
// at the specified index. // at the specified index.
func (oi *OutlineItem) Insert(index uint, item *OutlineItem) { func (oi *OutlineItem) Insert(index uint, item *OutlineItem) {
l := uint(len(oi.items)) l := uint(len(oi.Entries))
if index > l { if index > l {
index = l index = l
} }
oi.items = append(oi.items[:index], append([]*OutlineItem{item}, oi.items[index:]...)...) oi.Entries = append(oi.Entries[:index], append([]*OutlineItem{item}, oi.Entries[index:]...)...)
} }
// Items returns all children outline items. // Items returns all children outline items.
func (oi *OutlineItem) Items() []*OutlineItem { func (oi *OutlineItem) Items() []*OutlineItem {
return oi.items return oi.Entries
} }
// ToPdfOutlineItem returns a low level PdfOutlineItem object, // ToPdfOutlineItem returns a low level PdfOutlineItem object,
@ -159,7 +161,7 @@ func (oi *OutlineItem) ToPdfOutlineItem() (*PdfOutlineItem, int64) {
var lenDescendants int64 var lenDescendants int64
var prev *PdfOutlineItem var prev *PdfOutlineItem
for _, item := range oi.items { for _, item := range oi.Entries {
outlineItem, lenChildren := item.ToPdfOutlineItem() outlineItem, lenChildren := item.ToPdfOutlineItem()
outlineItem.Parent = &currItem.PdfOutlineTreeNode outlineItem.Parent = &currItem.PdfOutlineTreeNode