如何用 Java 获取 DOCX 文档的注释

        现代文档协作工具有助于在比以往更紧迫的期限内从头到尾推动项目。前数字化项目协作依赖于手动标记和注释来在分发之前修改/改进关键报告和备忘录,而不同行业的当代团队可以使用可访问的简单修订工具来实现相同的基本目标,甚至更多。 DOCX 文件中的所有用户。任何团队成员都可以将建议、更改和标注添加到 SharePoint 站点驱动器中的 DOCX 文档中,从而大大缩短与利益相关者发布和共享最终产品所需的时间。

        在幕后,微软的 OpenXML 文档格式使这种面向团队的文件操作成为可能。由于 DOCX 格式的结构为由多个基于 XML 的文件组成的 zip 文件,因此注释和其他修订在物理上与文档的核心内容分开,并且定义这些单独文件之间关系的数据存储在其自己的文件夹中。  

        换句话说,当我们打开协作 DOCX 文档时看到的注释和修订是与文档文本正文通信的独立文件的一部分,文档文本正文存储在其自己的文件中。这种文件结构划分最终创造了我们在添加、删除或解决修订时,甚至在我们选择完全打开和关闭协作功能时所习惯的流畅、动态的体验。

由于 DOCX 文档中的注释存储在基于XML的文件中,因此可以独立于文档的其他组件手动或以编程方式访问它们。提取后,有用的评论元数据(包括评论文本以及作者姓名、日期等)可以独立于与其关联的原始内容进行分析。虽然这种数据挖掘不一定一次性有用,但随着时间的推移从多个相同类型的文档(例如,周期性报告和备忘录)中积累评论并使用该信息来更好地理解整体内容有一个显着的好处协作过程。由于大量评论元数据随时可用,因此可以应用NLP分析并更好地了解团队对双周备忘录的特定部分的看法。还可以了解在特定主题上进行协作的频率,详细了解谁是最频繁的贡献者等等。

        如果像这样的见解足够令人感兴趣,那么挑战就变成了在相当短的时间内跨多个文档以有组织且有效的方式提取信息。虽然 Open XML 文件可以转换为 .zip 文件并独立提取(或使用C#或 Visual Basic 中记录的代码示例单独访问),但这些方法在很大程度上不切实际,或者范围太有限,无法在较大的文件数组中实用。相反,依靠完全实现的编程解决方案要实用得多,该解决方案以简单、有组织且人类可读的格式提取和返回我们所需的数据。这是专门的文档转换 API 的完美角色。

示范

        在本文的其余部分中,我将演示两个旨在从 DOCX 文件中检索评论文本和评论元数据的 API。通过从页面下方提供的可立即运行的Java代码示例进行复制,可以轻松(免费地使用免费 API 密钥)使用这两种解决方案,并且它们都执行相同基本功能的略有不同的变体。我将在下面简要概述这两种解决方案。

1. 从 DOCX 文档中获取注释作为平面列表

        此 API 返回评论和评论注释,没有任何层次结构显示附加到原始评论的回复子评论。在响应对象中,对原始评论的回复通过IsReply布尔值来区分。请参阅以下 JSON 响应正文示例:

{
  "Successful": true,
  "Comments": [
    {
      "Path": "string",
      "Author": "string",
      "AuthorInitials": "string",
      "CommentText": "string",
      "CommentDate": "2023-07-27T15:15:44.278Z",
      "IsTopLevel": true,
      "IsReply": true,
      "ParentCommentPath": "string",
      "Done": true
    }
  ],
  "CommentCount": 0
}

2. 从 DOCX 文档中分层获取注释

        此 API 返回对象中的评论和评论注释,在其关联评论下嵌套回复子评论。这有助于在 API 响应正文中区分回复评论和原始评论之间的关系。请参阅以下 JSON 响应正文示例:

{
  "Successful": true,
  "Comments": [
    {
      "Path": "string",
      "Author": "string",
      "AuthorInitials": "string",
      "CommentText": "string",
      "CommentDate": "2023-07-27T15:16:28.931Z",
      "ReplyChildComments": [
        {
          "Path": "string",
          "Author": "string",
          "AuthorInitials": "string",
          "CommentText": "string",
          "CommentDate": "2023-07-27T15:16:28.931Z",
          "IsTopLevel": true,
          "IsReply": true,
          "ParentCommentPath": "string",
          "Done": true
        }
      ],
      "Done": true
    }
  ],
  "TopLevelCommentCount": 0
}

您可以通过首先安装Maven来开始在 Java 中构建任一 API 调用。在 pom.xml 中添加对存储库的以下引用:

<repositories>
    <repository>
        <id>jitpack.io</id>
        <url>https://jitpack.io</url>
    </repository>
</repositories>

然后,在 pom.xml 中添加对依赖项的引用:

<dependencies>
<dependency>
    <groupId>com.github.Cloudmersive</groupId>
    <artifactId>Cloudmersive.APIClient.Java</artifactId>
    <version>v4.25</version>
</dependency>
</dependencies>

安装完成后,您可以复制以下示例(包括导入类)以平面列表形式检索 DOCX 注释:

// Import classes:
//import com.cloudmersive.client.invoker.ApiClient;
//import com.cloudmersive.client.invoker.ApiException;
//import com.cloudmersive.client.invoker.Configuration;
//import com.cloudmersive.client.invoker.auth.*;
//import com.cloudmersive.client.EditDocumentApi;

ApiClient defaultClient = Configuration.getDefaultApiClient();

// Configure API key authorization: Apikey
ApiKeyAuth Apikey = (ApiKeyAuth) defaultClient.getAuthentication("Apikey");
Apikey.setApiKey("YOUR API KEY");
// Uncomment the following line to set a prefix for the API key, e.g. "Token" (defaults to null)
//Apikey.setApiKeyPrefix("Token");

EditDocumentApi apiInstance = new EditDocumentApi();
GetDocxGetCommentsRequest reqConfig = new GetDocxGetCommentsRequest(); // GetDocxGetCommentsRequest | Document input request
try {
    GetDocxCommentsResponse result = apiInstance.editDocumentDocxGetComments(reqConfig);
    System.out.println(result);
} catch (ApiException e) {
    System.err.println("Exception when calling EditDocumentApi#editDocumentDocxGetComments");
    e.printStackTrace();
}

您可以复制以下示例(包括导入类)以分层检索 DOCX 注释:

// Import classes:
//import com.cloudmersive.client.invoker.ApiClient;
//import com.cloudmersive.client.invoker.ApiException;
//import com.cloudmersive.client.invoker.Configuration;
//import com.cloudmersive.client.invoker.auth.*;
//import com.cloudmersive.client.EditDocumentApi;

ApiClient defaultClient = Configuration.getDefaultApiClient();

// Configure API key authorization: Apikey
ApiKeyAuth Apikey = (ApiKeyAuth) defaultClient.getAuthentication("Apikey");
Apikey.setApiKey("YOUR API KEY");
// Uncomment the following line to set a prefix for the API key, e.g. "Token" (defaults to null)
//Apikey.setApiKeyPrefix("Token");

EditDocumentApi apiInstance = new EditDocumentApi();
GetDocxGetCommentsHierarchicalRequest reqConfig = new GetDocxGetCommentsHierarchicalRequest(); // GetDocxGetCommentsHierarchicalRequest | Document input request
try {
    GetDocxCommentsHierarchicalResponse result = apiInstance.editDocumentDocxGetCommentsHierarchical(reqConfig);
    System.out.println(result);
} catch (ApiException e) {
    System.err.println("Exception when calling EditDocumentApi#editDocumentDocxGetCommentsHierarchical");
    e.printStackTrace();
}

现在,您可以轻松地自动检索 DOCX 注释/注释元数据,并将该信息无缝解析到其他应用程序和工作流程中。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值