eBookReaderSwitch/docs/examples/pdf-dejpx.js

56 lines
1.3 KiB
JavaScript

// Find all JPEG-2000 images and turn them into regular images.
var doc = new PDFDocument(scriptArgs[0]);
function isJPXImage(ref) {
if ("Filter" in ref) {
var filter = ref.Filter;
if (filter == "JPXDecode")
return true;
if (filter.isArray())
for (var i = 0; i < filter.length; ++i)
if (filter[i] == "JPXDecode")
return true;
}
return false;
}
var i, n, ref;
var jpxList = {};
var smaskList = {};
// Preload and destroy all JPX images.
n = doc.countObjects();
for (i=1; i < n; ++i) {
ref = doc.newIndirect(i, 0);
if (isJPXImage(ref)) {
print("Loading JPX image:", i)
jpxList[i] = doc.loadImage(ref);
if ("SMask" in ref)
smaskList[i] = ref.SMask;
ref.writeObject(null); // make sure we don't reuse the JPX image resource
}
}
for (i in jpxList) {
ref = doc.newIndirect(i, 0);
var jpx = jpxList[i];
var pix = jpx.toPixmap();
var raw = new Image(pix);
// Create a new image, then copy the data to the old object, then delete it.
print("Decompressed image:", i);
var img = doc.addImage(raw);
if (i in smaskList)
img.SMask = smaskList[i];
ref.writeObject(img.resolve());
ref.writeRawStream(img.readRawStream());
doc.deleteObject(img);
// Invoke the GC to free intermediate pixmaps and images.
gc();
}
doc.save(scriptArgs[1], "compress,garbage=compact");