学习GroupDocs.Redaction的Docx实践

GroupDocsGroupDocs.Redaction
placeholder image
admin 发布于:2025-03-19 16:51:41
阅读:loading

前面在摸索了Aspose For Java的全量产品组件共计23款,闲来无事偶然又发现了在GroupDocs方向又存在一些产品,这些产品基本都是取自于一个又一个的组件,取自所有组件中的一个方向进行汇总,组成一个统一的产品包。本次摸索学习GroupDocs.Redaction产品,经过一些持续的分析和摸索,结合使用反射的形式来调用,也就是说在API的使用前进行一次特殊的代码注册,即可实现授权,全程不需要License之类的xml,或是文档无水印、或是文档页数限制、或是获取内容无限制,等等。

特别说明:只为单纯的学习摸索与自我突破,商业软件请勿直接使用于生产环境(购买商业授权)

1.基本介绍

本次实践的是GroupDocs.Redaction for Java的24.9版本(当前最新版本),通过 Java API 编辑私人信息,使用 Java 编校 API 从文档、工作表、演示文稿、PDF 和光栅图像文件中排除或隐藏个人信息和元数据,换句话来说它可以根据规则擦除(抹掉)文档中的特定敏感内容,有效保障文档对外传输过程中的安全,也就是将传说中的数据脱敏换成了文件内容脱敏。相关的 API 为各种流行的文件格式提供可自定义的内容脱敏,支持的文档范围主要是Microsoft Office等格式,比如PDF、Word、Excel、PPT、图片文件(JPG, BMP, PNG, GIF, TIFF)等格式。至于图片格式的脱敏则是使用到了OCR实现的。


2.示例实践

以官网提供的Github示例为准,分别从其中挑出几个简单的示例来演示,本次摸索了Word的docx类型文档的实践,详细参考如下:

读入一个Docx文档,① 指定将文档中内容为“John Doe”的替换为“[Client]”、② 将“Redaction”的文本进行正则匹配,匹配后替换为“[Product]”、③ 将“2位数字 + 空白 + 2位数字 + 空白 + 6位数字”的匹配结果转换为颜色背景的方块、④ 删除文档注释、⑤ 擦除元数据编校,参考代码如下:

public class ApplyMultipleRedactions
{
    public static void run() throws java.lang.Exception
    {
        final Redactor redactor = new Redactor(Constants.SAMPLE_DOCX);
        try 
        {
            Redaction[] redactionList = new Redaction[]
            {
                  new ExactPhraseRedaction("John Doe", new ReplacementOptions("[Client]")),
                  new RegexRedaction("[rR]edaction", new ReplacementOptions("[Product]")),
                  new RegexRedaction("\\d{2}\\s*\\d{2}[^\\d]*\\d{6}", new ReplacementOptions(java.awt.Color.BLUE)),
                  new DeleteAnnotationRedaction(),
                  new EraseMetadataRedaction(MetadataFilters.All)
            };
            RedactorChangeLog result = redactor.apply(redactionList);
            if (result.getStatus() != RedactionStatus.Failed)
            {
                redactor.save();
            }
            else
            {
                for (RedactorLogEntry logEntry : result.getRedactionLog())
                {
                    if (logEntry.getResult().getStatus() != RedactionStatus.Applied)
                    {
                        System.out.println(logEntry.getRedaction().getClass().getName() + " status is " + 
                               logEntry.getResult().getStatus() + ", details: " + logEntry.getResult().getErrorMessage());
                    }
                }
            }
        }
        finally { redactor.close(); }
    }
}

参考模板文件如下:

image.png

解析结果如下:

image.png


PS:

(1)该组件产品也支持对含密码的文档进行处理;

(2)关于第⑤点的擦除元素据的信息,猜测是文档中藏了一些用于防伪的元素据信息,可以通过API给抹掉,但是此部分的示例代码没有摸索明白,带后续专门实践元素据的产品时再实践吧,相关的类参考备忘一下:MetadataRedaction;


3.其它说明

(1)`GroupDocx.xxx`不是开源免费的使用,Github上有示例项目,包含了大量的示例,示例的结果就是生成了一些《Evaluation Warning》警告、水印、内容页数限制、内容文本限制等;

(2)aspose旗下有许多的产品,都是商业付费版本,常见于各种文档格式文件的操作,都需要商业授权使用,也基本都是支持多种编程语言的,如有Java、C++、.NET等等,官网也有多种在线示例;

(3)示例与相关文件下载:《Docx格式文件示例.zip》,注:下载并不包含具体的科学实现部分,只是源文件与示例输出文件;

(4)科学实现分为两种情况,一种是使用反射,另一种是使用License.xml文件;

(5)aspose相关的各个产品组件为独立存在的各个产品,GroupDocs是提取全集产品中的某个功能的集合,提供了一个大类的功能操作,并且统一对外提供API;

(6)本次使用的GroupDocs.Redaction授权方案在以下文件类型中进行了验证:docx、xlsx、pptx、pdf、image等;



 点赞


 发表评论

当前回复:作者

 评论列表


留言区