ArtifexSoftware / mupdf.js

JavaScript bindings for MuPDF
https://mupdfjs.readthedocs.io
GNU Affero General Public License v3.0
318 stars 17 forks source link

Outline Iterator Object "open" property not working #92

Open King-of-Infinite-Space opened 3 weeks ago

King-of-Infinite-Space commented 3 weeks ago

Hi devs, I want to add outlines that by default show first two levels and fold sub-levels.

I noticed two issues:

  1. After inserting the outline item, property open always prints false.
  2. Despite what is set and what is printed, the saved file always have all outlines unfolded.

const outlineIterator = doc.outlineIterator()

outlineIterator.insert({
  title: '1',
  open: true,
  uri: doc.formatLinkURI({
    page: 1,
    type: 'XYZ'
  }),
})

outlineIterator.prev()
console.log(outlineIterator.item())
// always prints "open: false"

outlineIterator.down()

outlineIterator.insert({
  title: '1.1',
  open: false,
  uri: doc.formatLinkURI({
    page: 1,
    type: 'XYZ'
  }),
})

outlineIterator.prev()
console.log(outlineIterator.item())

outlineIterator.down()

outlineIterator.insert({
  title: '1.1.1',
  open: false,
  uri: doc.formatLinkURI({
    page: 1,
    type: 'XYZ'
  }),
})

fs.writeFileSync('output.pdf', doc.saveToBuffer().asUint8Array())
const doc_output = mupdf.Document.openDocument(fs.readFileSync('output.pdf'), 'application/pdf')
for (const item of doc_output.loadOutline()) {
  console.log(item)
  // for all foldable items, open: true 
}