PDF涂黑后还能复制?用ComPDF删除敏感文字并核验

发布时间:2026/10/22 7:22:49

PDF涂黑后还能复制?用ComPDF删除敏感文字并核验 PDF 中的一段文字被黑色矩形盖住后画面上可能看不见文件里的文字却未必被删除。判断处理是否生效要检查导出后的文件。下面用 ComPDF Web SDK 对同一份教学 PDF 做三种处理普通矩形遮挡、仅创建密文标记、应用密文。随后重新读取输出核对目标文字和需要保留的内容。先看输出结果教学文件含有两个标记TEST-SECRET-ALPHA是本次处理目标KEEP-PUBLIC-BETA应保持原样。它们是虚构教学文字不是账号、密钥或客户信息。处理方式目标文字能否提取保留标记是否还在普通黑色矩形能在创建密文标记未应用能在应用密文后导出本次未提取到在图三个真实输出 PDF 的独立渲染与文字提取核对。仅创建密文标记不会删除正文导出文件在其他阅读器中的标记外观可能不同不能靠是否出现黑块判断已经应用。这组对照使用 Web SDK 2.9.4。关键 PDF 处理由 ComPDF 完成后面的 Python 读取仅用于独立核验输出。1. 准备最小项目本例在 Node.js 24.18.0、Vite 7.1.9 下运行。创建目录并安装依赖mkdircompdf-redaction-democdcompdf-redaction-demonpminit-ynpminstall--save-exact compdfkit_pdf_sdk/webviewer2.9.4 vite7.1.9mkdir-ppublic/webviewer public/samplescp-anode_modules/compdfkit_pdf_sdk/webviewer/dist/. public/webviewer从SDK 试用许可取得 Web 许可在项目根目录创建.env.localVITE_COMPDF_LICENSEYOUR_WEB_SDK_LICENSE这是 Web SDK 许可不是 Cloud API 的x-api-key。许可配置见添加 Web 许可密钥。公开示例只保留占位符实际许可单独配置。把待检查的 PDF 放到public/samples/redaction-source.pdf。如果需要快速制作与下文坐标对应的最小教学输入可以运行python3-mpipinstallreportlab# make_sample.pyfromreportlab.pdfgenimportcanvas ccanvas.Canvas(public/samples/redaction-source.pdf,pagesize(595,842))c.setFont(Helvetica,18)c.drawString(60,500,TEST-SECRET-ALPHA)c.drawString(60,410,KEEP-PUBLIC-BETA)c.save()python3 make_sample.py配图中的输入另加了品牌和中文教学说明两个标记的位置与上面的最小输入相同。实际文件需要按自己的页面坐标选区域不能照搬矩形。2. 添加普通遮挡再创建密文标记在根目录保存下面的index.html!doctypehtmlhtmllangzh-CNmetacharsetUTF-8titlePDF 密文验证/titlestylebody{font-family:sans-serif;margin:16px;}button{margin:0 6px 10px 0;padding:8px;}#viewer{height:80vh;}/stylebuttonidresetdisabled重新打开原件/buttonbuttonidcoverdisabled添加普通遮挡/buttonbuttonidmarkdisabled创建密文标记/buttonbuttonidapplydisabled应用密文/buttonbuttonidsavedisabled下载当前 PDF/buttonpidstatus正在加载/pdividviewer/divscripttypemoduleimportWebViewerfromcompdfkit_pdf_sdk/webviewer;conststatusdocument.querySelector(#status);constcoreawaitWebViewer.init({path:/,pdfUrl:/samples/redaction-source.pdf,license:import.meta.env.VITE_COMPDF_LICENSE},document.querySelector(#viewer));constdoccore.docViewer;letstagesource;doc.addEvent(documentloaded,(){document.querySelectorAll(button).forEach(bb.disabledfalse);status.textContent原件已打开;});// Web SDK 的页面坐标以左上角为原点pageIndex 从 0 开始。constrect{left:55,top:320,right:310,bottom:353};document.querySelector(#reset).onclickasync(){awaitcore.UI.loadDocument(/samples/redaction-source.pdf);stagesource;};document.querySelector(#cover).onclickasync(){awaitdoc.addAnnotations({type:square,pageIndex:0,rect,borderWidth:0,opacity:1,fillTransparency:1,fillColor:#000000,color:#000000,borderColor:#000000,borderStyle:solid,dashes:[]});stagecovered;status.textContent已添加普通矩形;};document.querySelector(#mark).onclickasync(){awaitdoc.addAnnotations({type:redact,pageIndex:0,rect,fillColor:#000000,erasure:false});stagemarked;status.textContent已标记尚未应用;};document.querySelector(#apply).onclickasync(){awaitdoc.applyRedactions(all);stageredacted;status.textContent已应用请导出后核查;};document.querySelector(#save).onclickasync(){constdataawaitdoc.exportPDF(true);consturlURL.createObjectURL(newBlob([data],{type:application/pdf}));constadocument.createElement(a);a.hrefurl;a.downloadstage.pdf;a.click();setTimeout(()URL.revokeObjectURL(url),10000);};/script/html启动npx vite--host127.0.0.1打开终端显示的本地地址。这里将 SDK 静态资源复制到public/webviewer初始化的path使用/使阅读器入口落到/webviewer/index.html部署到子目录时应一起调整资源与 PDF 路径。按下面顺序操作确保三份输出来自同一原件添加普通遮挡下载covered.pdf。重新打开原件创建密文标记先下载marked.pdf。对当前标记应用密文再下载redacted.pdf。ComPDF 的密文处理分为标记和应用两个步骤。addAnnotations({ type: redact, ... })只是标记区域本例随后调用applyRedactions(all)才处理标记内容。保留原件在副本上完成验证。图本地教学项目嵌入 ComPDF Web SDK 的实际操作界面目标区域已应用密文。下文仍检查导出文件。3. 独立核对导出文件把三份文件放在同一目录安装读取工具python3-mpipinstallpypdf# verify_outputs.pyfrompathlibimportPathfrompypdfimportPdfReaderfornamein[covered,marked,redacted]:text\n.join(page.extract_text()orforpageinPdfReader(Path(name.pdf)).pages)print(name,{target_found:TEST-SECRET-ALPHAintext,retained_found:KEEP-PUBLIC-BETAintext,})python3 verify_outputs.py本次结果covered target_foundTrue retained_foundTrue marked target_foundTrue retained_foundTrue redacted target_foundFalse retained_foundTrue再用另一阅读器打开输出检查目标区域和周围内容。文字提取结果用于核验这组教学标记不证明图片、附件、表单、元数据或历史内容都已经清理。实际文件还需要检查什么这里处理的是电子 PDF 中已知位置的文字区域。扫描图片、隐藏 OCR 层、多页重复信息以及页面外的附件等要作为独立检查项处理。也不要把删除一个关键词当作完整脱敏检查全部目标出现位置、非目标内容是否保留以及接收方拿到的最终文件。先用自己的教学副本跑通“标记 → 应用 → 导出 → 重开核查”确认结果符合任务再接入业务流程。
延伸阅读

