applied patches by Gisella Bronzetti:46299 - support for carriage return and line break in XWPFRun 46300 - support for line spacing in XWPFParagraph 46308 - initial support for creation of XWPFTable
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@727498 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
9a665498f8
commit
fabf35b20d
@ -37,6 +37,9 @@
|
|||||||
|
|
||||||
<!-- Don't forget to update status.xml too! -->
|
<!-- Don't forget to update status.xml too! -->
|
||||||
<release version="3.5-beta5" date="2008-??-??">
|
<release version="3.5-beta5" date="2008-??-??">
|
||||||
|
<action dev="POI-DEVELOPERS" type="add">46299 - support for carriage return and line break in XWPFRun</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="add">46300 - support for line spacing in XWPFParagraph</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="add">46308 - initial support for creation of XWPFTable</action>
|
||||||
<action dev="POI-DEVELOPERS" type="add">Added getters to parent objects: HSSFSheet.getWorkbook(), HSSFRow.getSheet() and HSSFCell.getRow()</action>
|
<action dev="POI-DEVELOPERS" type="add">Added getters to parent objects: HSSFSheet.getWorkbook(), HSSFRow.getSheet() and HSSFCell.getRow()</action>
|
||||||
<action dev="POI-DEVELOPERS" type="fix">46385 - (also patch 46362) fix serialization of StyleRecord with unicode name</action>
|
<action dev="POI-DEVELOPERS" type="fix">46385 - (also patch 46362) fix serialization of StyleRecord with unicode name</action>
|
||||||
<action dev="POI-DEVELOPERS" type="fix">46368 - Fix HSSFRichTextRun and strings longer than 32768 characters</action>
|
<action dev="POI-DEVELOPERS" type="fix">46368 - Fix HSSFRichTextRun and strings longer than 32768 characters</action>
|
||||||
|
@ -34,6 +34,9 @@
|
|||||||
<!-- Don't forget to update changes.xml too! -->
|
<!-- Don't forget to update changes.xml too! -->
|
||||||
<changes>
|
<changes>
|
||||||
<release version="3.5-beta5" date="2008-??-??">
|
<release version="3.5-beta5" date="2008-??-??">
|
||||||
|
<action dev="POI-DEVELOPERS" type="add">46299 - support for carriage return and line break in XWPFRun</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="add">46300 - support for line spacing in XWPFParagraph</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="add">46308 - initial support for creation of XWPFTable</action>
|
||||||
<action dev="POI-DEVELOPERS" type="add">Added getters to parent objects: HSSFSheet.getWorkbook(), HSSFRow.getSheet() and HSSFCell.getRow()</action>
|
<action dev="POI-DEVELOPERS" type="add">Added getters to parent objects: HSSFSheet.getWorkbook(), HSSFRow.getSheet() and HSSFCell.getRow()</action>
|
||||||
<action dev="POI-DEVELOPERS" type="fix">46385 - (also patch 46362) fix serialization of StyleRecord with unicode name</action>
|
<action dev="POI-DEVELOPERS" type="fix">46385 - (also patch 46362) fix serialization of StyleRecord with unicode name</action>
|
||||||
<action dev="POI-DEVELOPERS" type="fix">46368 - Fix HSSFRichTextRun and strings longer than 32768 characters</action>
|
<action dev="POI-DEVELOPERS" type="fix">46368 - Fix HSSFRichTextRun and strings longer than 32768 characters</action>
|
||||||
|
@ -17,7 +17,6 @@
|
|||||||
package org.apache.poi.xwpf.usermodel;
|
package org.apache.poi.xwpf.usermodel;
|
||||||
|
|
||||||
import java.io.FileOutputStream;
|
import java.io.FileOutputStream;
|
||||||
import java.math.BigInteger;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A simple WOrdprocessingML document created by POI XWPF API
|
* A simple WOrdprocessingML document created by POI XWPF API
|
||||||
@ -46,7 +45,7 @@ public class SimpleDocument {
|
|||||||
r1.setBold(true);
|
r1.setBold(true);
|
||||||
r1.setFontFamily("Courier");
|
r1.setFontFamily("Courier");
|
||||||
r1.setUnderline(UnderlinePatterns.DOT_DOT_DASH);
|
r1.setUnderline(UnderlinePatterns.DOT_DOT_DASH);
|
||||||
r1.setTextPosition(new BigInteger("100"));
|
r1.setTextPosition(100);
|
||||||
|
|
||||||
XWPFParagraph p2 = doc.createParagraph();
|
XWPFParagraph p2 = doc.createParagraph();
|
||||||
p2.setAlignment(ParagraphAlignment.RIGHT);
|
p2.setAlignment(ParagraphAlignment.RIGHT);
|
||||||
@ -61,51 +60,58 @@ public class SimpleDocument {
|
|||||||
XWPFRun r2 = p2.createRun();
|
XWPFRun r2 = p2.createRun();
|
||||||
r2.setText("jumped over the lazy dog");
|
r2.setText("jumped over the lazy dog");
|
||||||
r2.setStrike(true);
|
r2.setStrike(true);
|
||||||
r2.setFontSize(new BigInteger("20"));
|
r2.setFontSize(20);
|
||||||
|
|
||||||
XWPFRun r3 = p2.createRun();
|
XWPFRun r3 = p2.createRun();
|
||||||
r3.setText("and went away");
|
r3.setText("and went away");
|
||||||
r3.setStrike(true);
|
r3.setStrike(true);
|
||||||
r3.setFontSize(new BigInteger("20"));
|
r3.setFontSize(20);
|
||||||
r3.setSubscript(VerticalAlign.SUPERSCRIPT);
|
r3.setSubscript(VerticalAlign.SUPERSCRIPT);
|
||||||
|
|
||||||
|
|
||||||
XWPFParagraph p3 = doc.createParagraph();
|
XWPFParagraph p3 = doc.createParagraph();
|
||||||
p3.setWordWrap(true);
|
p3.setWordWrap(true);
|
||||||
p3.setPageBreak(true);
|
p3.setPageBreak(true);
|
||||||
p3.setAlignment(ParagraphAlignment.DISTRIBUTE);
|
|
||||||
p3.setIndentationFirstLine(new BigInteger("600"));
|
//p3.setAlignment(ParagraphAlignment.DISTRIBUTE);
|
||||||
p3.setSpacingAfter(new BigInteger("250"));
|
p3.setAlignment(ParagraphAlignment.BOTH);
|
||||||
p3.setSpacingBefore(new BigInteger("250"));
|
p3.setSpacingLineRule(LineSpacingRule.EXACT);
|
||||||
|
|
||||||
|
p3.setIndentationFirstLine(600);
|
||||||
|
|
||||||
|
|
||||||
XWPFRun r4 = p3.createRun();
|
XWPFRun r4 = p3.createRun();
|
||||||
r4.setTextPosition(new BigInteger("20"));
|
r4.setTextPosition(20);
|
||||||
r4.setText("To be, or not to be: that is the question: "
|
r4.setText("To be, or not to be: that is the question: "
|
||||||
+ "Whether 'tis nobler in the mind to suffer "
|
+ "Whether 'tis nobler in the mind to suffer "
|
||||||
+ "The slings and arrows of outrageous fortune, "
|
+ "The slings and arrows of outrageous fortune, "
|
||||||
+ "Or to take arms against a sea of troubles, "
|
+ "Or to take arms against a sea of troubles, "
|
||||||
+ "And by opposing end them? To die: to sleep; "
|
+ "And by opposing end them? To die: to sleep; ");
|
||||||
+ "No more; and by a sleep to say we end "
|
r4.addBreak(BreakType.PAGE);
|
||||||
|
r4.setText("No more; and by a sleep to say we end "
|
||||||
+ "The heart-ache and the thousand natural shocks "
|
+ "The heart-ache and the thousand natural shocks "
|
||||||
+ "That flesh is heir to, 'tis a consummation "
|
+ "That flesh is heir to, 'tis a consummation "
|
||||||
+ "Devoutly to be wish'd. To die, to sleep; "
|
+ "Devoutly to be wish'd. To die, to sleep; "
|
||||||
+ "To sleep: perchance to dream: ay, there's the rub; "
|
+ "To sleep: perchance to dream: ay, there's the rub; "
|
||||||
+ ".......");
|
+ ".......");
|
||||||
r4.setItalic(true);
|
r4.setItalic(true);
|
||||||
|
//This would imply that this break shall be treated as a simple line break, and break the line after that word:
|
||||||
|
|
||||||
XWPFRun r5 = p3.createRun();
|
XWPFRun r5 = p3.createRun();
|
||||||
r5.setTextPosition(new BigInteger("-10"));
|
r5.setTextPosition(-10);
|
||||||
r5.setText("For in that sleep of death what dreams may come"
|
r5.setText("For in that sleep of death what dreams may come");
|
||||||
+ "When we have shuffled off this mortal coil,"
|
r5.addCarriageReturn();
|
||||||
|
r5.setText("When we have shuffled off this mortal coil,"
|
||||||
+ "Must give us pause: there's the respect"
|
+ "Must give us pause: there's the respect"
|
||||||
+ "That makes calamity of so long life;"
|
+ "That makes calamity of so long life;");
|
||||||
+ "For who would bear the whips and scorns of time,"
|
r5.addBreak();
|
||||||
+ "The oppressor's wrong, the proud man's contumely,"
|
r5.setText("For who would bear the whips and scorns of time,"
|
||||||
+ "The pangs of despised love, the law's delay,"
|
+ "The oppressor's wrong, the proud man's contumely,");
|
||||||
|
|
||||||
|
r5.addBreak(BreakClear.ALL);
|
||||||
|
r5.setText("The pangs of despised love, the law's delay,"
|
||||||
+ "The insolence of office and the spurns" + ".......");
|
+ "The insolence of office and the spurns" + ".......");
|
||||||
|
|
||||||
|
|
||||||
FileOutputStream out = new FileOutputStream("simple.docx");
|
FileOutputStream out = new FileOutputStream("simple.docx");
|
||||||
doc.write(out);
|
doc.write(out);
|
||||||
out.close();
|
out.close();
|
||||||
|
56
src/examples/src/org/apache/poi/xwpf/usermodel/SimpleTable.java
Executable file
56
src/examples/src/org/apache/poi/xwpf/usermodel/SimpleTable.java
Executable file
@ -0,0 +1,56 @@
|
|||||||
|
/* ====================================================================
|
||||||
|
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.io.FileOutputStream;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A simple WOrdprocessingML table created by POI XWPF API
|
||||||
|
*
|
||||||
|
* @author gisella bronzetti
|
||||||
|
*/
|
||||||
|
public class SimpleTable {
|
||||||
|
|
||||||
|
public static void main(String[] args) throws Exception {
|
||||||
|
XWPFDocument doc = new XWPFDocument();
|
||||||
|
|
||||||
|
XWPFTable table=doc.createTable(3,3);
|
||||||
|
|
||||||
|
table.getRow(1).getCell(1).setText("EXAMPLE OF TABLE");
|
||||||
|
|
||||||
|
|
||||||
|
XWPFParagraph p1 = doc.createParagraph();
|
||||||
|
|
||||||
|
XWPFRun r1 = p1.createRun();
|
||||||
|
r1.setBold(true);
|
||||||
|
r1.setText("The quick brown fox");
|
||||||
|
r1.setBold(true);
|
||||||
|
r1.setFontFamily("Courier");
|
||||||
|
r1.setUnderline(UnderlinePatterns.DOT_DOT_DASH);
|
||||||
|
r1.setTextPosition(100);
|
||||||
|
|
||||||
|
table.getRow(0).getCell(0).setParagraph(p1);
|
||||||
|
|
||||||
|
|
||||||
|
table.getRow(2).getCell(2).setText("only text");
|
||||||
|
|
||||||
|
FileOutputStream out = new FileOutputStream("simpleTable.docx");
|
||||||
|
doc.write(out);
|
||||||
|
out.close();
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
111
src/ooxml/java/org/apache/poi/xwpf/usermodel/BreakClear.java
Executable file
111
src/ooxml/java/org/apache/poi/xwpf/usermodel/BreakClear.java
Executable file
@ -0,0 +1,111 @@
|
|||||||
|
/* ====================================================================
|
||||||
|
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.HashMap;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Specifies the set of possible restart locations which may be used as to
|
||||||
|
* determine the next available line when a breakÕs type attribute has a value
|
||||||
|
* of textWrapping.
|
||||||
|
*
|
||||||
|
* @author Gisella Bronzetti
|
||||||
|
*/
|
||||||
|
public enum BreakClear {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Specifies that the text wrapping break shall advance the text to the next
|
||||||
|
* line in the WordprocessingML document, regardless of its position left to
|
||||||
|
* right or the presence of any floating objects which intersect with the
|
||||||
|
* line,
|
||||||
|
*
|
||||||
|
* This is the setting for a typical line break in a document.
|
||||||
|
*/
|
||||||
|
|
||||||
|
NONE(1),
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Specifies that the text wrapping break shall behave as follows:
|
||||||
|
* <ul>
|
||||||
|
* <li> If this line is broken into multiple regions (a floating object in
|
||||||
|
* the center of the page has text wrapping on both sides:
|
||||||
|
* <ul>
|
||||||
|
* <li> If this is the leftmost region of text flow on this line, advance
|
||||||
|
* the text to the next position on the line </li>
|
||||||
|
* <li>Otherwise, treat this as a text wrapping break of type all. </li>
|
||||||
|
* </ul>
|
||||||
|
* </li>
|
||||||
|
* <li> If this line is not broken into multiple regions, then treat this
|
||||||
|
* break as a text wrapping break of type none. </li>
|
||||||
|
* </ul>
|
||||||
|
* <li> If the parent paragraph is right to left, then these behaviors are
|
||||||
|
* also reversed. </li>
|
||||||
|
*/
|
||||||
|
LEFT(2),
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Specifies that the text wrapping break shall behave as follows:
|
||||||
|
* <ul>
|
||||||
|
* <li> If this line is broken into multiple regions (a floating object in
|
||||||
|
* the center of the page has text wrapping on both sides:
|
||||||
|
* <ul>
|
||||||
|
* <li> If this is the rightmost region of text flow on this line, advance
|
||||||
|
* the text to the next position on the next line </li>
|
||||||
|
* <li> Otherwise, treat this as a text wrapping break of type all. </li>
|
||||||
|
* </ul>
|
||||||
|
* <li> If this line is not broken into multiple regions, then treat this
|
||||||
|
* break as a text wrapping break of type none. </li>
|
||||||
|
* <li> If the parent paragraph is right to left, then these beha viors are
|
||||||
|
* also reversed. </li>
|
||||||
|
* </ul>
|
||||||
|
*/
|
||||||
|
RIGHT(3),
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Specifies that the text wrapping break shall advance the text to the next
|
||||||
|
* line in the WordprocessingML document which spans the full width of the
|
||||||
|
* line.
|
||||||
|
*/
|
||||||
|
ALL(4);
|
||||||
|
|
||||||
|
private final int value;
|
||||||
|
|
||||||
|
private BreakClear(int val) {
|
||||||
|
value = val;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getValue() {
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static Map<Integer, BreakClear> imap = new HashMap<Integer, BreakClear>();
|
||||||
|
static {
|
||||||
|
for (BreakClear p : values()) {
|
||||||
|
imap.put(p.getValue(), p);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static BreakClear valueOf(int type) {
|
||||||
|
BreakClear bType = imap.get(type);
|
||||||
|
if (bType == null)
|
||||||
|
throw new IllegalArgumentException("Unknown break clear type: "
|
||||||
|
+ type);
|
||||||
|
return bType;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
84
src/ooxml/java/org/apache/poi/xwpf/usermodel/BreakType.java
Executable file
84
src/ooxml/java/org/apache/poi/xwpf/usermodel/BreakType.java
Executable file
@ -0,0 +1,84 @@
|
|||||||
|
/* ====================================================================
|
||||||
|
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.HashMap;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Specifies the possible types of break characters in a WordprocessingML
|
||||||
|
* document.
|
||||||
|
* The break type determines the next location where text shall be
|
||||||
|
* placed after this manual break is applied to the text contents
|
||||||
|
*
|
||||||
|
* @author Gisella Bronzetti
|
||||||
|
*/
|
||||||
|
public enum BreakType {
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Specifies that the current break shall restart itself on the next page of
|
||||||
|
* the document when the document is displayed in page view.
|
||||||
|
*/
|
||||||
|
PAGE(1),
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Specifies that the current break shall restart itself on the next column
|
||||||
|
* available on the current page when the document is displayed in page
|
||||||
|
* view.
|
||||||
|
* <p>
|
||||||
|
* If the current section is not divided into columns, or the column break
|
||||||
|
* occurs in the last column on the current page when displayed, then the
|
||||||
|
* restart location for text shall be the next page in the document.
|
||||||
|
* </p>
|
||||||
|
*/
|
||||||
|
COLUMN(2),
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Specifies that the current break shall restart itself on the next line in
|
||||||
|
* the document when the document is displayed in page view.
|
||||||
|
* The determine of the next line shall be done subject to the value of the clear
|
||||||
|
* attribute on the specified break character.
|
||||||
|
*/
|
||||||
|
TEXT_WRAPPING(3);
|
||||||
|
|
||||||
|
private final int value;
|
||||||
|
|
||||||
|
private BreakType(int val) {
|
||||||
|
value = val;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getValue() {
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static Map<Integer, BreakType> imap = new HashMap<Integer, BreakType>();
|
||||||
|
static {
|
||||||
|
for (BreakType p : values()) {
|
||||||
|
imap.put(p.getValue(), p);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static BreakType valueOf(int type) {
|
||||||
|
BreakType bType = imap.get(type);
|
||||||
|
if (bType == null)
|
||||||
|
throw new IllegalArgumentException("Unknown break type: "
|
||||||
|
+ type);
|
||||||
|
return bType;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
76
src/ooxml/java/org/apache/poi/xwpf/usermodel/LineSpacingRule.java
Executable file
76
src/ooxml/java/org/apache/poi/xwpf/usermodel/LineSpacingRule.java
Executable file
@ -0,0 +1,76 @@
|
|||||||
|
/* ====================================================================
|
||||||
|
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.HashMap;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Specifies the logic which shall be used to calculate the line spacing of the
|
||||||
|
* parent object when it is displayed in the document.
|
||||||
|
*
|
||||||
|
* @author Gisella Bronzetti
|
||||||
|
*/
|
||||||
|
public enum LineSpacingRule {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Specifies that the line spacing of the parent object shall be
|
||||||
|
* automatically determined by the size of its contents, with no
|
||||||
|
* predetermined minimum or maximum size.
|
||||||
|
*/
|
||||||
|
|
||||||
|
AUTO(1),
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Specifies that the height of the line shall be exactly the value
|
||||||
|
* specified, regardless of the size of the contents If the contents are too
|
||||||
|
* large for the specified height, then they shall be clipped as necessary.
|
||||||
|
*/
|
||||||
|
EXACT(2),
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Specifies that the height of the line shall be at least the value
|
||||||
|
* specified, but may be expanded to fit its content as needed.
|
||||||
|
*/
|
||||||
|
AT_LEAST(3);
|
||||||
|
|
||||||
|
|
||||||
|
private final int value;
|
||||||
|
|
||||||
|
private LineSpacingRule(int val) {
|
||||||
|
value = val;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getValue() {
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static Map<Integer, LineSpacingRule> imap = new HashMap<Integer, LineSpacingRule>();
|
||||||
|
static {
|
||||||
|
for (LineSpacingRule p : values()) {
|
||||||
|
imap.put(p.getValue(), p);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static LineSpacingRule valueOf(int type) {
|
||||||
|
LineSpacingRule lineType = imap.get(type);
|
||||||
|
if (lineType == null)
|
||||||
|
throw new IllegalArgumentException("Unknown line type: " + type);
|
||||||
|
return lineType;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -318,5 +318,23 @@ public class XWPFDocument extends POIXMLDocument {
|
|||||||
return new XWPFParagraph(ctDocument.getBody().addNewP(), this);
|
return new XWPFParagraph(ctDocument.getBody().addNewP(), this);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create an empty table with one row and one column as default.
|
||||||
|
*
|
||||||
|
* @return a new table
|
||||||
|
*/
|
||||||
|
public XWPFTable createTable(){
|
||||||
|
return new XWPFTable(ctDocument.getBody().addNewTbl());
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create an empty table with a number of rows and cols specified
|
||||||
|
* @param rows
|
||||||
|
* @param cols
|
||||||
|
* @return table
|
||||||
|
*/
|
||||||
|
public XWPFTable createTable(int rows, int cols) {
|
||||||
|
return new XWPFTable(ctDocument.getBody().addNewTbl(), rows, cols);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -38,6 +38,7 @@ import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTText;
|
|||||||
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTextAlignment;
|
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTextAlignment;
|
||||||
import org.openxmlformats.schemas.wordprocessingml.x2006.main.STBorder;
|
import org.openxmlformats.schemas.wordprocessingml.x2006.main.STBorder;
|
||||||
import org.openxmlformats.schemas.wordprocessingml.x2006.main.STJc;
|
import org.openxmlformats.schemas.wordprocessingml.x2006.main.STJc;
|
||||||
|
import org.openxmlformats.schemas.wordprocessingml.x2006.main.STLineSpacingRule;
|
||||||
import org.openxmlformats.schemas.wordprocessingml.x2006.main.STOnOff;
|
import org.openxmlformats.schemas.wordprocessingml.x2006.main.STOnOff;
|
||||||
import org.openxmlformats.schemas.wordprocessingml.x2006.main.STTextAlignment;
|
import org.openxmlformats.schemas.wordprocessingml.x2006.main.STTextAlignment;
|
||||||
import org.w3c.dom.NodeList;
|
import org.w3c.dom.NodeList;
|
||||||
@ -58,80 +59,86 @@ public class XWPFParagraph {
|
|||||||
private StringBuffer text = new StringBuffer();
|
private StringBuffer text = new StringBuffer();
|
||||||
private StringBuffer pictureText = new StringBuffer();
|
private StringBuffer pictureText = new StringBuffer();
|
||||||
|
|
||||||
|
|
||||||
|
protected XWPFParagraph(CTP prgrph) {
|
||||||
|
this(prgrph, null);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
protected XWPFParagraph(CTP prgrph, XWPFDocument docRef) {
|
protected XWPFParagraph(CTP prgrph, XWPFDocument docRef) {
|
||||||
this.paragraph = prgrph;
|
this.paragraph = prgrph;
|
||||||
this.document = docRef;
|
this.document = docRef;
|
||||||
|
|
||||||
if (!isEmpty()) {
|
if (!isEmpty()) {
|
||||||
// All the runs to loop over
|
// All the runs to loop over
|
||||||
// TODO - replace this with some sort of XPath expression
|
// TODO - replace this with some sort of XPath expression
|
||||||
// to directly find all the CTRs, in the right order
|
// to directly find all the CTRs, in the right order
|
||||||
ArrayList<CTR> rs = new ArrayList<CTR>();
|
ArrayList<CTR> rs = new ArrayList<CTR>();
|
||||||
CTR[] tmp;
|
CTR[] tmp;
|
||||||
|
|
||||||
// Get the main text runs
|
// Get the main text runs
|
||||||
tmp = paragraph.getRArray();
|
tmp = paragraph.getRArray();
|
||||||
for (int i = 0; i < tmp.length; i++) {
|
for (int i = 0; i < tmp.length; i++) {
|
||||||
rs.add(tmp[i]);
|
rs.add(tmp[i]);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Not sure quite what these are, but they hold
|
// Not sure quite what these are, but they hold
|
||||||
// more text runs
|
// more text runs
|
||||||
CTSdtRun[] sdts = paragraph.getSdtArray();
|
CTSdtRun[] sdts = paragraph.getSdtArray();
|
||||||
for (int i = 0; i < sdts.length; i++) {
|
for (int i = 0; i < sdts.length; i++) {
|
||||||
CTSdtContentRun run = sdts[i].getSdtContent();
|
CTSdtContentRun run = sdts[i].getSdtContent();
|
||||||
tmp = run.getRArray();
|
tmp = run.getRArray();
|
||||||
for (int j = 0; j < tmp.length; j++) {
|
for (int j = 0; j < tmp.length; j++) {
|
||||||
rs.add(tmp[j]);
|
rs.add(tmp[j]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Get text of the paragraph
|
// Get text of the paragraph
|
||||||
for (int j = 0; j < rs.size(); j++) {
|
for (int j = 0; j < rs.size(); j++) {
|
||||||
// Grab the text and tabs of the paragraph
|
// Grab the text and tabs of the paragraph
|
||||||
// Do so in a way that preserves the ordering
|
// Do so in a way that preserves the ordering
|
||||||
XmlCursor c = rs.get(j).newCursor();
|
XmlCursor c = rs.get(j).newCursor();
|
||||||
c.selectPath("./*");
|
c.selectPath("./*");
|
||||||
while (c.toNextSelection()) {
|
while (c.toNextSelection()) {
|
||||||
XmlObject o = c.getObject();
|
XmlObject o = c.getObject();
|
||||||
if (o instanceof CTText) {
|
if (o instanceof CTText) {
|
||||||
text.append(((CTText) o).getStringValue());
|
text.append(((CTText) o).getStringValue());
|
||||||
}
|
}
|
||||||
if (o instanceof CTPTab) {
|
if (o instanceof CTPTab) {
|
||||||
text.append("\t");
|
text.append("\t");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Loop over pictures inside our
|
// Loop over pictures inside our
|
||||||
// paragraph, looking for text in them
|
// paragraph, looking for text in them
|
||||||
CTPicture[] picts = rs.get(j).getPictArray();
|
CTPicture[] picts = rs.get(j).getPictArray();
|
||||||
for (int k = 0; k < picts.length; k++) {
|
for (int k = 0; k < picts.length; k++) {
|
||||||
XmlObject[] t = picts[k]
|
XmlObject[] t = picts[k]
|
||||||
.selectPath("declare namespace w='http://schemas.openxmlformats.org/wordprocessingml/2006/main' .//w:t");
|
.selectPath("declare namespace w='http://schemas.openxmlformats.org/wordprocessingml/2006/main' .//w:t");
|
||||||
for (int m = 0; m < t.length; m++) {
|
for (int m = 0; m < t.length; m++) {
|
||||||
NodeList kids = t[m].getDomNode().getChildNodes();
|
NodeList kids = t[m].getDomNode().getChildNodes();
|
||||||
for (int n = 0; n < kids.getLength(); n++) {
|
for (int n = 0; n < kids.getLength(); n++) {
|
||||||
if (kids.item(n) instanceof Text) {
|
if (kids.item(n) instanceof Text) {
|
||||||
pictureText.append("\n");
|
pictureText.append("\n");
|
||||||
pictureText.append(kids.item(n).getNodeValue());
|
pictureText.append(kids.item(n).getNodeValue());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public CTP getCTP() {
|
public CTP getCTP() {
|
||||||
return paragraph;
|
return paragraph;
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean isEmpty() {
|
public boolean isEmpty() {
|
||||||
return !paragraph.getDomNode().hasChildNodes();
|
return !paragraph.getDomNode().hasChildNodes();
|
||||||
}
|
}
|
||||||
|
|
||||||
public XWPFDocument getDocument() {
|
public XWPFDocument getDocument() {
|
||||||
return document;
|
return document;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -139,7 +146,7 @@ public class XWPFParagraph {
|
|||||||
* in it.
|
* in it.
|
||||||
*/
|
*/
|
||||||
public String getText() {
|
public String getText() {
|
||||||
return getParagraphText() + getPictureText();
|
return getParagraphText() + getPictureText();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -147,14 +154,14 @@ public class XWPFParagraph {
|
|||||||
* paragraph
|
* paragraph
|
||||||
*/
|
*/
|
||||||
public String getParagraphText() {
|
public String getParagraphText() {
|
||||||
return text.toString();
|
return text.toString();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns any text from any suitable pictures in the paragraph
|
* Returns any text from any suitable pictures in the paragraph
|
||||||
*/
|
*/
|
||||||
public String getPictureText() {
|
public String getPictureText() {
|
||||||
return pictureText.toString();
|
return pictureText.toString();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -163,7 +170,7 @@ public class XWPFParagraph {
|
|||||||
* @return a new text run
|
* @return a new text run
|
||||||
*/
|
*/
|
||||||
public XWPFRun createRun() {
|
public XWPFRun createRun() {
|
||||||
return new XWPFRun(paragraph.addNewR(), this);
|
return new XWPFRun(paragraph.addNewR(), this);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -181,7 +188,7 @@ public class XWPFParagraph {
|
|||||||
* @return the paragraph alignment of this paragraph.
|
* @return the paragraph alignment of this paragraph.
|
||||||
*/
|
*/
|
||||||
public ParagraphAlignment getAlignment() {
|
public ParagraphAlignment getAlignment() {
|
||||||
CTPPr pr = paragraph.getPPr();
|
CTPPr pr = getCTPPr();
|
||||||
return pr == null || !pr.isSetJc() ? ParagraphAlignment.LEFT
|
return pr == null || !pr.isSetJc() ? ParagraphAlignment.LEFT
|
||||||
: ParagraphAlignment.valueOf(pr.getJc().getVal().intValue());
|
: ParagraphAlignment.valueOf(pr.getJc().getVal().intValue());
|
||||||
}
|
}
|
||||||
@ -201,8 +208,7 @@ public class XWPFParagraph {
|
|||||||
* @param align the paragraph alignment to apply to this paragraph.
|
* @param align the paragraph alignment to apply to this paragraph.
|
||||||
*/
|
*/
|
||||||
public void setAlignment(ParagraphAlignment align) {
|
public void setAlignment(ParagraphAlignment align) {
|
||||||
CTPPr pr = paragraph.isSetPPr() ? paragraph.getPPr() : paragraph
|
CTPPr pr = getCTPPr();
|
||||||
.addNewPPr();
|
|
||||||
CTJc jc = pr.isSetJc() ? pr.getJc() : pr.addNewJc();
|
CTJc jc = pr.isSetJc() ? pr.getJc() : pr.addNewJc();
|
||||||
STJc.Enum en = STJc.Enum.forInt(align.getValue());
|
STJc.Enum en = STJc.Enum.forInt(align.getValue());
|
||||||
jc.setVal(en);
|
jc.setVal(en);
|
||||||
@ -227,8 +233,8 @@ public class XWPFParagraph {
|
|||||||
* @return the vertical alignment of this paragraph.
|
* @return the vertical alignment of this paragraph.
|
||||||
*/
|
*/
|
||||||
public TextAlignment getVerticalAlignment() {
|
public TextAlignment getVerticalAlignment() {
|
||||||
CTPPr pr = paragraph.getPPr();
|
CTPPr pr = getCTPPr();
|
||||||
return pr == null || !pr.isSetTextAlignment() ? TextAlignment.AUTO
|
return (pr == null || !pr.isSetTextAlignment()) ? TextAlignment.AUTO
|
||||||
: TextAlignment.valueOf(pr.getTextAlignment().getVal()
|
: TextAlignment.valueOf(pr.getTextAlignment().getVal()
|
||||||
.intValue());
|
.intValue());
|
||||||
}
|
}
|
||||||
@ -253,8 +259,7 @@ public class XWPFParagraph {
|
|||||||
* paragraph.
|
* paragraph.
|
||||||
*/
|
*/
|
||||||
public void setVerticalAlignment(TextAlignment valign) {
|
public void setVerticalAlignment(TextAlignment valign) {
|
||||||
CTPPr pr = paragraph.isSetPPr() ? paragraph.getPPr() : paragraph
|
CTPPr pr = getCTPPr();
|
||||||
.addNewPPr();
|
|
||||||
CTTextAlignment textAlignment = pr.isSetTextAlignment() ? pr
|
CTTextAlignment textAlignment = pr.isSetTextAlignment() ? pr
|
||||||
.getTextAlignment() : pr.addNewTextAlignment();
|
.getTextAlignment() : pr.addNewTextAlignment();
|
||||||
STTextAlignment.Enum en = STTextAlignment.Enum
|
STTextAlignment.Enum en = STTextAlignment.Enum
|
||||||
@ -291,7 +296,8 @@ public class XWPFParagraph {
|
|||||||
*/
|
*/
|
||||||
public void setBorderTop(Borders border) {
|
public void setBorderTop(Borders border) {
|
||||||
CTPBdr ct = getCTPBrd(true);
|
CTPBdr ct = getCTPBrd(true);
|
||||||
CTBorder pr = ct.isSetTop() ? ct.getTop() : ct.addNewTop();
|
|
||||||
|
CTBorder pr = (ct != null && ct.isSetTop()) ? ct.getTop() : ct.addNewTop();
|
||||||
if (border.getValue() == Borders.NONE.getValue())
|
if (border.getValue() == Borders.NONE.getValue())
|
||||||
ct.unsetTop();
|
ct.unsetTop();
|
||||||
else
|
else
|
||||||
@ -308,13 +314,12 @@ public class XWPFParagraph {
|
|||||||
*/
|
*/
|
||||||
public Borders getBorderTop() {
|
public Borders getBorderTop() {
|
||||||
CTPBdr border = getCTPBrd(false);
|
CTPBdr border = getCTPBrd(false);
|
||||||
CTBorder ct;
|
CTBorder ct = null;
|
||||||
if (border != null) {
|
if (border != null) {
|
||||||
ct = border.getTop();
|
ct = border.getTop();
|
||||||
STBorder.Enum ptrn = ct != null ? ct.getVal() : STBorder.NONE;
|
|
||||||
return Borders.valueOf(ptrn.intValue());
|
|
||||||
}
|
}
|
||||||
return Borders.NONE;
|
STBorder.Enum ptrn = (ct != null) ? ct.getVal() : STBorder.NONE;
|
||||||
|
return Borders.valueOf(ptrn.intValue());
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -345,12 +350,12 @@ public class XWPFParagraph {
|
|||||||
* @see Borders a list of all types of borders
|
* @see Borders a list of all types of borders
|
||||||
*/
|
*/
|
||||||
public void setBorderBottom(Borders border) {
|
public void setBorderBottom(Borders border) {
|
||||||
CTPBdr ct = getCTPBrd(true);
|
CTPBdr ct = getCTPBrd(true);
|
||||||
CTBorder pr = ct.isSetBottom() ? ct.getBottom() : ct.addNewBottom();
|
CTBorder pr = ct.isSetBottom() ? ct.getBottom() : ct.addNewBottom();
|
||||||
if (border.getValue() == Borders.NONE.getValue())
|
if (border.getValue() == Borders.NONE.getValue())
|
||||||
ct.unsetBottom();
|
ct.unsetBottom();
|
||||||
else
|
else
|
||||||
pr.setVal(STBorder.Enum.forInt(border.getValue()));
|
pr.setVal(STBorder.Enum.forInt(border.getValue()));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -362,13 +367,13 @@ public class XWPFParagraph {
|
|||||||
* @see Borders a list of all types of borders
|
* @see Borders a list of all types of borders
|
||||||
*/
|
*/
|
||||||
public Borders getBorderBottom() {
|
public Borders getBorderBottom() {
|
||||||
CTPBdr border = getCTPBrd(false);
|
CTPBdr border = getCTPBrd(false);
|
||||||
CTBorder ct = null;
|
CTBorder ct = null;
|
||||||
if (border != null) {
|
if (border != null) {
|
||||||
ct = border.getBottom();
|
ct = border.getBottom();
|
||||||
}
|
}
|
||||||
STBorder.Enum ptrn = ct != null ? ct.getVal() : STBorder.NONE;
|
STBorder.Enum ptrn = ct != null ? ct.getVal() : STBorder.NONE;
|
||||||
return Borders.valueOf(ptrn.intValue());
|
return Borders.valueOf(ptrn.intValue());
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -394,12 +399,12 @@ public class XWPFParagraph {
|
|||||||
* @see Borders for a list of all possible borders
|
* @see Borders for a list of all possible borders
|
||||||
*/
|
*/
|
||||||
public void setBorderLeft(Borders border) {
|
public void setBorderLeft(Borders border) {
|
||||||
CTPBdr ct = getCTPBrd(true);
|
CTPBdr ct = getCTPBrd(true);
|
||||||
CTBorder pr = ct.isSetLeft() ? ct.getLeft() : ct.addNewLeft();
|
CTBorder pr = ct.isSetLeft() ? ct.getLeft() : ct.addNewLeft();
|
||||||
if (border.getValue() == Borders.NONE.getValue())
|
if (border.getValue() == Borders.NONE.getValue())
|
||||||
ct.unsetLeft();
|
ct.unsetLeft();
|
||||||
else
|
else
|
||||||
pr.setVal(STBorder.Enum.forInt(border.getValue()));
|
pr.setVal(STBorder.Enum.forInt(border.getValue()));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -411,13 +416,13 @@ public class XWPFParagraph {
|
|||||||
* @see Borders for a list of all possible borders
|
* @see Borders for a list of all possible borders
|
||||||
*/
|
*/
|
||||||
public Borders getBorderLeft() {
|
public Borders getBorderLeft() {
|
||||||
CTPBdr border = getCTPBrd(false);
|
CTPBdr border = getCTPBrd(false);
|
||||||
CTBorder ct = null;
|
CTBorder ct = null;
|
||||||
if (border != null) {
|
if (border != null) {
|
||||||
ct = border.getLeft();
|
ct = border.getLeft();
|
||||||
}
|
}
|
||||||
STBorder.Enum ptrn = ct != null ? ct.getVal() : STBorder.NONE;
|
STBorder.Enum ptrn = ct != null ? ct.getVal() : STBorder.NONE;
|
||||||
return Borders.valueOf(ptrn.intValue());
|
return Borders.valueOf(ptrn.intValue());
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -443,12 +448,12 @@ public class XWPFParagraph {
|
|||||||
* @see Borders for a list of all possible borders
|
* @see Borders for a list of all possible borders
|
||||||
*/
|
*/
|
||||||
public void setBorderRight(Borders border) {
|
public void setBorderRight(Borders border) {
|
||||||
CTPBdr ct = getCTPBrd(true);
|
CTPBdr ct = getCTPBrd(true);
|
||||||
CTBorder pr = ct.isSetRight() ? ct.getRight() : ct.addNewRight();
|
CTBorder pr = ct.isSetRight() ? ct.getRight() : ct.addNewRight();
|
||||||
if (border.getValue() == Borders.NONE.getValue())
|
if (border.getValue() == Borders.NONE.getValue())
|
||||||
ct.unsetRight();
|
ct.unsetRight();
|
||||||
else
|
else
|
||||||
pr.setVal(STBorder.Enum.forInt(border.getValue()));
|
pr.setVal(STBorder.Enum.forInt(border.getValue()));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -460,13 +465,13 @@ public class XWPFParagraph {
|
|||||||
* @see Borders for a list of all possible borders
|
* @see Borders for a list of all possible borders
|
||||||
*/
|
*/
|
||||||
public Borders getBorderRight() {
|
public Borders getBorderRight() {
|
||||||
CTPBdr border = getCTPBrd(false);
|
CTPBdr border = getCTPBrd(false);
|
||||||
CTBorder ct = null;
|
CTBorder ct = null;
|
||||||
if (border != null) {
|
if (border != null) {
|
||||||
ct = border.getRight();
|
ct = border.getRight();
|
||||||
}
|
}
|
||||||
STBorder.Enum ptrn = ct != null ? ct.getVal() : STBorder.NONE;
|
STBorder.Enum ptrn = ct != null ? ct.getVal() : STBorder.NONE;
|
||||||
return Borders.valueOf(ptrn.intValue());
|
return Borders.valueOf(ptrn.intValue());
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -496,12 +501,12 @@ public class XWPFParagraph {
|
|||||||
* @see Borders for a list of all possible borders
|
* @see Borders for a list of all possible borders
|
||||||
*/
|
*/
|
||||||
public void setBorderBetween(Borders border) {
|
public void setBorderBetween(Borders border) {
|
||||||
CTPBdr ct = getCTPBrd(true);
|
CTPBdr ct = getCTPBrd(true);
|
||||||
CTBorder pr = ct.isSetBetween() ? ct.getBetween() : ct.addNewBetween();
|
CTBorder pr = ct.isSetBetween() ? ct.getBetween() : ct.addNewBetween();
|
||||||
if (border.getValue() == Borders.NONE.getValue())
|
if (border.getValue() == Borders.NONE.getValue())
|
||||||
ct.unsetBetween();
|
ct.unsetBetween();
|
||||||
else
|
else
|
||||||
pr.setVal(STBorder.Enum.forInt(border.getValue()));
|
pr.setVal(STBorder.Enum.forInt(border.getValue()));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -513,13 +518,13 @@ public class XWPFParagraph {
|
|||||||
* @see Borders for a list of all possible borders
|
* @see Borders for a list of all possible borders
|
||||||
*/
|
*/
|
||||||
public Borders getBorderBetween() {
|
public Borders getBorderBetween() {
|
||||||
CTPBdr border = getCTPBrd(false);
|
CTPBdr border = getCTPBrd(false);
|
||||||
CTBorder ct = null;
|
CTBorder ct = null;
|
||||||
if (border != null) {
|
if (border != null) {
|
||||||
ct = border.getBetween();
|
ct = border.getBetween();
|
||||||
}
|
}
|
||||||
STBorder.Enum ptrn = ct != null ? ct.getVal() : STBorder.NONE;
|
STBorder.Enum ptrn = ct != null ? ct.getVal() : STBorder.NONE;
|
||||||
return Borders.valueOf(ptrn.intValue());
|
return Borders.valueOf(ptrn.intValue());
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -539,13 +544,13 @@ public class XWPFParagraph {
|
|||||||
* boolean value
|
* boolean value
|
||||||
*/
|
*/
|
||||||
public void setPageBreak(boolean pageBreak) {
|
public void setPageBreak(boolean pageBreak) {
|
||||||
CTPPr ppr = getCTPPr();
|
CTPPr ppr = getCTPPr();
|
||||||
CTOnOff ct_pageBreak = ppr.isSetPageBreakBefore() ? ppr
|
CTOnOff ct_pageBreak = ppr.isSetPageBreakBefore() ? ppr
|
||||||
.getPageBreakBefore() : ppr.addNewPageBreakBefore();
|
.getPageBreakBefore() : ppr.addNewPageBreakBefore();
|
||||||
if (pageBreak)
|
if (pageBreak)
|
||||||
ct_pageBreak.setVal(STOnOff.TRUE);
|
ct_pageBreak.setVal(STOnOff.TRUE);
|
||||||
else
|
else
|
||||||
ct_pageBreak.setVal(STOnOff.FALSE);
|
ct_pageBreak.setVal(STOnOff.FALSE);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -564,14 +569,14 @@ public class XWPFParagraph {
|
|||||||
* @return boolean - if page break is set
|
* @return boolean - if page break is set
|
||||||
*/
|
*/
|
||||||
public boolean isPageBreak() {
|
public boolean isPageBreak() {
|
||||||
CTPPr ppr = getCTPPr();
|
CTPPr ppr = getCTPPr();
|
||||||
CTOnOff ct_pageBreak = ppr.isSetPageBreakBefore() ? ppr
|
CTOnOff ct_pageBreak = ppr.isSetPageBreakBefore() ? ppr
|
||||||
.getPageBreakBefore() : null;
|
.getPageBreakBefore() : null;
|
||||||
if (ct_pageBreak != null
|
if (ct_pageBreak != null
|
||||||
&& ct_pageBreak.getVal().intValue() == STOnOff.INT_TRUE)
|
&& ct_pageBreak.getVal().intValue() == STOnOff.INT_TRUE)
|
||||||
return true;
|
return true;
|
||||||
else
|
else
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -586,21 +591,24 @@ public class XWPFParagraph {
|
|||||||
* a positive whole number, whose contents consist of a
|
* a positive whole number, whose contents consist of a
|
||||||
* measurement in twentieths of a point.
|
* measurement in twentieths of a point.
|
||||||
*/
|
*/
|
||||||
public void setSpacingAfter(BigInteger spaces) {
|
public void setSpacingAfter(int spaces) {
|
||||||
CTSpacing spacing = getCTSpacing(true);
|
CTSpacing spacing = getCTSpacing(true);
|
||||||
if (spacing != null)
|
if (spacing != null) {
|
||||||
spacing.setAfter(spaces);
|
BigInteger bi = new BigInteger("" + spaces);
|
||||||
|
spacing.setAfter(bi);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Specifies the spacing that should be added after the last line in this
|
* Specifies the spacing that should be added after the last line in this
|
||||||
* paragraph in the document in absolute units.
|
* paragraph in the document in absolute units.
|
||||||
*
|
*
|
||||||
* @return bigInteger - value representing the spacing after the paragraph
|
* @return int - value representing the spacing after the paragraph
|
||||||
*/
|
*/
|
||||||
public BigInteger getSpacingAfter() {
|
public int getSpacingAfter() {
|
||||||
CTSpacing spacing = getCTSpacing(false);
|
CTSpacing spacing = getCTSpacing(false);
|
||||||
return spacing.isSetAfter() ? spacing.getAfter() : null;
|
return (spacing != null && spacing.isSetAfter()) ? spacing.getAfter().intValue() : -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -620,9 +628,10 @@ public class XWPFParagraph {
|
|||||||
* a positive whole number, whose contents consist of a
|
* a positive whole number, whose contents consist of a
|
||||||
* measurement in twentieths of a
|
* measurement in twentieths of a
|
||||||
*/
|
*/
|
||||||
public void setSpacingAfterLines(BigInteger spaces) {
|
public void setSpacingAfterLines(int spaces) {
|
||||||
CTSpacing spacing = getCTSpacing(true);
|
CTSpacing spacing = getCTSpacing(true);
|
||||||
spacing.setAfterLines(spaces);
|
BigInteger bi = new BigInteger("" + spaces);
|
||||||
|
spacing.setAfterLines(bi);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -633,11 +642,12 @@ public class XWPFParagraph {
|
|||||||
* @return bigInteger - value representing the spacing after the paragraph
|
* @return bigInteger - value representing the spacing after the paragraph
|
||||||
* @see #setSpacingAfterLines(BigInteger)
|
* @see #setSpacingAfterLines(BigInteger)
|
||||||
*/
|
*/
|
||||||
public BigInteger getSpacingAfterLines() {
|
public int getSpacingAfterLines() {
|
||||||
CTSpacing spacing = getCTSpacing(false);
|
CTSpacing spacing = getCTSpacing(false);
|
||||||
return spacing.isSetAfterLines() ? spacing.getAfterLines() : null;
|
return (spacing != null && spacing.isSetAfterLines()) ? spacing.getAfterLines().intValue() : -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Specifies the spacing that should be added above the first line in this
|
* Specifies the spacing that should be added above the first line in this
|
||||||
* paragraph in the document in absolute units.
|
* paragraph in the document in absolute units.
|
||||||
@ -648,9 +658,10 @@ public class XWPFParagraph {
|
|||||||
*
|
*
|
||||||
* @param spaces
|
* @param spaces
|
||||||
*/
|
*/
|
||||||
public void setSpacingBefore(BigInteger spaces) {
|
public void setSpacingBefore(int spaces) {
|
||||||
CTSpacing spacing = getCTSpacing(true);
|
CTSpacing spacing = getCTSpacing(true);
|
||||||
spacing.setBefore(spaces);
|
BigInteger bi = new BigInteger("" + spaces);
|
||||||
|
spacing.setBefore(bi);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -660,9 +671,9 @@ public class XWPFParagraph {
|
|||||||
* @return the spacing that should be added above the first line
|
* @return the spacing that should be added above the first line
|
||||||
* @see #setSpacingBefore(BigInteger)
|
* @see #setSpacingBefore(BigInteger)
|
||||||
*/
|
*/
|
||||||
public BigInteger getSpacingBefore() {
|
public int getSpacingBefore() {
|
||||||
CTSpacing spacing = getCTSpacing(false);
|
CTSpacing spacing = getCTSpacing(false);
|
||||||
return spacing.isSetBefore() ? spacing.getBefore() : null;
|
return (spacing != null && spacing.isSetBefore()) ? spacing.getBefore().intValue() : -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -677,9 +688,10 @@ public class XWPFParagraph {
|
|||||||
*
|
*
|
||||||
* @param spaces
|
* @param spaces
|
||||||
*/
|
*/
|
||||||
public void setSpacingBeforeLines(BigInteger spaces) {
|
public void setSpacingBeforeLines(int spaces) {
|
||||||
CTSpacing spacing = getCTSpacing(true);
|
CTSpacing spacing = getCTSpacing(true);
|
||||||
spacing.setBeforeLines(spaces);
|
BigInteger bi = new BigInteger("" + spaces);
|
||||||
|
spacing.setBeforeLines(bi);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -690,11 +702,41 @@ public class XWPFParagraph {
|
|||||||
* @return the spacing that should be added before the first line in this paragraph
|
* @return the spacing that should be added before the first line in this paragraph
|
||||||
* @see #setSpacingBeforeLines(BigInteger)
|
* @see #setSpacingBeforeLines(BigInteger)
|
||||||
*/
|
*/
|
||||||
public BigInteger getSpacingBeforeLines() {
|
public int getSpacingBeforeLines() {
|
||||||
CTSpacing spacing = getCTSpacing(false);
|
CTSpacing spacing = getCTSpacing(false);
|
||||||
return spacing.isSetBeforeLines() ? spacing.getBeforeLines() : null;
|
return (spacing != null && spacing.isSetBeforeLines()) ? spacing.getBeforeLines().intValue() : -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Specifies how the spacing between lines is calculated as stored in the
|
||||||
|
* line attribute. If this attribute is omitted, then it shall be assumed to
|
||||||
|
* be of a value auto if a line attribute value is present.
|
||||||
|
*
|
||||||
|
* @param rule
|
||||||
|
* @see LineSpacingRule
|
||||||
|
*/
|
||||||
|
public void setSpacingLineRule(LineSpacingRule rule) {
|
||||||
|
CTSpacing spacing = getCTSpacing(true);
|
||||||
|
spacing.setLineRule(STLineSpacingRule.Enum.forInt(rule.getValue()));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Specifies how the spacing between lines is calculated as stored in the
|
||||||
|
* line attribute. If this attribute is omitted, then it shall be assumed to
|
||||||
|
* be of a value auto if a line attribute value is present.
|
||||||
|
*
|
||||||
|
* @return rule
|
||||||
|
* @see LineSpacingRule
|
||||||
|
* @see #setSpacingLineRule(LineSpacingRule)
|
||||||
|
*/
|
||||||
|
public LineSpacingRule getSpacingLineRule() {
|
||||||
|
CTSpacing spacing = getCTSpacing(false);
|
||||||
|
return (spacing != null && spacing.isSetLineRule()) ? LineSpacingRule.valueOf(spacing
|
||||||
|
.getLineRule().intValue()) : LineSpacingRule.AUTO;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Specifies the indentation which shall be placed between the left text
|
* Specifies the indentation which shall be placed between the left text
|
||||||
* margin for this paragraph and the left edge of that paragraph's content
|
* margin for this paragraph and the left edge of that paragraph's content
|
||||||
@ -708,9 +750,10 @@ public class XWPFParagraph {
|
|||||||
*
|
*
|
||||||
* @param indentation
|
* @param indentation
|
||||||
*/
|
*/
|
||||||
public void setIndentationLeft(BigInteger indentation) {
|
public void setIndentationLeft(int indentation) {
|
||||||
CTInd indent = getCTInd(true);
|
CTInd indent = getCTInd(true);
|
||||||
indent.setLeft(indentation);
|
BigInteger bi = new BigInteger("" + indentation);
|
||||||
|
indent.setLeft(bi);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -726,10 +769,10 @@ public class XWPFParagraph {
|
|||||||
*
|
*
|
||||||
* @return indentation or null if indentation is not set
|
* @return indentation or null if indentation is not set
|
||||||
*/
|
*/
|
||||||
public BigInteger getIndentationLeft() {
|
public int getIndentationLeft() {
|
||||||
CTInd indentation = getCTInd(false);
|
CTInd indentation = getCTInd(false);
|
||||||
return indentation.isSetLeft() ? indentation.getLeft()
|
return (indentation != null && indentation.isSetLeft()) ? indentation.getLeft().intValue()
|
||||||
: new BigInteger("0");
|
: -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -745,9 +788,10 @@ public class XWPFParagraph {
|
|||||||
*
|
*
|
||||||
* @param indentation
|
* @param indentation
|
||||||
*/
|
*/
|
||||||
public void setIndentationRight(BigInteger indentation) {
|
public void setIndentationRight(int indentation) {
|
||||||
CTInd indent = getCTInd(true);
|
CTInd indent = getCTInd(true);
|
||||||
indent.setRight(indentation);
|
BigInteger bi = new BigInteger("" + indentation);
|
||||||
|
indent.setRight(bi);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -764,10 +808,10 @@ public class XWPFParagraph {
|
|||||||
* @return indentation or null if indentation is not set
|
* @return indentation or null if indentation is not set
|
||||||
*/
|
*/
|
||||||
|
|
||||||
public BigInteger getIndentationRight() {
|
public int getIndentationRight() {
|
||||||
CTInd indentation = getCTInd(false);
|
CTInd indentation = getCTInd(false);
|
||||||
return indentation.isSetRight() ? indentation.getRight()
|
return (indentation != null && indentation.isSetRight()) ? indentation.getRight().intValue()
|
||||||
: new BigInteger("0");
|
: -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -784,9 +828,10 @@ public class XWPFParagraph {
|
|||||||
* @param indentation
|
* @param indentation
|
||||||
*/
|
*/
|
||||||
|
|
||||||
public void setIndentationHanging(BigInteger indentation) {
|
public void setIndentationHanging(int indentation) {
|
||||||
CTInd indent = getCTInd(true);
|
CTInd indent = getCTInd(true);
|
||||||
indent.setHanging(indentation);
|
BigInteger bi = new BigInteger("" + indentation);
|
||||||
|
indent.setHanging(bi);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -802,9 +847,9 @@ public class XWPFParagraph {
|
|||||||
*
|
*
|
||||||
* @return indentation or null if indentation is not set
|
* @return indentation or null if indentation is not set
|
||||||
*/
|
*/
|
||||||
public BigInteger getIndentationHanging() {
|
public int getIndentationHanging() {
|
||||||
CTInd indentation = getCTInd(false);
|
CTInd indentation = getCTInd(false);
|
||||||
return indentation.isSetHanging() ? indentation.getHanging() : null;
|
return (indentation != null && indentation.isSetHanging()) ? indentation.getHanging().intValue() : -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -821,9 +866,10 @@ public class XWPFParagraph {
|
|||||||
*
|
*
|
||||||
* @param indentation
|
* @param indentation
|
||||||
*/
|
*/
|
||||||
public void setIndentationFirstLine(BigInteger indentation) {
|
public void setIndentationFirstLine(int indentation) {
|
||||||
CTInd indent = getCTInd(true);
|
CTInd indent = getCTInd(true);
|
||||||
indent.setFirstLine(indentation);
|
BigInteger bi = new BigInteger("" + indentation);
|
||||||
|
indent.setFirstLine(bi);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -841,10 +887,10 @@ public class XWPFParagraph {
|
|||||||
*
|
*
|
||||||
* @return indentation or null if indentation is not set
|
* @return indentation or null if indentation is not set
|
||||||
*/
|
*/
|
||||||
public BigInteger getIndentationFirstLine() {
|
public int getIndentationFirstLine() {
|
||||||
CTInd indentation = getCTInd(false);
|
CTInd indentation = getCTInd(false);
|
||||||
return indentation.isSetFirstLine() ? indentation.getFirstLine()
|
return (indentation != null && indentation.isSetFirstLine()) ? indentation.getFirstLine().intValue()
|
||||||
: new BigInteger("0");
|
: -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -856,12 +902,12 @@ public class XWPFParagraph {
|
|||||||
* @param wrap - boolean
|
* @param wrap - boolean
|
||||||
*/
|
*/
|
||||||
public void setWordWrap(boolean wrap) {
|
public void setWordWrap(boolean wrap) {
|
||||||
CTOnOff wordWrap = getCTPPr().isSetWordWrap() ? getCTPPr()
|
CTOnOff wordWrap = getCTPPr().isSetWordWrap() ? getCTPPr()
|
||||||
.getWordWrap() : getCTPPr().addNewWordWrap();
|
.getWordWrap() : getCTPPr().addNewWordWrap();
|
||||||
if (wrap)
|
if (wrap)
|
||||||
wordWrap.setVal(STOnOff.TRUE);
|
wordWrap.setVal(STOnOff.TRUE);
|
||||||
else
|
else
|
||||||
wordWrap.unsetVal();
|
wordWrap.unsetVal();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -873,14 +919,14 @@ public class XWPFParagraph {
|
|||||||
* @return boolean
|
* @return boolean
|
||||||
*/
|
*/
|
||||||
public boolean isWordWrap() {
|
public boolean isWordWrap() {
|
||||||
CTOnOff wordWrap = getCTPPr().isSetWordWrap() ? getCTPPr()
|
CTOnOff wordWrap = getCTPPr().isSetWordWrap() ? getCTPPr()
|
||||||
.getWordWrap() : null;
|
.getWordWrap() : null;
|
||||||
if (wordWrap != null) {
|
if (wordWrap != null) {
|
||||||
return (wordWrap.getVal() == STOnOff.ON
|
return (wordWrap.getVal() == STOnOff.ON
|
||||||
|| wordWrap.getVal() == STOnOff.TRUE || wordWrap.getVal() == STOnOff.X_1) ? true
|
|| wordWrap.getVal() == STOnOff.TRUE || wordWrap.getVal() == STOnOff.X_1) ? true
|
||||||
: false;
|
: false;
|
||||||
} else
|
} else
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -889,13 +935,10 @@ public class XWPFParagraph {
|
|||||||
*/
|
*/
|
||||||
private CTPBdr getCTPBrd(boolean create) {
|
private CTPBdr getCTPBrd(boolean create) {
|
||||||
CTPPr pr = getCTPPr();
|
CTPPr pr = getCTPPr();
|
||||||
if (pr != null) {
|
CTPBdr ct = pr.isSetPBdr() ? pr.getPBdr() : null;
|
||||||
CTPBdr ct = pr.isSetPBdr() ? pr.getPBdr() : null;
|
if (create && ct == null)
|
||||||
if (create && ct == null)
|
ct = pr.addNewPBdr();
|
||||||
ct = pr.addNewPBdr();
|
return ct;
|
||||||
return ct;
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -904,13 +947,10 @@ public class XWPFParagraph {
|
|||||||
*/
|
*/
|
||||||
private CTSpacing getCTSpacing(boolean create) {
|
private CTSpacing getCTSpacing(boolean create) {
|
||||||
CTPPr pr = getCTPPr();
|
CTPPr pr = getCTPPr();
|
||||||
if (pr != null) {
|
CTSpacing ct = pr.getSpacing() == null ? null : pr.getSpacing();
|
||||||
CTSpacing ct = pr.isSetSpacing() ? pr.getSpacing() : null;
|
if (create && ct == null)
|
||||||
if (create && ct == null)
|
ct = pr.addNewSpacing();
|
||||||
ct = pr.addNewSpacing();
|
return ct;
|
||||||
return ct;
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -919,15 +959,16 @@ public class XWPFParagraph {
|
|||||||
*/
|
*/
|
||||||
private CTInd getCTInd(boolean create) {
|
private CTInd getCTInd(boolean create) {
|
||||||
CTPPr pr = getCTPPr();
|
CTPPr pr = getCTPPr();
|
||||||
if (pr != null) {
|
CTInd ct = pr.getInd() == null ? null : pr.getInd();
|
||||||
CTInd ct = pr.isSetInd() ? pr.getInd() : null;
|
if (create && ct == null)
|
||||||
if (create && ct == null)
|
ct = pr.addNewInd();
|
||||||
ct = pr.addNewInd();
|
return ct;
|
||||||
return ct;
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get a <b>copy</b> of the currently used CTPPr, if none is used, return
|
||||||
|
* a new instance.
|
||||||
|
*/
|
||||||
private CTPPr getCTPPr() {
|
private CTPPr getCTPPr() {
|
||||||
CTPPr pr = paragraph.getPPr() == null ? paragraph.addNewPPr()
|
CTPPr pr = paragraph.getPPr() == null ? paragraph.addNewPPr()
|
||||||
: paragraph.getPPr();
|
: paragraph.getPPr();
|
||||||
|
@ -18,6 +18,7 @@ package org.apache.poi.xwpf.usermodel;
|
|||||||
|
|
||||||
import java.math.BigInteger;
|
import java.math.BigInteger;
|
||||||
|
|
||||||
|
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTBr;
|
||||||
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTFonts;
|
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTFonts;
|
||||||
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTHpsMeasure;
|
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTHpsMeasure;
|
||||||
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTOnOff;
|
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTOnOff;
|
||||||
@ -27,6 +28,8 @@ import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTSignedHpsMeasure
|
|||||||
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTText;
|
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTText;
|
||||||
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTUnderline;
|
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTUnderline;
|
||||||
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTVerticalAlignRun;
|
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTVerticalAlignRun;
|
||||||
|
import org.openxmlformats.schemas.wordprocessingml.x2006.main.STBrClear;
|
||||||
|
import org.openxmlformats.schemas.wordprocessingml.x2006.main.STBrType;
|
||||||
import org.openxmlformats.schemas.wordprocessingml.x2006.main.STOnOff;
|
import org.openxmlformats.schemas.wordprocessingml.x2006.main.STOnOff;
|
||||||
import org.openxmlformats.schemas.wordprocessingml.x2006.main.STUnderline;
|
import org.openxmlformats.schemas.wordprocessingml.x2006.main.STUnderline;
|
||||||
import org.openxmlformats.schemas.wordprocessingml.x2006.main.STVerticalAlignRun;
|
import org.openxmlformats.schemas.wordprocessingml.x2006.main.STVerticalAlignRun;
|
||||||
@ -49,10 +52,18 @@ public class XWPFRun {
|
|||||||
this.paragraph = p;
|
this.paragraph = p;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the currently used CTR object
|
||||||
|
* @return ctr object
|
||||||
|
*/
|
||||||
public CTR getCTR() {
|
public CTR getCTR() {
|
||||||
return run;
|
return run;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the currenty referenced paragraph object
|
||||||
|
* @return current paragraph
|
||||||
|
*/
|
||||||
public XWPFParagraph getParagraph() {
|
public XWPFParagraph getParagraph() {
|
||||||
return paragraph;
|
return paragraph;
|
||||||
}
|
}
|
||||||
@ -70,9 +81,8 @@ public class XWPFRun {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Whether the bold property shall be applied to all non-complex script
|
* Whether the bold property shall be applied to all non-complex script
|
||||||
* characters in the contents of this run when displayed in a document
|
* characters in the contents of this run when displayed in a document.
|
||||||
* <p/>
|
* <p>
|
||||||
* <p/>
|
|
||||||
* This formatting property is a toggle property, which specifies that its
|
* This formatting property is a toggle property, which specifies that its
|
||||||
* behavior differs between its use within a style definition and its use as
|
* behavior differs between its use within a style definition and its use as
|
||||||
* direct formatting. When used as part of a style definition, setting this
|
* direct formatting. When used as part of a style definition, setting this
|
||||||
@ -83,7 +93,7 @@ public class XWPFRun {
|
|||||||
* direct formatting, setting this property to true or false shall set the
|
* direct formatting, setting this property to true or false shall set the
|
||||||
* absolute state of the resulting property.
|
* absolute state of the resulting property.
|
||||||
* </p>
|
* </p>
|
||||||
* <p/>
|
* <p>
|
||||||
* If this element is not present, the default value is to leave the
|
* If this element is not present, the default value is to leave the
|
||||||
* formatting applied at previous level in the style hierarchy. If this
|
* formatting applied at previous level in the style hierarchy. If this
|
||||||
* element is never applied in the style hierarchy, then bold shall not be
|
* element is never applied in the style hierarchy, then bold shall not be
|
||||||
@ -104,8 +114,8 @@ public class XWPFRun {
|
|||||||
*
|
*
|
||||||
* @return the text of this text run or <code>null</code> if not set
|
* @return the text of this text run or <code>null</code> if not set
|
||||||
*/
|
*/
|
||||||
public String getText() {
|
public String getText(int pos) {
|
||||||
return run.sizeOfTArray() == 0 ? null : run.getTArray(0)
|
return run.sizeOfTArray() == 0 ? null : run.getTArray(pos)
|
||||||
.getStringValue();
|
.getStringValue();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -115,10 +125,22 @@ public class XWPFRun {
|
|||||||
* @param value the literal text which shall be displayed in the document
|
* @param value the literal text which shall be displayed in the document
|
||||||
*/
|
*/
|
||||||
public void setText(String value) {
|
public void setText(String value) {
|
||||||
CTText t = run.sizeOfTArray() == 0 ? run.addNewT() : run.getTArray(0);
|
setText(value,run.getTArray().length);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the text of this text run in the
|
||||||
|
*
|
||||||
|
* @param value the literal text which shall be displayed in the document
|
||||||
|
* @param pos - position in the text array (NB: 0 based)
|
||||||
|
*/
|
||||||
|
public void setText(String value, int pos) {
|
||||||
|
if(pos > run.sizeOfTArray()) throw new ArrayIndexOutOfBoundsException("Value too large for the parameter position in XWPFRun.setText(String value,int pos)");
|
||||||
|
CTText t = (pos < run.sizeOfTArray() && pos >= 0) ? run.getTArray(pos) : run.addNewT();
|
||||||
t.setStringValue(value);
|
t.setStringValue(value);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Whether the italic property should be applied to all non-complex script
|
* Whether the italic property should be applied to all non-complex script
|
||||||
* characters in the contents of this run when displayed in a document.
|
* characters in the contents of this run when displayed in a document.
|
||||||
@ -171,7 +193,7 @@ public class XWPFRun {
|
|||||||
public UnderlinePatterns getUnderline() {
|
public UnderlinePatterns getUnderline() {
|
||||||
CTRPr pr = run.getRPr();
|
CTRPr pr = run.getRPr();
|
||||||
return (pr != null && pr.isSetU()) ? UnderlinePatterns.valueOf(pr
|
return (pr != null && pr.isSetU()) ? UnderlinePatterns.valueOf(pr
|
||||||
.getU().getVal().intValue()) : null;
|
.getU().getVal().intValue()) : UnderlinePatterns.NONE;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -191,7 +213,7 @@ public class XWPFRun {
|
|||||||
*/
|
*/
|
||||||
public void setUnderline(UnderlinePatterns value) {
|
public void setUnderline(UnderlinePatterns value) {
|
||||||
CTRPr pr = run.isSetRPr() ? run.getRPr() : run.addNewRPr();
|
CTRPr pr = run.isSetRPr() ? run.getRPr() : run.addNewRPr();
|
||||||
CTUnderline underline = pr.isSetU() ? pr.getU() : pr.addNewU();
|
CTUnderline underline = (pr.getU() == null) ? pr.addNewU() : pr.getU();
|
||||||
underline.setVal(STUnderline.Enum.forInt(value.getValue()));
|
underline.setVal(STUnderline.Enum.forInt(value.getValue()));
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -248,7 +270,7 @@ public class XWPFRun {
|
|||||||
public VerticalAlign getSubscript() {
|
public VerticalAlign getSubscript() {
|
||||||
CTRPr pr = run.getRPr();
|
CTRPr pr = run.getRPr();
|
||||||
return (pr != null && pr.isSetVertAlign()) ? VerticalAlign.valueOf(pr
|
return (pr != null && pr.isSetVertAlign()) ? VerticalAlign.valueOf(pr
|
||||||
.getVertAlign().getVal().intValue()) : null;
|
.getVertAlign().getVal().intValue()) : VerticalAlign.BASELINE;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -305,9 +327,9 @@ public class XWPFRun {
|
|||||||
*
|
*
|
||||||
* @return value representing the font size
|
* @return value representing the font size
|
||||||
*/
|
*/
|
||||||
public BigInteger getFontSize() {
|
public int getFontSize() {
|
||||||
CTRPr pr = run.getRPr();
|
CTRPr pr = run.getRPr();
|
||||||
return (pr != null && pr.isSetSz()) ? pr.getSz().getVal().divide(new BigInteger("2")) : null;
|
return (pr != null && pr.isSetSz()) ? pr.getSz().getVal().divide(new BigInteger("2")).intValue() : -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -322,10 +344,11 @@ public class XWPFRun {
|
|||||||
*
|
*
|
||||||
* @param size
|
* @param size
|
||||||
*/
|
*/
|
||||||
public void setFontSize(BigInteger size) {
|
public void setFontSize(int size) {
|
||||||
|
BigInteger bint=new BigInteger(""+size);
|
||||||
CTRPr pr = run.isSetRPr() ? run.getRPr() : run.addNewRPr();
|
CTRPr pr = run.isSetRPr() ? run.getRPr() : run.addNewRPr();
|
||||||
CTHpsMeasure ctSize = pr.isSetSz() ? pr.getSz() : pr.addNewSz();
|
CTHpsMeasure ctSize = pr.isSetSz() ? pr.getSz() : pr.addNewSz();
|
||||||
ctSize.setVal(size.multiply(new BigInteger("2")));
|
ctSize.setVal(bint.multiply(new BigInteger("2")));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -336,10 +359,10 @@ public class XWPFRun {
|
|||||||
*
|
*
|
||||||
* @return a big integer representing the amount of text shall be "moved"
|
* @return a big integer representing the amount of text shall be "moved"
|
||||||
*/
|
*/
|
||||||
public BigInteger getTextPosition() {
|
public int getTextPosition() {
|
||||||
CTRPr pr = run.getRPr();
|
CTRPr pr = run.getRPr();
|
||||||
return (pr != null && pr.isSetPosition()) ? pr.getPosition().getVal()
|
return (pr != null && pr.isSetPosition()) ? pr.getPosition().getVal().intValue()
|
||||||
: null;
|
: -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -364,10 +387,87 @@ public class XWPFRun {
|
|||||||
*
|
*
|
||||||
* @param val
|
* @param val
|
||||||
*/
|
*/
|
||||||
public void setTextPosition(BigInteger val) {
|
public void setTextPosition(int val) {
|
||||||
|
BigInteger bint=new BigInteger(""+val);
|
||||||
CTRPr pr = run.isSetRPr() ? run.getRPr() : run.addNewRPr();
|
CTRPr pr = run.isSetRPr() ? run.getRPr() : run.addNewRPr();
|
||||||
CTSignedHpsMeasure position = pr.isSetPosition() ? pr.getPosition() : pr.addNewPosition();
|
CTSignedHpsMeasure position = pr.isSetPosition() ? pr.getPosition() : pr.addNewPosition();
|
||||||
position.setVal(val);
|
position.setVal(bint);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public void removeBreak() {
|
||||||
|
// TODO
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Specifies that a break shall be placed at the current location in the run
|
||||||
|
* content.
|
||||||
|
* A break is a special character which is used to override the
|
||||||
|
* normal line breaking that would be performed based on the normal layout
|
||||||
|
* of the documentÕs contents.
|
||||||
|
* @see addCarriageReturn()
|
||||||
|
*/
|
||||||
|
public void addBreak() {
|
||||||
|
run.addNewBr();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Specifies that a break shall be placed at the current location in the run
|
||||||
|
* content.
|
||||||
|
* A break is a special character which is used to override the
|
||||||
|
* normal line breaking that would be performed based on the normal layout
|
||||||
|
* of the documentÕs contents.
|
||||||
|
* <p>
|
||||||
|
* The behavior of this break character (the
|
||||||
|
* location where text shall be restarted after this break) shall be
|
||||||
|
* determined by its type values.
|
||||||
|
* </p>
|
||||||
|
* @see BreakType
|
||||||
|
*/
|
||||||
|
public void addBreak(BreakType type){
|
||||||
|
CTBr br=run.addNewBr();
|
||||||
|
br.setType(STBrType.Enum.forInt(type.getValue()));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Specifies that a break shall be placed at the current location in the run
|
||||||
|
* content. A break is a special character which is used to override the
|
||||||
|
* normal line breaking that would be performed based on the normal layout
|
||||||
|
* of the documentÕs contents.
|
||||||
|
* <p>
|
||||||
|
* The behavior of this break character (the
|
||||||
|
* location where text shall be restarted after this break) shall be
|
||||||
|
* determined by its type (in this case is BreakType.TEXT_WRAPPING as default) and clear attribute values.
|
||||||
|
* </p>
|
||||||
|
* @see BreakClear
|
||||||
|
*/
|
||||||
|
public void addBreak(BreakClear clear){
|
||||||
|
CTBr br=run.addNewBr();
|
||||||
|
br.setType(STBrType.Enum.forInt(BreakType.TEXT_WRAPPING.getValue()));
|
||||||
|
br.setClear(STBrClear.Enum.forInt(clear.getValue()));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Specifies that a carriage return shall be placed at the
|
||||||
|
* current location in the run content.
|
||||||
|
* A carriage return is used to end the current line of text in
|
||||||
|
* Wordprocess.
|
||||||
|
* The behavior of a carriage return in run content shall be
|
||||||
|
* identical to a break character with null type and clear attributes, which
|
||||||
|
* shall end the current line and find the next available line on which to
|
||||||
|
* continue.
|
||||||
|
* The carriage return character forced the following text to be
|
||||||
|
* restarted on the next available line in the document.
|
||||||
|
*/
|
||||||
|
public void addCarriageReturn() {
|
||||||
|
run.addNewCr();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void removeCarriageReturn() {
|
||||||
|
//TODO
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -16,42 +16,188 @@
|
|||||||
==================================================================== */
|
==================================================================== */
|
||||||
package org.apache.poi.xwpf.usermodel;
|
package org.apache.poi.xwpf.usermodel;
|
||||||
|
|
||||||
import org.apache.poi.xwpf.usermodel.XWPFParagraph;
|
import java.math.BigInteger;
|
||||||
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTbl;
|
|
||||||
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTRow;
|
|
||||||
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTc;
|
|
||||||
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTP;
|
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTP;
|
||||||
|
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTRow;
|
||||||
|
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTbl;
|
||||||
|
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTblBorders;
|
||||||
|
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTblPr;
|
||||||
|
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTblWidth;
|
||||||
|
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTc;
|
||||||
|
import org.openxmlformats.schemas.wordprocessingml.x2006.main.STBorder;
|
||||||
|
import org.openxmlformats.schemas.wordprocessingml.x2006.main.STTblWidth;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Sketch of XWPFTable class. Only table's text is being hold.
|
* Sketch of XWPFTable class. Only table's text is being hold.
|
||||||
*
|
* <p/>
|
||||||
|
* Specifies the contents of a table present in the document. A table is a set
|
||||||
|
* of paragraphs (and other block-level content) arranged in rows and columns.
|
||||||
|
*
|
||||||
* @author Yury Batrakov (batrakov at gmail.com)
|
* @author Yury Batrakov (batrakov at gmail.com)
|
||||||
*
|
|
||||||
*/
|
*/
|
||||||
public class XWPFTable
|
public class XWPFTable {
|
||||||
{
|
|
||||||
protected StringBuffer text=new StringBuffer();
|
protected StringBuffer text = new StringBuffer();
|
||||||
|
private CTTbl ctTbl;
|
||||||
|
|
||||||
|
|
||||||
|
public XWPFTable(CTTbl table, int row, int col) {
|
||||||
|
this(table);
|
||||||
|
for (int i = 0; i < row; i++) {
|
||||||
|
XWPFTableRow tabRow = (getRow(i) == null) ? createRow() : getRow(i);
|
||||||
|
for (int k = 0; k < col; k++) {
|
||||||
|
XWPFTableCell tabCell = (tabRow.getCell(k) == null) ? tabRow
|
||||||
|
.createCell() : null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
public XWPFTable(CTTbl table) {
|
public XWPFTable(CTTbl table) {
|
||||||
for(CTRow row : table.getTrArray()) {
|
this.ctTbl = table;
|
||||||
StringBuffer rowText = new StringBuffer();
|
|
||||||
for(CTTc cell : row.getTcArray()) {
|
// is an empty table: I add one row and one column as default
|
||||||
for(CTP ctp : cell.getPArray()) {
|
if (table.sizeOfTrArray() == 0)
|
||||||
|
createEmptyTable(table);
|
||||||
|
|
||||||
|
for (CTRow row : table.getTrArray()) {
|
||||||
|
StringBuffer rowText = new StringBuffer();
|
||||||
|
for (CTTc cell : row.getTcArray()) {
|
||||||
|
for (CTP ctp : cell.getPArray()) {
|
||||||
XWPFParagraph p = new XWPFParagraph(ctp, null);
|
XWPFParagraph p = new XWPFParagraph(ctp, null);
|
||||||
if(rowText.length() > 0) {
|
if (rowText.length() > 0) {
|
||||||
rowText.append('\t');
|
rowText.append('\t');
|
||||||
}
|
}
|
||||||
rowText.append(p.getText());
|
rowText.append(p.getText());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if(rowText.length() > 0) {
|
if (rowText.length() > 0) {
|
||||||
this.text.append(rowText);
|
this.text.append(rowText);
|
||||||
this.text.append('\n');
|
this.text.append('\n');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void createEmptyTable(CTTbl table) {
|
||||||
|
// MINIMUM ELEMENTS FOR A TABLE
|
||||||
|
table.addNewTr().addNewTc().addNewP();
|
||||||
|
|
||||||
|
CTTblPr tblpro = table.addNewTblPr();
|
||||||
|
tblpro.addNewTblW().setW(new BigInteger("0"));
|
||||||
|
tblpro.getTblW().setType(STTblWidth.AUTO);
|
||||||
|
|
||||||
|
// layout
|
||||||
|
// tblpro.addNewTblLayout().setType(STTblLayoutType.AUTOFIT);
|
||||||
|
|
||||||
|
// borders
|
||||||
|
CTTblBorders borders = tblpro.addNewTblBorders();
|
||||||
|
borders.addNewBottom().setVal(STBorder.SINGLE);
|
||||||
|
borders.addNewInsideH().setVal(STBorder.SINGLE);
|
||||||
|
borders.addNewInsideV().setVal(STBorder.SINGLE);
|
||||||
|
borders.addNewLeft().setVal(STBorder.SINGLE);
|
||||||
|
borders.addNewRight().setVal(STBorder.SINGLE);
|
||||||
|
borders.addNewTop().setVal(STBorder.SINGLE);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* CTTblGrid tblgrid=table.addNewTblGrid();
|
||||||
|
* tblgrid.addNewGridCol().setW(new BigInteger("2000"));
|
||||||
|
*/
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return ctTbl object
|
||||||
|
*/
|
||||||
|
public CTTbl getCTTbl() {
|
||||||
|
return ctTbl;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return text
|
||||||
|
*/
|
||||||
public String getText() {
|
public String getText() {
|
||||||
return text.toString();
|
return text.toString();
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
|
public void addNewRowBetween(int start, int end) {
|
||||||
|
// TODO
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* add a new column for each row in this table
|
||||||
|
*/
|
||||||
|
public void addNewCol() {
|
||||||
|
if (ctTbl.sizeOfTrArray() == 0) createRow();
|
||||||
|
for (int i = 0; i < ctTbl.sizeOfTrArray(); i++) {
|
||||||
|
XWPFTableRow tabRow = new XWPFTableRow(ctTbl.getTrArray(i));
|
||||||
|
tabRow.createCell();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* create a new XWPFTableRow object with as many cells as the number of columns defined in that moment
|
||||||
|
*
|
||||||
|
* @return tableRow
|
||||||
|
*/
|
||||||
|
public XWPFTableRow createRow() {
|
||||||
|
int sizeCol = ctTbl.sizeOfTrArray() > 0 ? ctTbl.getTrArray(0)
|
||||||
|
.sizeOfTcArray() : 0;
|
||||||
|
XWPFTableRow tabRow = new XWPFTableRow(ctTbl.addNewTr());
|
||||||
|
addColumn(tabRow, sizeCol);
|
||||||
|
return tabRow;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param pos - index of the row
|
||||||
|
* @return the row at the position specified or null if no rows is defined or if the position is greather than the max size of rows array
|
||||||
|
*/
|
||||||
|
public XWPFTableRow getRow(int pos) {
|
||||||
|
if (pos >= 0 && pos < ctTbl.sizeOfTrArray())
|
||||||
|
return new XWPFTableRow(ctTbl.getTrArray(pos));
|
||||||
|
else
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param width
|
||||||
|
*/
|
||||||
|
public void setWidth(int width) {
|
||||||
|
CTTblPr tblPr = getTrPr();
|
||||||
|
CTTblWidth tblWidth = tblPr.isSetTblW() ? tblPr.getTblW() : tblPr
|
||||||
|
.addNewTblW();
|
||||||
|
tblWidth.setW(new BigInteger("" + width));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return width value
|
||||||
|
*/
|
||||||
|
public int getWidth() {
|
||||||
|
CTTblPr tblPr = getTrPr();
|
||||||
|
return tblPr.isSetTblW() ? tblPr.getTblW().getW().intValue() : -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return number of rows in table
|
||||||
|
*/
|
||||||
|
public int getNumberOfRows() {
|
||||||
|
return ctTbl.sizeOfTrArray();
|
||||||
|
}
|
||||||
|
|
||||||
|
private CTTblPr getTrPr() {
|
||||||
|
return (ctTbl.getTblPr() != null) ? ctTbl.getTblPr() : ctTbl
|
||||||
|
.addNewTblPr();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void addColumn(XWPFTableRow tabRow, int sizeCol) {
|
||||||
|
if (sizeCol > 0) {
|
||||||
|
for (int i = 0; i < sizeCol; i++) {
|
||||||
|
tabRow.createCell();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}// end class
|
||||||
|
65
src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFTableCell.java
Executable file
65
src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFTableCell.java
Executable file
@ -0,0 +1,65 @@
|
|||||||
|
/* ====================================================================
|
||||||
|
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 org.openxmlformats.schemas.wordprocessingml.x2006.main.CTP;
|
||||||
|
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTc;
|
||||||
|
|
||||||
|
|
||||||
|
public class XWPFTableCell {
|
||||||
|
|
||||||
|
private CTTc ctTc;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* If a table cell does not include at least one block-level element, then this document shall be considered corrupt
|
||||||
|
*/
|
||||||
|
public XWPFTableCell(CTTc cell) {
|
||||||
|
this.ctTc = cell;
|
||||||
|
// NB: If a table cell does not include at least one block-level element, then this document shall be considered corrupt.
|
||||||
|
cell.addNewP();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public CTTc getCTTc() {
|
||||||
|
return ctTc;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setParagraph(XWPFParagraph p) {
|
||||||
|
if (ctTc.sizeOfPArray() == 0) {
|
||||||
|
ctTc.addNewP();
|
||||||
|
}
|
||||||
|
ctTc.setPArray(0, p.getCTP());
|
||||||
|
}
|
||||||
|
|
||||||
|
public XWPFParagraph getParagraph() {
|
||||||
|
return ctTc.sizeOfPArray() == 0 ? null : new XWPFParagraph(ctTc.getPArray(0));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public void setText(String text) {
|
||||||
|
CTP ctP = (ctTc.sizeOfPArray() == 0) ? ctTc.addNewP() : ctTc.getPArray(0);
|
||||||
|
XWPFParagraph par = new XWPFParagraph(ctP);
|
||||||
|
par.createRun().setText(text);
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getText() {
|
||||||
|
//TODO
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}// end class
|
91
src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFTableRow.java
Executable file
91
src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFTableRow.java
Executable file
@ -0,0 +1,91 @@
|
|||||||
|
/* ====================================================================
|
||||||
|
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.math.BigInteger;
|
||||||
|
|
||||||
|
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTHeight;
|
||||||
|
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTRow;
|
||||||
|
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTrPr;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author gisellabronzetti
|
||||||
|
*/
|
||||||
|
public class XWPFTableRow {
|
||||||
|
|
||||||
|
private CTRow ctRow;
|
||||||
|
|
||||||
|
public XWPFTableRow(CTRow row) {
|
||||||
|
this.ctRow = row;
|
||||||
|
}
|
||||||
|
|
||||||
|
public CTRow getCtRow() {
|
||||||
|
return ctRow;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public XWPFTableCell createCell() {
|
||||||
|
return new XWPFTableCell(ctRow.addNewTc());
|
||||||
|
}
|
||||||
|
|
||||||
|
public XWPFTableCell getCell(int pos) {
|
||||||
|
if (pos >= 0 && pos < ctRow.sizeOfTcArray())
|
||||||
|
return new XWPFTableCell(ctRow.getTcArray(pos));
|
||||||
|
else
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This element specifies the height of the current table row within the
|
||||||
|
* current table. This height shall be used to determine the resulting
|
||||||
|
* height of the table row, which may be absolute or relative (depending on
|
||||||
|
* its attribute values). If omitted, then the table row shall automatically
|
||||||
|
* resize its height to the height required by its contents (the equivalent
|
||||||
|
* of an hRule value of auto).
|
||||||
|
*
|
||||||
|
* @param height
|
||||||
|
*/
|
||||||
|
public void setHeight(int height) {
|
||||||
|
CTTrPr properties = getTrPr();
|
||||||
|
CTHeight h = properties.getTrHeightArray(0) == null ? properties.addNewTrHeight() : properties.getTrHeightArray(0);
|
||||||
|
h.setVal(new BigInteger("" + height));
|
||||||
|
//properties.setTrHeightArray(0,height);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This element specifies the height of the current table row within the
|
||||||
|
* current table. This height shall be used to determine the resulting
|
||||||
|
* height of the table row, which may be absolute or relative (depending on
|
||||||
|
* its attribute values). If omitted, then the table row shall automatically
|
||||||
|
* resize its height to the height required by its contents (the equivalent
|
||||||
|
* of an hRule value of auto).
|
||||||
|
*
|
||||||
|
* @return height
|
||||||
|
*/
|
||||||
|
public int getHeight() {
|
||||||
|
CTTrPr properties = getTrPr();
|
||||||
|
return properties.getTrHeightArray(0) == null ? 0 : properties.getTrHeightArray(0).getVal().intValue();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private CTTrPr getTrPr() {
|
||||||
|
return (ctRow.isSetTrPr()) ? ctRow.getTrPr() : ctRow.addNewTrPr();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}// end class
|
@ -21,7 +21,9 @@ import java.math.BigInteger;
|
|||||||
|
|
||||||
import junit.framework.TestCase;
|
import junit.framework.TestCase;
|
||||||
|
|
||||||
|
import org.openxmlformats.schemas.officeDocument.x2006.math.STSpacingRule;
|
||||||
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTBorder;
|
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTBorder;
|
||||||
|
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTInd;
|
||||||
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTJc;
|
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTJc;
|
||||||
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTOnOff;
|
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTOnOff;
|
||||||
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTP;
|
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTP;
|
||||||
@ -31,9 +33,9 @@ import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTSpacing;
|
|||||||
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTextAlignment;
|
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTextAlignment;
|
||||||
import org.openxmlformats.schemas.wordprocessingml.x2006.main.STBorder;
|
import org.openxmlformats.schemas.wordprocessingml.x2006.main.STBorder;
|
||||||
import org.openxmlformats.schemas.wordprocessingml.x2006.main.STJc;
|
import org.openxmlformats.schemas.wordprocessingml.x2006.main.STJc;
|
||||||
|
import org.openxmlformats.schemas.wordprocessingml.x2006.main.STLineSpacingRule;
|
||||||
import org.openxmlformats.schemas.wordprocessingml.x2006.main.STOnOff;
|
import org.openxmlformats.schemas.wordprocessingml.x2006.main.STOnOff;
|
||||||
import org.openxmlformats.schemas.wordprocessingml.x2006.main.STTextAlignment;
|
import org.openxmlformats.schemas.wordprocessingml.x2006.main.STTextAlignment;
|
||||||
import org.apache.poi.POIXMLDocument;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Tests for XWPF Paragraphs
|
* Tests for XWPF Paragraphs
|
||||||
@ -44,7 +46,7 @@ public class TestXWPFParagraph extends TestCase {
|
|||||||
*/
|
*/
|
||||||
private XWPFDocument xml;
|
private XWPFDocument xml;
|
||||||
private File file;
|
private File file;
|
||||||
|
/*
|
||||||
protected void setUp() throws Exception {
|
protected void setUp() throws Exception {
|
||||||
super.setUp();
|
super.setUp();
|
||||||
|
|
||||||
@ -55,10 +57,11 @@ public class TestXWPFParagraph extends TestCase {
|
|||||||
assertTrue(file.exists());
|
assertTrue(file.exists());
|
||||||
xml = new XWPFDocument(POIXMLDocument.openPackage(file.toString()));
|
xml = new XWPFDocument(POIXMLDocument.openPackage(file.toString()));
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
/**
|
/**
|
||||||
* Check that we get the right paragraph from the header
|
* Check that we get the right paragraph from the header
|
||||||
*/
|
*/
|
||||||
|
/*
|
||||||
public void testHeaderParagraph() throws Exception {
|
public void testHeaderParagraph() throws Exception {
|
||||||
XWPFHeader hdr = xml.getHeaderFooterPolicy().getDefaultHeader();
|
XWPFHeader hdr = xml.getHeaderFooterPolicy().getDefaultHeader();
|
||||||
assertNotNull(hdr);
|
assertNotNull(hdr);
|
||||||
@ -71,10 +74,11 @@ public class TestXWPFParagraph extends TestCase {
|
|||||||
assertEquals("First header column!\tMid header\tRight header!", p
|
assertEquals("First header column!\tMid header\tRight header!", p
|
||||||
.getText());
|
.getText());
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
/**
|
/**
|
||||||
* Check that we get the right paragraphs from the document
|
* Check that we get the right paragraphs from the document
|
||||||
*/
|
*/
|
||||||
|
/*
|
||||||
public void testDocumentParagraph() throws Exception {
|
public void testDocumentParagraph() throws Exception {
|
||||||
XWPFParagraph[] ps = xml.getParagraphs();
|
XWPFParagraph[] ps = xml.getParagraphs();
|
||||||
assertEquals(10, ps.length);
|
assertEquals(10, ps.length);
|
||||||
@ -96,20 +100,24 @@ public class TestXWPFParagraph extends TestCase {
|
|||||||
assertFalse(ps[4].isEmpty());
|
assertFalse(ps[4].isEmpty());
|
||||||
assertEquals("More on page one", ps[4].getText());
|
assertEquals("More on page one", ps[4].getText());
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
public void testSetGetBorderTop() {
|
public void testSetGetBorderTop() {
|
||||||
//new clean instance of paragraph
|
//new clean instance of paragraph
|
||||||
XWPFDocument doc = new XWPFDocument();
|
XWPFDocument doc = new XWPFDocument();
|
||||||
XWPFParagraph p = doc.createParagraph();
|
XWPFParagraph p = doc.createParagraph();
|
||||||
|
|
||||||
|
assertEquals(STBorder.NONE.intValue(), p.getBorderTop().getValue());
|
||||||
|
|
||||||
CTP ctp = p.getCTP();
|
CTP ctp = p.getCTP();
|
||||||
CTPPr ppr = ctp.addNewPPr();
|
CTPPr ppr = ctp.getPPr()== null? ctp.addNewPPr() : ctp.getPPr();
|
||||||
|
|
||||||
//bordi
|
//bordi
|
||||||
CTPBdr bdr = ppr.addNewPBdr();
|
CTPBdr bdr = ppr.addNewPBdr();
|
||||||
CTBorder borderTop = bdr.addNewTop();
|
CTBorder borderTop = bdr.addNewTop();
|
||||||
borderTop.setVal(STBorder.APPLES);
|
borderTop.setVal(STBorder.DOUBLE);
|
||||||
bdr.setTop(borderTop);
|
bdr.setTop(borderTop);
|
||||||
assertEquals(Borders.APPLES, p.getBorderTop());
|
|
||||||
|
assertEquals(Borders.DOUBLE, p.getBorderTop());
|
||||||
p.setBorderTop(Borders.SINGLE);
|
p.setBorderTop(Borders.SINGLE);
|
||||||
assertEquals(STBorder.SINGLE, borderTop.getVal());
|
assertEquals(STBorder.SINGLE, borderTop.getVal());
|
||||||
}
|
}
|
||||||
@ -119,8 +127,10 @@ public class TestXWPFParagraph extends TestCase {
|
|||||||
XWPFDocument doc = new XWPFDocument();
|
XWPFDocument doc = new XWPFDocument();
|
||||||
XWPFParagraph p = doc.createParagraph();
|
XWPFParagraph p = doc.createParagraph();
|
||||||
|
|
||||||
|
assertEquals(STJc.LEFT.intValue(), p.getAlignment().getValue());
|
||||||
|
|
||||||
CTP ctp = p.getCTP();
|
CTP ctp = p.getCTP();
|
||||||
CTPPr ppr = ctp.addNewPPr();
|
CTPPr ppr = ctp.getPPr()== null? ctp.addNewPPr() : ctp.getPPr();
|
||||||
|
|
||||||
CTJc align = ppr.addNewJc();
|
CTJc align = ppr.addNewJc();
|
||||||
align.setVal(STJc.CENTER);
|
align.setVal(STJc.CENTER);
|
||||||
@ -130,29 +140,67 @@ public class TestXWPFParagraph extends TestCase {
|
|||||||
assertEquals(STJc.BOTH, ppr.getJc().getVal());
|
assertEquals(STJc.BOTH, ppr.getJc().getVal());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public void testSetGetSpacing() {
|
public void testSetGetSpacing() {
|
||||||
XWPFDocument doc = new XWPFDocument();
|
XWPFDocument doc = new XWPFDocument();
|
||||||
XWPFParagraph p = doc.createParagraph();
|
XWPFParagraph p = doc.createParagraph();
|
||||||
|
|
||||||
CTP ctp = p.getCTP();
|
CTP ctp = p.getCTP();
|
||||||
CTPPr ppr = ctp.addNewPPr();
|
CTPPr ppr = ctp.getPPr()== null? ctp.addNewPPr() : ctp.getPPr();
|
||||||
|
|
||||||
//TEST ALL OTHERS POSSIBLE COMBINATIONS
|
assertEquals(-1, p.getSpacingAfter());
|
||||||
|
|
||||||
CTSpacing spacing = ppr.addNewSpacing();
|
CTSpacing spacing = ppr.addNewSpacing();
|
||||||
spacing.setAfter(new BigInteger("10"));
|
spacing.setAfter(new BigInteger("10"));
|
||||||
assertEquals(10, p.getSpacingAfter().longValue());
|
assertEquals(10, p.getSpacingAfter());
|
||||||
|
|
||||||
p.setSpacingAfter(new BigInteger("100"));
|
p.setSpacingAfter(100);
|
||||||
assertEquals(100, spacing.getAfter().longValue());
|
assertEquals(100, spacing.getAfter().intValue());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void testSetGetSpacingLineRule() {
|
||||||
|
XWPFDocument doc = new XWPFDocument();
|
||||||
|
XWPFParagraph p = doc.createParagraph();
|
||||||
|
|
||||||
|
CTP ctp = p.getCTP();
|
||||||
|
CTPPr ppr = ctp.getPPr()== null? ctp.addNewPPr() : ctp.getPPr();
|
||||||
|
|
||||||
|
assertEquals(STLineSpacingRule.INT_AUTO, p.getSpacingLineRule().getValue());
|
||||||
|
|
||||||
|
CTSpacing spacing = ppr.addNewSpacing();
|
||||||
|
spacing.setLineRule(STLineSpacingRule.AT_LEAST);
|
||||||
|
assertEquals(LineSpacingRule.AT_LEAST, p.getSpacingLineRule());
|
||||||
|
|
||||||
|
p.setSpacingAfter(100);
|
||||||
|
assertEquals(100, spacing.getAfter().intValue());
|
||||||
|
}
|
||||||
|
|
||||||
|
public void testSetGetIndentation() {
|
||||||
|
XWPFDocument doc = new XWPFDocument();
|
||||||
|
XWPFParagraph p = doc.createParagraph();
|
||||||
|
|
||||||
|
assertEquals(-1, p.getIndentationLeft());
|
||||||
|
|
||||||
|
CTP ctp = p.getCTP();
|
||||||
|
CTPPr ppr = ctp.getPPr()== null? ctp.addNewPPr() : ctp.getPPr();
|
||||||
|
|
||||||
|
assertEquals(-1, p.getIndentationLeft());
|
||||||
|
|
||||||
|
CTInd ind = ppr.addNewInd();
|
||||||
|
ind.setLeft(new BigInteger("10"));
|
||||||
|
assertEquals(10, p.getIndentationLeft());
|
||||||
|
|
||||||
|
p.setIndentationLeft(100);
|
||||||
|
assertEquals(100, ind.getLeft().intValue());
|
||||||
|
}
|
||||||
|
|
||||||
public void testSetGetVerticalAlignment() {
|
public void testSetGetVerticalAlignment() {
|
||||||
//new clean instance of paragraph
|
//new clean instance of paragraph
|
||||||
XWPFDocument doc = new XWPFDocument();
|
XWPFDocument doc = new XWPFDocument();
|
||||||
XWPFParagraph p = doc.createParagraph();
|
XWPFParagraph p = doc.createParagraph();
|
||||||
|
|
||||||
CTP ctp = p.getCTP();
|
CTP ctp = p.getCTP();
|
||||||
CTPPr ppr = ctp.addNewPPr();
|
CTPPr ppr = ctp.getPPr()== null? ctp.addNewPPr() : ctp.getPPr();
|
||||||
|
|
||||||
CTTextAlignment txtAlign = ppr.addNewTextAlignment();
|
CTTextAlignment txtAlign = ppr.addNewTextAlignment();
|
||||||
txtAlign.setVal(STTextAlignment.CENTER);
|
txtAlign.setVal(STTextAlignment.CENTER);
|
||||||
@ -167,7 +215,7 @@ public class TestXWPFParagraph extends TestCase {
|
|||||||
XWPFParagraph p = doc.createParagraph();
|
XWPFParagraph p = doc.createParagraph();
|
||||||
|
|
||||||
CTP ctp = p.getCTP();
|
CTP ctp = p.getCTP();
|
||||||
CTPPr ppr = ctp.addNewPPr();
|
CTPPr ppr = ctp.getPPr()== null? ctp.addNewPPr() : ctp.getPPr();
|
||||||
|
|
||||||
CTOnOff wordWrap = ppr.addNewWordWrap();
|
CTOnOff wordWrap = ppr.addNewWordWrap();
|
||||||
wordWrap.setVal(STOnOff.FALSE);
|
wordWrap.setVal(STOnOff.FALSE);
|
||||||
@ -183,7 +231,7 @@ public class TestXWPFParagraph extends TestCase {
|
|||||||
XWPFParagraph p = doc.createParagraph();
|
XWPFParagraph p = doc.createParagraph();
|
||||||
|
|
||||||
CTP ctp = p.getCTP();
|
CTP ctp = p.getCTP();
|
||||||
CTPPr ppr = ctp.addNewPPr();
|
CTPPr ppr = ctp.getPPr()== null? ctp.addNewPPr() : ctp.getPPr();
|
||||||
|
|
||||||
CTOnOff pageBreak = ppr.addNewPageBreakBefore();
|
CTOnOff pageBreak = ppr.addNewPageBreakBefore();
|
||||||
pageBreak.setVal(STOnOff.FALSE);
|
pageBreak.setVal(STOnOff.FALSE);
|
||||||
|
@ -20,8 +20,10 @@ import java.math.BigInteger;
|
|||||||
|
|
||||||
import junit.framework.TestCase;
|
import junit.framework.TestCase;
|
||||||
|
|
||||||
|
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTBr;
|
||||||
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTR;
|
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTR;
|
||||||
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTRPr;
|
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTRPr;
|
||||||
|
import org.openxmlformats.schemas.wordprocessingml.x2006.main.STBrClear;
|
||||||
import org.openxmlformats.schemas.wordprocessingml.x2006.main.STOnOff;
|
import org.openxmlformats.schemas.wordprocessingml.x2006.main.STOnOff;
|
||||||
import org.openxmlformats.schemas.wordprocessingml.x2006.main.STUnderline;
|
import org.openxmlformats.schemas.wordprocessingml.x2006.main.STUnderline;
|
||||||
import org.openxmlformats.schemas.wordprocessingml.x2006.main.STVerticalAlignRun;
|
import org.openxmlformats.schemas.wordprocessingml.x2006.main.STVerticalAlignRun;
|
||||||
@ -39,9 +41,26 @@ public class TestXWPFRun extends TestCase {
|
|||||||
p = doc.createParagraph();
|
p = doc.createParagraph();
|
||||||
|
|
||||||
this.ctRun = CTR.Factory.newInstance();
|
this.ctRun = CTR.Factory.newInstance();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void testSetGetText() {
|
||||||
|
ctRun.addNewT().setStringValue("TEST STRING");
|
||||||
|
ctRun.addNewT().setStringValue("TEST2 STRING");
|
||||||
|
ctRun.addNewT().setStringValue("TEST3 STRING");
|
||||||
|
|
||||||
|
assertEquals(3,ctRun.sizeOfTArray());
|
||||||
|
XWPFRun run = new XWPFRun(ctRun, p);
|
||||||
|
|
||||||
|
assertEquals("TEST2 STRING",run.getText(1));
|
||||||
|
|
||||||
|
run.setText("NEW STRING",0);
|
||||||
|
assertEquals("NEW STRING",run.getText(0));
|
||||||
|
|
||||||
|
//run.setText("xxx",14);
|
||||||
|
//fail("Position wrong");
|
||||||
|
}
|
||||||
|
|
||||||
public void testSetGetBold() {
|
public void testSetGetBold() {
|
||||||
CTRPr rpr = ctRun.addNewRPr();
|
CTRPr rpr = ctRun.addNewRPr();
|
||||||
rpr.addNewB().setVal(STOnOff.TRUE);
|
rpr.addNewB().setVal(STOnOff.TRUE);
|
||||||
@ -118,9 +137,9 @@ public class TestXWPFRun extends TestCase {
|
|||||||
rpr.addNewSz().setVal(new BigInteger("14"));
|
rpr.addNewSz().setVal(new BigInteger("14"));
|
||||||
|
|
||||||
XWPFRun run = new XWPFRun(ctRun, p);
|
XWPFRun run = new XWPFRun(ctRun, p);
|
||||||
assertEquals(7, run.getFontSize().longValue());
|
assertEquals(7, run.getFontSize());
|
||||||
|
|
||||||
run.setFontSize(new BigInteger("24"));
|
run.setFontSize(24);
|
||||||
assertEquals(48, rpr.getSz().getVal().longValue());
|
assertEquals(48, rpr.getSz().getVal().longValue());
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -130,11 +149,48 @@ public class TestXWPFRun extends TestCase {
|
|||||||
rpr.addNewPosition().setVal(new BigInteger("4000"));
|
rpr.addNewPosition().setVal(new BigInteger("4000"));
|
||||||
|
|
||||||
XWPFRun run = new XWPFRun(ctRun, p);
|
XWPFRun run = new XWPFRun(ctRun, p);
|
||||||
assertEquals(4000, run.getTextPosition().longValue());
|
assertEquals(4000, run.getTextPosition());
|
||||||
|
|
||||||
run.setTextPosition(new BigInteger("2400"));
|
run.setTextPosition(2400);
|
||||||
assertEquals(2400, rpr.getPosition().getVal().longValue());
|
assertEquals(2400, rpr.getPosition().getVal().longValue());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void testAddCarriageReturn() {
|
||||||
|
|
||||||
|
ctRun.addNewT().setStringValue("TEST STRING");
|
||||||
|
ctRun.addNewCr();
|
||||||
|
ctRun.addNewT().setStringValue("TEST2 STRING");
|
||||||
|
ctRun.addNewCr();
|
||||||
|
ctRun.addNewT().setStringValue("TEST3 STRING");
|
||||||
|
assertEquals(2, ctRun.sizeOfCrArray());
|
||||||
|
|
||||||
|
XWPFRun run = new XWPFRun(CTR.Factory.newInstance(), p);
|
||||||
|
run.setText("T1");
|
||||||
|
run.addCarriageReturn();
|
||||||
|
run.addCarriageReturn();
|
||||||
|
run.setText("T2");
|
||||||
|
run.addCarriageReturn();
|
||||||
|
assertEquals(3, run.getCTR().getCrArray().length);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public void testAddPageBreak() {
|
||||||
|
ctRun.addNewT().setStringValue("TEST STRING");
|
||||||
|
ctRun.addNewBr();
|
||||||
|
ctRun.addNewT().setStringValue("TEST2 STRING");
|
||||||
|
CTBr breac=ctRun.addNewBr();
|
||||||
|
breac.setClear(STBrClear.LEFT);
|
||||||
|
ctRun.addNewT().setStringValue("TEST3 STRING");
|
||||||
|
assertEquals(2, ctRun.sizeOfBrArray());
|
||||||
|
|
||||||
|
XWPFRun run = new XWPFRun(CTR.Factory.newInstance(), p);
|
||||||
|
run.setText("TEXT1");
|
||||||
|
run.addBreak();
|
||||||
|
run.setText("TEXT2");
|
||||||
|
run.addBreak();
|
||||||
|
assertEquals(2, run.getCTR().sizeOfBrArray());
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
117
src/ooxml/testcases/org/apache/poi/xwpf/usermodel/TestXWPFTable.java
Executable file
117
src/ooxml/testcases/org/apache/poi/xwpf/usermodel/TestXWPFTable.java
Executable file
@ -0,0 +1,117 @@
|
|||||||
|
/* ====================================================================
|
||||||
|
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.math.BigInteger;
|
||||||
|
|
||||||
|
import junit.framework.TestCase;
|
||||||
|
|
||||||
|
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTP;
|
||||||
|
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTR;
|
||||||
|
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTRow;
|
||||||
|
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTbl;
|
||||||
|
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTc;
|
||||||
|
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTText;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Tests for XWPF Run
|
||||||
|
*/
|
||||||
|
public class TestXWPFTable extends TestCase {
|
||||||
|
|
||||||
|
protected void setUp() {
|
||||||
|
/*
|
||||||
|
XWPFDocument doc = new XWPFDocument();
|
||||||
|
p = doc.createParagraph();
|
||||||
|
|
||||||
|
this.ctRun = CTR.Factory.newInstance();
|
||||||
|
*/
|
||||||
|
}
|
||||||
|
|
||||||
|
public void testConstructor() {
|
||||||
|
CTTbl ctTable=CTTbl.Factory.newInstance();
|
||||||
|
XWPFTable xtab=new XWPFTable(ctTable);
|
||||||
|
assertNotNull(xtab);
|
||||||
|
assertEquals(1,ctTable.sizeOfTrArray());
|
||||||
|
assertEquals(1,ctTable.getTrArray(0).sizeOfTcArray());
|
||||||
|
assertNotNull(ctTable.getTrArray(0).getTcArray(0).getPArray(0));
|
||||||
|
|
||||||
|
ctTable=CTTbl.Factory.newInstance();
|
||||||
|
xtab=new XWPFTable(ctTable, 3,2);
|
||||||
|
assertNotNull(xtab);
|
||||||
|
assertEquals(3,ctTable.sizeOfTrArray());
|
||||||
|
assertEquals(2,ctTable.getTrArray(0).sizeOfTcArray());
|
||||||
|
assertNotNull(ctTable.getTrArray(0).getTcArray(0).getPArray(0));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public void testGetText(){
|
||||||
|
CTTbl table = CTTbl.Factory.newInstance();
|
||||||
|
CTRow row=table.addNewTr();
|
||||||
|
CTTc cell=row.addNewTc();
|
||||||
|
CTP paragraph=cell.addNewP();
|
||||||
|
CTR run=paragraph.addNewR();
|
||||||
|
CTText text=run.addNewT();
|
||||||
|
text.setStringValue("finally I can write!");
|
||||||
|
|
||||||
|
XWPFTable xtab=new XWPFTable(table);
|
||||||
|
assertEquals("finally I can write!\n",xtab.getText());
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public void testCreateRow(){
|
||||||
|
CTTbl table = CTTbl.Factory.newInstance();
|
||||||
|
CTRow r1=table.addNewTr();
|
||||||
|
r1.addNewTc().addNewP();
|
||||||
|
r1.addNewTc().addNewP();
|
||||||
|
CTRow r2=table.addNewTr();
|
||||||
|
r2.addNewTc().addNewP();
|
||||||
|
r2.addNewTc().addNewP();
|
||||||
|
CTRow r3=table.addNewTr();
|
||||||
|
r3.addNewTc().addNewP();
|
||||||
|
r3.addNewTc().addNewP();
|
||||||
|
|
||||||
|
XWPFTable xtab=new XWPFTable(table);
|
||||||
|
assertEquals(3,xtab.getNumberOfRows());
|
||||||
|
assertNotNull(xtab.getRow(2));
|
||||||
|
|
||||||
|
//add a new row
|
||||||
|
xtab.createRow();
|
||||||
|
|
||||||
|
//check number of cols
|
||||||
|
assertEquals(2,table.getTrArray(0).sizeOfTcArray());
|
||||||
|
|
||||||
|
//check creation of first row
|
||||||
|
xtab=new XWPFTable(CTTbl.Factory.newInstance());
|
||||||
|
assertEquals(1,xtab.getCTTbl().getTrArray(0).sizeOfTcArray());
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public void testSetGetWidth(){
|
||||||
|
CTTbl table = CTTbl.Factory.newInstance();
|
||||||
|
table.addNewTblPr().addNewTblW().setW(new BigInteger("1000"));
|
||||||
|
|
||||||
|
XWPFTable xtab=new XWPFTable(table);
|
||||||
|
|
||||||
|
assertEquals(1000,xtab.getWidth());
|
||||||
|
|
||||||
|
xtab.setWidth(100);
|
||||||
|
assertEquals(100,table.getTblPr().getTblW().getW().intValue());
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user