This is an automated email from the ASF dual-hosted git repository.
fanningpj pushed a commit to branch trunk
in repository https://gitbox.apache.org/repos/asf/poi.git
The following commit(s) were added to refs/heads/trunk by this push:
new cceccc4bae Support all possible alignment values for docx tables.
(#848)
cceccc4bae is described below
commit cceccc4baed1a7ef872b4e90b4cc81bc2430a422
Author: Jacobo Aragunde Pérez <[email protected]>
AuthorDate: Thu Jul 17 13:11:46 2025 +0200
Support all possible alignment values for docx tables. (#848)
Besides the start/center/end values specified in the OOXML standard,
Word also uses "left" and "right" as values. We need to support this
to prevent POI code from crashing with such documents.
Fixes: https://bz.apache.org/bugzilla/show_bug.cgi?id=69744
---
.../apache/poi/xwpf/usermodel/TableRowAlign.java | 8 ++++---
.../java/org/apache/poi/xwpf/TestXWPFBugs.java | 26 +++++++++++++++++++++
.../apache/poi/xwpf/usermodel/TestXWPFTable.java | 8 ++++++-
test-data/document/table-alignment.docx | Bin 0 -> 15519 bytes
4 files changed, 38 insertions(+), 4 deletions(-)
diff --git
a/poi-ooxml/src/main/java/org/apache/poi/xwpf/usermodel/TableRowAlign.java
b/poi-ooxml/src/main/java/org/apache/poi/xwpf/usermodel/TableRowAlign.java
index 06653cdb33..fa03dd4998 100644
--- a/poi-ooxml/src/main/java/org/apache/poi/xwpf/usermodel/TableRowAlign.java
+++ b/poi-ooxml/src/main/java/org/apache/poi/xwpf/usermodel/TableRowAlign.java
@@ -26,10 +26,12 @@ import java.util.Map;
* Sets alignment values allowed for Tables and Table Rows
*/
public enum TableRowAlign {
-
- LEFT(STJcTable.INT_START),
+
+ LEFT(STJcTable.INT_LEFT),
+ START(STJcTable.INT_START),
CENTER(STJcTable.INT_CENTER),
- RIGHT(STJcTable.INT_END);
+ RIGHT(STJcTable.INT_RIGHT),
+ END(STJcTable.INT_END);
private static final Map<Integer, TableRowAlign> imap;
diff --git a/poi-ooxml/src/test/java/org/apache/poi/xwpf/TestXWPFBugs.java
b/poi-ooxml/src/test/java/org/apache/poi/xwpf/TestXWPFBugs.java
index 4eefc3517a..c39c7fe7cd 100644
--- a/poi-ooxml/src/test/java/org/apache/poi/xwpf/TestXWPFBugs.java
+++ b/poi-ooxml/src/test/java/org/apache/poi/xwpf/TestXWPFBugs.java
@@ -44,6 +44,7 @@ import org.apache.xmlbeans.XmlCursor;
import org.apache.xmlbeans.XmlException;
import org.junit.jupiter.api.Test;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.DocumentDocument;
+import org.openxmlformats.schemas.wordprocessingml.x2006.main.STJcTable;
class TestXWPFBugs {
private static final POIDataSamples samples =
POIDataSamples.getDocumentInstance();
@@ -248,4 +249,29 @@ class TestXWPFBugs {
assertEquals(ParagraphAlignment.LEFT,
leftParagraph.getAlignment()); // LEFT is the real alignment value.
}
}
+
+ @Test
+ public void testTableRightAlign() throws Exception {
+ // Document contains all possible values for table alignment,
including null.
+ try (XWPFDocument doc =
XWPFTestDataSamples.openSampleDocument("table-alignment.docx")) {
+ XWPFTable tbl0 = doc.getTableArray(0);
+ assertNull(tbl0.getTableAlignment());
+ assertFalse(tbl0.getCTTbl().getTblPr().isSetJc());
+ XWPFTable tbl1 = doc.getTableArray(1);
+ assertEquals(TableRowAlign.LEFT, tbl1.getTableAlignment());
+ assertEquals(STJcTable.LEFT,
tbl1.getCTTbl().getTblPr().getJc().xgetVal().getEnumValue());
+ XWPFTable tbl2 = doc.getTableArray(2);
+ assertEquals(TableRowAlign.START, tbl2.getTableAlignment());
+ assertEquals(STJcTable.START,
tbl2.getCTTbl().getTblPr().getJc().xgetVal().getEnumValue());
+ XWPFTable tbl3 = doc.getTableArray(3);
+ assertEquals(TableRowAlign.CENTER, tbl3.getTableAlignment());
+ assertEquals(STJcTable.CENTER,
tbl3.getCTTbl().getTblPr().getJc().xgetVal().getEnumValue());
+ XWPFTable tbl4 = doc.getTableArray(4);
+ assertEquals(TableRowAlign.RIGHT, tbl4.getTableAlignment());
+ assertEquals(STJcTable.RIGHT,
tbl4.getCTTbl().getTblPr().getJc().xgetVal().getEnumValue());
+ XWPFTable tbl5 = doc.getTableArray(5);
+ assertEquals(TableRowAlign.END, tbl5.getTableAlignment());
+ assertEquals(STJcTable.END,
tbl5.getCTTbl().getTblPr().getJc().xgetVal().getEnumValue());
+ }
+ }
}
diff --git
a/poi-ooxml/src/test/java/org/apache/poi/xwpf/usermodel/TestXWPFTable.java
b/poi-ooxml/src/test/java/org/apache/poi/xwpf/usermodel/TestXWPFTable.java
index 3539dac261..3bd3205036 100644
--- a/poi-ooxml/src/test/java/org/apache/poi/xwpf/usermodel/TestXWPFTable.java
+++ b/poi-ooxml/src/test/java/org/apache/poi/xwpf/usermodel/TestXWPFTable.java
@@ -571,14 +571,20 @@ class TestXWPFTable {
void testSetGetTableAlignment() throws IOException {
try (XWPFDocument doc = new XWPFDocument()) {
XWPFTable tbl = doc.createTable(1, 1);
+ tbl.setTableAlignment(TableRowAlign.START);
+ assertEquals(TableRowAlign.START, tbl.getTableAlignment());
+ assertEquals(STJcTable.INT_START,
tbl.getTableAlignment().getValue());
tbl.setTableAlignment(TableRowAlign.LEFT);
assertEquals(TableRowAlign.LEFT, tbl.getTableAlignment());
- assertEquals(STJcTable.INT_START,
tbl.getTableAlignment().getValue());
+ assertEquals(STJcTable.INT_LEFT,
tbl.getTableAlignment().getValue());
tbl.setTableAlignment(TableRowAlign.CENTER);
assertEquals(TableRowAlign.CENTER, tbl.getTableAlignment());
assertEquals(STJcTable.INT_CENTER,
tbl.getTableAlignment().getValue());
tbl.setTableAlignment(TableRowAlign.RIGHT);
assertEquals(TableRowAlign.RIGHT, tbl.getTableAlignment());
+ assertEquals(STJcTable.INT_RIGHT,
tbl.getTableAlignment().getValue());
+ tbl.setTableAlignment(TableRowAlign.END);
+ assertEquals(TableRowAlign.END, tbl.getTableAlignment());
assertEquals(STJcTable.INT_END,
tbl.getTableAlignment().getValue());
tbl.removeTableAlignment();
assertNull(tbl.getTableAlignment());
diff --git a/test-data/document/table-alignment.docx
b/test-data/document/table-alignment.docx
new file mode 100644
index 0000000000..76fd85c338
Binary files /dev/null and b/test-data/document/table-alignment.docx differ
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]