From a8eb9b08e4441788e770cb3d1372c687e5ac62b3 Mon Sep 17 00:00:00 2001 From: Viraj Rane Date: Sun, 11 Apr 2021 19:45:58 +0530 Subject: [PATCH] Initial commit --- .gitignore | 76 +++ README.md | 41 ++ core/pom.xml | 167 +++++ .../java/com/hashout/core/package-info.java | 19 + .../com/hashout/core/utils/PDFHelper.java | 84 +++ .../core/workflows/PDFWatermarkProcess.java | 141 +++++ pom.xml | 586 ++++++++++++++++++ ui.apps/pom.xml | 113 ++++ .../main/content/META-INF/vault/filter.xml | 6 + .../workflow/pdf-watermark/.content.xml | 11 + .../pdf-watermark/_cq_dialog/.content.xml | 217 +++++++ .../workflow/pdf-watermark/_cq_editConfig.xml | 13 + .../models/add-pdf-watermark/.content.xml | 54 ++ .../add-pdf-watermark/_jcr_content/image/file | Bin 0 -> 40850 bytes .../_jcr_content/image/file.dir/.content.xml | 9 + .../_dam_thumbnails/_dam_thumbnail_400.png | Bin 0 -> 10794 bytes .../var/workflow/models/add-pdf-watermark.xml | 84 +++ 17 files changed, 1621 insertions(+) create mode 100644 .gitignore create mode 100644 README.md create mode 100644 core/pom.xml create mode 100644 core/src/main/java/com/hashout/core/package-info.java create mode 100644 core/src/main/java/com/hashout/core/utils/PDFHelper.java create mode 100644 core/src/main/java/com/hashout/core/workflows/PDFWatermarkProcess.java create mode 100644 pom.xml create mode 100644 ui.apps/pom.xml create mode 100644 ui.apps/src/main/content/META-INF/vault/filter.xml create mode 100644 ui.apps/src/main/content/jcr_root/apps/custom-workflow-step/components/workflow/pdf-watermark/.content.xml create mode 100644 ui.apps/src/main/content/jcr_root/apps/custom-workflow-step/components/workflow/pdf-watermark/_cq_dialog/.content.xml create mode 100644 ui.apps/src/main/content/jcr_root/apps/custom-workflow-step/components/workflow/pdf-watermark/_cq_editConfig.xml create mode 100644 ui.apps/src/main/content/jcr_root/conf/global/settings/workflow/models/add-pdf-watermark/.content.xml create mode 100644 ui.apps/src/main/content/jcr_root/conf/global/settings/workflow/models/add-pdf-watermark/_jcr_content/image/file create mode 100644 ui.apps/src/main/content/jcr_root/conf/global/settings/workflow/models/add-pdf-watermark/_jcr_content/image/file.dir/.content.xml create mode 100644 ui.apps/src/main/content/jcr_root/conf/global/settings/workflow/models/add-pdf-watermark/_jcr_content/image/file.dir/_jcr_content/_dam_thumbnails/_dam_thumbnail_400.png create mode 100644 ui.apps/src/main/content/jcr_root/var/workflow/models/add-pdf-watermark.xml diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..4c231e4 --- /dev/null +++ b/.gitignore @@ -0,0 +1,76 @@ +# Created by https://www.gitignore.io/api/eclipse,java,maven + +### Eclipse ### +*.pydevproject +.metadata +.gradle +bin/ +tmp/ +*.tmp +*.bak +*.swp +*~.nib +local.properties +.settings/ +.loadpath + +# Eclipse Core +.project + +# External tool builders +.externalToolBuilders/ + +# Locally stored "Eclipse launch configurations" +*.launch + +# CDT-specific +.cproject + +# JDT-specific (Eclipse Java Development Tools) +.classpath + +# Java annotation processor (APT) +.factorypath + +# PDT-specific +.buildpath + +# sbteclipse plugin +.target + +# TeXlipse plugin +.texlipse + + +### Java ### +*.class + +# Mobile Tools for Java (J2ME) +.mtj.tmp/ + +# Package Files # +*.jar +*.war +*.ear + +# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml +hs_err_pid* + + +### Maven ### +target/ +pom.xml.tag +pom.xml.releaseBackup +pom.xml.versionsBackup +pom.xml.next +release.properties +dependency-reduced-pom.xml +buildNumber.properties +.mvn/timing.properties + +### Vault ### +.vlt + +### IntelliJ ### +.idea/ +*.iml diff --git a/README.md b/README.md new file mode 100644 index 0000000..016825e --- /dev/null +++ b/README.md @@ -0,0 +1,41 @@ +# PDF Watermark Workflow Model & Step + +This project is built to demonstrate how to create custom workflow steps and models in AEM. + +**Use case:** Adding a watermark to a PDF using AEM Asset Workflow. + +This project uses [Apache PDFBox library](https://pdfbox.apache.org/) to parse PDF documents and to add a watermark layer for each page. These dependencies are embedded in the project bundle JAR file **(Check core module's POM file for more details: core/pom.xml, line 67)**. + +**Add PDF Watermark Model:** `/var/workflow/models/add-pdf-watermark` + +**PDF Watermark Process Step Component:** `/apps/custom-workflow-step/components/workflow/pdf-watermark` + +**PDF Watermark Process Step JAVA Class:** `com.hashout.core.workflows.PDFWatermarkProcess` + +## How to build + +To build all the modules run in the project root directory the following command with Maven 3: + +mvn clean install + +If you have a running AEM instance you can build and package the whole project and deploy into AEM with + + mvn clean install -PautoInstallPackage + +Or to deploy it to a publish instance, run + + mvn clean install -PautoInstallPackagePublish + +Or alternatively + + mvn clean install -PautoInstallPackage -Daem.port=4503 + +Or to deploy only the bundle to the author, run + + mvn clean install -PautoInstallBundle + +## Maven settings + +The project comes with the auto-public repository configured. To setup the repository in your Maven settings, refer to: + + http://helpx.adobe.com/experience-manager/kb/SetUpTheAdobeMavenRepository.html diff --git a/core/pom.xml b/core/pom.xml new file mode 100644 index 0000000..d2217bd --- /dev/null +++ b/core/pom.xml @@ -0,0 +1,167 @@ + + + + 4.0.0 + + com.hashout + custom-workflow-step + 1.0-SNAPSHOT + ../pom.xml + + custom-workflow-step.core + bundle + Custom Workflow Step - Core + Core bundle for Custom Workflow Step + + + + org.apache.sling + maven-sling-plugin + + + org.apache.felix + maven-bundle-plugin + true + + + generate-osgi-metadata-for-unittests + + manifest + + process-classes + + + scr-metadata + + manifest + + + true + + + + + true + + + + javax.inject;version=0.0.0, + javax.annotation;version=0.0.0, + * + + + pdfbox, + fontbox, + bcprov-jdk15on, + bcpkix-jdk15on + + + com.hashout.core + + <_dsannotations>* + <_metatypeannotations>* + <_plugin> + + org.apache.sling.bnd.models.ModelsScannerPlugin, + + org.apache.felix.scrplugin.bnd.SCRDescriptorBndPlugin;destdir=${project.build.outputDirectory} + + + + + + org.apache.felix + org.apache.felix.scr.bnd + 1.9.0 + + + org.apache.sling + org.apache.sling.bnd.models + 1.0.0 + + + + + org.apache.maven.plugins + maven-surefire-plugin + + + + + + + + org.osgi + osgi.core + + + org.osgi + osgi.cmpn + + + org.osgi + osgi.annotation + + + javax.inject + javax.inject + + + javax.annotation + javax.annotation-api + + + + org.slf4j + slf4j-api + + + javax.jcr + jcr + + + javax.servlet + javax.servlet-api + + + com.adobe.aem + uber-jar + apis + + + uk.org.lidalia + slf4j-test + + + org.apache.pdfbox + pdfbox + + + org.apache.pdfbox + fontbox + + + org.bouncycastle + bcprov-jdk15on + + + org.bouncycastle + bcpkix-jdk15on + + + diff --git a/core/src/main/java/com/hashout/core/package-info.java b/core/src/main/java/com/hashout/core/package-info.java new file mode 100644 index 0000000..c6d8931 --- /dev/null +++ b/core/src/main/java/com/hashout/core/package-info.java @@ -0,0 +1,19 @@ +/* + * Copyright 2015 Adobe Systems Incorporated + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +@Version("1.0") +package com.hashout.core; + +import org.osgi.annotation.versioning.Version; \ No newline at end of file diff --git a/core/src/main/java/com/hashout/core/utils/PDFHelper.java b/core/src/main/java/com/hashout/core/utils/PDFHelper.java new file mode 100644 index 0000000..31ba0af --- /dev/null +++ b/core/src/main/java/com/hashout/core/utils/PDFHelper.java @@ -0,0 +1,84 @@ +package com.hashout.core.utils; + +import org.apache.commons.lang3.StringUtils; +import org.apache.pdfbox.pdmodel.PDDocument; +import org.apache.pdfbox.pdmodel.font.PDFont; +import org.apache.pdfbox.pdmodel.font.PDType1Font; + +import java.awt.Color; +import java.util.HashMap; +import java.util.Map; + +public final class PDFHelper { + + private static final Map FONT_MAP = new HashMap() {{ + put("Times Roman", PDType1Font.TIMES_ROMAN); + put("Times Roman Bold", PDType1Font.TIMES_BOLD); + put("Times Roman Italic", PDType1Font.TIMES_ITALIC); + put("Times Roman Bold Italic", PDType1Font.TIMES_BOLD_ITALIC); + put("Helvetica", PDType1Font.HELVETICA); + put("Helvetica Bold", PDType1Font.HELVETICA_BOLD); + put("Helvetica Oblique", PDType1Font.HELVETICA_OBLIQUE); + put("Helvetica Bold Oblique", PDType1Font.HELVETICA_BOLD_OBLIQUE); + put("Courier", PDType1Font.COURIER); + put("Courier Bold", PDType1Font.COURIER_BOLD); + put("Courier Oblique", PDType1Font.COURIER_OBLIQUE); + put("Courier Bold Oblique", PDType1Font.COURIER_BOLD_OBLIQUE); + }}; + + public static PDFont getFontFromName(String name) { + return FONT_MAP.getOrDefault(name, PDType1Font.TIMES_ROMAN); + } + + public static float getFontSize(String fontSize) { + return StringUtils.isNumeric(fontSize) ? Float.parseFloat(fontSize) : 20; + } + + public static Color getColor(String color) { + return StringUtils.startsWith(color, "#") && StringUtils.length(color) == 7 + ? Color.decode(color) + : Color.BLACK; + } + + public static float getOpacity(String opacity) { + return StringUtils.isNumeric(opacity) ? Float.parseFloat(opacity) / 100 : 0.2f; + } + + public static float getXOffsetFromPosition(String position, float textWidth, PDDocument doc) { + if (position != null) { + switch (position) { + case "TOP_LEFT": + case "BOTTOM_LEFT": + return 0; + case "TOP_RIGHT": + case "BOTTOM_RIGHT": + return doc.getPage(0).getMediaBox().getWidth() - textWidth; + case "CENTER": + default: + return (doc.getPage(0).getMediaBox().getWidth() - textWidth) / 2; + } + } + return (doc.getPage(0).getMediaBox().getWidth() - textWidth) / 2; + } + + public static float getYOffsetFromPosition(String position, float textHeight, PDDocument doc) { + if (position != null) { + switch (position) { + case "TOP_LEFT": + case "TOP_RIGHT": + return doc.getPage(0).getMediaBox().getHeight() - textHeight; + case "BOTTOM_LEFT": + case "BOTTOM_RIGHT": + return 0; + case "CENTER": + default: + return (doc.getPage(0).getMediaBox().getHeight() - textHeight) / 2; + } + } + return (doc.getPage(0).getMediaBox().getHeight() - textHeight) / 2; + } + + public static double getOrientation(String angle) { + return StringUtils.isNumeric(angle) ? Math.toRadians(Double.parseDouble(angle)) : Math.toRadians(45); + } +} diff --git a/core/src/main/java/com/hashout/core/workflows/PDFWatermarkProcess.java b/core/src/main/java/com/hashout/core/workflows/PDFWatermarkProcess.java new file mode 100644 index 0000000..9341296 --- /dev/null +++ b/core/src/main/java/com/hashout/core/workflows/PDFWatermarkProcess.java @@ -0,0 +1,141 @@ +package com.hashout.core.workflows; + +import com.adobe.granite.workflow.WorkflowSession; +import com.adobe.granite.workflow.exec.WorkItem; +import com.adobe.granite.workflow.exec.WorkflowData; +import com.adobe.granite.workflow.exec.WorkflowProcess; +import com.adobe.granite.workflow.metadata.MetaDataMap; +import com.day.cq.dam.api.Asset; +import com.day.cq.dam.api.AssetManager; +import com.hashout.core.utils.PDFHelper; +import org.apache.commons.lang3.StringUtils; +import org.apache.pdfbox.pdmodel.PDDocument; +import org.apache.pdfbox.pdmodel.PDPage; +import org.apache.pdfbox.pdmodel.PDPageContentStream; +import org.apache.pdfbox.pdmodel.font.PDFont; +import org.apache.pdfbox.pdmodel.graphics.state.PDExtendedGraphicsState; +import org.apache.pdfbox.util.Matrix; +import org.apache.sling.api.resource.Resource; +import org.apache.sling.api.resource.ResourceResolver; +import org.osgi.framework.Constants; +import org.osgi.service.component.annotations.Component; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.awt.Color; +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.io.InputStream; + +import static com.adobe.cq.social.community.api.CommunityConstants.DAM_ROOT_PATH; +import static com.adobe.granite.workflow.PayloadMap.TYPE_JCR_PATH; +import static org.apache.commons.lang3.StringUtils.EMPTY; + +@Component( + service = WorkflowProcess.class, + property = { + "process.label=PDF Watermark Process", + Constants.SERVICE_DESCRIPTION + "=Adds a watermark based on the process arguments", + Constants.SERVICE_VENDOR + "=Hashout Software Technologies" + } +) +public class PDFWatermarkProcess implements WorkflowProcess { + private static final Logger log = LoggerFactory.getLogger(PDFWatermarkProcess.class); + private static final String TAG = PDFWatermarkProcess.class.toString(); + private static final String PDF_MIMETYPE = "application/pdf"; + + @Override + public void execute(WorkItem workItem, WorkflowSession workflowSession, MetaDataMap args) { + + final WorkflowData workflowData = workItem.getWorkflowData(); + final String type = workflowData.getPayloadType(); + final String payloadPath = workflowData.getPayload().toString(); + final ResourceResolver resolver = workflowSession.adaptTo(ResourceResolver.class); + final Resource assetResource = resolver != null ? resolver.getResource(payloadPath) : null; + final AssetManager assetManager = resolver != null ? resolver.adaptTo(AssetManager.class) : null; + + // Check if the payload is under the DAM folder + if (StringUtils.equals(type, TYPE_JCR_PATH) + && StringUtils.startsWith(payloadPath, DAM_ROOT_PATH) + && assetResource != null + && assetManager != null) { + //Adapt payload to asset + final Asset asset = assetResource.adaptTo(Asset.class); + if (asset != null && StringUtils.equals(asset.getMimeType(), PDF_MIMETYPE)) { + ByteArrayInputStream watermarkedPDFStream = applyWatermark(asset, args); + if (watermarkedPDFStream != null) { + assetManager.createAsset(payloadPath, watermarkedPDFStream, PDF_MIMETYPE, true); + } + } + } + + } + + private ByteArrayInputStream applyWatermark(Asset pdfAsset, MetaDataMap args) { + ByteArrayInputStream modifiedPDFStream = null; + + //Parse and Validate all the arguments + final String text = args.get("text", String.class) != null ? args.get("text", String.class) : EMPTY; + final PDFont font = PDFHelper.getFontFromName(args.get("font", String.class)); + final float fontSize = PDFHelper.getFontSize(args.get("size", String.class)); + final Color fontColor = PDFHelper.getColor(args.get("color", String.class)); + final float opacity = PDFHelper.getOpacity(args.get("opacity", String.class)); + final double orientation = PDFHelper.getOrientation(args.get("orientation", String.class)); + String position = args.get("position", String.class); + + try (final InputStream pdfStream = pdfAsset.getOriginal().getStream(); + final PDDocument doc = PDDocument.load(pdfStream)) { + + //These values are required to compute x and y offset for different positions + float textWidth = font.getStringWidth(text) / 1000 * fontSize; + float textHeight = font.getFontDescriptor().getFontBoundingBox().getHeight() / 1000 * fontSize; + final float xOffset = PDFHelper.getXOffsetFromPosition(position, textWidth, doc); + final float yOffset = PDFHelper.getYOffsetFromPosition(position, textHeight, doc); + + //Add bookmark on every page + for (PDPage page : doc.getPages()) { + PDPageContentStream cs = + new PDPageContentStream( + doc, + page, + PDPageContentStream.AppendMode.APPEND, + true, + true + ); + PDExtendedGraphicsState r0 = new PDExtendedGraphicsState(); + //Set Opacity/Transparency + r0.setNonStrokingAlphaConstant(opacity); + r0.setAlphaSourceFlag(true); + + cs.setGraphicsStateParameters(r0); + + //Set Font Color + cs.setNonStrokingColor(fontColor); + + cs.beginText(); + + //Set Font Type and Size + cs.setFont(font, fontSize); + + // Position text according to the offsets calculated based on selected option + cs.setTextMatrix(Matrix.getRotateInstance(orientation, xOffset, yOffset)); + + //Set Actual Text + cs.showText(text); + cs.endText(); + + cs.close(); + } + + ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); + doc.save(outputStream); + doc.close(); + modifiedPDFStream = new ByteArrayInputStream(outputStream.toByteArray()); + return modifiedPDFStream; + } catch (IOException e) { + log.error("{}: Error while processing a PDF: {}", TAG, e.getMessage()); + return modifiedPDFStream; + } + } +} diff --git a/pom.xml b/pom.xml new file mode 100644 index 0000000..1421900 --- /dev/null +++ b/pom.xml @@ -0,0 +1,586 @@ + + + + 4.0.0 + com.hashout + custom-workflow-step + pom + 1.0-SNAPSHOT + Custom Workflow Step + + + core + ui.apps + + + + localhost + 4502 + localhost + 4503 + admin + admin + admin + admin + + UTF-8 + UTF-8 + + + + + + + org.apache.maven.plugins + maven-release-plugin + 2.5.3 + + [maven-scm] : + clean install + install + release + + + + + org.apache.maven.plugins + maven-source-plugin + 3.0.1 + true + + + + org.apache.maven.plugins + maven-jar-plugin + 3.0.2 + + + + org.apache.maven.plugins + maven-enforcer-plugin + + + enforce-maven + + enforce + + + + + [3.3.9,) + + + Project must be compiled + with Java 8 or higher + + 1.8.0 + + + + + + + + + org.apache.maven.plugins + maven-compiler-plugin + + 1.8 + 1.8 + + + + + org.apache.maven.plugins + maven-idea-plugin + 2.2.1 + + 1.8 + true + true + + + + + org.apache.maven.plugins + maven-eclipse-plugin + 2.10 + + true + + + + + + + + org.apache.maven.plugins + maven-clean-plugin + 3.0.0 + + + + org.apache.maven.plugins + maven-resources-plugin + 3.0.2 + + + + org.apache.maven.plugins + maven-compiler-plugin + 3.6.1 + + + + org.apache.maven.plugins + maven-install-plugin + 2.5.2 + + + + org.apache.maven.plugins + maven-surefire-plugin + 2.22.1 + + false + + + + + org.apache.maven.plugins + maven-failsafe-plugin + 2.22.1 + + + + org.apache.maven.plugins + maven-deploy-plugin + 2.8.2 + + + + org.apache.sling + maven-sling-plugin + 2.2.0 + + http://${aem.host}:${aem.port}/system/console + WebConsole + + + + + org.apache.sling + htl-maven-plugin + 1.0.6 + + true + + + + + validate + + + + + + + org.apache.jackrabbit + filevault-package-maven-plugin + 1.0.3 + + src/main/content/META-INF/vault/filter.xml + + + + + com.day.jcr.vault + content-package-maven-plugin + 1.0.2 + + http://${aem.host}:${aem.port}/crx/packmgr/service.jsp + true + ${vault.user} + ${vault.password} + + + + + org.apache.felix + maven-bundle-plugin + 4.1.0 + true + + + + org.apache.maven.plugins + maven-enforcer-plugin + 1.4.1 + + + + org.apache.maven.plugins + maven-dependency-plugin + 3.0.0 + + + + org.codehaus.mojo + build-helper-maven-plugin + 3.0.0 + + + + org.eclipse.m2e + lifecycle-mapping + 1.0.0 + + + + + + org.apache.maven.plugins + maven-enforcer-plugin + [1.0.0,) + + enforce + + + + + + + + + + org.apache.maven.plugins + + + maven-dependency-plugin + + + [2.2,) + + + copy-dependencies + unpack + + + + + + + + + + org.codehaus.mojo + + + build-helper-maven-plugin + + + [1.5,) + + + + reserve-network-port + + + + + + + + + + + + + + + + + + + + + adobe-public + + + true + + + + adobe-public-releases + Adobe Public Releases + https://repo.adobe.com/nexus/content/groups/public + + + + + adobe-public-releases + Adobe Public Repository + https://repo.adobe.com/nexus/content/groups/public + + true + never + + + false + + + + + + + adobe-public-releases + Adobe Public Repository + https://repo.adobe.com/nexus/content/groups/public + + true + never + + + false + + + + + + + + autoInstallBundle + + + false + + + + + + org.apache.sling + maven-sling-plugin + + + install-bundle + + install + + + + + + + + + + + autoInstallPackage + + false + + + + + + org.apache.jackrabbit + filevault-package-maven-plugin + + + create-package + + package + + + + + + com.day.jcr.vault + content-package-maven-plugin + + + install-package + + install + + + http://${aem.host}:${aem.port}/crx/packmgr/service.jsp + + + + + + + + + + + autoInstallPackagePublish + + false + + + + + + org.apache.jackrabbit + filevault-package-maven-plugin + + + create-package + + package + + + + + + com.day.jcr.vault + content-package-maven-plugin + + + install-package-publish + + install + + + + http://${aem.publish.host}:${aem.publish.port}/crx/packmgr/service.jsp + + + + + + + + + + + + + + + + + + + + + org.osgi + osgi.core + 6.0.0 + provided + + + org.osgi + osgi.cmpn + 6.0.0 + provided + + + org.osgi + osgi.annotation + 6.0.1 + provided + + + javax.inject + javax.inject + 1 + + + javax.annotation + javax.annotation-api + 1.3.2 + provided + + + + org.slf4j + slf4j-api + 1.7.21 + provided + + + + com.adobe.aem + uber-jar + 6.4.4 + apis + provided + + + + javax.servlet + javax.servlet-api + 3.1.0 + provided + + + + javax.jcr + jcr + 2.0 + provided + + + org.slf4j + slf4j-simple + 1.7.25 + test + + + uk.org.lidalia + slf4j-test + 1.0.1 + test + + + org.apache.pdfbox + pdfbox + 2.0.23 + + + org.apache.pdfbox + fontbox + 2.0.23 + + + org.bouncycastle + bcprov-jdk15on + 1.60 + + + org.bouncycastle + bcpkix-jdk15on + 1.60 + + + + + diff --git a/ui.apps/pom.xml b/ui.apps/pom.xml new file mode 100644 index 0000000..812524d --- /dev/null +++ b/ui.apps/pom.xml @@ -0,0 +1,113 @@ + + + + 4.0.0 + + + + + + com.hashout + custom-workflow-step + 1.0-SNAPSHOT + ../pom.xml + + + + + + custom-workflow-step.ui.apps + content-package + Custom Workflow Step - UI apps + UI apps package for Custom Workflow Step + + + + + + + + src/main/content/jcr_root + + + + + + org.apache.jackrabbit + filevault-package-maven-plugin + true + + custom-workflow-step + + + com.hashout + custom-workflow-step.core + /apps/custom-workflow-step/install + + + + + + com.day.jcr.vault + content-package-maven-plugin + true + + true + true + + + + + org.apache.sling + htl-maven-plugin + + + + + + + + + + com.hashout + custom-workflow-step.core + 1.0-SNAPSHOT + + + + com.adobe.aem + uber-jar + apis + + + + javax.jcr + jcr + + + + javax.servlet + javax.servlet-api + + + diff --git a/ui.apps/src/main/content/META-INF/vault/filter.xml b/ui.apps/src/main/content/META-INF/vault/filter.xml new file mode 100644 index 0000000..3ac84e1 --- /dev/null +++ b/ui.apps/src/main/content/META-INF/vault/filter.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/ui.apps/src/main/content/jcr_root/apps/custom-workflow-step/components/workflow/pdf-watermark/.content.xml b/ui.apps/src/main/content/jcr_root/apps/custom-workflow-step/components/workflow/pdf-watermark/.content.xml new file mode 100644 index 0000000..a69da3d --- /dev/null +++ b/ui.apps/src/main/content/jcr_root/apps/custom-workflow-step/components/workflow/pdf-watermark/.content.xml @@ -0,0 +1,11 @@ + + diff --git a/ui.apps/src/main/content/jcr_root/apps/custom-workflow-step/components/workflow/pdf-watermark/_cq_dialog/.content.xml b/ui.apps/src/main/content/jcr_root/apps/custom-workflow-step/components/workflow/pdf-watermark/_cq_dialog/.content.xml new file mode 100644 index 0000000..dcaed90 --- /dev/null +++ b/ui.apps/src/main/content/jcr_root/apps/custom-workflow-step/components/workflow/pdf-watermark/_cq_dialog/.content.xml @@ -0,0 +1,217 @@ + + + + + + + + + + + + + + <description + jcr:primaryType="nt:unstructured" + sling:resourceType="granite/ui/components/coral/foundation/form/textarea" + disabled="false" + fieldLabel="Description" + name="./jcr:description"/> + </items> + </basic> + <advanced + jcr:primaryType="nt:unstructured" + jcr:title="Advanced Settings" + sling:resourceType="granite/ui/components/coral/foundation/form/fieldset"> + <items jcr:primaryType="nt:unstructured"> + <advance + jcr:primaryType="nt:unstructured" + sling:resourceType="granite/ui/components/coral/foundation/form/checkbox" + fieldDescription="Check if your handler will advance to the next step." + fieldLabel="Handler Advance" + name="./metaData/PROCESS_AUTO_ADVANCE" + text="Handler Advance" + value="true"/> + </items> + </advanced> + </items> + </column> + </items> + </processcommon> + <processargs + jcr:primaryType="nt:unstructured" + jcr:title="Arguments" + sling:resourceType="granite/ui/components/coral/foundation/fixedcolumns"> + <items jcr:primaryType="nt:unstructured"> + <column + jcr:primaryType="nt:unstructured" + sling:resourceType="granite/ui/components/coral/foundation/container"> + <items jcr:primaryType="nt:unstructured"> + <arguments + jcr:primaryType="nt:unstructured" + jcr:title="Process Arguments" + sling:resourceType="granite/ui/components/coral/foundation/form/fieldset"> + <items jcr:primaryType="nt:unstructured"> + <text + jcr:primaryType="nt:unstructured" + sling:resourceType="granite/ui/components/coral/foundation/form/textfield" + fieldDescription="The watermark text to render." + fieldLabel="Text" + name="./metaData/text"/> + <font + jcr:primaryType="nt:unstructured" + sling:resourceType="granite/ui/components/coral/foundation/form/select" + fieldDescription="The font family to use to render the watermark text in." + fieldLabel="Font" + name="./metaData/font"> + <items jcr:primaryType="nt:unstructured"> + <timesRoman + jcr:primaryType="nt:unstructured" + text="Times Roman" + value="Times Roman"/> + <timesRomanBold + jcr:primaryType="nt:unstructured" + text="Times Roman Bold" + value="Times Roman Bold"/> + <timesRomanItalic + jcr:primaryType="nt:unstructured" + text="Times Roman Italic" + value="Times Roman Italic"/> + <timesRomanBoldItalic + jcr:primaryType="nt:unstructured" + text="Times Roman Bold Italic" + value="Times Roman Bold Italic"/> + <helvetica + jcr:primaryType="nt:unstructured" + text="Helvetica" + value="Helvetica"/> + <helveticaBold + jcr:primaryType="nt:unstructured" + text="Helvetica Bold" + value="Helvetica Bold"/> + <helveticaOblique + jcr:primaryType="nt:unstructured" + text="Helvetica Oblique" + value="Helvetica Oblique"/> + <helveticaBoldOblique + jcr:primaryType="nt:unstructured" + text="Helvetica Bold Oblique" + value="Helvetica Bold Oblique"/> + <Courier + jcr:primaryType="nt:unstructured" + text="Courier" + value="Courier"/> + <CourierBold + jcr:primaryType="nt:unstructured" + text="Courier Bold" + value="Courier Bold"/> + <CourierOblique + jcr:primaryType="nt:unstructured" + text="Courier Oblique" + value="Courier Oblique"/> + <CourierBoldOblique + jcr:primaryType="nt:unstructured" + text="Courier Bold Oblique" + value="Courier Bold Oblique"/> + </items> + </font> + <size + jcr:primaryType="nt:unstructured" + sling:resourceType="granite/ui/components/coral/foundation/form/numberfield" + defaultValue="{Long}48" + fieldDescription="The font size of the watermark text in pixel." + fieldLabel="Size" + max="{Long}100" + min="{Long}10" + name="./metaData/size" + value="40"/> + <color + jcr:primaryType="nt:unstructured" + sling:resourceType="granite/ui/components/coral/foundation/form/colorfield" + fieldDescription="The font color of the watermark text." + fieldLabel="Color" + name="./metaData/color"/> + <opacity + jcr:primaryType="nt:unstructured" + sling:resourceType="granite/ui/components/coral/foundation/form/numberfield" + defaultValue="{Long}20" + fieldDescription="The opacity of the watermark in percentage." + fieldLabel="Opacity" + max="{Decimal}100" + min="{Decimal}0" + name="./metaData/opacity" + value="20"/> + <position + jcr:primaryType="nt:unstructured" + sling:resourceType="granite/ui/components/coral/foundation/form/select" + fieldDescription="The position of the watermark relative to the asset image." + fieldLabel="Position" + name="./metaData/position" + value="Centre"> + <items jcr:primaryType="nt:unstructured"> + <topleft + jcr:primaryType="nt:unstructured" + text="Top Left" + value="TOP_LEFT"/> + <topright + jcr:primaryType="nt:unstructured" + text="Top Right" + value="TOP_RIGHT"/> + <center + jcr:primaryType="nt:unstructured" + text="Centre" + value="CENTER"/> + <bottomleft + jcr:primaryType="nt:unstructured" + text="Bottom Left" + value="BOTTOM_LEFT"/> + <bottomright + jcr:primaryType="nt:unstructured" + text="Bottom Right" + value="BOTTOM_RIGHT"/> + </items> + </position> + <orientation + jcr:primaryType="nt:unstructured" + sling:resourceType="granite/ui/components/coral/foundation/form/numberfield" + fieldDescription="The angle of rotation of the watermark (clockwise from 0 to 360 degrees)." + fieldLabel="Orientation" + max="{Decimal}360.0" + min="{Decimal}0.0" + name="./metaData/orientation"/> + </items> + </arguments> + </items> + </column> + </items> + </processargs> + </items> + </content> +</jcr:root> + diff --git a/ui.apps/src/main/content/jcr_root/apps/custom-workflow-step/components/workflow/pdf-watermark/_cq_editConfig.xml b/ui.apps/src/main/content/jcr_root/apps/custom-workflow-step/components/workflow/pdf-watermark/_cq_editConfig.xml new file mode 100644 index 0000000..2040821 --- /dev/null +++ b/ui.apps/src/main/content/jcr_root/apps/custom-workflow-step/components/workflow/pdf-watermark/_cq_editConfig.xml @@ -0,0 +1,13 @@ +<?xml version="1.0" encoding="UTF-8"?> +<jcr:root xmlns:cq="http://www.day.com/jcr/cq/1.0" xmlns:jcr="http://www.jcp.org/jcr/1.0" + xmlns:nt="http://www.jcp.org/jcr/nt/1.0" + cq:dialogMode="floating" + cq:inherit="{Boolean}true" + jcr:primaryType="cq:EditConfig"> + <cq:formParameters + jcr:primaryType="nt:unstructured" + jcr:title="PDF Watermark" + jcr:description="A process to add a watermark to a PDF Document. Provides various configuration arguments." + PROCESS="com.hashout.core.workflows.PDFWatermarkProcess" + PROCESS_AUTO_ADVANCE="true"/> +</jcr:root> diff --git a/ui.apps/src/main/content/jcr_root/conf/global/settings/workflow/models/add-pdf-watermark/.content.xml b/ui.apps/src/main/content/jcr_root/conf/global/settings/workflow/models/add-pdf-watermark/.content.xml new file mode 100644 index 0000000..eb7894d --- /dev/null +++ b/ui.apps/src/main/content/jcr_root/conf/global/settings/workflow/models/add-pdf-watermark/.content.xml @@ -0,0 +1,54 @@ +<?xml version="1.0" encoding="UTF-8"?> +<jcr:root xmlns:sling="http://sling.apache.org/jcr/sling/1.0" xmlns:cq="http://www.day.com/jcr/cq/1.0" xmlns:jcr="http://www.jcp.org/jcr/1.0" xmlns:nt="http://www.jcp.org/jcr/nt/1.0" + jcr:primaryType="cq:Page"> + <jcr:content + cq:designPath="/libs/settings/wcm/designs/default" + cq:template="/libs/cq/workflow/templates/model" + jcr:primaryType="cq:PageContent" + jcr:title="Add PDF Watermark" + sling:resourceType="cq/workflow/components/pages/model"> + <flow + jcr:primaryType="nt:unstructured" + sling:resourceType="foundation/components/parsys"> + <pdf_watermark + jcr:description="A process to add a watermark to a PDF Document. Provides various configuration arguments." + jcr:primaryType="nt:unstructured" + jcr:title="PDF Watermark" + sling:resourceType="custom-workflow-step/components/workflow/pdf-watermark"> + <metaData + jcr:primaryType="nt:unstructured" + color="#FF4136" + font="Courier" + opacity="40" + orientation="0" + position="CENTER" + PROCESS="com.hashout.core.workflows.PDFWatermarkProcess" + PROCESS_AUTO_ADVANCE="true" + size="40" + text="WATERMARK"/> + </pdf_watermark> + <thumbnailprocess_cop + jcr:description="This process will create one or more thumbnails for the asset, create web enabled rendition and update folder thumbnail." + jcr:primaryType="nt:unstructured" + jcr:title="Process Thumbnails" + sling:resourceType="dam/components/workflow/thumbnailprocess"> + <metaData + jcr:primaryType="nt:unstructured" + CONFIGS="[140:100:false,48:48:false,319:319:false]" + CREATE_FPO_MIMETYPES="[image/pjpeg,image/jpeg,image/jpg,image/gif,image/x-png,image/tiff,image/png,application/x-photoshop,application/photoshop,image/vnd.adobe.photoshop,application/vnd.adobe.photoshop,image/bmp,image/x-tiff]" + FPO_QUALITY="10" + HEIGHT="1280" + MIME_TYPE="image/jpeg" + MIMETYPE="image/jpeg" + PROCESS="com.day.cq.dam.core.process.ThumbnailProcess" + PROCESS_AUTO_ADVANCE="true" + QUALITY="90" + SKIP="[audio/mpeg,video/(.*)]" + WIDTH="1280"/> + </thumbnailprocess_cop> + </flow> + <image jcr:primaryType="nt:unstructured"> + <file/> + </image> + </jcr:content> +</jcr:root> diff --git a/ui.apps/src/main/content/jcr_root/conf/global/settings/workflow/models/add-pdf-watermark/_jcr_content/image/file b/ui.apps/src/main/content/jcr_root/conf/global/settings/workflow/models/add-pdf-watermark/_jcr_content/image/file new file mode 100644 index 0000000000000000000000000000000000000000..8b8cbdd5e8531a7f30537811d0c60ee3efcdf915 GIT binary patch literal 40850 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 literal 0 HcmV?d00001 diff --git a/ui.apps/src/main/content/jcr_root/conf/global/settings/workflow/models/add-pdf-watermark/_jcr_content/image/file.dir/.content.xml b/ui.apps/src/main/content/jcr_root/conf/global/settings/workflow/models/add-pdf-watermark/_jcr_content/image/file.dir/.content.xml new file mode 100644 index 0000000..2bf14ea --- /dev/null +++ b/ui.apps/src/main/content/jcr_root/conf/global/settings/workflow/models/add-pdf-watermark/_jcr_content/image/file.dir/.content.xml @@ -0,0 +1,9 @@ +<?xml version="1.0" encoding="UTF-8"?> +<jcr:root xmlns:dam="http://www.day.com/dam/1.0" xmlns:jcr="http://www.jcp.org/jcr/1.0" xmlns:nt="http://www.jcp.org/jcr/nt/1.0" + jcr:primaryType="nt:file"> + <jcr:content + jcr:lastModifiedBy="admin" + jcr:mimeType="image/jpeg" + jcr:mixinTypes="[dam:Thumbnails]" + jcr:primaryType="nt:resource"/> +</jcr:root> diff --git a/ui.apps/src/main/content/jcr_root/conf/global/settings/workflow/models/add-pdf-watermark/_jcr_content/image/file.dir/_jcr_content/_dam_thumbnails/_dam_thumbnail_400.png b/ui.apps/src/main/content/jcr_root/conf/global/settings/workflow/models/add-pdf-watermark/_jcr_content/image/file.dir/_jcr_content/_dam_thumbnails/_dam_thumbnail_400.png new file mode 100644 index 0000000000000000000000000000000000000000..c4bb524923527707ba50be87d798c649672db59f GIT binary patch literal 10794 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 literal 0 HcmV?d00001 diff --git a/ui.apps/src/main/content/jcr_root/var/workflow/models/add-pdf-watermark.xml b/ui.apps/src/main/content/jcr_root/var/workflow/models/add-pdf-watermark.xml new file mode 100644 index 0000000..a5dff12 --- /dev/null +++ b/ui.apps/src/main/content/jcr_root/var/workflow/models/add-pdf-watermark.xml @@ -0,0 +1,84 @@ +<?xml version="1.0" encoding="UTF-8"?> +<jcr:root xmlns:sling="http://sling.apache.org/jcr/sling/1.0" xmlns:cq="http://www.day.com/jcr/cq/1.0" xmlns:jcr="http://www.jcp.org/jcr/1.0" xmlns:nt="http://www.jcp.org/jcr/nt/1.0" + jcr:isCheckedOut="{Boolean}false" + jcr:primaryType="cq:WorkflowModel" + jcr:uuid="bbc52a15-99c4-44b7-a2c0-533f5003fa2b" + sling:resourceType="cq/workflow/components/model" + description="No Description" + title="Add PDF Watermark"> + <metaData + cq:generatingPage="/conf/global/settings/workflow/models/add-pdf-watermark/jcr:content" + jcr:primaryType="nt:unstructured"/> + <nodes jcr:primaryType="nt:unstructured"> + <node0 + jcr:primaryType="cq:WorkflowNode" + title="Start" + type="START"> + <metaData jcr:primaryType="nt:unstructured"/> + </node0> + <node1 + jcr:primaryType="cq:WorkflowNode" + description="A process to add a watermark to a PDF Document. Provides various configuration arguments." + title="PDF Watermark" + type="PROCESS"> + <metaData + jcr:primaryType="nt:unstructured" + color="#FF4136" + font="Courier" + opacity="40" + orientation="0" + position="CENTER" + PROCESS="com.hashout.core.workflows.PDFWatermarkProcess" + PROCESS_AUTO_ADVANCE="true" + size="40" + text="WATERMARK"/> + </node1> + <node2 + jcr:primaryType="cq:WorkflowNode" + description="This process will create one or more thumbnails for the asset, create web enabled rendition and update folder thumbnail." + title="Process Thumbnails" + type="PROCESS"> + <metaData + jcr:primaryType="nt:unstructured" + CONFIGS="[140:100:false,48:48:false,319:319:false]" + CREATE_FPO_MIMETYPES="[image/pjpeg,image/jpeg,image/jpg,image/gif,image/x-png,image/tiff,image/png,application/x-photoshop,application/photoshop,image/vnd.adobe.photoshop,application/vnd.adobe.photoshop,image/bmp,image/x-tiff]" + FPO_QUALITY="10" + HEIGHT="1280" + MIME_TYPE="image/jpeg" + MIMETYPE="image/jpeg" + PROCESS="com.day.cq.dam.core.process.ThumbnailProcess" + PROCESS_AUTO_ADVANCE="true" + QUALITY="90" + SKIP="[audio/mpeg,video/(.*)]" + WIDTH="1280"/> + </node2> + <node3 + jcr:primaryType="cq:WorkflowNode" + title="End" + type="END"> + <metaData jcr:primaryType="nt:unstructured"/> + </node3> + </nodes> + <transitions jcr:primaryType="nt:unstructured"> + <node0_x0023_node1 + jcr:primaryType="cq:WorkflowTransition" + from="node0" + rule="" + to="node1"> + <metaData jcr:primaryType="nt:unstructured"/> + </node0_x0023_node1> + <node1_x0023_node2 + jcr:primaryType="cq:WorkflowTransition" + from="node1" + rule="" + to="node2"> + <metaData jcr:primaryType="nt:unstructured"/> + </node1_x0023_node2> + <node2_x0023_node3 + jcr:primaryType="cq:WorkflowTransition" + from="node2" + to="node3"> + <metaData jcr:primaryType="nt:unstructured"/> + </node2_x0023_node3> + </transitions> +</jcr:root>