学习GroupDocs.Metadata的简单实践

GroupDocs
placeholder image
admin 发布于:2025-03-25 17:21:57
阅读:loading

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

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

1.基本介绍

本次实践的是GroupDocs.Metadata for Java的24.12版本(当前最新版本),Java 的元数据操作 API,专为通过 Java 进行元数据操作而设计的库,支持60多种格式的文件。开发 Java 应用程序来创建、查看、访问、更新、删除、搜索、比较、替换和导出流行文档和图像格式的元数据,它的主要功能是帮助用户提取、修改和管理各种文件(如文档、图片、音频和视频等)的元数据。元数据指的是描述文件的特征信息,如作者、创建日期、修改日期、文件大小、许可信息等。

(1)控制文件和文档元数据,GroupDocs.Metadata for Java 是一种高级元数据管理 API,用于操作文档、图像、档案、种子和各种其他文件格式的元数据信息。开发人员现在可以通过在所有流行的商业文档格式(例如 PDF、Microsoft Office Word、Excel 电子表格)中轻松整合元数据查看、修改、删除、提取、搜索、比较、替换和导出功能来增强其 Java 应用程序的功能、PowerPoint 演示文稿和幻灯片、Outlook 电子邮件、Project、Visio 图表、OneNote、图像、AutoCAD、Photoshop、音频、视频、OpenType 字体和图元文件。

(2)操作内置元数据,Java 元数据库为您提供元数据搜索、替换元数据属性、比较受支持文件格式的元数据以识别相似性和差异等功能。您还可以编辑或修改元数据以更好地进行信息管理,并将检索到的元数据信息导出到 Excel 文件、CSV 文件和 DataSet。该 API 提供全面的支持,可与所有常用的元数据标准(例如受支持的文档格式中的内置、XMP、EXIF 和自定义元数据属性)配合使用。

(3) 广泛的平台支持,GroupDocs.Metadata for Java 与所有 Java 版本兼容,并支持能够运行 Java 运行时的流行操作系统(Windows、Linux、MacOS)。

总的来说,GroupDocs.Metadata for Java 是一个非常实用的工具,提供了直观的 API,开发者可以轻松地将其集成到 Java 应用程序中。由于它是一个跨平台库,开发者可以在多种操作系统上运行和部署应用,是一个强大的文件内容元数据处理的解决方案。

(1)支持的文档格式

A.办公格式

    便携的: PDF

    Word: DOC, DOCX, DOCM, DOT, DOTX, DOTM, RTF, TXT

    Excel: XLS, XLSX, XLSM, XLSB, XLTM, XLT, XLTM, XLTX, XLAM, SXC, SpreadsheetML

    PowerPoint: PPT, PPTX, PPS, PPSX, PPSM, POT, POTM, POTX, PPTM

    OpenDocument: ODT, ODS

    Visio: VSD, VDX, VSS, VSSX, VSX, VST, VSTX, VTX, VSDX, VDW, VSTM, VSSM, VSDM

B.媒体与图形

    视频: AVI, MOV, QT, FLV

    流行的图像格式: JPG, JPEG, JPE, JP2, PNG, BMP

    多页图像: GIF, WEBP, TIFF, DJVU, DJV, DICOM

    声音的: MP3, WAV

    Matroska Media Container: MKV, MKA, MK3D, WEBM

    AutoCAD: DWG, DXF

    Photoshop: PSD

C.其他

    Outlook: MSG, EML, EMLX, PST, OS

    字体: OTF, OTC, TTF, TTC

    项目: MPP

    Metafiles: EMF, WMF

    vCard: VCF, VCR

    OneNote: ONE

    其他的: EPUB, ZIP, TORRENT, ASF

(2)支持的功能如下:保护您的 PDF、Office 文档和图像元数据。

    A.EXIF 图像元数据:更新 WEBP、PNG 和 PSD 文件中的 EXIF 元数据属性;

    B.获取文件元数据:文档、EXIF 和 XMP 元数据的搜索属性;

    C.干净的办公格式:访问和删除 Microsoft Word、Excel、PowerPoint 和 PDF 文件中的隐藏数据;

    D.元数据导出:将支持的文件格式的元数据导出到 Excel、CSV 或 DataSet;

    E.PNG 图像支持:从 PNG 图像文件中提取文本元数据;

    F.删除数字签名:识别并删除 Word、Excel 和 PDF 文件中的数字签名; 

    G.内置元数据支持:使用任何支持格式的定义键读取元数据属性;

    H.图像预览:生成 EPUB、CAD、EML 和 MSG 文件的图像预览;

    I.文件内容优化:减少 PDF、Excel 和图像格式的内存消耗;

    J.Matroska 多媒体支持:读取 Matroska 字幕并检索音频和视频文件的元数据;

    K.替换元数据内容:替换 Word、Excel、PowerPoint 和 PDF 文件的元数据属性;

    L.清洁业务数据:从报告和文档中删除元数据和评论;

    M.照片地点:操作图像元数据属性并删除照片位置信息;

    N.分析元数据差异:通过比较识别受支持格式的元数据的差异或相似之处;

    O.密码保护:检测 Word、Excel、PowerPoint 和 PDF 文件中的文档密码保护;

    P.存档和种子支持:操作内置和自定义元数据并获取种子和存档格式的元数据;

    Q.EXIF 图像元数据:使用搜索 API 添加或更新任意类型的 XMP 和 EXIF 元数据属性;

    R.在运行时检测文档文件类型:我们的解决方案提供了在元数据处理之前检测文件或流类型的能力;

    S.字体元数据支持:支持任何元数据类型的枚举并读取OpenType字体文件的元数据;

    T.电子邮件元数据支持:获取和删除电子邮件的元数据并删除附件;

    U.微软Excel支持:从 Excel 95 开始从 Microsoft Excel 文件中提取元数据;

    V.Matroska 多媒体预览:通过 Matroska 多媒体容器支持获取支持格式的缩略图和图像预览;

    W.微软项目支持:从加密的 Microsoft Project 文件中读取元数据;

    X.TIFF 支持:添加、更新和删除 TIFF 图像中的 IPTC 元数据包;

    X.支持JPEG:添加、更新和删除 JPEG2000 图像中的 EXIF 元数据包;

    X.多媒体文件支持:提取 MOV、MP3 和 WEBP 文件中的 XMP 元数据属性;

    X.HEIC 媒体支持:从 HEIC/HEIF 图像格式读取 EXIF 标签和 XMP 元数据属性;

