Extracting Content from DOCX Contracts Using Java

Apache POI Library for DOCX Processing

Apache POI provides Java APIs for manipulating Microsoft Office docuemnts, including DOCX files. This library enables programmatic access to contract documents for content extraction.

Project Dependencies

Add Apache POI to your project using Maven:

<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi-ooxml</artifactId>
    <version>5.2.3</version>
</dependency>

Reading Paragraph Content

Extract textual content from DOCX contract paragraphs:

import org.apache.poi.xwpf.usermodel.*;
import java.io.FileInputStream;

public class DocxContentExtractor {
    public static void extractDocumentText(String filePath) {
        try (FileInputStream inputStream = new FileInputStream(filePath);
             XWPFDocument doc = new XWPFDocument(inputStream)) {
            
            for (XWPFParagraph paragraph : doc.getParagraphs()) {
                String paragraphText = paragraph.getText();
                if (!paragraphText.trim().isEmpty()) {
                    System.out.println(paragraphText);
                }
            }
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }
    
    public static void main(String[] args) {
        extractDocumentText("contract.docx");
    }
}

Processing Table Data

Contracts often contain structured data in tables. Extract table contents:

import org.apache.poi.xwpf.usermodel.*;
import java.io.FileInputStream;

public class TableDataProcessor {
    public static void processContractTables(String filePath) {
        try (FileInputStream inputStream = new FileInputStream(filePath);
             XWPFDocument document = new XWPFDocument(inputStream)) {
            
            for (XWPFTable dataTable : document.getTables()) {
                for (XWPFTableRow tableRow : dataTable.getRows()) {
                    StringBuilder rowContent = new StringBuilder();
                    for (XWPFTableCell cell : tableRow.getTableCells()) {
                        rowContent.append(cell.getText()).append("\t");
                    }
                    System.out.println(rowContent.toString().trim());
                }
                System.out.println("---");
            }
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }
}

Advanced Content Processing

For complex contract analysis, combine paragraph and table extraction:

import org.apache.poi.xwpf.usermodel.*;
import java.io.FileInputStream;
import java.util.ArrayList;
import java.util.List;

public class ComprehensiveContractParser {
    public static List<String> extractAllContent(String filePath) {
        List<String> contentList = new ArrayList<>();
        
        try (FileInputStream fis = new FileInputStream(filePath);
             XWPFDocument doc = new XWPFDocument(fis)) {
            
            // Extract paragraphs
            for (XWPFParagraph para : doc.getParagraphs()) {
                String text = para.getText().trim();
                if (!text.isEmpty()) {
                    contentList.add("PARAGRAPH: " + text);
                }
            }
            
            // Extract tables
            for (XWPFTable tbl : doc.getTables()) {
                contentList.add("TABLE START");
                for (XWPFTableRow row : tbl.getRows()) {
                    StringBuilder rowBuilder = new StringBuilder();
                    for (XWPFTableCell cell : row.getTableCells()) {
                        rowBuilder.append(cell.getText()).append(" | ");
                    }
                    contentList.add(rowBuilder.toString());
                }
                contentList.add("TABLE END");
            }
            
        } catch (Exception ex) {
            ex.printStackTrace();
        }
        return contentList;
    }
}

Tags: java DOCX Processing Apache POI Document Extraction Contract Parsing

Posted on Sat, 12 Sep 2026 16:12:19 +0000 by shakazulu