/** * writes to the output * * @param output * @throws TaskIOException */ public void write(MultipleTaskOutput<?> output) throws TaskException { output.accept(outputWriter); }
@Override public void execute(UnpackParameters parameters) throws TaskException { int currentStep = 0; for (PdfSource<?> source : parameters.getSourceList()) { executionContext().assertTaskNotCancelled(); currentStep++; try { LOG.debug("Opening {}", source); sourceDocumentHandler = source.open(documentLoader); Map<String, PDComplexFileSpecification> names = new HashMap<>(); PDEmbeddedFilesNameTreeNode ef = ofNullable( sourceDocumentHandler.getUnderlyingPDDocument().getDocumentCatalog().getNames()) .map(n -> n.getEmbeddedFiles()).orElse(null); collectNamesVisitingTree(ef, names); Stream.concat(names.values().stream(), sourceDocumentHandler.getPages().stream() .flatMap(p -> p.getAnnotations().stream()).filter(a -> a instanceof PDAnnotationFileAttachment) .map(a -> (PDAnnotationFileAttachment) a).map(PDAnnotationFileAttachment::getFile) .filter(f -> f instanceof PDComplexFileSpecification).map(f -> (PDComplexFileSpecification) f)) .forEach(f -> unpack(f)); } finally { nullSafeCloseQuietly(sourceDocumentHandler); } notifyEvent(executionContext().notifiableTaskMetadata()).stepsCompleted(currentStep).outOf(totalSteps); } parameters.getOutput().accept(outputWriter); LOG.debug("Attachments unpacked and written to {}", parameters.getOutput()); }
@Override public void execute(UnpackParameters parameters) throws TaskException { int currentStep = 0; for (PdfSource<?> source : parameters.getSourceList()) { executionContext().assertTaskNotCancelled(); currentStep++; try { LOG.debug("Opening {}", source); sourceDocumentHandler = source.open(documentLoader); Map<String, PDComplexFileSpecification> names = new HashMap<>(); PDEmbeddedFilesNameTreeNode ef = ofNullable( sourceDocumentHandler.getUnderlyingPDDocument().getDocumentCatalog().getNames()) .map(n -> n.getEmbeddedFiles()).orElse(null); collectNamesVisitingTree(ef, names); Stream.concat(names.values().stream(), sourceDocumentHandler.getPages().stream() .flatMap(p -> p.getAnnotations().stream()).filter(a -> a instanceof PDAnnotationFileAttachment) .map(a -> (PDAnnotationFileAttachment) a).map(PDAnnotationFileAttachment::getFile) .filter(f -> f instanceof PDComplexFileSpecification).map(f -> (PDComplexFileSpecification) f)) .forEach(f -> unpack(f)); } finally { nullSafeCloseQuietly(sourceDocumentHandler); } notifyEvent(executionContext().notifiableTaskMetadata()).stepsCompleted(currentStep).outOf(totalSteps); } parameters.getOutput().accept(outputWriter); LOG.debug("Attachments unpacked and written to {}", parameters.getOutput()); }
public void split(NotifiableTaskMetadata taskMetadata) throws TaskException { nextOutputStrategy().ensureIsValid(); PdfCopier pdfCopier = null; try { int outputDocumentsCounter = 0; for (int page = 1; page <= totalPages; page++) { if (nextOutputStrategy().isOpening(page)) { LOG.debug("Starting split at page {} of the original document", page); outputDocumentsCounter++; pdfCopier = open(page, outputDocumentsCounter); } pdfCopier.addPage(reader, page); notifyEvent(taskMetadata).stepsCompleted(page).outOf(totalPages); if (nextOutputStrategy().isClosing(page) || page == totalPages) { LOG.trace("Adding bookmarks to the temporary buffer"); pdfCopier.setOutline(outlineSubsetProvider.getOutlineUntillPage(page)); nullSafeCloseQuietly(pdfCopier); LOG.debug("Ending split at page {} of the original document", page); } } } finally { nullSafeCloseQuietly(pdfCopier); } parameters.getOutput().accept(outputWriter); }
parameters.getOutput().accept(outputWriter); LOG.debug("OCR performed, text extracted and written to {}", parameters.getOutput());
public void execute(ViewerPreferencesParameters parameters) throws TaskException { int currentStep = 0; for (PdfSource<?> source : parameters.getSourceList()) { currentStep++; LOG.debug("Opening {} ", source); reader = source.open(sourceOpener); File tmpFile = createTemporaryPdfBuffer(); LOG.debug("Created output temporary buffer {} ", tmpFile); stamperHandler = new PdfStamperHandler(reader, tmpFile, parameters.getVersion()); stamperHandler.setCompressionOnStamper(parameters.isCompress()); stamperHandler.setCreatorOnStamper(reader); // set mode and layout stamperHandler.setViewerPreferencesOnStamper(preferences); // set other preferences for (Entry<PdfName, PdfObject> entry : configuredPreferences.entrySet()) { stamperHandler.addViewerPreferenceOnStamper(entry.getKey(), entry.getValue()); } nullSafeClosePdfReader(reader); nullSafeCloseQuietly(stamperHandler); String outName = nameGenerator(parameters.getOutputPrefix()).generate( nameRequest().originalName(source.getName()).fileNumber(currentStep)); outputWriter.addOutput(file(tmpFile).name(outName)); notifyEvent(getNotifiableTaskMetadata()).stepsCompleted(currentStep).outOf(totalSteps); } parameters.getOutput().accept(outputWriter); LOG.debug("Viewer preferences set on input documents and written to {}", parameters.getOutput()); }
parameters.getOutput().accept(outputWriter); LOG.debug("OCR performed, text extracted and written to {}", parameters.getOutput());
public void execute(DecryptParameters parameters) throws TaskException { int currentStep = 0; for (PdfSource<?> source : parameters.getSourceList()) { currentStep++; LOG.debug("Opening {} ", source); reader = source.open(sourceOpener); File tmpFile = createTemporaryPdfBuffer(); LOG.debug("Created output temporary buffer {} ", tmpFile); stamperHandler = new PdfStamperHandler(reader, tmpFile, parameters.getVersion()); stamperHandler.setCompressionOnStamper(parameters.isCompress()); stamperHandler.setCreatorOnStamper(reader); nullSafeClosePdfReader(reader); nullSafeCloseQuietly(stamperHandler); String outName = nameGenerator(parameters.getOutputPrefix()).generate( nameRequest().originalName(source.getName()).fileNumber(currentStep)); outputWriter.addOutput(file(tmpFile).name(outName)); notifyEvent(getNotifiableTaskMetadata()).stepsCompleted(currentStep).outOf(totalSteps); } parameters.getOutput().accept(outputWriter); LOG.debug("Input documents decrypted and written to {}", parameters.getOutput()); }
public void execute(EncryptParameters parameters) throws TaskException { int currentStep = 0; for (PdfSource<?> source : parameters.getSourceList()) { currentStep++; LOG.debug("Opening {} ", source); reader = source.open(sourceOpener); File tmpFile = createTemporaryPdfBuffer(); LOG.debug("Created output temporary buffer {} ", tmpFile); stamperHandler = new PdfStamperHandler(reader, tmpFile, parameters.getVersion()); stamperHandler.setCompressionOnStamper(parameters.isCompress()); stamperHandler.setCreatorOnStamper(reader); stamperHandler.setEncryptionOnStamper(getEncryptionAlgorithm(parameters.getEncryptionAlgorithm()), parameters.getUserPassword(), parameters.getOwnerPassword(), permissions); nullSafeClosePdfReader(reader); nullSafeCloseQuietly(stamperHandler); String outName = nameGenerator(parameters.getOutputPrefix()).generate( nameRequest().originalName(source.getName()).fileNumber(currentStep)); outputWriter.addOutput(file(tmpFile).name(outName)); notifyEvent(getNotifiableTaskMetadata()).stepsCompleted(currentStep).outOf(totalSteps); } parameters.getOutput().accept(outputWriter); LOG.debug("Input documents encrypted and written to {}", parameters.getOutput()); LOG.debug("Permissions {}", PdfEncryptor.getPermissionsVerbose(permissions)); }
public void execute(RotateParameters parameters) throws TaskException { int currentStep = 0; for (PdfSource<?> source : parameters.getSourceList()) { currentStep++; LOG.debug("Opening {} ", source); reader = source.open(sourceOpener); applyRotation(parameters.getRotation(), parameters.getPages(reader.getNumberOfPages())).to(reader); File tmpFile = createTemporaryPdfBuffer(); LOG.debug("Created output temporary buffer {} ", tmpFile); stamperHandler = new PdfStamperHandler(reader, tmpFile, parameters.getVersion()); stamperHandler.setCompressionOnStamper(parameters.isCompress()); stamperHandler.setCreatorOnStamper(reader); nullSafeClosePdfReader(reader); nullSafeCloseQuietly(stamperHandler); String outName = nameGenerator(parameters.getOutputPrefix()).generate( nameRequest().originalName(source.getName()).fileNumber(currentStep)); outputWriter.addOutput(file(tmpFile).name(outName)); notifyEvent(getNotifiableTaskMetadata()).stepsCompleted(currentStep).outOf(totalSteps); } parameters.getOutput().accept(outputWriter); LOG.debug("Input documents rotated and written to {}", parameters.getOutput()); }