使用 GroupDocs.Signature for Java 实现 Java QR 码签名

介绍

通过在 Java 应用程序中嵌入二维码,增强数字文档的安全性。利用 GroupDocs.Signature for Java,您可以有效地确保文档的真实性和可追溯性。本指南将指导您创建自定义数据签名、配置二维码签名选项,并使用强大的加密技术保护您的文档。

您将学到什么:

  • 如何使用 GroupDocs.Signature 创建自定义数据签名类
  • 在 Java 应用程序中配置二维码签名选项
  • 使用二维码签署文档并应用自定义加密

让我们深入了解先决条件并开始将此功能集成到您的项目中!

先决条件

在开始之前,请确保您已经在开发环境中设置了必要的库和依赖项。

所需的库和版本

要为 Java 实现 GroupDocs.Signature,请包含以下依赖项:

Maven

<dependency>
    <groupId>com.groupdocs</groupId>
    <artifactId>groupdocs-signature</artifactId>
    <version>23.12</version>
</dependency>

Gradle

implementation 'com.groupdocs:groupdocs-signation:23.12'

您也可以直接从 GroupDocs.Signature Java 版本.

环境设置要求

  • 确保您已安装可运行的 Java 开发工具包 (JDK)。
  • 设置您的集成开发环境 (IDE),例如 IntelliJ IDEA 或 Eclipse。

知识前提

  • 对 Java 编程和面向对象概念有基本的了解。
  • 熟悉使用 Maven 或 Gradle 处理依赖项。

为 Java 设置 GroupDocs.Signature

首先,按照上面的安装说明在您的项目中设置 GroupDocs.Signature,并将其包含在您的构建配置中。

许可证获取步骤

GroupDocs 提供不同的许可选项:

  • 免费试用:无限制测试所有功能。
  • 临时执照:获取用于评估目的的许可证。
  • 购买:获得商业使用的完整许可。

下载后,像这样初始化 GroupDocs.Signature:

import com.groupdocs.signature.Signature;

class InitializeGroupDocs {
    public static void main(String[] args) {
        Signature signature = new Signature("path/to/your/document");
        // 您现在可以开始使用签名对象来处理文档。
    }
}

实施指南

让我们将实施过程分解为易于管理的部分,重点关注关键特性。

自定义数据签名类

概述

创建一个自定义类来存储签名数据,例如 ID、作者、签名日期和其他因素。这可确保您的签名中封装了所有必要的元数据。

逐步实施

定义 DocumentSignatureData 类

import com.groupdocs.signature.domain.extensions.serialization.FormatAttribute;
import java.util.Date;
import java.math.BigDecimal;

class DocumentSignatureData {
    @FormatAttribute(propertyName = "SignID")
    public String ID; // 签名的唯一标识符
    
    public String getID() { return ID; }
    public void setID(String value) { ID = value; }
    
    @FormatAttribute(propertyName = "SAuth")
    public final String Author; // 文档的作者
    
    public final String getAuthor() { return Author; }
    public final void setAuthor(String value) { Author = value; }
    
    @FormatAttribute(propertyName = "SDate", propertyFormat = "yyyy-MM-dd")
    public final Date Signed = new Date(); // 签署日期和时间
    
    public final Date getSigned() { return Signed; }
    public final void setSigned(Date value) { Signed = value; }
    
    @FormatAttribute(propertyName = "SDFact", propertyFormat = "N2")
    public final BigDecimal DataFactor = new BigDecimal(0.01); // 签名的附加数据因素
    
    public final BigDecimal getDataFactor() { return DataFactor; }
    public final void setDataFactor(BigDecimal value) { DataFactor = value; }
}

解释:

  • 格式属性:注释属性以自定义序列化。
  • 特性:捕获必要的详细信息,例如唯一 ID、作者姓名、签名日期和数据因素。

QR 码签名选项配置

概述

配置二维码签名选项来定义二维码在文档上的显示方式,包括大小、对齐方式和填充。

逐步实施

定义 QrCodeSignOptionsConfig 类

import com.groupdocs.signature.domain.enums.HorizontalAlignment;
import com.groupdocs.signature.domain.enums.VerticalAlignment;
import com.groupdocs.signature.domain.qrcodes.QrCodeTypes;
import com.groupdocs.signature.domain.Padding;
import com.groupdocs.signature.options.sign.QrCodeSignOptions;

class QrCodeSignOptionsConfig {
    public static QrCodeSignOptions setupQrCodeSignOptions(DocumentSignatureData documentSignature) {
        QrCodeSignOptions options = new QrCodeSignOptions();
        
        // 将自定义数据对象序列化为二维码
        options.setData(documentSignature);
        
        // 指定二维码类型
        options.setEncodeType(QrCodeTypes.QR);
        
        // 配置对齐的填充
        Padding padding = new Padding();
        padding.setRight(10); // 右填充(以像素为单位)
        padding.setBottom(10); // 底部填充(以像素为单位)
        options.setMargin(padding);
        
        // 定义二维码的大小和位置
        options.setHeight(100);
        options.setWidth(100);
        options.setVerticalAlignment(VerticalAlignment.Bottom);
        options.setHorizontalAlignment(HorizontalAlignment.Right);
        
        return options;
    }
}

解释:

  • QrCodeSignOptions:管理二维码的显示方式,包括其大小和位置。
  • 填充:调整文档内的对齐方式。

使用二维码和自定义加密进行文档签名

概述

结合二维码和自定义加密技术,安全地签署文档。这确保了数据的完整性和保密性。

逐步实施

使用二维码签署文件

import com.groupdocs.signature.Signature;
import com.groupdocs.signature.domain.extensions.encryption.IDataEncryption;
import com.groupdocs.signature.exception.GroupDocsSignatureException;

import java.util.UUID;

class SignDocumentWithQRCode {
    public static void signDocument(String filePath, String outputFilePath) throws Exception {
        try {
            Signature signature = new Signature(filePath);

            // 自定义XOR加密策略
            IDataEncryption encryption = new CustomXOREncryption();

            // 配置自定义文档签名数据对象
            DocumentSignatureData documentSignature = new DocumentSignatureData();
            documentSignature.setID(UUID.randomUUID().toString());
            documentSignature.setAuthor(System.getenv("USERNAME"));
            documentSignature.setSigned(new Date());
            documentSignature.setDataFactor(new BigDecimal("11.22"));

            // 设置二维码选项
            QrCodeSignOptions options = QrCodeSignOptionsConfig.setupQrCodeSignOptions(documentSignature);

            // 对二维码内的数据进行加密
            options.setDataEncryption(encryption);

            // 签署并保存文件
            signature.sign(outputFilePath, options);
        } catch (Exception e) {
            throw new GroupDocsSignatureException(e.getMessage());
        }
    }
}

解释:

  • 自定义异或加密:实施自定义加密策略来保护二维码数据。
  • 唯一标识符:为每个签名生成一个唯一的标识符。