@Test public void testEquals() { FileSource source = mock(FileSource.class); WatermarkParameters eq1 = new WatermarkParameters(source); eq1.setOpacity(50); WatermarkParameters eq2 = new WatermarkParameters(source); eq2.setOpacity(50); WatermarkParameters eq3 = new WatermarkParameters(source); eq3.setOpacity(50); WatermarkParameters diff = new WatermarkParameters(source); diff.setOpacity(50); diff.setLocation(Location.OVER); TestUtils.testEqualsAndHashCodes(eq1, eq2, eq3, diff); }
@Test public void invalidParametersOpacity() { WatermarkParameters victim = new WatermarkParameters(StreamSource.newInstance(mock(InputStream.class), "name")); PdfSource<InputStream> input = PdfStreamSource.newInstanceNoPassword(mock(InputStream.class), "name"); victim.addSource(input); SingleOrMultipleTaskOutput output = mock(SingleOrMultipleTaskOutput.class); victim.setOutput(output); victim.setOpacity(-1); TestUtils.assertInvalidParameters(victim); }
private void setUpParams(WatermarkParameters parameters, PdfSource<?> source) throws IOException { parameters.setCompress(true); parameters.setPosition(new Point(10, 50)); parameters.setOpacity(40); testContext.directoryOutputTo(parameters); parameters.setOutputPrefix("test_file[FILENUMBER]"); parameters.addSource(source); parameters.setExistingOutputPolicy(ExistingOutputPolicy.OVERWRITE); }
@Test public void testLocation() throws IOException { WatermarkParameters parameters = pngParams(customInput("pdf/test_file.pdf")); parameters.addPageRange(new PageRange(1, 1)); parameters.setLocation(Location.OVER); parameters.setOpacity(100); execute(parameters); testContext.assertTaskCompleted(); testContext.forPdfOutput(d -> { Iterator<PDStream> iter = d.getPage(0).getContentStreams(); PDStream formPrintStream = null; while (iter.hasNext()) { formPrintStream = iter.next(); } try (ContentStreamParser parser = new ContentStreamParser( SeekableSources.inMemorySeekableSourceFrom(formPrintStream.createInputStream()))) { List<Object> tokens = parser.tokens(); assertEquals(12, tokens.size()); assertEquals("Form1", ((COSName) tokens.get(9)).getName()); assertEquals("Do", ((Operator) tokens.get(10)).getName()); } catch (IOException e) { fail(e.getMessage()); } }); }
@Test public void testOpacity() throws IOException { WatermarkParameters parameters = pngParams(customInput("pdf/test_file.pdf")); parameters.addPageRange(new PageRange(1, 1)); parameters.setLocation(Location.BEHIND); parameters.setOpacity(30); execute(parameters); testContext.assertTaskCompleted(); testContext.forPdfOutput(d -> { PDStream formPrintStream = d.getPage(0).getContentStreams().next(); try (ContentStreamParser parser = new ContentStreamParser( SeekableSources.inMemorySeekableSourceFrom(formPrintStream.createInputStream()))) { List<Object> tokens = parser.tokens(); assertEquals(13, tokens.size()); assertEquals("gs1", ((COSName) tokens.get(8)).getName()); assertEquals("gs", ((Operator) tokens.get(9)).getName()); } catch (IOException e) { fail(e.getMessage()); } }); }
@Test public void testRotated270CropOffset() throws Exception { WatermarkParameters parameters = pngParams(customInput("pdf/rotation_270_cropped_test_file.pdf")); parameters.addPageRange(new PageRange(1, 3)); parameters.setPosition(new Point(5, 10)); parameters.setDimension(new Dimension(194, 87)); parameters.setOpacity(100); execute(parameters); testContext.assertTaskCompleted(); testContext.forPdfOutput(d -> { assertNotNull(d.getPage(1).getResources().getCOSObject().getDictionaryObject(COSName.XOBJECT, COSDictionary.class)); assertNotNull(d.getPage(2).getResources().getCOSObject().getDictionaryObject(COSName.XOBJECT, COSDictionary.class)); assertImageAtLocation(d, d.getPage(1), new Rectangle(49, 785, 194, 87)); assertImageAtLocation(d, d.getPage(1), new Rectangle(49, 785, 194, 87)); assertImageAtLocation(d, d.getPage(2), new Rectangle(49, 785, 194, 87)); assertNoImageAtLocation(d, d.getPage(3), new Rectangle(49, 785, 194, 87)); }); }
@Test public void testRotated90CropOffset() throws Exception { WatermarkParameters parameters = pngParams(customInput("pdf/rotation_90_cropped_test_file.pdf")); parameters.addPageRange(new PageRange(1, 3)); parameters.setPosition(new Point(5, 10)); parameters.setDimension(new Dimension(194, 87)); parameters.setOpacity(100); execute(parameters); testContext.assertTaskCompleted(); testContext.forPdfOutput(d -> { assertNotNull(d.getPage(1).getResources().getCOSObject().getDictionaryObject(COSName.XOBJECT, COSDictionary.class)); assertNotNull(d.getPage(2).getResources().getCOSObject().getDictionaryObject(COSName.XOBJECT, COSDictionary.class)); assertImageAtLocation(d, d.getPage(1), new Rectangle(424, 64, 194, 87)); assertImageAtLocation(d, d.getPage(1), new Rectangle(424, 64, 194, 87)); assertImageAtLocation(d, d.getPage(2), new Rectangle(424, 64, 194, 87)); assertNoImageAtLocation(d, d.getPage(3), new Rectangle(424, 64, 194, 87)); }); }
@Test public void testRotated180CropOffset() throws Exception { WatermarkParameters parameters = tiffParams(customInput("pdf/rotation_180_cropped_test_file.pdf")); parameters.addPageRange(new PageRange(1, 3)); parameters.setPosition(new Point(5, 10)); parameters.setDimension(new Dimension(194, 87)); parameters.setOpacity(100); execute(parameters); testContext.assertTaskCompleted(); testContext.forPdfOutput(d -> { assertNotNull(d.getPage(1).getResources().getCOSObject().getDictionaryObject(COSName.XOBJECT, COSDictionary.class)); assertNotNull(d.getPage(2).getResources().getCOSObject().getDictionaryObject(COSName.XOBJECT, COSDictionary.class)); assertImageAtLocation(d, d.getPage(1), new Rectangle(429, 780, -194, -87)); assertImageAtLocation(d, d.getPage(1), new Rectangle(429, 780, -194, -87)); assertImageAtLocation(d, d.getPage(2), new Rectangle(429, 780, -194, -87)); assertNoImageAtLocation(d, d.getPage(3), new Rectangle(429, 780, -194, -87)); }); } @Test
@Override public WatermarkParameters toTaskParameters(WatermarkTaskCliArguments args) { WatermarkParameters parameters = new WatermarkParameters(args.getWatermark().getSource()); if (args.isDimension()) { parameters.setDimension(args.getDimension().getDimension()); } parameters.setLocation(args.getLocation().getEnumValue()); parameters.setOpacity(args.getAlpha()); parameters.setPosition(args.getPosition().getPoint()); if (args.isPageSelection()) { parameters.addAllPageRanges(args.getPageSelection().getPageRangeSet()); } populateAbstractParameters(parameters, args); populateSourceParameters(parameters, args); populateOutputTaskParameters(parameters, args); populateOutputPrefix(parameters, args); return parameters; } }