密文脱敏
密文脱敏(Redaction)用于永久移除 PDF 中的敏感内容。它通常分为两个阶段:
- 创建密文标记,用于标识需要脱敏的区域。
- 应用密文脱敏,永久删除标记区域下方的文本、图片或图形内容。
注意
调用 applyRedaction() 后,被脱敏区域的原始内容会从 PDF 中永久移除。建议在应用前提示用户确认,并保留原始文件备份。
标记区域密文
PDFPage.markRedactAnnot(rects) 用于在页面上标记需要脱敏的区域。输入区域使用 PDF 坐标。
javascript
const page = await pdfDoc.getPageByIndex(0);
const redactionAnnots = await page.markRedactAnnot([
{
left: 100,
right: 300,
top: 720,
bottom: 680
}
]);
传入多个矩形时,这些矩形会被视为同一个密文注释的多个区域。
javascript
await page.markRedactAnnot([
{ left: 100, right: 300, top: 720, bottom: 700 },
{ left: 100, right: 260, top: 690, bottom: 670 }
]);
按页创建密文标记
PDFDoc.makeRedactByPages(pages) 可用于将指定页面整体标记为密文区域。
javascript
await pdfDoc.makeRedactByPages([0, 2]);
搜索后标记密文
可以结合 PDFDoc.searchText() 搜索敏感词,并使用搜索结果中的矩形区域创建密文标记。
javascript
const result = await pdfDoc.searchText([0], ['secret'], {
wholeWordsOnly: true,
caseSensitive: false
});
const page = await pdfDoc.getPageByIndex(0);
const rects = result[0].flatMap(item => item.rects);
if (rects.length > 0) {
await page.markRedactAnnot(rects);
}
应用密文脱敏
PDFDoc.applyRedaction() 会应用文档中的密文标记,并永久移除被标记区域下方的内容。
javascript
const result = await pdfDoc.applyRedaction();
if (result === false) {
throw new Error('应用密文脱敏失败');
}
应用完成后,应导出并保存文档。
javascript
const file = await pdfDoc.getFile({
fileName: 'redacted.pdf'
});
与注释的关系
密文标记在应用前属于一种注释,用户可以在界面中预览、调整或删除。应用后,密文标记本身会被处理,被覆盖区域的原始内容会从文档内容中移除。
如果需要控制密文标记的创建、删除或编辑权限,可以结合 权限管理器。
坐标说明
markRedactAnnot() 使用 PDF 坐标,通常以页面左下角为原点,单位为 point。若业务中使用的是鼠标坐标或 Viewer 的 device pixels,需要先进行坐标转换。
可参考:
PDFPage.getDevicePoint():PDF 坐标转设备坐标。PDFPage.reverseDevicePoint():设备坐标转 PDF 坐标。PDFPage.reverseDeviceRect():设备矩形转 PDF 矩形。
注意事项
- 密文脱敏是不可逆操作,应用前应提示用户确认。
- 仅创建密文标记不会删除原始内容,必须调用
applyRedaction()才会永久移除。 - 对扫描件中的图片文字进行脱敏时,标记区域应覆盖图片内容本身。
- 搜索后脱敏适合处理可解析文本;扫描件通常需要 OCR 后才能按文本搜索。