如何使用 GroupDocs.Signature for Java 在 PDF 中实现自定义二维码序列化和加密

介绍

在数字时代,安全的文档签名对于维护数据完整性和真实性至关重要。GroupDocs.Signature for Java 是一个功能强大的库,旨在简化文档签名的添加。本教程将指导您使用 GroupDocs.Signature for Java 在 PDF 中实现自定义二维码序列化和加密。

您将学到什么:

  • 如何设置和配置 Java 版 GroupDocs.Signature
  • 实现二维码签名的自定义序列化
  • 加密二维码内的序列化数据
  • 应用这些功能来保护您的文档

在深入实施之前,让我们确保您已准备好后续的一切。

先决条件

为了有效使用本教程,请确保满足以下先决条件:

  1. 所需的库和依赖项:

    • GroupDocs.Signature for Java 版本 23.12 或更高版本
    • Maven 或 Gradle 用于依赖管理(可选)
  2. 环境设置要求:

    • 您的机器上安装了 Java 开发工具包 (JDK)
    • 对 Java 编程有基本的了解
  3. 知识前提:

    • 熟悉 Java 和面向对象编程概念
    • 使用 Java 处理 PDF 的基础知识

为 Java 设置 GroupDocs.Signature

首先,您需要在项目环境中设置 GroupDocs.Signature 库。

Maven 安装

如果您使用 Maven,请将以下依赖项添加到您的 pom.xml 文件:

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

Gradle 安装

对于 Gradle 用户,请在您的 build.gradle 文件:

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

直接下载

或者,您可以直接从 GroupDocs.Signature Java 版本.

许可证获取步骤

  • 免费试用: 首先下载试用版来测试其功能。
  • 临时执照: 如果需要,您可以申请临时许可证,这样您就可以不受任何限制地评估产品。
  • 购买: 为了长期使用,请考虑购买完整许可证。

安装后,在您的项目中初始化 GroupDocs.Signature:

import com.groupdocs.signature.Signature;

public class SetupGroupDocs {
    public static void main(String[] args) {
        Signature signature = new Signature("YOUR_DOCUMENT_DIRECTORY/sample.pdf");
        // 您的代码在这里...
    }
}

实施指南

现在,让我们深入研究使用 GroupDocs.Signature for Java 实现自定义二维码序列化和加密。

二维码签名的自定义序列化类

概述

此功能涉及创建一个类,用于将元数据序列化为二维码签名。 DocumentSignatureData 类存储ID、作者、签名日期、数据因素等属性。

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

class DocumentSignatureData {
    @FormatAttribute(propertyName = "SignID")
    public String ID;

    public void setID(String value) { 
        this.ID = value; 
    }

    @FormatAttribute(propertyName = "SAuth")
    public String author;

    public void setAuthor(String value) {
        this.author = value;
    }

    @FormatAttribute(propertyName = "SDate", propertyFormat = "yyyy-MM-dd")
    public Date signed = new Date();

    public void setSigned(Date value) {
        this.signed = value;
    }

    @FormatAttribute(propertyName = "SDFact", propertyFormat = "N2")
    public BigDecimal dataFactor = new BigDecimal(0.01);

    public void setDataFactor(BigDecimal value) {
        this.dataFactor = value;
    }
}

解释

  • 属性:@FormatAttribute 注释指定如何将每个属性序列化到二维码中。
    • ID:签名的唯一标识符。
    • 作者:签署文件的人。
    • 签署日期:文件签署的时间戳。
    • 数据因素:与签名相关的附加数字数据。

具有自定义数据序列化和加密的二维码签名

概述

本节演示如何使用包含自定义序列化数据和加密的二维码签署文档。

import com.groupdocs.signature.Signature;
import com.groupdocs.signature.domain.Padding;
import com.groupdocs.signature.domain.enums.HorizontalAlignment;
import com.groupdocs.signature.domain.enums.VerticalAlignment;
import com.groupdocs.signature.domain.extensions.encryption.IDataEncryption;
import com.groupdocs.signature.domain.qrcodes.QrCodeTypes;
import com.groupdocs.signature.exception.GroupDocsSignatureException;
import com.groupdocs.signature.options.sign.QrCodeSignOptions;
import java.io.File;
import java.math.BigDecimal;
import java.util.Date;
import java.util.UUID;

class SignWithQRCodeCustomSerialization {
    String filePath = "YOUR_DOCUMENT_DIRECTORY/sample.pdf"; 
    String outputFilePath = new File("YOUR_OUTPUT_DIRECTORY", "SignedQRCodeCustomSerialization.pdf").getPath();

    public void signDocument() throws Exception {
        Signature signature = new Signature(filePath);

        // 在这里实现您的自定义加密逻辑
        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 = new QrCodeSignOptions();
        options.setData(documentSignature);
        options.setEncodeType(QrCodeTypes.QR);
        options.setDataEncryption(encryption);

        // 配置对齐和外观
        options.setHeight(100);
        options.setWidth(100);
        options.setVerticalAlignment(VerticalAlignment.Bottom);
        options.setHorizontalAlignment(HorizontalAlignment.Right);
        
        Padding padding = new Padding();
        padding.setRight(10);
        padding.setBottom(10);
        options.setMargin(padding);

        signature.sign(outputFilePath, options);
    }
}

解释

  • 自定义加密: 实现您自己的加密逻辑 CustomXOREncryption 或者使用任何其他方法实现 IDataEncryption
  • 签名选项: 使用高度、宽度、填充等选项配置二维码的外观和对齐方式。
  • 签约流程:signature.sign() 方法将二维码签名应用于文档。

故障排除提示

  • 确保在构建工具(Maven/Gradle)中正确配置所有依赖项。
  • 验证输入和输出文档的文件路径是否准确。
  • 确认您的自定义加密逻辑已正确实现和集成。

实际应用

以下是此功能的一些实际应用:

  1. 法律文件签署: 使用嵌入二维码的元数据安全地签署合同,以确保真实性。
  2. 发票处理: 自动向发票添加加密签名,以增加安全性和可追溯性。
  3. 物流追踪: 使用签名文件进行货运追踪,在二维码中嵌入唯一标识符和时间戳。
  4. 学术认证: 使用二维码签名将学生信息安全地嵌入到数字证书中