@Override public SplitByOutlineLevelParameters build() { SplitByOutlineLevelParameters params = new SplitByOutlineLevelParameters(level); params.setCompress(isCompress()); params.setExistingOutputPolicy(existingOutput()); params.setVersion(getVersion()); params.setMatchingTitleRegEx(regexp); params.setOutput(getOutput()); params.setOutputPrefix(getPrefix()); params.addSource(getSource()); params.setOptimizationPolicy(getOptimizationPolicy()); params.discardOutline(isDiscardBookmarks()); return params; } }
@Override public boolean equals(Object other) { if (this == other) { return true; } if (!(other instanceof SplitByOutlineLevelParameters)) { return false; } SplitByOutlineLevelParameters parameter = (SplitByOutlineLevelParameters) other; return new EqualsBuilder().appendSuper(super.equals(other)) .append(optimizationPolicy, parameter.getOptimizationPolicy()) .append(discardOutline, parameter.discardOutline()) .append(levelToSplitAt, parameter.getLevelToSplitAt()) .append(matchingTitleRegEx, parameter.getMatchingTitleRegEx()).isEquals(); }
@Override public void execute(SplitByOutlineLevelParameters parameters) throws TaskException { int currentStep = 0; for (PdfSource<?> source : parameters.getSourceList()) { executionContext().assertTaskNotCancelled(); currentStep++; LOG.debug("Opening {} ", source); document = source.open(documentLoader).getUnderlyingPDDocument(); LOG.debug("Retrieving outline information for level {}", parameters.getLevelToSplitAt()); OutlinePageDestinations pagesDestination = new SamboxOutlineLevelsHandler(document, parameters.getMatchingTitleRegEx()).getPageDestinationsForLevel(parameters.getLevelToSplitAt()); splitter = new PageDestinationsLevelPdfSplitter(document, parameters, pagesDestination, new OptimizationRuler(parameters.getOptimizationPolicy()).apply(document)); LOG.debug("Starting split by outline level for {} ", parameters); splitter.split(executionContext(), parameters.getOutputPrefix(), source); nullSafeCloseQuietly(document); notifyEvent(executionContext().notifiableTaskMetadata()).stepsCompleted(currentStep).outOf(totalSteps); } LOG.debug("Input documents splitted and written to {}", parameters.getOutput()); }
private SplitByOutlineLevelParameters setUpParameters(int level, String regEx) throws IOException { SplitByOutlineLevelParameters parameters = new SplitByOutlineLevelParameters(level); parameters.setMatchingTitleRegEx(regEx); parameters.setCompress(true); parameters.setVersion(PdfVersion.VERSION_1_6); parameters.addSource(customInput("pdf/bigger_outline_test.pdf")); parameters.setExistingOutputPolicy(ExistingOutputPolicy.OVERWRITE); testContext.directoryOutputTo(parameters); return parameters; }
@Test public void testEquals() { SplitByOutlineLevelParameters eq1 = new SplitByOutlineLevelParameters(10); SplitByOutlineLevelParameters eq2 = new SplitByOutlineLevelParameters(10); SplitByOutlineLevelParameters eq3 = new SplitByOutlineLevelParameters(10); SplitByOutlineLevelParameters diff = new SplitByOutlineLevelParameters(1); diff.setOutputPrefix("prefix"); diff.setMatchingTitleRegEx("string"); diff.setOptimizationPolicy(OptimizationPolicy.AUTO); TestUtils.testEqualsAndHashCodes(eq1, eq2, eq3, diff); }
public void execute(SplitByOutlineLevelParameters parameters) throws TaskException { LOG.debug("Opening {} ", parameters.getSource()); reader = parameters.getSource().open(sourceOpener); LOG.debug("Retrieving outline information for level {}", parameters.getLevelToSplitAt()); OutlinePageDestinations goToPagesDestination = new ITextOutlineLevelsHandler(reader, parameters.getMatchingTitleRegEx()) .getPageDestinationsForLevel(parameters.getLevelToSplitAt()); splitter = new PageDestinationsLevelPdfSplitter(reader, parameters, goToPagesDestination); LOG.debug("Starting split by outline level for {} ", parameters); splitter.split(getNotifiableTaskMetadata()); LOG.debug("Input documents splitted and written to {}", parameters.getOutput()); }
/** * @param document * the document to split. * @param parameters * @param outlineDestinations * holder for the outline destinations the splitter has to split at. */ public PageDestinationsLevelPdfSplitter(PDDocument document, SplitByOutlineLevelParameters parameters, OutlinePageDestinations outlineDestinations, boolean optimize) { super(document, parameters, optimize, parameters.discardOutline()); this.splitPages = new PageDestinationsSplitPages(outlineDestinations); this.outlineDestinations = outlineDestinations; }
@Test public void testInvalidParameters() { SplitByOutlineLevelParameters victim = new SplitByOutlineLevelParameters(-1); SingleOrMultipleTaskOutput output = mock(SingleOrMultipleTaskOutput.class); victim.setOutput(output); InputStream stream = mock(InputStream.class); PdfSource<InputStream> input = PdfStreamSource.newInstanceNoPassword(stream, "name"); victim.addSource(input); TestUtils.assertInvalidParameters(victim); } }
/** * Transforms {@link SplitByBookmarksTaskCliArguments} to {@link SplitByOutlineLevelParameters} * * @param taskCliArguments * @return populated task parameters */ @Override public SplitByOutlineLevelParameters toTaskParameters(SplitByBookmarksTaskCliArguments taskCliArguments) { SplitByOutlineLevelParameters parameters = new SplitByOutlineLevelParameters( taskCliArguments.getBookmarkLevel()); if (taskCliArguments.isMatchingRegEx()) { parameters.setMatchingTitleRegEx(taskCliArguments.getMatchingRegEx()); } populateAbstractParameters(parameters, taskCliArguments); populateSourceParameters(parameters, taskCliArguments); populateOutputTaskParameters(parameters, taskCliArguments); populateOutputPrefix(parameters, taskCliArguments); populateOptimizableOutputParameters(parameters, taskCliArguments); populateDiscardableOutlineParameters(parameters, taskCliArguments); return parameters; } }
@Test public void matchingRegExp_Specified() { SplitByOutlineLevelParameters parameters = defaultCommandLine().with("--matchingRegEx", "[Chapter*]") .invokeSejdaConsole(); assertEquals("[Chapter*]", parameters.getMatchingTitleRegEx()); }
@Test public void bookmarksLevel_Specified() { SplitByOutlineLevelParameters parameters = defaultCommandLine().with("-l", "3").invokeSejdaConsole(); assertEquals(3, parameters.getLevelToSplitAt()); }
@Test public void optimizedYes() { SplitByOutlineLevelParameters parameters = defaultCommandLine().with("-z", "yes").invokeSejdaConsole(); assertEquals(OptimizationPolicy.YES, parameters.getOptimizationPolicy()); }
@Override public boolean equals(Object other) { if (this == other) { return true; } if (!(other instanceof SplitByOutlineLevelParameters)) { return false; } SplitByOutlineLevelParameters parameter = (SplitByOutlineLevelParameters) other; return new EqualsBuilder().appendSuper(super.equals(other)) .append(optimizationPolicy, parameter.getOptimizationPolicy()) .append(discardOutline, parameter.discardOutline()) .append(levelToSplitAt, parameter.getLevelToSplitAt()) .append(matchingTitleRegEx, parameter.getMatchingTitleRegEx()).isEquals(); }
@Override public void execute(SplitByOutlineLevelParameters parameters) throws TaskException { int currentStep = 0; for (PdfSource<?> source : parameters.getSourceList()) { executionContext().assertTaskNotCancelled(); currentStep++; LOG.debug("Opening {} ", source); document = source.open(documentLoader).getUnderlyingPDDocument(); LOG.debug("Retrieving outline information for level {}", parameters.getLevelToSplitAt()); OutlinePageDestinations pagesDestination = new SamboxOutlineLevelsHandler(document, parameters.getMatchingTitleRegEx()).getPageDestinationsForLevel(parameters.getLevelToSplitAt()); splitter = new PageDestinationsLevelPdfSplitter(document, parameters, pagesDestination, new OptimizationRuler(parameters.getOptimizationPolicy()).apply(document)); LOG.debug("Starting split by outline level for {} ", parameters); splitter.split(executionContext(), parameters.getOutputPrefix(), source); nullSafeCloseQuietly(document); notifyEvent(executionContext().notifiableTaskMetadata()).stepsCompleted(currentStep).outOf(totalSteps); } LOG.debug("Input documents splitted and written to {}", parameters.getOutput()); }
/** * @param document * the document to split. * @param parameters * @param outlineDestinations * holder for the outline destinations the splitter has to split at. */ public PageDestinationsLevelPdfSplitter(PDDocument document, SplitByOutlineLevelParameters parameters, OutlinePageDestinations outlineDestinations, boolean optimize) { super(document, parameters, optimize, parameters.discardOutline()); this.splitPages = new PageDestinationsSplitPages(outlineDestinations); this.outlineDestinations = outlineDestinations; }
@Test public void dontDiscardOutline() { SplitByOutlineLevelParameters parameters = defaultCommandLine().invokeSejdaConsole(); assertFalse(parameters.discardOutline()); } }
@Test public void discardOutline() { SplitByOutlineLevelParameters parameters = defaultCommandLine().withFlag("--discardOutline") .invokeSejdaConsole(); assertTrue(parameters.discardOutline()); }
@Test public void testExecuteLevel2DiscardOutline() throws IOException { SplitByOutlineLevelParameters parameters = setUpParameters(2, null); parameters.discardOutline(true); execute(parameters); testContext.assertTaskCompleted(); testContext.assertOutputSize(3).forEachPdfOutput(d -> { assertTrue(isNull(d.getDocumentCatalog().getDocumentOutline())); }); }