Skip to content
DemoAPI 参考文档FAQ

PDF 生成模板编辑器

开源可视化 PDF 生成引擎,支持自定义模板,并提供面向开发者的 API,灵活构建文档生成流程。

查看 GitHub
React Native Guides Create digital signatures

创建数字签名 ​

打开目标 PDF 后,使用 PKCS#12 证书签署签名域。签名域必须属于当前文档,并具有有效的原生 UUID;仅创建 TypeScript 对象不能直接签署。

获取未签署的签名域并签署 ​

以下函数接收已完成文档加载的阅读器、证书路径、密码和输出路径。没有签名域时,先按创建表单域添加签名域,再重新读取。

ts
import { CPDFReaderView, CPDFSignatureWidget, CPDFSignaturePermission }
  from '@compdfkit_pdf_sdk/react_native';

async function signDocument(reader: CPDFReaderView,
  certificatePath: string, password: string, outputPath: string) {
  const document = reader._pdfDocument;
  const widgets = await document.pageAtIndex(0).getWidgets();
  const field = widgets.find(
    (item): item is CPDFSignatureWidget =>
      item instanceof CPDFSignatureWidget && item.isSigned === false,
  );
  if (!field || !field.uuid) throw new Error('没有可签署的签名域');
  const success = await document.writeSignature(0, field.uuid, outputPath, {
    certificatePath, password, reason: 'Approved', location: 'Office',
    permissions: CPDFSignaturePermission.FILL_AND_SIGN,
    appearance: { text: 'Signed by Document Signer',
      content: 'Approved', drawLogo: false },
  });
  if (!success) throw new Error('签署失败');
  if (!await document.open(outputPath)) throw new Error('打开签名文件失败');
}

isSigned 表示是否已有数字签名。该属性是可选字段,缺失时应作为未知状态处理,不能视为未签署。writeSignature() 的前两个参数为页面索引(从 0 开始)和该页签名域的 uuid。

签名写入新文件,输出路径必须与源文件不同,且父目录已存在、可写。接口返回 true 后,再打开输出文件查看和验证签名;调用失败也可能拒绝 Promise。

签名配置 ​

配置说明
certificatePath、passwordPKCS#12 证书及密码
name、reason、location签署者名称、原因和地点
permissions签署后允许的文档修改范围
appearance签名文字、图像、颜色和排版
timestampServerUrlRFC 3161 时间戳服务地址

CPDFSignaturePermission 提供 FORBID_CHANGE(禁止修改)、FILL_AND_SIGN(允许填表和签署)、ANNOTATION_FILL_AND_SIGN(允许注释、填表和签署)。这些权限与文档打开密码及加密权限分别配置。

appearance 支持 text、content、textColor、contentColor、logoPath、imagePath、drawLogo、drawOnlyContent 和 contentAlignLeft。content 可传多行字符串或 { key, value } 数组,图片参数使用本地路径。

后续参见读取与验证数字签名和时间戳与长期验证。