private void setUpParametersWithOutline() { parameters = new AddBackPagesParameters(); parameters.setExistingOutputPolicy(ExistingOutputPolicy.OVERWRITE); parameters.setCompress(true); parameters.setVersion(PdfVersion.VERSION_1_6); parameters.addSource(largeOutlineInput()); parameters.setBackPagesSource(encryptedInput()); parameters.addPageRange(new PageRange(1, 1)); }
@Override public boolean equals(Object other) { if (this == other) { return true; } if (!(other instanceof AddBackPagesParameters)) { return false; } AddBackPagesParameters parameter = (AddBackPagesParameters) other; return new EqualsBuilder().appendSuper(super.equals(other)) .append(backPagesSource, parameter.getBackPagesSource()).append(pageSelection, parameter.pageSelection) .append(step, parameter.step).isEquals(); } }
/** * @param totalNumberOfPage * the number of pages of the document (upper limit). * @return the selected set of pages. Iteration ordering is predictable, it is the order in which elements were inserted into the {@link PageRange} set. * @see PagesSelection#getPages(int) */ @Override public Set<Integer> getPages(int totalNumberOfPage) { if (pageSelection.isEmpty()) { return new PageRange(1).getPages(totalNumberOfPage); } Set<Integer> retSet = new NullSafeSet<Integer>(); for (PageRange range : getPageSelection()) { retSet.addAll(range.getPages(totalNumberOfPage)); } return retSet; }
@Test public void testEquals() { AddBackPagesParameters eq1 = new AddBackPagesParameters(); AddBackPagesParameters eq2 = new AddBackPagesParameters(); AddBackPagesParameters eq3 = new AddBackPagesParameters(); AddBackPagesParameters diff = new AddBackPagesParameters(); diff.addPageRange(new PageRange(12)); TestUtils.testEqualsAndHashCodes(eq1, eq2, eq3, diff); }
@Test public void getPagesRange() { AddBackPagesParameters victim = new AddBackPagesParameters(); victim.addPageRange(new PageRange(2, 5)); assertEquals(4, victim.getPages(10).size()); } }
@Override public void execute(AddBackPagesParameters parameters) throws TaskException { LOG.debug("Opening back pages source {}", parameters.getBackPagesSource()); backPagesSource = parameters.getBackPagesSource().open(documentLoader); List<PDPage> back = parameters.getPages(backPagesSource.getNumberOfPages()).stream() .map(p -> backPagesSource.getPage(p)).collect(Collectors.toList()); if (back.size() <= 0) { for (PdfSource<?> source : parameters.getSourceList()) { executionContext().assertTaskNotCancelled(); this.destinationDocument.setVersionOnPDDocument(parameters.getVersion()); this.destinationDocument.setCompress(parameters.isCompress()); File tmpFile = createTemporaryBuffer(parameters.getOutput()); LOG.debug("Created output on temporary buffer {}", tmpFile); pagesLookup.addLookupEntry(current, destinationDocument.importPage(current)); pageCounter++; if (pageCounter % parameters.getStep() == 0) { back.forEach(p -> destinationDocument.importPage(p)); String outName = nameGenerator(parameters.getOutputPrefix()) .generate(nameRequest().originalName(source.getName()).fileNumber(currentStep)); outputWriter.addOutput(file(tmpFile).name(outName)); parameters.getOutput().accept(outputWriter); LOG.debug("Back pages added after every {} pages to {} input documents and written to {}", parameters.getStep(), parameters.getSourceList().size(), parameters.getOutput());
@Override public AddBackPagesParameters toTaskParameters(AddBackPagesTaskCliArguments taskCliArguments) { AddBackPagesParameters parameters = new AddBackPagesParameters(); populateAbstractParameters(parameters, taskCliArguments); populateSourceParameters(parameters, taskCliArguments); populateOutputTaskParameters(parameters, taskCliArguments); populateOutputPrefix(parameters, taskCliArguments); if (taskCliArguments.isPageSelection()) { parameters.addAllPageRanges(taskCliArguments.getPageSelection().getPageRangeSet()); } parameters.setStep(taskCliArguments.getStep()); if (taskCliArguments.getBackPagesSource().size() != 1) { throw new ArgumentValidationException( "Only one back pages file expected, received " + taskCliArguments.getFiles().size()); } parameters.setBackPagesSource(taskCliArguments.getBackPagesSource().get(0).getPdfFileSource()); return parameters; }
@Test public void testInvalidParametersEmptySourceList() throws IOException { AddBackPagesParameters victim = new AddBackPagesParameters(); victim.addPageRange(new PageRange(2)); victim.setBackPagesSource(PdfFileSource.newInstanceNoPassword(folder.newFile("source.pdf"))); victim.setOutput(new FileOrDirectoryTaskOutput(folder.newFolder())); TestUtils.assertInvalidParameters(victim); }
@Test public void getPagesEmptyRange() { AddBackPagesParameters victim = new AddBackPagesParameters(); assertEquals(10, victim.getPages(10).size()); }
@Test public void testOutputPrefix_Default() { AddBackPagesParameters parameters = defaultCommandLine().invokeSejdaConsole(); assertEquals("", parameters.getOutputPrefix()); }
@Test public void step_3() { AddBackPagesParameters parameters = defaultCommandLine().with("-n", "3").invokeSejdaConsole(); assertEquals(3, parameters.getStep()); } }
@Override public void execute(AddBackPagesParameters parameters) throws TaskException { LOG.debug("Opening back pages source {}", parameters.getBackPagesSource()); backPagesSource = parameters.getBackPagesSource().open(documentLoader); List<PDPage> back = parameters.getPages(backPagesSource.getNumberOfPages()).stream() .map(p -> backPagesSource.getPage(p)).collect(Collectors.toList()); if (back.size() <= 0) { for (PdfSource<?> source : parameters.getSourceList()) { executionContext().assertTaskNotCancelled(); this.destinationDocument.setVersionOnPDDocument(parameters.getVersion()); this.destinationDocument.setCompress(parameters.isCompress()); File tmpFile = createTemporaryBuffer(parameters.getOutput()); LOG.debug("Created output on temporary buffer {}", tmpFile); pagesLookup.addLookupEntry(current, destinationDocument.importPage(current)); pageCounter++; if (pageCounter % parameters.getStep() == 0) { back.forEach(p -> destinationDocument.importPage(p)); String outName = nameGenerator(parameters.getOutputPrefix()) .generate(nameRequest().originalName(source.getName()).fileNumber(currentStep)); outputWriter.addOutput(file(tmpFile).name(outName)); parameters.getOutput().accept(outputWriter); LOG.debug("Back pages added after every {} pages to {} input documents and written to {}", parameters.getStep(), parameters.getSourceList().size(), parameters.getOutput());
@Test public void testOutputPrefix_Specified() { AddBackPagesParameters parameters = defaultCommandLine().with("-p", "fooPrefix").invokeSejdaConsole(); assertEquals("fooPrefix", parameters.getOutputPrefix()); }
private void setUpParametersWithForms() { parameters = new AddBackPagesParameters(); parameters.setExistingOutputPolicy(ExistingOutputPolicy.OVERWRITE); parameters.setCompress(true); parameters.setVersion(PdfVersion.VERSION_1_6); parameters.addSource(customInput("pdf/forms/two_pages_form.pdf")); parameters.setBackPagesSource(encryptedInput()); parameters.addPageRange(new PageRange(1, 1)); }
/** * @param totalNumberOfPage * the number of pages of the document (upper limit). * @return the selected set of pages. Iteration ordering is predictable, it is the order in which elements were inserted into the {@link PageRange} set. * @see PagesSelection#getPages(int) */ @Override public Set<Integer> getPages(int totalNumberOfPage) { if (pageSelection.isEmpty()) { return new PageRange(1).getPages(totalNumberOfPage); } Set<Integer> retSet = new NullSafeSet<Integer>(); for (PageRange range : getPageSelection()) { retSet.addAll(range.getPages(totalNumberOfPage)); } return retSet; }
@Override public boolean equals(Object other) { if (this == other) { return true; } if (!(other instanceof AddBackPagesParameters)) { return false; } AddBackPagesParameters parameter = (AddBackPagesParameters) other; return new EqualsBuilder().appendSuper(super.equals(other)) .append(backPagesSource, parameter.getBackPagesSource()).append(pageSelection, parameter.pageSelection) .append(step, parameter.step).isEquals(); } }
private void setUpParametersBackPageToEveryPage() { parameters = new AddBackPagesParameters(); parameters.setExistingOutputPolicy(ExistingOutputPolicy.OVERWRITE); parameters.setCompress(true); parameters.setVersion(PdfVersion.VERSION_1_6); parameters.addSource(shortInput()); parameters.setBackPagesSource(encryptedInput()); parameters.addPageRange(new PageRange(1, 1)); }
@Test public void pageRange_combined() { AddBackPagesParameters parameters = defaultCommandLine().with("-s", "3,5,8-10,2,2,9-9,30-") .invokeSejdaConsole(); assertContainsAll(parameters.getPageSelection(), Arrays.asList(new PageRange(3, 3), new PageRange(5, 5), new PageRange(8, 10), new PageRange(2, 2), new PageRange(9, 9), new PageRange(30))); }
private void setUpParametersMultipleEncryptedInput() { parameters = new AddBackPagesParameters(); parameters.setExistingOutputPolicy(ExistingOutputPolicy.OVERWRITE); parameters.setCompress(true); parameters.setVersion(PdfVersion.VERSION_1_6); parameters.addSource(encryptedInput()); parameters.addSource(stronglyEncryptedInput()); parameters.setBackPagesSource(mediumInput()); parameters.addPageRange(new PageRange(2, 2)); parameters.addPageRange(new PageRange(5, 6)); parameters.setStep(2); }