对 PDF 文件进行数字签名

PDF 文档是广泛使用的信息共享文件格式之一。它们通常具有机密和法律价值,例如合同。为了确保文件的完整性并避免任何伪造,我们添加了数字签名。它还可以确保文档未被其作者以外的其他人修改,并验证作者是我们期望的人而不是其他人。

PDF 中的数字签名相当于纸质文档上的墨水签名,但安全得多。此信息放在文档中,流行的 PDF 阅读器可以检查文档是否被未知人员修改。在本文中,我们将讨论如何使用 PHP 在线对 PDF 文档进行数字签名的详细信息。

使用 cURL 命令访问 API

我们的 API 是根据 REST 架构原则构建的,因此也可以通过 cURL 命令访问它们。请注意,我们的 API 仅供授权人员访问,因此在访问 API 之前,您需要先访问 Aspose.Cloud 仪表板,如果您有 GitHub 或 Google 帐户,只需注册即可。否则,单击 创建新帐户 按钮并提供所需信息。现在使用凭据登录仪表板并从仪表板展开应用程序部分,向下滚动到客户端凭据部分以查看客户端 ID 和客户端密钥详细信息。

现在下一步是生成 JSON Web Token (JWT),以便可以通过命令提示符访问 API。使用相同的 JWT 令牌通过 cURL 命令访问 API。

curl -v "https://api.aspose.cloud/connect/token" \
-X POST \
-d "grant_type=client_credentials&client_id=a41d01ef-dfd5-4e02-ad29-bd85fe41e3e4&client_secret=d87269aade6a46cdc295b711e26809af" \
-H "Content-Type: application/x-www-form-urlencoded" \
-H "Accept: application/json"

通过 PHP SDK 访问 API

为了方便希望通过 PHP 代码以编程方式处理 PDF 文件的 PHP 客户,我们开发了 Aspose.PDF Cloud SDK for PHP,它是 Aspose.PDF Cloud API 的包装器。我们可以使用相同的 SDK 来处理数字签名并执行相关操作。可以从 ComposerGitHub 下载该 SDK。

我们现在将讨论通过 Composer 安装 Aspose.PDF Cloud SDK for PHP 的步骤。我们已经知道,建议使用 Composer 与 SDK 一起使用并管理您的项目依赖项。因此,一旦我们在系统上配置了 Composer,请尝试使用以下命令安装 Aspose.PDF Cloud SDK for PHP。

composer require aspose/pdf-sdk-php

读取签名字段

该 API 可让您读取 PDF 文档中已有的签名字段相关属性。要读取签名字段,您有两种选择。

为了从文档的特定页面读取签名字段,请尝试使用以下 cURL 命令。请注意,在以下命令中,BlankWithSignature.pdf 是源 PDF 文件:

curl -X GET "https://api.aspose.cloud/v3.0/pdf/BlankWithSignature.pdf/page/1/fields/signature" \
-H  "accept: application/json" \
-H  "authorization: Bearer <JWT Token>"

现在,为了读取与文档中的特定签名字段相关的属性,请尝试使用以下命令,其中我们提供特定签名字段的名称作为参数。

curl -X GET "https://api.aspose.cloud/v3.0/pdf/BlankWithSignature.pdf/fields/signature/Signature1" \
-H  "accept: application/json" \
-H  "authorization: Bearer <JWT Token>"

下面给出的详细信息和步骤解释了如何使用 PHP 代码从 PDF 文档的某些页面检索签名字段详细信息。

protected $pdfApi;
// 从 https://dashboard.aspose.cloud/ 获取 App key 和 App SID
$appSid = '';
$appKey = '';
$host = 'https://api.aspose.cloud/v3.0';

// 配置对象
$this->config = new Configuration();
$this->config->setAppKey($appKey);
$this->config->setAppSid($appSid);
$this->config->setHost($host);

// 创建 PdfApi 实例
$this->pdfApi = new PdfApi(null, $this->config);

