diff mupdf-source/docs/examples/pdf-merge.js @ 2:b50eed0cc0ef upstream

ADD: MuPDF v1.26.7: the MuPDF source as downloaded by a default build of PyMuPDF 1.26.4. The directory name has changed: no version number in the expanded directory now.
author Franz Glasner <fzglas.hg@dom66.de>
date Mon, 15 Sep 2025 11:43:07 +0200
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mupdf-source/docs/examples/pdf-merge.js	Mon Sep 15 11:43:07 2025 +0200
@@ -0,0 +1,38 @@
+// A re-implementation of "mutool merge" in JavaScript.
+
+import * as mupdf from "mupdf"
+
+function copyPage(dstDoc, srcDoc, pageNumber, dstFromSrc) {
+	var srcPage, dstPage
+	srcPage = srcDoc.findPage(pageNumber)
+	dstPage = dstDoc.newDictionary()
+	dstPage.Type = dstDoc.newName("Page")
+	if (srcPage.MediaBox) dstPage.MediaBox = dstFromSrc.graftObject(srcPage.MediaBox)
+	if (srcPage.Rotate) dstPage.Rotate = dstFromSrc.graftObject(srcPage.Rotate)
+	if (srcPage.Resources) dstPage.Resources = dstFromSrc.graftObject(srcPage.Resources)
+	if (srcPage.Contents) dstPage.Contents = dstFromSrc.graftObject(srcPage.Contents)
+	dstDoc.insertPage(-1, dstDoc.addObject(dstPage))
+}
+
+function copyAllPages(dstDoc, srcDoc) {
+	var dstFromSrc = dstDoc.newGraftMap()
+	var k, n = srcDoc.countPages()
+	for (k = 0; k < n; ++k)
+		copyPage(dstDoc, srcDoc, k, dstFromSrc)
+}
+
+function pdfmerge() {
+	var srcDoc, dstDoc, i
+
+	dstDoc = new mupdf.PDFDocument()
+	for (i = 3; i < process.argv.length; ++i) {
+		srcDoc = mupdf.Document.openDocument(process.argv[i])
+		copyAllPages(dstDoc, srcDoc)
+	}
+	dstDoc.save(process.argv[2], "compress")
+}
+
+if (process.argv.length < 4)
+	print("usage: mutool run pdf-merge.js output.pdf input1.pdf input2.pdf ...")
+else
+	pdfmerge()