copy-outline.js 1.0 KB

123456789101112131415161718192021222324252627282930313233343536
  1. // Copy an outline from one document to another PDF file.
  2. // Can be used to transfer outlines when converting from another format into PDF.
  3. // Can also be used to change outlines to use page numbers instead of named destinations.
  4. if (scriptArgs.length != 3) {
  5. print("usage: mutool run copy-outline.js a.xps b.pdf output.pdf");
  6. quit();
  7. }
  8. function copy_outline_rec(cursor, input, list) {
  9. list.forEach(function (node) {
  10. var page = input.resolveLink(node.uri)
  11. cursor.insert({ title: node.title, uri: "#page=" + (page + 1) })
  12. if (node.down) {
  13. cursor.prev()
  14. cursor.down()
  15. copy_outline_rec(cursor, input, node.down)
  16. cursor.up()
  17. cursor.next()
  18. }
  19. })
  20. }
  21. function copy_outline(output, input, list) {
  22. var cursor = output.outlineIterator()
  23. while (cursor.item())
  24. cursor.delete()
  25. copy_outline_rec(cursor, input, list)
  26. }
  27. var input = mupdf.Document.openDocument(scriptArgs[0])
  28. var output = mupdf.Document.openDocument(scriptArgs[1])
  29. copy_outline(output, input, input.loadOutline())
  30. output.save(scriptArgs[2], "incremental");