public void execute(ExtractPagesParameters parameters) throws TaskException { File tmpFile = createTemporaryPdfBuffer(); LOG.debug("Created output temporary buffer {} ", tmpFile); LOG.debug("Opening input {} ", parameters.getSource()); reader = parameters.getSource().open(sourceOpener); Set<Integer> pages = parameters.getPages(reader.getNumberOfPages()); if (pages == null || pages.isEmpty()) { throw new TaskExecutionException("No page has been selected for extraction."); } copier = new DefaultPdfCopier(reader, tmpFile, parameters.getVersion()); copier.setCompression(parameters.isCompress()); LOG.trace("Created DefaultPdfCopier"); int currentStep = 0; for (Integer page : pages) { LOG.trace("Adding page {}", page); copier.addPage(reader, page); notifyEvent(getNotifiableTaskMetadata()).stepsCompleted(++currentStep).outOf(pages.size()); } copier.freeReader(reader); closeResources(); outputWriter.setOutput(file(tmpFile).name(parameters.getOutputName())); parameters.getOutput().accept(outputWriter); LOG.debug("Pages extracted and written to {}", parameters.getOutput()); }