Apply patch to fix bug 57495: getTableArray method can not get 0 pos table
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1734694 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
06083f85f4
commit
2b28cd97a3
@ -48,11 +48,20 @@ public class Units {
|
||||
/**
|
||||
* Converts points to EMUs
|
||||
* @param points points
|
||||
* @return emus
|
||||
* @return EMUs
|
||||
*/
|
||||
public static int toEMU(double points){
|
||||
return (int)Math.rint(EMU_PER_POINT*points);
|
||||
}
|
||||
|
||||
/**
|
||||
* Converts pixels to EMUs
|
||||
* @param pixels pixels
|
||||
* @return EMUs
|
||||
*/
|
||||
public static int pixelToEMU(int pixels) {
|
||||
return pixels*EMU_PER_PIXEL;
|
||||
}
|
||||
|
||||
/**
|
||||
* Converts EMUs to points
|
||||
|
@ -335,7 +335,7 @@ public class XWPFDocument extends POIXMLDocument implements Document, IBody {
|
||||
*/
|
||||
@Override
|
||||
public XWPFTable getTableArray(int pos) {
|
||||
if (pos > 0 && pos < tables.size()) {
|
||||
if (pos >= 0 && pos < tables.size()) {
|
||||
return tables.get(pos);
|
||||
}
|
||||
return null;
|
||||
@ -349,7 +349,10 @@ public class XWPFDocument extends POIXMLDocument implements Document, IBody {
|
||||
}
|
||||
|
||||
public XWPFFooter getFooterArray(int pos) {
|
||||
return footers.get(pos);
|
||||
if(pos >=0 && pos < footers.size()) {
|
||||
return footers.get(pos);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
@ -360,7 +363,10 @@ public class XWPFDocument extends POIXMLDocument implements Document, IBody {
|
||||
}
|
||||
|
||||
public XWPFHeader getHeaderArray(int pos) {
|
||||
return headers.get(pos);
|
||||
if(pos >=0 && pos < headers.size()) {
|
||||
return headers.get(pos);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public String getTblStyle(XWPFTable table) {
|
||||
|
@ -1,32 +1,33 @@
|
||||
/* ====================================================================
|
||||
Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
contributor license agreements. See the NOTICE file distributed with
|
||||
this work for additional information regarding copyright ownership.
|
||||
The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
(the "License"); you may not use this file except in compliance with
|
||||
the License. You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
==================================================================== */
|
||||
package org.apache.poi.xwpf.usermodel;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
|
||||
import org.apache.poi.POIXMLDocumentPart;
|
||||
import org.apache.xmlbeans.XmlCursor;
|
||||
import org.apache.xmlbeans.XmlObject;
|
||||
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTFtnEdn;
|
||||
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTP;
|
||||
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTRow;
|
||||
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTSdtBlock;
|
||||
/* ====================================================================
|
||||
/* ====================================================================
|
||||
Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
contributor license agreements. See the NOTICE file distributed with
|
||||
this work for additional information regarding copyright ownership.
|
||||
The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
(the "License"); you may not use this file except in compliance with
|
||||
the License. You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
==================================================================== */
|
||||
package org.apache.poi.xwpf.usermodel;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
|
||||
import org.apache.poi.POIXMLDocumentPart;
|
||||
import org.apache.xmlbeans.XmlCursor;
|
||||
import org.apache.xmlbeans.XmlObject;
|
||||
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTFtnEdn;
|
||||
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTP;
|
||||
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTRow;
|
||||
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTSdtBlock;
|
||||
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTbl;
|
||||
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTc;
|
||||
|
||||
@ -36,8 +37,8 @@ public class XWPFFootnote implements Iterable<XWPFParagraph>, IBody {
|
||||
private List<XWPFPictureData> pictures = new ArrayList<XWPFPictureData>();
|
||||
private List<IBodyElement> bodyElements = new ArrayList<IBodyElement>();
|
||||
|
||||
private CTFtnEdn ctFtnEdn;
|
||||
private XWPFFootnotes footnotes;
|
||||
private CTFtnEdn ctFtnEdn;
|
||||
private XWPFFootnotes footnotes;
|
||||
private XWPFDocument document;
|
||||
|
||||
public XWPFFootnote(CTFtnEdn note, XWPFFootnotes xFootnotes) {
|
||||
@ -85,16 +86,16 @@ public class XWPFFootnote implements Iterable<XWPFParagraph>, IBody {
|
||||
return paragraphs.iterator();
|
||||
}
|
||||
|
||||
public List<XWPFTable> getTables() {
|
||||
return tables;
|
||||
}
|
||||
|
||||
public List<XWPFPictureData> getPictures() {
|
||||
return pictures;
|
||||
}
|
||||
|
||||
public List<IBodyElement> getBodyElements() {
|
||||
return bodyElements;
|
||||
public List<XWPFTable> getTables() {
|
||||
return tables;
|
||||
}
|
||||
|
||||
public List<XWPFPictureData> getPictures() {
|
||||
return pictures;
|
||||
}
|
||||
|
||||
public List<IBodyElement> getBodyElements() {
|
||||
return bodyElements;
|
||||
}
|
||||
|
||||
public CTFtnEdn getCTFtnEdn() {
|
||||
@ -106,16 +107,16 @@ public class XWPFFootnote implements Iterable<XWPFParagraph>, IBody {
|
||||
}
|
||||
|
||||
/**
|
||||
* @param pos in table array
|
||||
* @return The table at position pos
|
||||
* @param pos in table array
|
||||
* @return The table at position pos
|
||||
* @see org.apache.poi.xwpf.usermodel.IBody#getTableArray(int)
|
||||
*/
|
||||
public XWPFTable getTableArray(int pos) {
|
||||
if (pos > 0 && pos < tables.size()) {
|
||||
if (pos >= 0 && pos < tables.size()) {
|
||||
return tables.get(pos);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* inserts an existing XWPFTable to the arrays bodyElements and tables
|
||||
@ -123,8 +124,8 @@ public class XWPFFootnote implements Iterable<XWPFParagraph>, IBody {
|
||||
* @param pos
|
||||
* @param table
|
||||
* @see org.apache.poi.xwpf.usermodel.IBody#insertTable(int pos, XWPFTable table)
|
||||
*/
|
||||
public void insertTable(int pos, XWPFTable table) {
|
||||
*/
|
||||
public void insertTable(int pos, XWPFTable table) {
|
||||
bodyElements.add(pos, table);
|
||||
int i = 0;
|
||||
for (CTTbl tbl : ctFtnEdn.getTblArray()) {
|
||||
@ -132,11 +133,11 @@ public class XWPFFootnote implements Iterable<XWPFParagraph>, IBody {
|
||||
break;
|
||||
}
|
||||
i++;
|
||||
}
|
||||
tables.add(i, table);
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
tables.add(i, table);
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* if there is a corresponding {@link XWPFTable} of the parameter ctTable in the tableList of this header
|
||||
* the method will return this table
|
||||
@ -153,8 +154,8 @@ public class XWPFFootnote implements Iterable<XWPFParagraph>, IBody {
|
||||
return table;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* if there is a corresponding {@link XWPFParagraph} of the parameter ctTable in the paragraphList of this header or footer
|
||||
* the method will return this paragraph
|
||||
@ -171,7 +172,7 @@ public class XWPFFootnote implements Iterable<XWPFParagraph>, IBody {
|
||||
return paragraph;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the paragraph that holds
|
||||
@ -180,9 +181,11 @@ public class XWPFFootnote implements Iterable<XWPFParagraph>, IBody {
|
||||
* @see org.apache.poi.xwpf.usermodel.IBody#getParagraphArray(int pos)
|
||||
*/
|
||||
public XWPFParagraph getParagraphArray(int pos) {
|
||||
|
||||
return paragraphs.get(pos);
|
||||
}
|
||||
if(pos >=0 && pos < paragraphs.size()) {
|
||||
return paragraphs.get(pos);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* get the TableCell which belongs to the TableCell
|
||||
@ -190,7 +193,7 @@ public class XWPFFootnote implements Iterable<XWPFParagraph>, IBody {
|
||||
* @param cell
|
||||
* @see org.apache.poi.xwpf.usermodel.IBody#getTableCell(CTTc cell)
|
||||
*/
|
||||
public XWPFTableCell getTableCell(CTTc cell) {
|
||||
public XWPFTableCell getTableCell(CTTc cell) {
|
||||
XmlCursor cursor = cell.newCursor();
|
||||
cursor.toParent();
|
||||
XmlObject o = cursor.getObject();
|
||||
@ -210,8 +213,11 @@ public class XWPFFootnote implements Iterable<XWPFParagraph>, IBody {
|
||||
return null;
|
||||
}
|
||||
XWPFTableRow tableRow = table.getRow(row);
|
||||
if(tableRow == null){
|
||||
return null;
|
||||
}
|
||||
return tableRow.getTableCell(cell);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* verifies that cursor is on the right position
|
||||
@ -263,12 +269,12 @@ public class XWPFFootnote implements Iterable<XWPFParagraph>, IBody {
|
||||
i++;
|
||||
}
|
||||
bodyElements.add(i, newT);
|
||||
cursor = t.newCursor();
|
||||
cursor.toEndToken();
|
||||
return newT;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
cursor = t.newCursor();
|
||||
cursor.toEndToken();
|
||||
return newT;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* add a new paragraph at position of the cursor
|
||||
@ -303,12 +309,12 @@ public class XWPFFootnote implements Iterable<XWPFParagraph>, IBody {
|
||||
i++;
|
||||
}
|
||||
bodyElements.add(i, newP);
|
||||
cursor.toCursor(p.newCursor());
|
||||
cursor.toEndToken();
|
||||
return newP;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
cursor.toCursor(p.newCursor());
|
||||
cursor.toEndToken();
|
||||
return newP;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* add a new table to the end of the footnote
|
||||
@ -316,13 +322,13 @@ public class XWPFFootnote implements Iterable<XWPFParagraph>, IBody {
|
||||
* @param table
|
||||
* @return the added XWPFTable
|
||||
*/
|
||||
public XWPFTable addNewTbl(CTTbl table) {
|
||||
CTTbl newTable = ctFtnEdn.addNewTbl();
|
||||
newTable.set(table);
|
||||
XWPFTable xTable = new XWPFTable(newTable, this);
|
||||
tables.add(xTable);
|
||||
return xTable;
|
||||
}
|
||||
public XWPFTable addNewTbl(CTTbl table) {
|
||||
CTTbl newTable = ctFtnEdn.addNewTbl();
|
||||
newTable.set(table);
|
||||
XWPFTable xTable = new XWPFTable(newTable, this);
|
||||
tables.add(xTable);
|
||||
return xTable;
|
||||
}
|
||||
|
||||
/**
|
||||
* add a new paragraph to the end of the footnote
|
||||
@ -330,14 +336,14 @@ public class XWPFFootnote implements Iterable<XWPFParagraph>, IBody {
|
||||
* @param paragraph
|
||||
* @return the added XWPFParagraph
|
||||
*/
|
||||
public XWPFParagraph addNewParagraph(CTP paragraph) {
|
||||
CTP newPara = ctFtnEdn.addNewP();
|
||||
newPara.set(paragraph);
|
||||
XWPFParagraph xPara = new XWPFParagraph(newPara, this);
|
||||
paragraphs.add(xPara);
|
||||
return xPara;
|
||||
}
|
||||
|
||||
public XWPFParagraph addNewParagraph(CTP paragraph) {
|
||||
CTP newPara = ctFtnEdn.addNewP();
|
||||
newPara.set(paragraph);
|
||||
XWPFParagraph xPara = new XWPFParagraph(newPara, this);
|
||||
paragraphs.add(xPara);
|
||||
return xPara;
|
||||
}
|
||||
|
||||
/**
|
||||
* @see org.apache.poi.xwpf.usermodel.IBody#getXWPFDocument()
|
||||
*/
|
||||
@ -351,8 +357,8 @@ public class XWPFFootnote implements Iterable<XWPFParagraph>, IBody {
|
||||
* @see org.apache.poi.xwpf.usermodel.IBody#getPart()
|
||||
*/
|
||||
public POIXMLDocumentPart getPart() {
|
||||
return footnotes;
|
||||
}
|
||||
return footnotes;
|
||||
}
|
||||
|
||||
/**
|
||||
* get the PartType of the body
|
||||
@ -360,6 +366,6 @@ public class XWPFFootnote implements Iterable<XWPFParagraph>, IBody {
|
||||
* @see org.apache.poi.xwpf.usermodel.IBody#getPartType()
|
||||
*/
|
||||
public BodyType getPartType() {
|
||||
return BodyType.FOOTNOTE;
|
||||
}
|
||||
}
|
||||
return BodyType.FOOTNOTE;
|
||||
}
|
||||
}
|
||||
|
@ -212,8 +212,10 @@ public abstract class XWPFHeaderFooter extends POIXMLDocumentPart implements IBo
|
||||
* the text of the header or footer.
|
||||
*/
|
||||
public XWPFParagraph getParagraphArray(int pos) {
|
||||
|
||||
return paragraphs.get(pos);
|
||||
if(pos >= 0 && pos<paragraphs.size()){
|
||||
return paragraphs.get(pos);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
@ -431,8 +433,7 @@ public abstract class XWPFHeaderFooter extends POIXMLDocumentPart implements IBo
|
||||
* @see org.apache.poi.xwpf.usermodel.IBody#getTableArray(int)
|
||||
*/
|
||||
public XWPFTable getTableArray(int pos) {
|
||||
|
||||
if (pos > 0 && pos < tables.size()) {
|
||||
if (pos >= 0 && pos < tables.size()) {
|
||||
return tables.get(pos);
|
||||
}
|
||||
return null;
|
||||
|
@ -1,42 +1,42 @@
|
||||
/* ====================================================================
|
||||
Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
contributor license agreements. See the NOTICE file distributed with
|
||||
this work for additional information regarding copyright ownership.
|
||||
The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
(the "License"); you may not use this file except in compliance with
|
||||
the License. You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
==================================================================== */
|
||||
package org.apache.poi.xwpf.usermodel;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.EnumMap;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
|
||||
import org.apache.poi.POIXMLDocumentPart;
|
||||
import org.apache.poi.util.Internal;
|
||||
import org.apache.xmlbeans.XmlCursor;
|
||||
import org.apache.xmlbeans.XmlObject;
|
||||
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTP;
|
||||
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTRow;
|
||||
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTSdtBlock;
|
||||
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTSdtRun;
|
||||
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTShd;
|
||||
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTbl;
|
||||
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTc;
|
||||
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTcPr;
|
||||
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTVerticalJc;
|
||||
import org.openxmlformats.schemas.wordprocessingml.x2006.main.STShd;
|
||||
import org.openxmlformats.schemas.wordprocessingml.x2006.main.STVerticalJc;
|
||||
/* ====================================================================
|
||||
Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
contributor license agreements. See the NOTICE file distributed with
|
||||
this work for additional information regarding copyright ownership.
|
||||
The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
(the "License"); you may not use this file except in compliance with
|
||||
the License. You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
==================================================================== */
|
||||
package org.apache.poi.xwpf.usermodel;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.EnumMap;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
|
||||
import org.apache.poi.POIXMLDocumentPart;
|
||||
import org.apache.poi.util.Internal;
|
||||
import org.apache.xmlbeans.XmlCursor;
|
||||
import org.apache.xmlbeans.XmlObject;
|
||||
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTP;
|
||||
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTRow;
|
||||
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTSdtBlock;
|
||||
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTSdtRun;
|
||||
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTShd;
|
||||
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTbl;
|
||||
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTc;
|
||||
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTcPr;
|
||||
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTVerticalJc;
|
||||
import org.openxmlformats.schemas.wordprocessingml.x2006.main.STShd;
|
||||
import org.openxmlformats.schemas.wordprocessingml.x2006.main.STVerticalJc;
|
||||
|
||||
/**
|
||||
* Represents a Cell within a {@link XWPFTable}. The
|
||||
@ -46,20 +46,20 @@ public class XWPFTableCell implements IBody, ICell {
|
||||
private static EnumMap<XWPFVertAlign, STVerticalJc.Enum> alignMap;
|
||||
// Create a map from the STVerticalJc.Enum values to the XWPF-level enums
|
||||
private static HashMap<Integer, XWPFVertAlign> stVertAlignTypeMap;
|
||||
|
||||
static {
|
||||
// populate enum maps
|
||||
alignMap = new EnumMap<XWPFVertAlign, STVerticalJc.Enum>(XWPFVertAlign.class);
|
||||
alignMap.put(XWPFVertAlign.TOP, STVerticalJc.Enum.forInt(STVerticalJc.INT_TOP));
|
||||
alignMap.put(XWPFVertAlign.CENTER, STVerticalJc.Enum.forInt(STVerticalJc.INT_CENTER));
|
||||
alignMap.put(XWPFVertAlign.BOTH, STVerticalJc.Enum.forInt(STVerticalJc.INT_BOTH));
|
||||
alignMap.put(XWPFVertAlign.BOTTOM, STVerticalJc.Enum.forInt(STVerticalJc.INT_BOTTOM));
|
||||
|
||||
stVertAlignTypeMap = new HashMap<Integer, XWPFVertAlign>();
|
||||
stVertAlignTypeMap.put(STVerticalJc.INT_TOP, XWPFVertAlign.TOP);
|
||||
stVertAlignTypeMap.put(STVerticalJc.INT_CENTER, XWPFVertAlign.CENTER);
|
||||
stVertAlignTypeMap.put(STVerticalJc.INT_BOTH, XWPFVertAlign.BOTH);
|
||||
stVertAlignTypeMap.put(STVerticalJc.INT_BOTTOM, XWPFVertAlign.BOTTOM);
|
||||
|
||||
static {
|
||||
// populate enum maps
|
||||
alignMap = new EnumMap<XWPFVertAlign, STVerticalJc.Enum>(XWPFVertAlign.class);
|
||||
alignMap.put(XWPFVertAlign.TOP, STVerticalJc.Enum.forInt(STVerticalJc.INT_TOP));
|
||||
alignMap.put(XWPFVertAlign.CENTER, STVerticalJc.Enum.forInt(STVerticalJc.INT_CENTER));
|
||||
alignMap.put(XWPFVertAlign.BOTH, STVerticalJc.Enum.forInt(STVerticalJc.INT_BOTH));
|
||||
alignMap.put(XWPFVertAlign.BOTTOM, STVerticalJc.Enum.forInt(STVerticalJc.INT_BOTTOM));
|
||||
|
||||
stVertAlignTypeMap = new HashMap<Integer, XWPFVertAlign>();
|
||||
stVertAlignTypeMap.put(STVerticalJc.INT_TOP, XWPFVertAlign.TOP);
|
||||
stVertAlignTypeMap.put(STVerticalJc.INT_CENTER, XWPFVertAlign.CENTER);
|
||||
stVertAlignTypeMap.put(STVerticalJc.INT_BOTH, XWPFVertAlign.BOTH);
|
||||
stVertAlignTypeMap.put(STVerticalJc.INT_BOTTOM, XWPFVertAlign.BOTTOM);
|
||||
|
||||
}
|
||||
|
||||
@ -75,8 +75,8 @@ public class XWPFTableCell implements IBody, ICell {
|
||||
/**
|
||||
* If a table cell does not include at least one block-level element, then this document shall be considered corrupt
|
||||
*/
|
||||
public XWPFTableCell(CTTc cell, XWPFTableRow tableRow, IBody part) {
|
||||
this.ctTc = cell;
|
||||
public XWPFTableCell(CTTc cell, XWPFTableRow tableRow, IBody part) {
|
||||
this.ctTc = cell;
|
||||
this.part = part;
|
||||
this.tableRow = tableRow;
|
||||
// NB: If a table cell does not include at least one block-level element, then this document shall be considered corrupt.
|
||||
@ -84,10 +84,10 @@ public class XWPFTableCell implements IBody, ICell {
|
||||
cell.addNewP();
|
||||
bodyElements = new ArrayList<IBodyElement>();
|
||||
paragraphs = new ArrayList<XWPFParagraph>();
|
||||
tables = new ArrayList<XWPFTable>();
|
||||
|
||||
XmlCursor cursor = ctTc.newCursor();
|
||||
cursor.selectPath("./*");
|
||||
tables = new ArrayList<XWPFTable>();
|
||||
|
||||
XmlCursor cursor = ctTc.newCursor();
|
||||
cursor.selectPath("./*");
|
||||
while (cursor.toNextSelection()) {
|
||||
XmlObject o = cursor.getObject();
|
||||
if (o instanceof CTP) {
|
||||
@ -116,7 +116,7 @@ public class XWPFTableCell implements IBody, ICell {
|
||||
@Internal
|
||||
public CTTc getCTTc() {
|
||||
return ctTc;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* returns an Iterator with paragraphs and tables
|
||||
@ -130,10 +130,10 @@ public class XWPFTableCell implements IBody, ICell {
|
||||
public void setParagraph(XWPFParagraph p) {
|
||||
if (ctTc.sizeOfPArray() == 0) {
|
||||
ctTc.addNewP();
|
||||
}
|
||||
ctTc.setPArray(0, p.getCTP());
|
||||
}
|
||||
|
||||
}
|
||||
ctTc.setPArray(0, p.getCTP());
|
||||
}
|
||||
|
||||
/**
|
||||
* returns a list of paragraphs
|
||||
*/
|
||||
@ -224,23 +224,23 @@ public class XWPFTableCell implements IBody, ICell {
|
||||
ctshd.setFill(rgbStr);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the vertical alignment of the cell.
|
||||
*
|
||||
* @return the cell alignment enum value or <code>null</code>
|
||||
* if no vertical alignment is set.
|
||||
*/
|
||||
public XWPFVertAlign getVerticalAlignment() {
|
||||
XWPFVertAlign vAlign = null;
|
||||
CTTcPr tcpr = ctTc.getTcPr();
|
||||
if (tcpr != null) {
|
||||
CTVerticalJc va = tcpr.getVAlign();
|
||||
if (va != null && va.getVal() != null) {
|
||||
vAlign = stVertAlignTypeMap.get(va.getVal().intValue());
|
||||
}
|
||||
}
|
||||
return vAlign;
|
||||
}
|
||||
/**
|
||||
* Get the vertical alignment of the cell.
|
||||
*
|
||||
* @return the cell alignment enum value or <code>null</code>
|
||||
* if no vertical alignment is set.
|
||||
*/
|
||||
public XWPFVertAlign getVerticalAlignment() {
|
||||
XWPFVertAlign vAlign = null;
|
||||
CTTcPr tcpr = ctTc.getTcPr();
|
||||
if (tcpr != null) {
|
||||
CTVerticalJc va = tcpr.getVAlign();
|
||||
if (va != null && va.getVal() != null) {
|
||||
vAlign = stVertAlignTypeMap.get(va.getVal().intValue());
|
||||
}
|
||||
}
|
||||
return vAlign;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the vertical alignment of the cell.
|
||||
@ -343,7 +343,7 @@ public class XWPFTableCell implements IBody, ICell {
|
||||
* @see org.apache.poi.xwpf.usermodel.IBody#getParagraphArray(int)
|
||||
*/
|
||||
public XWPFParagraph getParagraphArray(int pos) {
|
||||
if (pos > 0 && pos < paragraphs.size()) {
|
||||
if (pos >= 0 && pos < paragraphs.size()) {
|
||||
return paragraphs.get(pos);
|
||||
}
|
||||
return null;
|
||||
@ -381,7 +381,7 @@ public class XWPFTableCell implements IBody, ICell {
|
||||
* @see org.apache.poi.xwpf.usermodel.IBody#getTableArray(int)
|
||||
*/
|
||||
public XWPFTable getTableArray(int pos) {
|
||||
if (pos > 0 && pos < tables.size()) {
|
||||
if(pos >= 0 && pos < tables.size()) {
|
||||
return tables.get(pos);
|
||||
}
|
||||
return null;
|
||||
@ -399,15 +399,15 @@ public class XWPFTableCell implements IBody, ICell {
|
||||
*
|
||||
* @see org.apache.poi.xwpf.usermodel.IBody#insertTable(int, org.apache.poi.xwpf.usermodel.XWPFTable)
|
||||
*/
|
||||
public void insertTable(int pos, XWPFTable table) {
|
||||
bodyElements.add(pos, table);
|
||||
int i = 0;
|
||||
for (CTTbl tbl : ctTc.getTblArray()) {
|
||||
if (tbl == table.getCTTbl()) {
|
||||
break;
|
||||
}
|
||||
i++;
|
||||
}
|
||||
public void insertTable(int pos, XWPFTable table) {
|
||||
bodyElements.add(pos, table);
|
||||
int i = 0;
|
||||
for (CTTbl tbl : ctTc.getTblArray()) {
|
||||
if (tbl == table.getCTTbl()) {
|
||||
break;
|
||||
}
|
||||
i++;
|
||||
}
|
||||
tables.add(i, table);
|
||||
}
|
||||
|
||||
@ -466,9 +466,9 @@ public class XWPFTableCell implements IBody, ICell {
|
||||
text.append('\t');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
}
|
||||
|
||||
/**
|
||||
* get the TableCell which belongs to the TableCell
|
||||
*/
|
||||
public XWPFTableCell getTableCell(CTTc cell) {
|
||||
|
@ -21,6 +21,7 @@ import static org.junit.Assert.assertNotNull;
|
||||
|
||||
import java.io.IOException;
|
||||
|
||||
import org.apache.poi.util.Units;
|
||||
import org.apache.poi.openxml4j.exceptions.OpenXML4JException;
|
||||
import org.apache.poi.xwpf.XWPFTestDataSamples;
|
||||
import org.apache.poi.xwpf.usermodel.XWPFRun.FontCharRange;
|
||||
@ -55,7 +56,6 @@ public class TestXWPFBugs {
|
||||
doc.close();
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
public void bug57312_NullPointException() throws IOException {
|
||||
XWPFDocument doc = XWPFTestDataSamples.openSampleDocument("57312.docx");
|
||||
@ -82,6 +82,40 @@ public class TestXWPFBugs {
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void bug57495_getTableArrayInDoc() {
|
||||
XWPFDocument doc =new XWPFDocument();
|
||||
//let's create a few tables for the test
|
||||
for(int i=0;i<3;i++) {
|
||||
doc.createTable(2, 2);
|
||||
}
|
||||
XWPFTable table = doc.getTableArray(0);
|
||||
assertNotNull(table);
|
||||
//let's check also that returns the correct table
|
||||
XWPFTable same = doc.getTables().get(0);
|
||||
assertEquals(table, same);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void bug57495_getParagraphArrayInTableCell() {
|
||||
XWPFDocument doc =new XWPFDocument();
|
||||
//let's create a table for the test
|
||||
XWPFTable table = doc.createTable(2, 2);
|
||||
assertNotNull(table);
|
||||
XWPFParagraph p = table.getRow(0).getCell(0).getParagraphArray(0);
|
||||
assertNotNull(p);
|
||||
//let's check also that returns the correct paragraph
|
||||
XWPFParagraph same = table.getRow(0).getCell(0).getParagraphs().get(0);
|
||||
assertEquals(p, same);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void bug57495_convertPixelsToEMUs() {
|
||||
int pixels = 100;
|
||||
int expectedEMU = 952500;
|
||||
int result = Units.pixelToEMU(pixels);
|
||||
assertEquals(expectedEMU, result);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void test56392() throws IOException, OpenXML4JException {
|
||||
|
Loading…
Reference in New Issue
Block a user