DEV Community

Shahzad Ashraf
Shahzad Ashraf

Posted on

Stamp Signatures Made Easy: Sign DOCX Files in Java with Cloud REST API

Stamp signatures are essential for authenticating documents, particularly for digitally processed Word documents such as DOCX files. They provide a clear and legally valid method for confirming the origin, endorsement, or status of a document. For Java developers creating document management applications or workflow automation tools, having an effective way to programmatically apply stamp signatures can be a significant benefit.

In our recent article, we guide you on how to incorporate stamp signatures into DOCX files using the GroupDocs.Signature Cloud Java SDK. With just a few straightforward REST API calls, you can embed cloud-based document signing directly into your Java applications. This eliminates the reliance on large desktop applications or manual processes, enhancing the scalability, security, and user-friendliness of your apps. The SDK enables full customization of the stamp's appearance — including its position, font style, background images, and more — providing developers with complete control over the signature output.

This method is particularly advantageous for teams developing Java-based document automation solutions, e-signature processes, or Java REST API integrations. By processing documents in the cloud, applying visual stamp signatures, and upholding security protocols throughout your infrastructure, you gain both adaptability and assurance in managing your files. If you're working on projects ranging from enterprise-level signing solutions to internal approval workflows, this in-depth article is certainly worth reading.

Here’s a functional code example to help you get started right away:

package com.groupdocs;
import com.groupdocs.cloud.signature.client.*;
import com.groupdocs.cloud.signature.api.*;
import com.groupdocs.cloud.signature.model.*;
import com.groupdocs.cloud.signature.model.OptionsBase.*;
import com.groupdocs.cloud.signature.model.SignImageOptions.*;
import com.groupdocs.cloud.signature.model.requests.*;

public class SignDOCXwithStamp {

    public static void main(String[] args) {

        // Configure your API credentials for authentication
        String MyAppKey = "your-app-key"; 
        String MyAppSid = "your-app-sid";
        Configuration configuration = new Configuration(MyAppKey, MyAppSid);

        // Create an instance of SignApi to sign DOCX with stamp
        SignApi apiInstance = new SignApi(configuration);

        // Define the source file
        FileInfo fileInfo = new FileInfo();
        fileInfo.setFilePath("SampleFiles/source.docx");

        // Set up stamp signature options
        SignStampOptions options = new SignStampOptions();
        options.setSignatureType(SignatureTypeEnum.STAMP);

        Color darkRed = new Color();
        darkRed.setWeb("DarkRed");

        Color royalBlue = new Color();
        royalBlue.setWeb("RoyalBlue");

        Color goldColor = new Color();
        goldColor.setWeb("Gold");

        Color darkOrange = new Color();
        darkOrange.setWeb("DarkOrange");

        Color bgWhite = new Color();
        bgWhite.setWeb("White");

        // Set signature positioning
        options.setLeft(100);
        options.setTop(100);
        options.setWidth(200);
        options.setHeight(200);
        options.setLocationMeasureType(LocationMeasureTypeEnum.PIXELS);
        options.setSizeMeasureType(SizeMeasureTypeEnum.PIXELS);
        options.setRotationAngle(0);

        Padding padding = new Padding();
        padding.setAll(5);
        options.setMargin(padding);
        options.setMarginMeasureType(MarginMeasureTypeEnum.PIXELS);

        // Define stamp signature appearance
        options.setBackgroundColor(bgWhite);

        // Outer line text
        StampLine outerLines = new StampLine();
        outerLines.setText("GroupDocs Cloud eSign API");

        SignatureFont outerLineFont = new SignatureFont();
        outerLineFont.setFontFamily("Arial");
        outerLineFont.setFontSize(12.0);
        outerLineFont.setBold(true);
        outerLines.setFont(outerLineFont);
        outerLines.setTextBottomIntent(3);
        outerLines.setTextColor(goldColor);
        outerLines.setTextRepeatType(StampLine.TextRepeatTypeEnum.FULLTEXTREPEAT);
        outerLines.setBackgroundColor(bgWhite);
        outerLines.setHeight(20);

        BorderLine outerLineBorder1 = new BorderLine();
        outerLineBorder1.setColor(darkRed);
        outerLineBorder1.setStyle(BorderLine.StyleEnum.LONGDASH);
        outerLineBorder1.setTransparency(0.0);
        outerLineBorder1.setWeight(2.0);
        outerLines.setInnerBorder(outerLineBorder1);

        BorderLine outerLineBorder2 = new BorderLine();
        outerLineBorder2.setColor(darkOrange);
        outerLineBorder2.setStyle(BorderLine.StyleEnum.LONGDASHDOT);
        outerLineBorder2.setTransparency(0.3);
        outerLineBorder2.setWeight(1.0);
        outerLines.setOuterBorder(outerLineBorder2);

        outerLines.setVisible(true);
        options.addOuterLinesItem(outerLines);

        // Inner line text
        StampLine innerLine = new StampLine();
        innerLine.setText("Certified");

        SignatureFont innerLineFont = new SignatureFont();
        innerLineFont.setFontFamily("Arial");
        innerLineFont.setFontSize(16.0);
        innerLineFont.setBold(true);
        innerLine.setFont(innerLineFont);
        innerLine.setTextBottomIntent(2);
        innerLine.setTextColor(goldColor);
        innerLine.setTextRepeatType(StampLine.TextRepeatTypeEnum.FULLTEXTREPEAT);
        innerLine.setBackgroundColor(royalBlue);
        innerLine.setHeight(20);

        BorderLine innerLineBorder1 = new BorderLine();
        innerLineBorder1.setColor(darkRed);
        innerLineBorder1.setStyle(BorderLine.StyleEnum.LONGDASH);
        innerLineBorder1.setTransparency(0.0);
        innerLineBorder1.setWeight(2.0);
        innerLine.setInnerBorder(innerLineBorder1);

        BorderLine innerLineBorder2 = new BorderLine();
        innerLineBorder2.setColor(darkOrange);
        innerLineBorder2.setStyle(BorderLine.StyleEnum.DOT);
        innerLineBorder2.setTransparency(0.5);
        innerLineBorder2.setWeight(2.0);
        innerLine.setOuterBorder(innerLineBorder2);

        innerLine.setVisible(true);
        options.addInnerLinesItem(innerLine);

        // Apply signature to all pages
        options.setPage(1);
        options.setAllPages(true);

        SaveOptions saveOptions = new SaveOptions();
        saveOptions.setOutputFilePath("signature/signed.docx");

        SignSettings settings = new SignSettings();
        settings.setFileInfo(fileInfo);
        settings.addOptionsItem(options);
        settings.setSaveOptions(saveOptions);

        try 
        {
            // Process the stamp signature request
            CreateSignaturesRequest request = new CreateSignaturesRequest(settings);
            SignResult response = apiInstance.createSignatures(request);

        } catch (Exception e) {

            System.err.println("An error occurred: " + e.getMessage());
        }
    }
}
Enter fullscreen mode Exit fullscreen mode

Top comments (0)