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;
}
}