上面这一段摘自官网的介绍,整体上觉得很抽象,运行示例项目中相关的例子后我理解的意思:GroupDocs.Metadata是一个文档内容元素据增删改查的开发工具包,旨在帮助开发人员在其应用程序中实现对多种不同文档格式文件元素据操作的功能,是一个强大的文档元数据处理解决方案

2.示例实践

以官网提供的Github示例`https://github.com/groupdocs-metadata/GroupDocs.Metadata-for-Java`为准,上面介绍说GroupDocs.Metadata for Java 提供了通过 Java 管理文档元数据的简便方法。它使您能够读取、写入、更新和删除各种文件格式的元数据,包括文档、图像、电子邮件、档案等。它还提供在文档文件中搜索和更新元数据的功能。本次实践运行了Github Examples示例包下的示例代码,主要介绍官方提供的功能为主,过一下示例的功能,详细参考如下:

try (Metadata metadata = new Metadata(Constants.InputXlsx)) {
    if (metadata.getFileFormat() != FileFormat.Unknown) {
        IDocumentInfo info = metadata.getDocumentInfo();
        //文件格式 (通过内部结构检测)
        System.out.println(String.format("File format: %s", info.getFileType().getFileFormat()));
        //文件扩展名
        System.out.println(String.format("File extension: %s", info.getFileType().getExtension()));
        //MIME 类型
        System.out.println(String.format("MIME Type: %s", info.getFileType().getMimeType()));
        //页数
        System.out.println(String.format("Number of pages: %s", info.getPageCount()));
        //文件大小
        System.out.println(String.format("Document size: %s bytes", info.getSize()));
         //指示文件是否加密的值 
        System.out.println(String.format("Is document encrypted: %s", info.isEncrypted()));
    }
}

image.png

(获取文档信息)

private static void readMetadata() throws Exception {
    Metadata metadata = new Metadata(Constants.OutputDocx);

    System.out.println("===any===");
    final IReadOnlyList<MetadataProperty> anyProperties = metadata.findProperties(new AnySpecification());
    for (MetadataProperty property : anyProperties) {
        System.out.println(property.getName() + " , " + property.getValue());
    }
    System.out.println("===Word===");
    final WordProcessingRootPackage rootPackageGeneric = metadata.getRootPackageGeneric();
    System.out.println(rootPackageGeneric.getDocumentProperties().get_Item("customAAA").getValue());
    System.out.println(rootPackageGeneric.getDocumentProperties().get_Item("customBBB").getValue());

    metadata.close();
}


image.png

(读取Docx文件元数据)

public static void writeMetadata() {
    try (Metadata metadata = new Metadata(Constants.InputDocx)) {
        final RootMetadataPackage rootPackage = metadata.getRootPackage();

        rootPackage.setProperties(new WithNameSpecification("Author"), new PropertyValue("test GroupDocs"));
        rootPackage.setProperties(new WithNameSpecification("Comments"), new PropertyValue("test comment"));
        rootPackage.setProperties(new WithNameSpecification("HyperlinkBase"), new PropertyValue("test hyperlink base"));
        rootPackage.setProperties(new WithNameSpecification("Keywords"), new PropertyValue("test keywords"));
        rootPackage.setProperties(new WithNameSpecification("LastSavedBy"), new PropertyValue("test editor"));
        rootPackage.setProperties(new WithNameSpecification("RevisionNumber"), new PropertyValue("test revision number"));
        rootPackage.setProperties(new WithNameSpecification("Subject"), new PropertyValue("test subject"));
        rootPackage.setProperties(new WithNameSpecification("Title"), new PropertyValue("test title"));
        rootPackage.setProperties(new WithNameSpecification("CreatedDateTime"), new PropertyValue(new Date()));
        rootPackage.setProperties(new WithNameSpecification("ModifiedDateTime"), new PropertyValue(new Date()));

        final WordProcessingRootPackage rootPackageGeneric = metadata.getRootPackageGeneric();
        rootPackageGeneric.getDocumentProperties().set("customAAA" , "Custom Value1");
        rootPackageGeneric.getDocumentProperties().set("customBBB" , "Custom Value2");

        metadata.save(Constants.OutputDocx);
    }
}

(写入Docx文件元数据


3.其它说明

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

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

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

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

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

(6)本站另有基于Apache Commons Image开源项目的实践,主要是读/写图片文件的元数据的;


 点赞


 发表评论

当前回复:作者

 评论列表


留言区