// 输入 PDF 文档的名称
$name = 'BlankWithSignature.pdf';
// 将文件上传至云存储 
$this->uploadFile($name);

// 文档中的页码
$pageNumber = 1;

// 调用 API 方法从文档中检索签名字段
$response = $this->pdfApi->getPageSignatureFields($name, $pageNumber, null, $this->tempFolder);
$this->assertEquals(200, $response->getCode());

给定的代码显示如何检索 PDF 文件中某些签名字段的信息。

protected $pdfApi;
// 从 https://dashboard.aspose.cloud/ 获取 App key 和 App SID
$appSid = '';
$appKey = '';
$host = 'https://api.aspose.cloud/v3.0';

// 配置对象
$this->config = new Configuration();
$this->config->setAppKey($appKey);
$this->config->setAppSid($appSid);
$this->config->setHost($host);

// 创建 PdfApi 实例
$this->pdfApi = new PdfApi(null, $this->config);

// 输入 PDF 文档的名称
$name = 'BlankWithSignature.pdf';
// 将 PDF 上传至云存储
$this->uploadFile($name);

// 签名字段以检索信息
$fieldName = 'Signature1';

// 调用 API 检索签名字段详细信息
$response = $this->pdfApi->getSignatureField($name, $fieldName, null, $this->tempFolder);
$this->assertEquals(200, $response->getCode());

使用 PHP 添加签名字段

Aspose.PDF Cloud SDK for PHP 还提供了将签名字段添加到 PDF 文档的功能。以下代码片段可让您将签名字段添加到 PDF 文件。

签署 PDF 文件
 protected $pdfApi;
// 从 https://dashboard.aspose.cloud/ 获取 App key 和 App SID
$appSid = '';
$appKey = '';
$host = 'https://api.aspose.cloud/v3.0';

// 配置对象
$this->config = new Configuration();
$this->config->setAppKey($appKey);
$this->config->setAppSid($appSid);
$this->config->setHost($host);

// 创建 PdfApi 实例
$this->pdfApi = new PdfApi(null, $this->config);

// 输入 PDF 文档的名称
$name = 'BlankWithSignature.pdf';

// 将文件上传至云存储
$this->uploadFile($name);

$signatureFileName = '33226.p12';
$this->uploadFile($signatureFileName);

$folder = $this->tempFolder;

$signature = new Aspose\PDF\Model\Signature();
$signature->setAuthority('Nayyer Shahbaz');
$signature->setContact('nayyer.shahbaz@aspose.com');
$signature->setDate('08/01/2012 12:15:00.000 PM');
$signature->setFormFieldName('Signature1');
$signature->setLocation('Australia');
$signature->setPassword('sIikZSmz');
$signature->setRectangle(new Aspose\PDF\Model\Rectangle(['llx' => 100, 'lly' => 100, 'urx' => 0, 'ury' => 0]));
$signature->setSignaturePath($folder . '/' . $signatureFileName);
$signature->setSignatureType(Aspose\PDF\Model\SignatureType::PKCS7);
$signature->setVisible(true);
$signature->setShowProperties(false);

$field = new Aspose\PDF\Model\SignatureField();
$field->setPartialName('sign1');
// 需要添加签名字段的页面索引
$field->setPageIndex(1);
$field->setSignature($signature);
// 指定签名字段的矩形区域
$field->setRect(new Aspose\PDF\Model\Rectangle(['llx' => 100, 'lly' => 100, 'urx' => 160, 'ury' => 140]));

// 调用API添加签名字段
$response = $this->pdfApi->postSignatureField($name, $field, null, $this->tempFolder);
$this->assertEquals(200, $response->getCode());

结论

在这篇博客中,我们讨论了在 PDF 文档中使用数字签名的概念。我们了解了如何检索与现有签名字段相关的信息以及如何在文档中添加新的签名字段。请注意,Aspose.PDF Cloud SDK for PHP 是开源的,完整的源代码可以从 GitHub 存储库下载。

请尝试使用我们的 API,如果您遇到任何问题,请随时通过免费的客户支持论坛联系。