app/redact/ImageRedactor.scala (24 lines of code) (raw):

package redact import scala.jdk.CollectionConverters._ import org.apache.pdfbox.pdmodel.graphics.form.PDFormXObject import org.apache.pdfbox.pdmodel.{PDDocument, PDResources} import org.apache.pdfbox.pdmodel.graphics.image.PDImageXObject object ImageRedactor { def redactImages(document: PDDocument): Unit = { document.getPages.iterator().asScala.foreach { page => replaceImageObjects(page.getResources, document) } } private def replaceImageObjects(resources: PDResources, document: PDDocument): Unit = { resources.getXObjectNames.iterator().asScala.foreach { name => resources.getXObject(name) match { case image: PDImageXObject => resources.put(name, Image.placeholder(image.getWidth, image.getHeight, document)) case form: PDFormXObject => Option(form.getResources).foreach { resources => replaceImageObjects(resources, document) } } } } }