package de.ralfebert.imageassert.pageimage; import java.io.File; import java.io.FilenameFilter; import java.util.Arrays; import org.apache.commons.io.FilenameUtils; import org.apache.commons.io.filefilter.WildcardFileFilter; import de.ralfebert.imageassert.compare.Page; import de.ralfebert.imageassert.utils.TemporaryFolder; import de.ralfebert.imageassert.utils.UnixLauncher; /** * Converts a PDF to separate page images by calling convert from the * ImageMagick suite. * * @author Ralf Ebert */ public class ImageMagickSplitter implements IPdfImageSplitter { private final UnixLauncher launcher = new UnixLauncher(); private int dpi = 150; private TemporaryFolder temporaryFolder; public Page[] convert(File pdf) { String src = pdf.getAbsolutePath(); String dest = src.replaceAll(".pdf$", ".png"); ProcessBuilder convertProcess = new ProcessBuilder("convert", "-density", String.valueOf(dpi), src, "-resize", "700x", dest); launcher.launch(convertProcess); String wildcard = FilenameUtils.getBaseName(pdf.getAbsolutePath()) + "*.png"; File[] pngFiles = temporaryFolder.getFolder().listFiles( (FilenameFilter) new WildcardFileFilter(wildcard)); Arrays.sort(pngFiles); Page[] pages = new Page[pngFiles.length]; for (int i = 0; i < pages.length; i++) { pages[i] = new Page(pngFiles[i], pdf); } return pages; } public void setDpi(int dpi) { this.dpi = dpi; } public void setTemporaryFolder(TemporaryFolder temporaryFolder) { this.temporaryFolder = temporaryFolder; } }