学习GroupDocs.Redaction的Xlsx实践

GroupDocsGroupDocs.Redaction
placeholder image
admin 发布于:2025-03-18 16:09:18
阅读: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示例为准,分别从其中挑出几个简单的示例来演示,本次摸索了Excel的Xlsx类型文档的实践,详细参考如下:

(1)读入一个Xlsx文档,指定将Sheet名称为“Customers”页中第【2】列的数据中符合条件为“[a-zA-Z]+@”(邮箱前缀为全部字母且包含@字符)部分的规则替换为固定的字符串“@[email]”,参考代码如下:

public class FilterBySpreadsheetAndColumn
{
    public static void run() throws java.lang.Exception
    {
        final Redactor redactor  = new Redactor(Constants.SAMPLE_XLSX);
        try 
        {
            CellFilter filter = new CellFilter();
            filter.setColumnIndex(1);
            filter.setWorkSheetName("Customers");
            Pattern expression = Pattern.compile("[a-zA-Z]+@");
            RedactorChangeLog result = redactor.apply(new CellColumnRedaction(filter, expression, 
                 new ReplacementOptions("@[email]")));
            if (result.getStatus() != RedactionStatus.Failed)
            {
                SaveOptions so = new SaveOptions();
                so.setAddSuffix(true);
                so.setRasterizeToPDF(false);
                redactor.save(so);
            };
        }
        finally { redactor.close(); }
    }
}

参考模板文件如下:

image.png

解析结果如下:

image.png

(2)读入一个Xlsx文档,对文档的注释(批注)内容进行脱敏,指定将注释中内容的数字替换为固定文本`[redacted]`,参考代码如下:

public class RedactAnnotations
{
    public static void run() throws java.lang.Exception
    {
        final Redactor redactor = new Redactor(Constants.ANNOTATED_XLSX);
        try 
        {
            redactor.apply(new AnnotationRedaction("\\d+", "[redacted]"));
            SaveOptions tmp0 = new  SaveOptions();
            tmp0.setAddSuffix(true);
            tmp0.setRasterizeToPDF(false);
            redactor.save(tmp0);
        }
        finally { redactor.close(); }
    }
}

参考模板文件如下:

image.png

解析结果如下:

image.png

(3)读入一个Xlsx文档,对文档的注释(批注)内容进行脱敏,指定将匹配到注释进行删除,匹配规则为注释中包含有“use、show、describe”任何一个,参考代码如下:

public class RemoveAnnotations
{
    public static void run() throws java.lang.Exception
    {
        final Redactor redactor  = new Redactor(Constants.ANNOTATED_XLSX);
        try 
        {
            // Delete all annotations, matching these criteria
            redactor.apply(new DeleteAnnotationRedaction("(?im:(use|show|describe))"));
            SaveOptions tmp0 = new  SaveOptions();
            tmp0.setAddSuffix(true);
            tmp0.setRasterizeToPDF(false);
            // Save the document to "*_Redacted.*" file in original format
            redactor.save(tmp0);
        }
        finally { redactor.close(); }
    }
}

参考模板文件如下:

image.png

解析结果如下:

image.png

PS:该组件产品也支持对含密码的文档进行处理。


3.其它说明

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

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

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

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

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

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


 点赞


 发表评论

当前回复:作者

 评论列表


留言区