更多相关文章

2026/10/22 7:22:49

19|Middleware 实战:在决策循环中加入控制能力 - eino教程

19|Middleware 实战:在决策循环中加入控制能力 《Eino 实战:用 Go 构建 AI 应用与智能体》 第 19 篇 关键词:ChatModelAgentMiddleware、生命周期钩子、WrapInvokableToolCall、审计、校验 前置条件:已完成 16&#xf…

2026/10/22 7:22:49

铜材激光焊接光源选型 绿光与红外的分工边界

铜材激光焊接光源选型 绿光与红外的分工边界 这篇文章讲的是铜材激光焊接中红外激光与绿光激光的光源选型判断框架:按吸收特性、缺陷主导类型、熔深与节拍要求、综合成本口径四个维度评估,确定两条路线的适用边界。 选型争议的起点是铜的物理特性&…

2026/10/22 8:32:58

veg200数据集科学划分:面向农业AI落地的鲁棒性分层策略

1. 项目概述:为什么 veg200 数据集划分不是“复制粘贴”就能搞定的事 你拿到 veg200 蔬菜分类数据集,第一反应是不是直接 train_test_split 一跑,再手动挪几个文件夹完事?我试过——三次模型在验证集上准确率波动超过12%&#x…

2026/10/22 8:32:58

