pdf-merge.js 1.2 KB

123456789101112131415161718192021222324252627282930313233343536
  1. // A re-implementation of "mutool merge" in JavaScript.
  2. function copyPage(dstDoc, srcDoc, pageNumber, dstFromSrc) {
  3. var srcPage, dstPage
  4. srcPage = srcDoc.findPage(pageNumber)
  5. dstPage = dstDoc.newDictionary()
  6. dstPage.Type = dstDoc.newName("Page")
  7. if (srcPage.MediaBox) dstPage.MediaBox = dstFromSrc.graftObject(srcPage.MediaBox)
  8. if (srcPage.Rotate) dstPage.Rotate = dstFromSrc.graftObject(srcPage.Rotate)
  9. if (srcPage.Resources) dstPage.Resources = dstFromSrc.graftObject(srcPage.Resources)
  10. if (srcPage.Contents) dstPage.Contents = dstFromSrc.graftObject(srcPage.Contents)
  11. dstDoc.insertPage(-1, dstDoc.addObject(dstPage))
  12. }
  13. function copyAllPages(dstDoc, srcDoc) {
  14. var dstFromSrc = dstDoc.newGraftMap()
  15. var k, n = srcDoc.countPages()
  16. for (k = 0; k < n; ++k)
  17. copyPage(dstDoc, srcDoc, k, dstFromSrc)
  18. }
  19. function pdfmerge() {
  20. var srcDoc, dstDoc, i
  21. dstDoc = new PDFDocument()
  22. for (i = 1; i < scriptArgs.length; ++i) {
  23. srcDoc = Document.openDocument(scriptArgs[i])
  24. copyAllPages(dstDoc, srcDoc)
  25. }
  26. dstDoc.save(scriptArgs[0], "compress")
  27. }
  28. if (scriptArgs.length < 2)
  29. print("usage: mutool run pdf-merge.js output.pdf input1.pdf input2.pdf ...")
  30. else
  31. pdfmerge()