PDF 生成模板编辑器
开源可视化 PDF 生成引擎,支持自定义模板,并提供面向开发者的 API,灵活构建文档生成流程。
打开目标 PDF 后,使用 PKCS#12 证书签署签名域。签名域必须属于当前文档,并具有有效的原生 UUID;仅创建 TypeScript 对象不能直接签署。
以下函数接收已完成文档加载的阅读器、证书路径、密码和输出路径。没有签名域时,先按创建表单域添加签名域,再重新读取。
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、password | PKCS#12 证书及密码 |
name、reason、location | 签署者名称、原因和地点 |
permissions | 签署后允许的文档修改范围 |
appearance | 签名文字、图像、颜色和排版 |
timestampServerUrl | RFC 3161 时间戳服务地址 |
CPDFSignaturePermission 提供 FORBID_CHANGE(禁止修改)、FILL_AND_SIGN(允许填表和签署)、ANNOTATION_FILL_AND_SIGN(允许注释、填表和签署)。这些权限与文档打开密码及加密权限分别配置。
appearance 支持 text、content、textColor、contentColor、logoPath、imagePath、drawLogo、drawOnlyContent 和 contentAlignLeft。content 可传多行字符串或 { key, value } 数组,图片参数使用本地路径。