@Override public SplitBySizeParameters build() { SplitBySizeParameters params = new SplitBySizeParameters(size); params.setCompress(isCompress()); params.setExistingOutputPolicy(existingOutput()); params.setVersion(getVersion()); params.setOutput(getOutput()); params.setOutputPrefix(getPrefix()); params.addSource(getSource()); params.setOptimizationPolicy(getOptimizationPolicy()); params.discardOutline(isDiscardBookmarks()); return params; } }
@Test public void testExecute() throws IOException { parameters = new SplitBySizeParameters(100000); parameters.setCompress(true); parameters.setVersion(PdfVersion.VERSION_1_6); parameters.addSource(mediumInput()); parameters.setExistingOutputPolicy(ExistingOutputPolicy.OVERWRITE); testContext.directoryOutputTo(parameters); execute(parameters); testContext.assertTaskCompleted(); testContext.assertOutputSize(4); }
@Override public void execute(SplitBySizeParameters parameters) throws TaskException { int currentStep = 0; for (PdfSource<?> source : parameters.getSourceList()) { executionContext().assertTaskNotCancelled(); currentStep++; LOG.debug("Opening {}", source); document = source.open(documentLoader).getUnderlyingPDDocument(); splitter = new SizePdfSplitter(document, parameters, new OptimizationRuler(parameters.getOptimizationPolicy()).apply(document)); LOG.debug("Starting split by size {}", HumanReadableSize.toString(parameters.getSizeToSplitAt())); splitter.split(executionContext(), parameters.getOutputPrefix(), source); notifyEvent(executionContext().notifiableTaskMetadata()).stepsCompleted(currentStep).outOf(totalSteps); } LOG.debug("Input documents rotated and written to {}", parameters.getOutput()); }
@Override public boolean equals(Object other) { if (this == other) { return true; } if (!(other instanceof SplitBySizeParameters)) { return false; } SplitBySizeParameters parameter = (SplitBySizeParameters) other; return new EqualsBuilder().appendSuper(super.equals(other)) .append(optimizationPolicy, parameter.getOptimizationPolicy()) .append(sizeToSplitAt, parameter.getSizeToSplitAt()).append(discardOutline, parameter.discardOutline) .isEquals(); } }
@Test public void testInvalidParameters() { SplitBySizeParameters victim = new SplitBySizeParameters(-10); 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); } }
public void execute(SplitBySizeParameters parameters) throws TaskException { LOG.debug("Opening {} ", parameters.getSource()); reader = parameters.getSource().open(sourceOpener); splitter = new SizePdfSplitter(reader, parameters); LOG.debug("Starting split by size {} bytes", parameters.getSizeToSplitAt()); splitter.split(getNotifiableTaskMetadata()); LOG.debug("Input documents splitted and written to {}", parameters.getOutput()); }
@Test public void testEquals() { SplitBySizeParameters eq1 = new SplitBySizeParameters(10); SplitBySizeParameters eq2 = new SplitBySizeParameters(10); SplitBySizeParameters eq3 = new SplitBySizeParameters(10); SplitBySizeParameters diff = new SplitBySizeParameters(100); diff.setOutputPrefix("prefix"); TestUtils.testEqualsAndHashCodes(eq1, eq2, eq3, diff); }
OutputSizeStrategy(PDDocument document, SplitBySizeParameters parameters, boolean optimize) { this.sizeLimit = parameters.getSizeToSplitAt(); this.document = document; this.copier = new PageCopier(optimize); if (parameters.isCompress()) { predictorSupplier = () -> { return ExistingPagesSizePredictor.instance(WriteOption.COMPRESS_STREAMS, WriteOption.XREF_STREAM); }; } }
public SizePdfSplitter(PDDocument document, SplitBySizeParameters parameters, boolean optimize) { super(document, parameters, optimize, parameters.discardOutline()); this.nextOutputStrategy = new OutputSizeStrategy(document, parameters, optimize); }
public SizePdfSplitter(PdfReader reader, SplitBySizeParameters parameters) { super(reader, parameters); nextOutputStrategy = new OutputSizeStrategy(parameters.getSizeToSplitAt()); }
/** * Transforms {@link SplitBySizeTaskCliArguments} to {@link SplitBySizeParameters} * * @param taskCliArguments * @return populated task parameters */ @Override public SplitBySizeParameters toTaskParameters(SplitBySizeTaskCliArguments taskCliArguments) { SplitBySizeParameters parameters = new SplitBySizeParameters(taskCliArguments.getSize()); populateAbstractParameters(parameters, taskCliArguments); populateSourceParameters(parameters, taskCliArguments); populateOutputTaskParameters(parameters, taskCliArguments); populateOutputPrefix(parameters, taskCliArguments); populateOptimizableOutputParameters(parameters, taskCliArguments); populateDiscardableOutlineParameters(parameters, taskCliArguments); return parameters; } }
@Test public void optimizedYes() { SplitBySizeParameters parameters = defaultCommandLine().with("-z", "yes").invokeSejdaConsole(); assertEquals(OptimizationPolicy.YES, parameters.getOptimizationPolicy()); }
@Test public void batchMode() throws IOException { parameters = new SplitBySizeParameters(100000); parameters.setCompress(true); parameters.setVersion(PdfVersion.VERSION_1_6); parameters.addSource(mediumInput()); parameters.addSource(regularInput()); parameters.setExistingOutputPolicy(ExistingOutputPolicy.OVERWRITE); parameters.setOutputPrefix("[FILENUMBER]-[BASENAME]"); testContext.directoryOutputTo(parameters); execute(parameters); testContext.assertTaskCompleted(); testContext.assertOutputSize(5); testContext.assertOutputContainsFilenames("1-medium-test-file.pdf", "2-medium-test-file.pdf", "3-medium-test-file.pdf", "4-medium-test-file.pdf","5-test-file.pdf"); }
@Override public void execute(SplitBySizeParameters parameters) throws TaskException { int currentStep = 0; for (PdfSource<?> source : parameters.getSourceList()) { executionContext().assertTaskNotCancelled(); currentStep++; LOG.debug("Opening {}", source); document = source.open(documentLoader).getUnderlyingPDDocument(); splitter = new SizePdfSplitter(document, parameters, new OptimizationRuler(parameters.getOptimizationPolicy()).apply(document)); LOG.debug("Starting split by size {}", HumanReadableSize.toString(parameters.getSizeToSplitAt())); splitter.split(executionContext(), parameters.getOutputPrefix(), source); notifyEvent(executionContext().notifiableTaskMetadata()).stepsCompleted(currentStep).outOf(totalSteps); } LOG.debug("Input documents rotated and written to {}", parameters.getOutput()); }
@Override public boolean equals(Object other) { if (this == other) { return true; } if (!(other instanceof SplitBySizeParameters)) { return false; } SplitBySizeParameters parameter = (SplitBySizeParameters) other; return new EqualsBuilder().appendSuper(super.equals(other)) .append(optimizationPolicy, parameter.getOptimizationPolicy()) .append(sizeToSplitAt, parameter.getSizeToSplitAt()).append(discardOutline, parameter.discardOutline) .isEquals(); } }
OutputSizeStrategy(PDDocument document, SplitBySizeParameters parameters, boolean optimize) { this.sizeLimit = parameters.getSizeToSplitAt(); this.document = document; this.copier = new PageCopier(optimize); if (parameters.isCompress()) { predictorSupplier = () -> { return ExistingPagesSizePredictor.instance(WriteOption.COMPRESS_STREAMS, WriteOption.XREF_STREAM); }; } }
public SizePdfSplitter(PDDocument document, SplitBySizeParameters parameters, boolean optimize) { super(document, parameters, optimize, parameters.discardOutline()); this.nextOutputStrategy = new OutputSizeStrategy(document, parameters, optimize); }
@Test public void size_Specified() { SplitBySizeParameters parameters = defaultCommandLine().with("-s", "1234567890123456789").invokeSejdaConsole(); assertEquals(1234567890123456789L, parameters.getSizeToSplitAt()); }
@Test public void testExecuteOptimized() throws IOException { parameters = new SplitBySizeParameters(60000); parameters.setCompress(true); parameters.setOptimizationPolicy(OptimizationPolicy.AUTO); parameters.setVersion(PdfVersion.VERSION_1_6); parameters.addSource(customInput("pdf/shared_resource_dic_with_2_imgs.pdf")); parameters.setExistingOutputPolicy(ExistingOutputPolicy.OVERWRITE); testContext.directoryOutputTo(parameters); execute(parameters); testContext.assertTaskCompleted(); testContext.assertOutputSize(2).forEachRawOutput(p -> { try { assertTrue(Files.size(p) < 100000); } catch (Exception e) { fail(e.getMessage()); } }); }
@Test public void dontDiscardOutline() { SplitBySizeParameters parameters = defaultCommandLine().invokeSejdaConsole(); assertFalse(parameters.discardOutline()); } }