Skip to content

密文脱敏

密文脱敏(Redaction)用于永久移除 PDF 中的敏感内容。它通常分为两个阶段:

  1. 创建密文标记,用于标识需要脱敏的区域。
  2. 应用密文脱敏,永久删除标记区域下方的文本、图片或图形内容。

注意

调用 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 后才能按文本搜索。