Docker 搭建 Nexus3 并配置 Docker 私有仓库实战指南

1. 为什么要在内网自建 Docker 镜像仓库 很多团队一开始都是直接用公共镜像仓库拉取基础镜像,本地构建完业务镜像后,要么推到公共仓库,要么干脆只在本地留着。等到服务器规模一上来,问题就全冒出来了:构建机拉取镜像慢…

2026/10/22 8:32:58

LVM卷组与条带化:提升磁盘IO性能的底层实践

1. 项目概述:从磁盘管理的“堵车现场”到“高速公路”的底层逻辑 “卷组、条带化”这六个字,乍看像存储系统里的黑话,但其实它解决的是每个用过电脑的人都会遭遇的真实困境——硬盘明明还有几百GB空闲,复制大文件却慢得像蜗牛&…

2026/10/22 8:32:58

纯Java手写关键词文本排序检索系统:从分词到TF-IDF排序的轻量级实现

1. 从零搭建关键词文本排序检索系统,我踩过的坑和最终方案 前阵子接了个需求,要在一个内部文档管理模块里做一套基于关键词的文本排序检索。说白了就是用户输入几个词,系统从一堆文档里把最相关的排前面返回。听起来像是“搜索”两个字就能打…

2026/10/22 8:32:58

Docker 搭建 Nexus3 私有仓库:从部署到权限管理实战

1. 为什么本地环境值得单独跑一个制品仓库很多团队一开始都是直接用公共镜像仓库,拉个镜像、推个包都挺顺手,直到某天网络抖动、某个基础镜像突然被下架、或者 CI 流水线因为外部仓库限流卡了半小时,才意识到"依赖外部服务"这件事在…

2026/10/22 8:27:58

Feign连接超时真相:从TCP三次握手到Linux内核参数

1. 这不是超时,是连接被“卡住”了——一次Feign调用故障的真相还原刚接手一个运行三年的订单履约系统,某天凌晨两点收到告警:核心支付回调链路中,Feign调用下游风控服务的平均耗时从80ms骤升至3200ms,失败率突破45%。…

2026/10/21 4:53:08

金融AI落地指南:从调研报告到技术选型与工程实践

简介:这份PDF报告聚焦2025年金融服务业中国AI现状与趋势,面向金融科技从业者、AI战略规划人员及关注行业数字化转型的研究者,帮助读者把握生成式AI在银行、支付、交易等场景中的落地路径与投资方向。资源包内含1个PDF文件,大小约1…

2026/10/22 0:01:49

电商智能运营体系从0到1:架构设计、落地步骤与避坑指南

前两年我们团队接了一个电商平台的运营中台项目,目标很直白:把过去靠运营拍脑袋做的选品、定价、发券、推活动这些事,逐步用数据算法和自动化流程代替。项目名字内部就叫“电商智能运营体系”。最近有不少朋友问我当时是怎么设计的、踩过哪些…

2026/10/22 0:01:49

若依框架AI代码生成不稳定?用Agent Skill三层结构+五步法搞定

最近一段时间,我一直想把后台管理系统里那些机械重复的增删改查代码交给AI去写。框架用的是若依,按理说这类业务代码模式非常固定,应该是AI最擅长的事情。可真试下来却不是那么回事——你让AI生成一个用户管理模块,它给出的Contro…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