rebase XDDF text package
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1839369 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
85e2e8616d
commit
5b8f5a69db
@ -26,11 +26,15 @@ import java.util.Locale;
|
||||
import java.util.Map.Entry;
|
||||
import java.util.TreeMap;
|
||||
|
||||
import org.apache.poi.ooxml.util.DocumentHelper;
|
||||
import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
|
||||
import org.apache.poi.openxml4j.exceptions.InvalidOperationException;
|
||||
import org.apache.poi.openxml4j.exceptions.OpenXML4JRuntimeException;
|
||||
import org.apache.poi.openxml4j.opc.*;
|
||||
import org.apache.poi.ooxml.util.DocumentHelper;
|
||||
import org.apache.poi.openxml4j.opc.OPCPackage;
|
||||
import org.apache.poi.openxml4j.opc.PackageNamespaces;
|
||||
import org.apache.poi.openxml4j.opc.PackagePart;
|
||||
import org.apache.poi.openxml4j.opc.PackagePartName;
|
||||
import org.apache.poi.openxml4j.opc.PackagingURIHelper;
|
||||
import org.w3c.dom.Document;
|
||||
import org.w3c.dom.Element;
|
||||
import org.w3c.dom.NodeList;
|
||||
@ -150,10 +154,11 @@ public abstract class ContentTypeManager {
|
||||
boolean defaultCTExists = this.defaultContentType.containsValue(contentType);
|
||||
String extension = partName.getExtension().toLowerCase(Locale.ROOT);
|
||||
if ((extension.length() == 0)
|
||||
|| (this.defaultContentType.containsKey(extension) && !defaultCTExists))
|
||||
|| (this.defaultContentType.containsKey(extension) && !defaultCTExists)) {
|
||||
this.addOverrideContentType(partName, contentType);
|
||||
else if (!defaultCTExists)
|
||||
} else if (!defaultCTExists) {
|
||||
this.addDefaultContentType(extension, contentType);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@ -166,8 +171,9 @@ public abstract class ContentTypeManager {
|
||||
*/
|
||||
private void addOverrideContentType(PackagePartName partName,
|
||||
String contentType) {
|
||||
if (overrideContentType == null)
|
||||
if (overrideContentType == null) {
|
||||
overrideContentType = new TreeMap<>();
|
||||
}
|
||||
overrideContentType.put(partName, contentType);
|
||||
}
|
||||
|
||||
@ -206,8 +212,9 @@ public abstract class ContentTypeManager {
|
||||
*/
|
||||
public void removeContentType(PackagePartName partName)
|
||||
throws InvalidOperationException {
|
||||
if (partName == null)
|
||||
if (partName == null) {
|
||||
throw new IllegalArgumentException("partName");
|
||||
}
|
||||
|
||||
/* Override content type */
|
||||
if (this.overrideContentType != null
|
||||
@ -251,10 +258,11 @@ public abstract class ContentTypeManager {
|
||||
try {
|
||||
for (PackagePart part : this.container.getParts()) {
|
||||
if (!part.getPartName().equals(partName)
|
||||
&& this.getContentType(part.getPartName()) == null)
|
||||
&& this.getContentType(part.getPartName()) == null) {
|
||||
throw new InvalidOperationException(
|
||||
"Rule M2.4 is not respected: Nor a default element or override element is associated with the part: "
|
||||
+ part.getPartName().getName());
|
||||
}
|
||||
}
|
||||
} catch (InvalidFormatException e) {
|
||||
throw new InvalidOperationException(e.getMessage());
|
||||
@ -271,8 +279,9 @@ public abstract class ContentTypeManager {
|
||||
* register, then <code>false</code>.
|
||||
*/
|
||||
public boolean isContentTypeRegister(String contentType) {
|
||||
if (contentType == null)
|
||||
if (contentType == null) {
|
||||
throw new IllegalArgumentException("contentType");
|
||||
}
|
||||
|
||||
return (this.defaultContentType.values().contains(contentType) || (this.overrideContentType != null && this.overrideContentType
|
||||
.values().contains(contentType)));
|
||||
@ -318,16 +327,19 @@ public abstract class ContentTypeManager {
|
||||
* content from an existing part.
|
||||
*/
|
||||
public String getContentType(PackagePartName partName) {
|
||||
if (partName == null)
|
||||
if (partName == null) {
|
||||
throw new IllegalArgumentException("partName");
|
||||
}
|
||||
|
||||
if ((this.overrideContentType != null)
|
||||
&& this.overrideContentType.containsKey(partName))
|
||||
&& this.overrideContentType.containsKey(partName)) {
|
||||
return this.overrideContentType.get(partName);
|
||||
}
|
||||
|
||||
String extension = partName.getExtension().toLowerCase(Locale.ROOT);
|
||||
if (this.defaultContentType.containsKey(extension))
|
||||
if (this.defaultContentType.containsKey(extension)) {
|
||||
return this.defaultContentType.get(extension);
|
||||
}
|
||||
|
||||
/*
|
||||
* [M2.4] : The package implementer shall require that the Content Types
|
||||
@ -338,9 +350,11 @@ public abstract class ContentTypeManager {
|
||||
*/
|
||||
if (this.container != null && this.container.getPart(partName) != null) {
|
||||
throw new OpenXML4JRuntimeException(
|
||||
"Rule M2.4 exception : this error should NEVER happen!\n"
|
||||
+ "Check that your code is closing the open resources in the correct order prior to filing a bug report.\n"
|
||||
+ "If you can provide the triggering file, then please raise a bug at https://bz.apache.org/bugzilla/enter_bug.cgi?product=POI and attach the file that triggers it, thanks!");
|
||||
"Rule M2.4 exception : Part \'"
|
||||
+ partName
|
||||
+ "\' not found - this error should NEVER happen!\n"
|
||||
+ "Check that your code is closing the open resources in the correct order prior to filing a bug report.\n"
|
||||
+ "If you can provide the triggering file, then please raise a bug at https://bz.apache.org/bugzilla/enter_bug.cgi?product=POI and attach the file that triggers it, thanks!");
|
||||
}
|
||||
return null;
|
||||
}
|
||||
@ -350,8 +364,9 @@ public abstract class ContentTypeManager {
|
||||
*/
|
||||
public void clearAll() {
|
||||
this.defaultContentType.clear();
|
||||
if (this.overrideContentType != null)
|
||||
if (this.overrideContentType != null) {
|
||||
this.overrideContentType.clear();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@ -359,8 +374,9 @@ public abstract class ContentTypeManager {
|
||||
*
|
||||
*/
|
||||
public void clearOverrideContentTypes() {
|
||||
if (this.overrideContentType != null)
|
||||
if (this.overrideContentType != null) {
|
||||
this.overrideContentType.clear();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -29,6 +29,8 @@ import java.util.HashMap;
|
||||
import java.util.LinkedList;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Optional;
|
||||
import java.util.function.Function;
|
||||
|
||||
import javax.xml.namespace.QName;
|
||||
|
||||
@ -46,6 +48,8 @@ import org.apache.poi.ss.util.CellReference;
|
||||
import org.apache.poi.util.Beta;
|
||||
import org.apache.poi.util.Internal;
|
||||
import org.apache.poi.xddf.usermodel.XDDFShapeProperties;
|
||||
import org.apache.poi.xddf.usermodel.text.TextContainer;
|
||||
import org.apache.poi.xddf.usermodel.text.XDDFTextBody;
|
||||
import org.apache.poi.xssf.usermodel.XSSFCell;
|
||||
import org.apache.poi.xssf.usermodel.XSSFRow;
|
||||
import org.apache.poi.xssf.usermodel.XSSFSheet;
|
||||
@ -65,15 +69,19 @@ import org.openxmlformats.schemas.drawingml.x2006.chart.CTRadarChart;
|
||||
import org.openxmlformats.schemas.drawingml.x2006.chart.CTScatterChart;
|
||||
import org.openxmlformats.schemas.drawingml.x2006.chart.CTSerAx;
|
||||
import org.openxmlformats.schemas.drawingml.x2006.chart.CTSurface;
|
||||
import org.openxmlformats.schemas.drawingml.x2006.chart.CTTitle;
|
||||
import org.openxmlformats.schemas.drawingml.x2006.chart.CTTx;
|
||||
import org.openxmlformats.schemas.drawingml.x2006.chart.CTValAx;
|
||||
import org.openxmlformats.schemas.drawingml.x2006.chart.ChartSpaceDocument;
|
||||
import org.openxmlformats.schemas.drawingml.x2006.main.CTShapeProperties;
|
||||
import org.openxmlformats.schemas.drawingml.x2006.main.CTTextCharacterProperties;
|
||||
import org.openxmlformats.schemas.drawingml.x2006.main.CTTextParagraphProperties;
|
||||
import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTTable;
|
||||
import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTTableColumn;
|
||||
import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTTableColumns;
|
||||
|
||||
@Beta
|
||||
public abstract class XDDFChart extends POIXMLDocumentPart {
|
||||
public abstract class XDDFChart extends POIXMLDocumentPart implements TextContainer {
|
||||
/**
|
||||
* Underlying workbook
|
||||
*/
|
||||
@ -109,8 +117,10 @@ public abstract class XDDFChart extends POIXMLDocumentPart {
|
||||
/**
|
||||
* Construct a DrawingML chart from a package part.
|
||||
*
|
||||
* @param part the package part holding the chart data,
|
||||
* the content type must be <code>application/vnd.openxmlformats-officedocument.drawingml.chart+xml</code>
|
||||
* @param part
|
||||
* the package part holding the chart data, the content type must
|
||||
* be
|
||||
* <code>application/vnd.openxmlformats-officedocument.drawingml.chart+xml</code>
|
||||
* @since POI 3.14-Beta1
|
||||
*/
|
||||
protected XDDFChart(PackagePart part) throws IOException, XmlException {
|
||||
@ -121,7 +131,8 @@ public abstract class XDDFChart extends POIXMLDocumentPart {
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the underlying CTChartSpace bean, the root element of the Chart part.
|
||||
* Return the underlying CTChartSpace bean, the root element of the Chart
|
||||
* part.
|
||||
*
|
||||
* @return the underlying CTChartSpace bean
|
||||
*/
|
||||
@ -152,8 +163,8 @@ public abstract class XDDFChart extends POIXMLDocumentPart {
|
||||
}
|
||||
|
||||
/**
|
||||
* @return true if only visible cells will be present on the chart,
|
||||
* false otherwise
|
||||
* @return true if only visible cells will be present on the chart, false
|
||||
* otherwise
|
||||
*/
|
||||
public boolean isPlotOnlyVisibleCells() {
|
||||
if (chart.isSetPlotVisOnly()) {
|
||||
@ -164,8 +175,9 @@ public abstract class XDDFChart extends POIXMLDocumentPart {
|
||||
}
|
||||
|
||||
/**
|
||||
* @param only a flag specifying if only visible cells should be
|
||||
* present on the chart
|
||||
* @param only
|
||||
* a flag specifying if only visible cells should be present on
|
||||
* the chart
|
||||
*/
|
||||
public void setPlotOnlyVisibleCells(boolean only) {
|
||||
if (!chart.isSetPlotVisOnly()) {
|
||||
@ -202,6 +214,42 @@ public abstract class XDDFChart extends POIXMLDocumentPart {
|
||||
chart.getAutoTitleDeleted().setVal(deleted);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the chart title body if there is one, i.e. title is set and is not a
|
||||
* formula.
|
||||
*
|
||||
* @return text body or null, if title is a formula or no title is set.
|
||||
*/
|
||||
@Beta
|
||||
public XDDFTextBody getFormattedTitle() {
|
||||
if (!chart.isSetTitle()) {
|
||||
return null;
|
||||
}
|
||||
CTTitle title = chart.getTitle();
|
||||
if (!title.isSetTx()) {
|
||||
return null;
|
||||
}
|
||||
CTTx tx = title.getTx();
|
||||
if (!tx.isSetRich()) {
|
||||
return null;
|
||||
}
|
||||
return new XDDFTextBody(this, tx.getRich());
|
||||
}
|
||||
|
||||
@Override
|
||||
public <R> Optional<R> findDefinedParagraphProperty(Function<CTTextParagraphProperties, Boolean> isSet,
|
||||
Function<CTTextParagraphProperties, R> getter) {
|
||||
// TODO Auto-generated method stub
|
||||
return Optional.empty();
|
||||
}
|
||||
|
||||
@Override
|
||||
public <R> Optional<R> findDefinedRunProperty(Function<CTTextCharacterProperties, Boolean> isSet,
|
||||
Function<CTTextCharacterProperties, R> getter) {
|
||||
// TODO Auto-generated method stub
|
||||
return Optional.empty();
|
||||
}
|
||||
|
||||
public XDDFShapeProperties getOrAddShapeProperties() {
|
||||
CTPlotArea plotArea = getCTPlotArea();
|
||||
CTShapeProperties properties;
|
||||
@ -336,18 +384,18 @@ public abstract class XDDFChart extends POIXMLDocumentPart {
|
||||
Map<Long, XDDFValueAxis> mapValues = Collections.singletonMap(values.getId(), values);
|
||||
final CTPlotArea plotArea = getCTPlotArea();
|
||||
switch (type) {
|
||||
case BAR:
|
||||
return new XDDFBarChartData(plotArea.addNewBarChart(), categories, mapValues);
|
||||
case LINE:
|
||||
return new XDDFLineChartData(plotArea.addNewLineChart(), categories, mapValues);
|
||||
case PIE:
|
||||
return new XDDFPieChartData(plotArea.addNewPieChart());
|
||||
case RADAR:
|
||||
return new XDDFRadarChartData(plotArea.addNewRadarChart(), categories, mapValues);
|
||||
case SCATTER:
|
||||
return new XDDFScatterChartData(plotArea.addNewScatterChart(), categories, mapValues);
|
||||
default:
|
||||
return null;
|
||||
case BAR:
|
||||
return new XDDFBarChartData(plotArea.addNewBarChart(), categories, mapValues);
|
||||
case LINE:
|
||||
return new XDDFLineChartData(plotArea.addNewLineChart(), categories, mapValues);
|
||||
case PIE:
|
||||
return new XDDFPieChartData(plotArea.addNewPieChart());
|
||||
case RADAR:
|
||||
return new XDDFRadarChartData(plotArea.addNewRadarChart(), categories, mapValues);
|
||||
case SCATTER:
|
||||
return new XDDFScatterChartData(plotArea.addNewScatterChart(), categories, mapValues);
|
||||
default:
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
@ -360,7 +408,8 @@ public abstract class XDDFChart extends POIXMLDocumentPart {
|
||||
|
||||
private boolean hasAxes() {
|
||||
CTPlotArea ctPlotArea = chart.getPlotArea();
|
||||
int totalAxisCount = ctPlotArea.sizeOfValAxArray() + ctPlotArea.sizeOfCatAxArray() + ctPlotArea.sizeOfDateAxArray() + ctPlotArea.sizeOfSerAxArray();
|
||||
int totalAxisCount = ctPlotArea.sizeOfValAxArray() + ctPlotArea.sizeOfCatAxArray() + ctPlotArea
|
||||
.sizeOfDateAxArray() + ctPlotArea.sizeOfSerAxArray();
|
||||
return totalAxisCount > 0;
|
||||
}
|
||||
|
||||
@ -381,11 +430,17 @@ public abstract class XDDFChart extends POIXMLDocumentPart {
|
||||
|
||||
/**
|
||||
* Set value range (basic Axis Options)
|
||||
* @param axisIndex 0 - primary axis, 1 - secondary axis
|
||||
* @param minimum minimum value; Double.NaN - automatic; null - no change
|
||||
* @param maximum maximum value; Double.NaN - automatic; null - no change
|
||||
* @param majorUnit major unit value; Double.NaN - automatic; null - no change
|
||||
* @param minorUnit minor unit value; Double.NaN - automatic; null - no change
|
||||
*
|
||||
* @param axisIndex
|
||||
* 0 - primary axis, 1 - secondary axis
|
||||
* @param minimum
|
||||
* minimum value; Double.NaN - automatic; null - no change
|
||||
* @param maximum
|
||||
* maximum value; Double.NaN - automatic; null - no change
|
||||
* @param majorUnit
|
||||
* major unit value; Double.NaN - automatic; null - no change
|
||||
* @param minorUnit
|
||||
* minor unit value; Double.NaN - automatic; null - no change
|
||||
*/
|
||||
public void setValueRange(int axisIndex, Double minimum, Double maximum, Double majorUnit, Double minorUnit) {
|
||||
XDDFChartAxis axis = getAxes().get(axisIndex);
|
||||
@ -407,16 +462,21 @@ public abstract class XDDFChart extends POIXMLDocumentPart {
|
||||
}
|
||||
|
||||
/**
|
||||
* method to create relationship with embedded part
|
||||
* for example writing xlsx file stream into output stream
|
||||
* method to create relationship with embedded part for example writing xlsx
|
||||
* file stream into output stream
|
||||
*
|
||||
* @param chartRelation relationship object
|
||||
* @param chartFactory ChartFactory object
|
||||
* @param chartIndex index used to suffix on file
|
||||
* @return return relation part which used to write relation in .rels file and get relation id
|
||||
* @param chartRelation
|
||||
* relationship object
|
||||
* @param chartFactory
|
||||
* ChartFactory object
|
||||
* @param chartIndex
|
||||
* index used to suffix on file
|
||||
* @return return relation part which used to write relation in .rels file
|
||||
* and get relation id
|
||||
* @since POI 4.0.0
|
||||
*/
|
||||
public PackageRelationship createRelationshipInChart(POIXMLRelation chartRelation, POIXMLFactory chartFactory, int chartIndex) {
|
||||
public PackageRelationship createRelationshipInChart(POIXMLRelation chartRelation, POIXMLFactory chartFactory,
|
||||
int chartIndex) {
|
||||
documentPart = createRelationship(chartRelation, chartFactory, chartIndex, true).getDocumentPart();
|
||||
return this.addRelation(null, chartRelation, documentPart).getRelationship();
|
||||
}
|
||||
@ -424,14 +484,18 @@ public abstract class XDDFChart extends POIXMLDocumentPart {
|
||||
/**
|
||||
* if embedded part was null then create new part
|
||||
*
|
||||
* @param chartRelation chart relation object
|
||||
* @param chartWorkbookRelation chart workbook relation object
|
||||
* @param chartFactory factory object of POIXMLFactory (XWPFFactory/XSLFFactory)
|
||||
* @param chartRelation
|
||||
* chart relation object
|
||||
* @param chartWorkbookRelation
|
||||
* chart workbook relation object
|
||||
* @param chartFactory
|
||||
* factory object of POIXMLFactory (XWPFFactory/XSLFFactory)
|
||||
* @return return the new package part
|
||||
* @throws InvalidFormatException
|
||||
* @since POI 4.0.0
|
||||
*/
|
||||
private PackagePart createWorksheetPart(POIXMLRelation chartRelation, POIXMLRelation chartWorkbookRelation, POIXMLFactory chartFactory) throws InvalidFormatException {
|
||||
private PackagePart createWorksheetPart(POIXMLRelation chartRelation, POIXMLRelation chartWorkbookRelation,
|
||||
POIXMLFactory chartFactory) throws InvalidFormatException {
|
||||
PackageRelationship xlsx = createRelationshipInChart(chartWorkbookRelation, chartFactory, chartIndex);
|
||||
this.setExternalId(xlsx.getId());
|
||||
return getTargetPart(xlsx);
|
||||
@ -440,7 +504,8 @@ public abstract class XDDFChart extends POIXMLDocumentPart {
|
||||
/**
|
||||
* this method write the XSSFWorkbook object data into embedded excel file
|
||||
*
|
||||
* @param workbook XSSFworkbook object
|
||||
* @param workbook
|
||||
* XSSFworkbook object
|
||||
* @throws IOException
|
||||
* @throws InvalidFormatException
|
||||
* @since POI 4.0.0
|
||||
@ -451,9 +516,7 @@ public abstract class XDDFChart extends POIXMLDocumentPart {
|
||||
POIXMLRelation chartRelation = getChartRelation();
|
||||
POIXMLRelation chartWorkbookRelation = getChartWorkbookRelation();
|
||||
POIXMLFactory chartFactory = getChartFactory();
|
||||
if (chartRelation != null
|
||||
&& chartWorkbookRelation != null
|
||||
&& chartFactory != null) {
|
||||
if (chartRelation != null && chartWorkbookRelation != null && chartFactory != null) {
|
||||
worksheetPart = createWorksheetPart(chartRelation, chartWorkbookRelation, chartFactory);
|
||||
} else {
|
||||
throw new InvalidFormatException("unable to determine chart relations");
|
||||
@ -489,9 +552,12 @@ public abstract class XDDFChart extends POIXMLDocumentPart {
|
||||
/**
|
||||
* this method writes the data into sheet
|
||||
*
|
||||
* @param sheet sheet of embedded excel
|
||||
* @param categoryData category values
|
||||
* @param valuesData data values
|
||||
* @param sheet
|
||||
* sheet of embedded excel
|
||||
* @param categoryData
|
||||
* category values
|
||||
* @param valuesData
|
||||
* data values
|
||||
* @since POI 4.0.0
|
||||
*/
|
||||
protected void fillSheet(XSSFSheet sheet, XDDFDataSource<?> categoryData, XDDFNumericalDataSource<?> valuesData) {
|
||||
@ -504,15 +570,16 @@ public abstract class XDDFChart extends POIXMLDocumentPart {
|
||||
}
|
||||
|
||||
/**
|
||||
* this method return row on given index
|
||||
* if row is null then create new row
|
||||
* this method return row on given index if row is null then create new row
|
||||
*
|
||||
* @param sheet current sheet object
|
||||
* @param index index of current row
|
||||
* @param sheet
|
||||
* current sheet object
|
||||
* @param index
|
||||
* index of current row
|
||||
* @return this method return sheet row on given index
|
||||
* @since POI 4.0.0
|
||||
*/
|
||||
private XSSFRow getRow(XSSFSheet sheet,int index){
|
||||
private XSSFRow getRow(XSSFSheet sheet, int index) {
|
||||
if (sheet.getRow(index) != null) {
|
||||
return sheet.getRow(index);
|
||||
} else {
|
||||
@ -521,15 +588,17 @@ public abstract class XDDFChart extends POIXMLDocumentPart {
|
||||
}
|
||||
|
||||
/**
|
||||
* this method return cell on given index
|
||||
* if cell is null then create new cell
|
||||
* this method return cell on given index if cell is null then create new
|
||||
* cell
|
||||
*
|
||||
* @param row current row object
|
||||
* @param index index of current cell
|
||||
* @param row
|
||||
* current row object
|
||||
* @param index
|
||||
* index of current cell
|
||||
* @return this method return sheet cell on given index
|
||||
* @since POI 4.0.0
|
||||
*/
|
||||
private XSSFCell getCell(XSSFRow row,int index){
|
||||
private XSSFCell getCell(XSSFRow row, int index) {
|
||||
if (row.getCell(index) != null) {
|
||||
return row.getCell(index);
|
||||
} else {
|
||||
@ -540,7 +609,8 @@ public abstract class XDDFChart extends POIXMLDocumentPart {
|
||||
/**
|
||||
* import content from other chart to created chart
|
||||
*
|
||||
* @param other chart object
|
||||
* @param other
|
||||
* chart object
|
||||
* @since POI 4.0.0
|
||||
*/
|
||||
public void importContent(XDDFChart other) {
|
||||
@ -553,7 +623,8 @@ public abstract class XDDFChart extends POIXMLDocumentPart {
|
||||
@Override
|
||||
protected void commit() throws IOException {
|
||||
XmlOptions xmlOptions = new XmlOptions(DEFAULT_XML_OPTIONS);
|
||||
xmlOptions.setSaveSyntheticDocumentElement(new QName(CTChartSpace.type.getName().getNamespaceURI(), "chartSpace", "c"));
|
||||
xmlOptions.setSaveSyntheticDocumentElement(
|
||||
new QName(CTChartSpace.type.getName().getNamespaceURI(), "chartSpace", "c"));
|
||||
|
||||
if (workbook != null) {
|
||||
try {
|
||||
@ -572,7 +643,8 @@ public abstract class XDDFChart extends POIXMLDocumentPart {
|
||||
/**
|
||||
* set sheet time in excel file
|
||||
*
|
||||
* @param title title of sheet
|
||||
* @param title
|
||||
* title of sheet
|
||||
* @return return cell reference
|
||||
* @since POI 4.0.0
|
||||
*/
|
||||
@ -588,18 +660,20 @@ public abstract class XDDFChart extends POIXMLDocumentPart {
|
||||
/**
|
||||
* this method update column header of sheet into table
|
||||
*
|
||||
* @param ctTable xssf table object
|
||||
* @param title title of column
|
||||
* @param index index of column
|
||||
* @param ctTable
|
||||
* xssf table object
|
||||
* @param title
|
||||
* title of column
|
||||
* @param index
|
||||
* index of column
|
||||
*/
|
||||
private void updateSheetTable(CTTable ctTable, String title, int index) {
|
||||
CTTableColumns tableColumnList = ctTable.getTableColumns();
|
||||
CTTableColumn column = null;
|
||||
if(tableColumnList.getCount() >= index) {
|
||||
if (tableColumnList.getCount() >= index) {
|
||||
column = tableColumnList.getTableColumnArray(index);
|
||||
}
|
||||
else {
|
||||
column = tableColumnList.addNewTableColumn();
|
||||
} else {
|
||||
column = tableColumnList.addNewTableColumn();
|
||||
column.setId(index);
|
||||
}
|
||||
column.setName(title);
|
||||
@ -632,9 +706,9 @@ public abstract class XDDFChart extends POIXMLDocumentPart {
|
||||
}
|
||||
|
||||
/**
|
||||
* this method is used to get worksheet part
|
||||
* if call is from saveworkbook method then check isCommitted
|
||||
* isCommitted variable shows that we are writing xssfworkbook object into output stream of embedded part
|
||||
* this method is used to get worksheet part if call is from saveworkbook
|
||||
* method then check isCommitted isCommitted variable shows that we are
|
||||
* writing xssfworkbook object into output stream of embedded part
|
||||
*
|
||||
* @return returns the packagepart of embedded file
|
||||
* @throws InvalidFormatException
|
||||
@ -683,10 +757,12 @@ public abstract class XDDFChart extends POIXMLDocumentPart {
|
||||
}
|
||||
|
||||
/**
|
||||
* while reading chart from template file then we need to parse and store embedded excel
|
||||
* file in chart object show that we can modify value according to use
|
||||
* while reading chart from template file then we need to parse and store
|
||||
* embedded excel file in chart object show that we can modify value
|
||||
* according to use
|
||||
*
|
||||
* @param workbook workbook object which we read from chart embedded part
|
||||
* @param workbook
|
||||
* workbook object which we read from chart embedded part
|
||||
* @since POI 4.0.0
|
||||
*/
|
||||
public void setWorkbook(XSSFWorkbook workbook) {
|
||||
@ -694,9 +770,12 @@ public abstract class XDDFChart extends POIXMLDocumentPart {
|
||||
}
|
||||
|
||||
/**
|
||||
* set the relation id of embedded excel relation id into external data relation tag
|
||||
* set the relation id of embedded excel relation id into external data
|
||||
* relation tag
|
||||
*
|
||||
* @param id relation id of embedded excel relation id into external data relation tag
|
||||
* @param id
|
||||
* relation id of embedded excel relation id into external data
|
||||
* relation tag
|
||||
* @since POI 4.0.0
|
||||
*/
|
||||
public void setExternalId(String id) {
|
||||
@ -714,7 +793,8 @@ public abstract class XDDFChart extends POIXMLDocumentPart {
|
||||
/**
|
||||
* set chart index which can be use for relation part
|
||||
*
|
||||
* @param chartIndex chart index which can be use for relation part
|
||||
* @param chartIndex
|
||||
* chart index which can be use for relation part
|
||||
*/
|
||||
public void setChartIndex(int chartIndex) {
|
||||
this.chartIndex = chartIndex;
|
||||
|
@ -0,0 +1,47 @@
|
||||
/* ====================================================================
|
||||
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.xddf.usermodel.text;
|
||||
|
||||
import java.util.HashMap;
|
||||
|
||||
import org.openxmlformats.schemas.drawingml.x2006.main.STTextAnchoringType;
|
||||
|
||||
public enum AnchorType {
|
||||
BOTTOM(STTextAnchoringType.B),
|
||||
CENTER(STTextAnchoringType.CTR),
|
||||
DISTRIBUTED(STTextAnchoringType.DIST),
|
||||
JUSTIFIED(STTextAnchoringType.JUST),
|
||||
TOP(STTextAnchoringType.T);
|
||||
|
||||
final STTextAnchoringType.Enum underlying;
|
||||
|
||||
AnchorType(STTextAnchoringType.Enum caps) {
|
||||
this.underlying = caps;
|
||||
}
|
||||
|
||||
private final static HashMap<STTextAnchoringType.Enum, AnchorType> reverse = new HashMap<STTextAnchoringType.Enum, AnchorType>();
|
||||
static {
|
||||
for (AnchorType value : values()) {
|
||||
reverse.put(value.underlying, value);
|
||||
}
|
||||
}
|
||||
|
||||
static AnchorType valueOf(STTextAnchoringType.Enum caps) {
|
||||
return reverse.get(caps);
|
||||
}
|
||||
}
|
@ -37,6 +37,42 @@ public class XDDFBodyProperties {
|
||||
return props;
|
||||
}
|
||||
|
||||
public AnchorType getAnchoring() {
|
||||
if (props.isSetAnchor()) {
|
||||
return AnchorType.valueOf(props.getAnchor());
|
||||
} else {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
public void setAnchoring(AnchorType anchor) {
|
||||
if (anchor == null) {
|
||||
if (props.isSetAnchor()) {
|
||||
props.unsetAnchor();
|
||||
}
|
||||
} else {
|
||||
props.setAnchor(anchor.underlying);
|
||||
}
|
||||
}
|
||||
|
||||
public Boolean isAnchorCentered() {
|
||||
if (props.isSetAnchorCtr()) {
|
||||
return props.getAnchorCtr();
|
||||
} else {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
public void setAnchorCentered(Boolean centered) {
|
||||
if (centered == null) {
|
||||
if (props.isSetAnchorCtr()) {
|
||||
props.unsetAnchorCtr();
|
||||
}
|
||||
} else {
|
||||
props.setAnchorCtr(centered);
|
||||
}
|
||||
}
|
||||
|
||||
public XDDFAutoFit getAutoFit() {
|
||||
if (props.isSetNoAutofit()) {
|
||||
return new XDDFNoAutoFit(props.getNoAutofit());
|
||||
@ -45,13 +81,19 @@ public class XDDFBodyProperties {
|
||||
} else if (props.isSetSpAutoFit()) {
|
||||
return new XDDFShapeAutoFit(props.getSpAutoFit());
|
||||
}
|
||||
return new XDDFNoAutoFit();
|
||||
return new XDDFNormalAutoFit();
|
||||
}
|
||||
|
||||
public void setAutoFit(XDDFAutoFit autofit) {
|
||||
props.unsetNoAutofit();
|
||||
props.unsetNormAutofit();
|
||||
props.unsetSpAutoFit();
|
||||
if (props.isSetNoAutofit()) {
|
||||
props.unsetNoAutofit();
|
||||
}
|
||||
if (props.isSetNormAutofit()) {
|
||||
props.unsetNormAutofit();
|
||||
}
|
||||
if (props.isSetSpAutoFit()) {
|
||||
props.unsetSpAutoFit();
|
||||
}
|
||||
if (autofit instanceof XDDFNoAutoFit) {
|
||||
props.setNoAutofit(((XDDFNoAutoFit) autofit).getXmlObject());
|
||||
} else if (autofit instanceof XDDFNormalAutoFit) {
|
||||
@ -71,7 +113,9 @@ public class XDDFBodyProperties {
|
||||
|
||||
public void setExtensionList(XDDFExtensionList list) {
|
||||
if (list == null) {
|
||||
props.unsetExtLst();
|
||||
if (props.isSetExtLst()) {
|
||||
props.unsetExtLst();
|
||||
}
|
||||
} else {
|
||||
props.setExtLst(list.getXmlObject());
|
||||
}
|
||||
@ -87,7 +131,9 @@ public class XDDFBodyProperties {
|
||||
|
||||
public void setBottomInset(Double points) {
|
||||
if (points == null || Double.isNaN(points)) {
|
||||
props.unsetBIns();
|
||||
if (props.isSetBIns()) {
|
||||
props.unsetBIns();
|
||||
}
|
||||
} else {
|
||||
props.setBIns(Units.toEMU(points));
|
||||
}
|
||||
@ -103,7 +149,9 @@ public class XDDFBodyProperties {
|
||||
|
||||
public void setLeftInset(Double points) {
|
||||
if (points == null || Double.isNaN(points)) {
|
||||
props.unsetLIns();
|
||||
if (props.isSetLIns()) {
|
||||
props.unsetLIns();
|
||||
}
|
||||
} else {
|
||||
props.setLIns(Units.toEMU(points));
|
||||
}
|
||||
@ -119,7 +167,9 @@ public class XDDFBodyProperties {
|
||||
|
||||
public void setRightInset(Double points) {
|
||||
if (points == null || Double.isNaN(points)) {
|
||||
props.unsetRIns();
|
||||
if (props.isSetRIns()) {
|
||||
props.unsetRIns();
|
||||
}
|
||||
} else {
|
||||
props.setRIns(Units.toEMU(points));
|
||||
}
|
||||
@ -135,9 +185,47 @@ public class XDDFBodyProperties {
|
||||
|
||||
public void setTopInset(Double points) {
|
||||
if (points == null || Double.isNaN(points)) {
|
||||
props.unsetTIns();
|
||||
if (props.isSetTIns()) {
|
||||
props.unsetTIns();
|
||||
}
|
||||
} else {
|
||||
props.setTIns(Units.toEMU(points));
|
||||
}
|
||||
}
|
||||
|
||||
public Boolean hasParagraphSpacing() {
|
||||
if (props.isSetSpcFirstLastPara()) {
|
||||
return props.getSpcFirstLastPara();
|
||||
} else {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
public void setParagraphSpacing(Boolean spacing) {
|
||||
if (spacing == null) {
|
||||
if (props.isSetSpcFirstLastPara()) {
|
||||
props.unsetSpcFirstLastPara();
|
||||
}
|
||||
} else {
|
||||
props.setSpcFirstLastPara(spacing);
|
||||
}
|
||||
}
|
||||
|
||||
public Boolean isRightToLeft() {
|
||||
if (props.isSetRtlCol()) {
|
||||
return props.getRtlCol();
|
||||
} else {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
public void setRightToLeft(Boolean rightToLeft) {
|
||||
if (rightToLeft == null) {
|
||||
if (props.isSetRtlCol()) {
|
||||
props.unsetRtlCol();
|
||||
}
|
||||
} else {
|
||||
props.setRtlCol(rightToLeft);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -18,19 +18,7 @@
|
||||
package org.apache.poi.xddf.usermodel.text;
|
||||
|
||||
import org.apache.poi.util.Beta;
|
||||
import org.apache.poi.util.Internal;
|
||||
|
||||
@Beta
|
||||
public abstract class XDDFBulletSize {
|
||||
public static enum Kind {
|
||||
PERCENT,
|
||||
POINTS,
|
||||
TEXT;
|
||||
}
|
||||
|
||||
@Internal
|
||||
protected XDDFBulletSize() {
|
||||
}
|
||||
|
||||
public abstract Kind getType();
|
||||
public interface XDDFBulletSize {
|
||||
}
|
||||
|
@ -22,7 +22,7 @@ import org.apache.poi.util.Internal;
|
||||
import org.openxmlformats.schemas.drawingml.x2006.main.CTTextBulletSizeFollowText;
|
||||
|
||||
@Beta
|
||||
public class XDDFBulletSizeFollowText extends XDDFBulletSize {
|
||||
public class XDDFBulletSizeFollowText implements XDDFBulletSize {
|
||||
private CTTextBulletSizeFollowText follow;
|
||||
|
||||
public XDDFBulletSizeFollowText() {
|
||||
@ -38,9 +38,4 @@ public class XDDFBulletSizeFollowText extends XDDFBulletSize {
|
||||
protected CTTextBulletSizeFollowText getXmlObject() {
|
||||
return follow;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Kind getType() {
|
||||
return Kind.TEXT;
|
||||
}
|
||||
}
|
||||
|
@ -22,7 +22,7 @@ import org.apache.poi.util.Internal;
|
||||
import org.openxmlformats.schemas.drawingml.x2006.main.CTTextBulletSizePercent;
|
||||
|
||||
@Beta
|
||||
public class XDDFBulletSizePercent extends XDDFBulletSize {
|
||||
public class XDDFBulletSizePercent implements XDDFBulletSize {
|
||||
private CTTextBulletSizePercent percent;
|
||||
private Double scale;
|
||||
|
||||
@ -42,16 +42,11 @@ public class XDDFBulletSizePercent extends XDDFBulletSize {
|
||||
return percent;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Kind getType() {
|
||||
return Kind.PERCENT;
|
||||
}
|
||||
|
||||
public double getPercent() {
|
||||
return percent.getVal() * scale;
|
||||
}
|
||||
|
||||
public void setPercent(double value) {
|
||||
percent.setVal((int)(1000 * value));
|
||||
percent.setVal((int) (1000 * value));
|
||||
}
|
||||
}
|
||||
|
@ -22,7 +22,7 @@ import org.apache.poi.util.Internal;
|
||||
import org.openxmlformats.schemas.drawingml.x2006.main.CTTextBulletSizePoint;
|
||||
|
||||
@Beta
|
||||
public class XDDFBulletSizePoints extends XDDFBulletSize {
|
||||
public class XDDFBulletSizePoints implements XDDFBulletSize {
|
||||
private CTTextBulletSizePoint points;
|
||||
|
||||
public XDDFBulletSizePoints(double value) {
|
||||
@ -40,16 +40,11 @@ public class XDDFBulletSizePoints extends XDDFBulletSize {
|
||||
return points;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Kind getType() {
|
||||
return Kind.POINTS;
|
||||
}
|
||||
|
||||
public double getPoints() {
|
||||
return points.getVal() * 0.01;
|
||||
}
|
||||
|
||||
public void setPoints(double value) {
|
||||
points.setVal((int)(100 * value));
|
||||
points.setVal((int) (100 * value));
|
||||
}
|
||||
}
|
||||
|
@ -20,6 +20,5 @@ package org.apache.poi.xddf.usermodel.text;
|
||||
import org.apache.poi.util.Beta;
|
||||
|
||||
@Beta
|
||||
public abstract class XDDFBulletStyle {
|
||||
|
||||
public interface XDDFBulletStyle {
|
||||
}
|
||||
|
@ -22,12 +22,12 @@ import org.apache.poi.util.Internal;
|
||||
import org.openxmlformats.schemas.drawingml.x2006.main.CTTextAutonumberBullet;
|
||||
|
||||
@Beta
|
||||
public class XDDFBulletStyleAutoNumbered extends XDDFBulletStyle {
|
||||
public class XDDFBulletStyleAutoNumbered implements XDDFBulletStyle {
|
||||
private CTTextAutonumberBullet style;
|
||||
|
||||
@Internal
|
||||
protected XDDFBulletStyleAutoNumbered(CTTextAutonumberBullet style) {
|
||||
this.style =style;
|
||||
this.style = style;
|
||||
}
|
||||
|
||||
@Internal
|
||||
@ -53,7 +53,9 @@ public class XDDFBulletStyleAutoNumbered extends XDDFBulletStyle {
|
||||
|
||||
public void setStartAt(Integer value) {
|
||||
if (value == null) {
|
||||
style.unsetStartAt();
|
||||
if (style.isSetStartAt()) {
|
||||
style.unsetStartAt();
|
||||
}
|
||||
} else {
|
||||
style.setStartAt(value);
|
||||
}
|
||||
|
@ -22,7 +22,7 @@ import org.apache.poi.util.Internal;
|
||||
import org.openxmlformats.schemas.drawingml.x2006.main.CTTextCharBullet;
|
||||
|
||||
@Beta
|
||||
public class XDDFBulletStyleCharacter extends XDDFBulletStyle {
|
||||
public class XDDFBulletStyleCharacter implements XDDFBulletStyle {
|
||||
private CTTextCharBullet style;
|
||||
|
||||
@Internal
|
||||
|
@ -22,7 +22,7 @@ import org.apache.poi.util.Internal;
|
||||
import org.openxmlformats.schemas.drawingml.x2006.main.CTTextNoBullet;
|
||||
|
||||
@Beta
|
||||
public class XDDFBulletStyleNone extends XDDFBulletStyle {
|
||||
public class XDDFBulletStyleNone implements XDDFBulletStyle {
|
||||
private CTTextNoBullet style;
|
||||
|
||||
@Internal
|
||||
|
@ -23,7 +23,7 @@ import org.apache.poi.xddf.usermodel.XDDFPicture;
|
||||
import org.openxmlformats.schemas.drawingml.x2006.main.CTTextBlipBullet;
|
||||
|
||||
@Beta
|
||||
public class XDDFBulletStylePicture extends XDDFBulletStyle {
|
||||
public class XDDFBulletStylePicture implements XDDFBulletStyle {
|
||||
private CTTextBlipBullet style;
|
||||
|
||||
@Internal
|
||||
|
@ -34,22 +34,30 @@ public class XDDFFont {
|
||||
public XDDFFont(FontGroup group, String typeface, Byte charset, Byte pitch, byte[] panose) {
|
||||
this(group, CTTextFont.Factory.newInstance());
|
||||
if (typeface == null) {
|
||||
font.unsetTypeface();
|
||||
if (font.isSetTypeface()) {
|
||||
font.unsetTypeface();
|
||||
}
|
||||
} else {
|
||||
font.setTypeface(typeface);
|
||||
}
|
||||
if (charset == null) {
|
||||
font.unsetCharset();
|
||||
if (font.isSetCharset()) {
|
||||
font.unsetCharset();
|
||||
}
|
||||
} else {
|
||||
font.setCharset(charset);
|
||||
}
|
||||
if (pitch == null) {
|
||||
font.unsetPitchFamily();
|
||||
if (font.isSetPitchFamily()) {
|
||||
font.unsetPitchFamily();
|
||||
}
|
||||
} else {
|
||||
font.setPitchFamily(pitch);
|
||||
}
|
||||
if (panose == null || panose.length == 0) {
|
||||
font.unsetPanose();
|
||||
if (font.isSetPanose()) {
|
||||
font.unsetPanose();
|
||||
}
|
||||
} else {
|
||||
font.setPanose(panose);
|
||||
}
|
||||
|
@ -28,7 +28,7 @@ public class XDDFHyperlink {
|
||||
|
||||
public XDDFHyperlink(String id) {
|
||||
this(CTHyperlink.Factory.newInstance());
|
||||
this.link.setId(id);;
|
||||
this.link.setId(id);
|
||||
}
|
||||
|
||||
public XDDFHyperlink(String id, String action) {
|
||||
@ -72,7 +72,9 @@ public class XDDFHyperlink {
|
||||
|
||||
public void setEndSound(Boolean ends) {
|
||||
if (ends == null) {
|
||||
link.unsetEndSnd();
|
||||
if (link.isSetEndSnd()) {
|
||||
link.unsetEndSnd();
|
||||
}
|
||||
} else {
|
||||
link.setEndSnd(ends);
|
||||
}
|
||||
@ -88,11 +90,14 @@ public class XDDFHyperlink {
|
||||
|
||||
public void setHighlightClick(Boolean highlights) {
|
||||
if (highlights == null) {
|
||||
link.unsetHighlightClick();
|
||||
if (link.isSetHighlightClick()) {
|
||||
link.unsetHighlightClick();
|
||||
}
|
||||
} else {
|
||||
link.setHighlightClick(highlights);
|
||||
}
|
||||
}
|
||||
|
||||
public Boolean getHistory() {
|
||||
if (link.isSetHistory()) {
|
||||
return link.getHistory();
|
||||
@ -103,13 +108,14 @@ public class XDDFHyperlink {
|
||||
|
||||
public void setHistory(Boolean history) {
|
||||
if (history == null) {
|
||||
link.unsetHistory();
|
||||
if (link.isSetHistory()) {
|
||||
link.unsetHistory();
|
||||
}
|
||||
} else {
|
||||
link.setHistory(history);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public String getInvalidURL() {
|
||||
if (link.isSetInvalidUrl()) {
|
||||
return link.getInvalidUrl();
|
||||
@ -120,7 +126,9 @@ public class XDDFHyperlink {
|
||||
|
||||
public void setInvalidURL(String invalid) {
|
||||
if (invalid == null) {
|
||||
link.unsetInvalidUrl();
|
||||
if (link.isSetInvalidUrl()) {
|
||||
link.unsetInvalidUrl();
|
||||
}
|
||||
} else {
|
||||
link.setInvalidUrl(invalid);
|
||||
}
|
||||
@ -136,7 +144,9 @@ public class XDDFHyperlink {
|
||||
|
||||
public void setTargetFrame(String frame) {
|
||||
if (frame == null) {
|
||||
link.unsetTgtFrame();
|
||||
if (link.isSetTgtFrame()) {
|
||||
link.unsetTgtFrame();
|
||||
}
|
||||
} else {
|
||||
link.setTgtFrame(frame);
|
||||
}
|
||||
@ -152,7 +162,9 @@ public class XDDFHyperlink {
|
||||
|
||||
public void setTooltip(String tooltip) {
|
||||
if (tooltip == null) {
|
||||
link.unsetTooltip();
|
||||
if (link.isSetTooltip()) {
|
||||
link.unsetTooltip();
|
||||
}
|
||||
} else {
|
||||
link.setTooltip(tooltip);
|
||||
}
|
||||
@ -168,7 +180,9 @@ public class XDDFHyperlink {
|
||||
|
||||
public void setExtensionList(XDDFExtensionList list) {
|
||||
if (list == null) {
|
||||
link.unsetExtLst();
|
||||
if (link.isSetExtLst()) {
|
||||
link.unsetExtLst();
|
||||
}
|
||||
} else {
|
||||
link.setExtLst(list.getXmlObject());
|
||||
}
|
||||
|
@ -50,7 +50,9 @@ public class XDDFNormalAutoFit implements XDDFAutoFit {
|
||||
|
||||
public void setFontScale(Integer value) {
|
||||
if (value == null) {
|
||||
autofit.unsetFontScale();
|
||||
if (autofit.isSetFontScale()) {
|
||||
autofit.unsetFontScale();
|
||||
}
|
||||
} else {
|
||||
autofit.setFontScale(value);
|
||||
}
|
||||
@ -67,7 +69,9 @@ public class XDDFNormalAutoFit implements XDDFAutoFit {
|
||||
|
||||
public void setLineSpaceReduction(Integer value) {
|
||||
if (value == null) {
|
||||
autofit.unsetLnSpcReduction();
|
||||
if (autofit.isSetLnSpcReduction()) {
|
||||
autofit.unsetLnSpcReduction();
|
||||
}
|
||||
} else {
|
||||
autofit.setLnSpcReduction(value);
|
||||
}
|
||||
|
@ -47,10 +47,18 @@ public class XDDFParagraphBulletProperties {
|
||||
}
|
||||
|
||||
public void setBulletStyle(XDDFBulletStyle style) {
|
||||
props.unsetBuAutoNum();
|
||||
props.unsetBuBlip();
|
||||
props.unsetBuChar();
|
||||
props.unsetBuNone();
|
||||
if (props.isSetBuAutoNum()) {
|
||||
props.unsetBuAutoNum();
|
||||
}
|
||||
if (props.isSetBuBlip()) {
|
||||
props.unsetBuBlip();
|
||||
}
|
||||
if (props.isSetBuChar()) {
|
||||
props.unsetBuChar();
|
||||
}
|
||||
if (props.isSetBuNone()) {
|
||||
props.unsetBuNone();
|
||||
}
|
||||
if (style != null) {
|
||||
if (style instanceof XDDFBulletStyleAutoNumbered) {
|
||||
props.setBuAutoNum(((XDDFBulletStyleAutoNumbered) style).getXmlObject());
|
||||
@ -73,16 +81,22 @@ public class XDDFParagraphBulletProperties {
|
||||
}
|
||||
|
||||
public void setBulletColor(XDDFColor color) {
|
||||
props.unsetBuClrTx();
|
||||
if (props.isSetBuClrTx()) {
|
||||
props.unsetBuClrTx();
|
||||
}
|
||||
if (color == null) {
|
||||
props.unsetBuClr();
|
||||
if (props.isSetBuClr()) {
|
||||
props.unsetBuClr();
|
||||
}
|
||||
} else {
|
||||
props.setBuClr(color.getColorContainer());
|
||||
}
|
||||
}
|
||||
|
||||
public void setBulletColorFollowText() {
|
||||
props.unsetBuClr();
|
||||
if (props.isSetBuClr()) {
|
||||
props.unsetBuClr();
|
||||
}
|
||||
if (props.isSetBuClrTx()) {
|
||||
// nothing to do: already set
|
||||
} else {
|
||||
@ -99,16 +113,22 @@ public class XDDFParagraphBulletProperties {
|
||||
}
|
||||
|
||||
public void setBulletFont(XDDFFont font) {
|
||||
props.unsetBuFontTx();
|
||||
if (props.isSetBuFontTx()) {
|
||||
props.unsetBuFontTx();
|
||||
}
|
||||
if (font == null) {
|
||||
props.unsetBuFont();
|
||||
if (props.isSetBuFont()) {
|
||||
props.unsetBuFont();
|
||||
}
|
||||
} else {
|
||||
props.setBuFont(font.getXmlObject());
|
||||
}
|
||||
}
|
||||
|
||||
public void setBulletFontFollowText() {
|
||||
props.unsetBuFont();
|
||||
if (props.isSetBuFont()) {
|
||||
props.unsetBuFont();
|
||||
}
|
||||
if (props.isSetBuFontTx()) {
|
||||
// nothing to do: already set
|
||||
} else {
|
||||
@ -129,9 +149,15 @@ public class XDDFParagraphBulletProperties {
|
||||
}
|
||||
|
||||
public void setBulletSize(XDDFBulletSize size) {
|
||||
props.unsetBuSzPct();
|
||||
props.unsetBuSzPts();
|
||||
props.unsetBuSzTx();
|
||||
if (props.isSetBuSzPct()) {
|
||||
props.unsetBuSzPct();
|
||||
}
|
||||
if (props.isSetBuSzPts()) {
|
||||
props.unsetBuSzPts();
|
||||
}
|
||||
if (props.isSetBuSzTx()) {
|
||||
props.unsetBuSzTx();
|
||||
}
|
||||
if (size != null) {
|
||||
if (size instanceof XDDFBulletSizeFollowText) {
|
||||
props.setBuSzTx(((XDDFBulletSizeFollowText) size).getXmlObject());
|
||||
@ -144,16 +170,38 @@ public class XDDFParagraphBulletProperties {
|
||||
}
|
||||
|
||||
public void clearAll() {
|
||||
props.unsetBuAutoNum();
|
||||
props.unsetBuBlip();
|
||||
props.unsetBuChar();
|
||||
props.unsetBuNone();
|
||||
props.unsetBuClr();
|
||||
props.unsetBuClrTx();
|
||||
props.unsetBuFont();
|
||||
props.unsetBuFontTx();
|
||||
props.unsetBuSzPct();
|
||||
props.unsetBuSzPts();
|
||||
props.unsetBuSzTx();
|
||||
if (props.isSetBuAutoNum()) {
|
||||
props.unsetBuAutoNum();
|
||||
}
|
||||
if (props.isSetBuBlip()) {
|
||||
props.unsetBuBlip();
|
||||
}
|
||||
if (props.isSetBuChar()) {
|
||||
props.unsetBuChar();
|
||||
}
|
||||
if (props.isSetBuNone()) {
|
||||
props.unsetBuNone();
|
||||
}
|
||||
if (props.isSetBuClr()) {
|
||||
props.unsetBuClr();
|
||||
}
|
||||
if (props.isSetBuClrTx()) {
|
||||
props.unsetBuClrTx();
|
||||
}
|
||||
if (props.isSetBuFont()) {
|
||||
props.unsetBuFont();
|
||||
}
|
||||
if (props.isSetBuFontTx()) {
|
||||
props.unsetBuFontTx();
|
||||
}
|
||||
if (props.isSetBuSzPct()) {
|
||||
props.unsetBuSzPct();
|
||||
}
|
||||
if (props.isSetBuSzPts()) {
|
||||
props.unsetBuSzPts();
|
||||
}
|
||||
if (props.isSetBuSzTx()) {
|
||||
props.unsetBuSzTx();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -57,7 +57,9 @@ public class XDDFParagraphProperties {
|
||||
|
||||
public void setLevel(Integer level) {
|
||||
if (level == null) {
|
||||
props.unsetLvl();
|
||||
if (props.isSetLvl()) {
|
||||
props.unsetLvl();
|
||||
}
|
||||
} else if (level < 1 || 9 < level) {
|
||||
throw new IllegalArgumentException("Minimum inclusive: 1. Maximum inclusive: 9.");
|
||||
} else {
|
||||
@ -75,7 +77,9 @@ public class XDDFParagraphProperties {
|
||||
|
||||
public void setDefaultRunProperties(XDDFRunProperties properties) {
|
||||
if (properties == null) {
|
||||
props.unsetDefRPr();
|
||||
if (props.isSetDefRPr()) {
|
||||
props.unsetDefRPr();
|
||||
}
|
||||
} else {
|
||||
props.setDefRPr(properties.getXmlObject());
|
||||
}
|
||||
@ -83,7 +87,9 @@ public class XDDFParagraphProperties {
|
||||
|
||||
public void setEastAsianLineBreak(Boolean value) {
|
||||
if (value == null) {
|
||||
props.unsetEaLnBrk();
|
||||
if (props.isSetEaLnBrk()) {
|
||||
props.unsetEaLnBrk();
|
||||
}
|
||||
} else {
|
||||
props.setEaLnBrk(value);
|
||||
}
|
||||
@ -91,7 +97,9 @@ public class XDDFParagraphProperties {
|
||||
|
||||
public void setLatinLineBreak(Boolean value) {
|
||||
if (value == null) {
|
||||
props.unsetLatinLnBrk();
|
||||
if (props.isSetLatinLnBrk()) {
|
||||
props.unsetLatinLnBrk();
|
||||
}
|
||||
} else {
|
||||
props.setLatinLnBrk(value);
|
||||
}
|
||||
@ -99,7 +107,9 @@ public class XDDFParagraphProperties {
|
||||
|
||||
public void setHangingPunctuation(Boolean value) {
|
||||
if (value == null) {
|
||||
props.unsetHangingPunct();
|
||||
if (props.isSetHangingPunct()) {
|
||||
props.unsetHangingPunct();
|
||||
}
|
||||
} else {
|
||||
props.setHangingPunct(value);
|
||||
}
|
||||
@ -107,7 +117,9 @@ public class XDDFParagraphProperties {
|
||||
|
||||
public void setRightToLeft(Boolean value) {
|
||||
if (value == null) {
|
||||
props.unsetRtl();
|
||||
if (props.isSetRtl()) {
|
||||
props.unsetRtl();
|
||||
}
|
||||
} else {
|
||||
props.setRtl(value);
|
||||
}
|
||||
@ -115,7 +127,9 @@ public class XDDFParagraphProperties {
|
||||
|
||||
public void setFontAlignment(FontAlignment align) {
|
||||
if (align == null) {
|
||||
props.unsetFontAlgn();
|
||||
if (props.isSetFontAlgn()) {
|
||||
props.unsetFontAlgn();
|
||||
}
|
||||
} else {
|
||||
props.setFontAlgn(align.underlying);
|
||||
}
|
||||
@ -123,7 +137,9 @@ public class XDDFParagraphProperties {
|
||||
|
||||
public void setTextAlignment(TextAlignment align) {
|
||||
if (align == null) {
|
||||
props.unsetAlgn();
|
||||
if (props.isSetAlgn()) {
|
||||
props.unsetAlgn();
|
||||
}
|
||||
} else {
|
||||
props.setAlgn(align.underlying);
|
||||
}
|
||||
@ -131,7 +147,9 @@ public class XDDFParagraphProperties {
|
||||
|
||||
public void setDefaultTabSize(Double points) {
|
||||
if (points == null) {
|
||||
props.unsetDefTabSz();
|
||||
if (props.isSetDefTabSz()) {
|
||||
props.unsetDefTabSz();
|
||||
}
|
||||
} else {
|
||||
props.setDefTabSz(Units.toEMU(points));
|
||||
}
|
||||
@ -139,7 +157,9 @@ public class XDDFParagraphProperties {
|
||||
|
||||
public void setIndentation(Double points) {
|
||||
if (points == null) {
|
||||
props.unsetIndent();
|
||||
if (props.isSetIndent()) {
|
||||
props.unsetIndent();
|
||||
}
|
||||
} else if (points < -4032 || 4032 < points) {
|
||||
throw new IllegalArgumentException("Minimum inclusive = -4032. Maximum inclusive = 4032.");
|
||||
} else {
|
||||
@ -149,7 +169,9 @@ public class XDDFParagraphProperties {
|
||||
|
||||
public void setMarginLeft(Double points) {
|
||||
if (points == null) {
|
||||
props.unsetMarL();
|
||||
if (props.isSetMarL()) {
|
||||
props.unsetMarL();
|
||||
}
|
||||
} else if (points < 0 || 4032 < points) {
|
||||
throw new IllegalArgumentException("Minimum inclusive = 0. Maximum inclusive = 4032.");
|
||||
} else {
|
||||
@ -159,7 +181,9 @@ public class XDDFParagraphProperties {
|
||||
|
||||
public void setMarginRight(Double points) {
|
||||
if (points == null) {
|
||||
props.unsetMarR();
|
||||
if (props.isSetMarR()) {
|
||||
props.unsetMarR();
|
||||
}
|
||||
} else if (points < 0 || 4032 < points) {
|
||||
throw new IllegalArgumentException("Minimum inclusive = 0. Maximum inclusive = 4032.");
|
||||
} else {
|
||||
@ -169,7 +193,9 @@ public class XDDFParagraphProperties {
|
||||
|
||||
public void setLineSpacing(XDDFSpacing spacing) {
|
||||
if (spacing == null) {
|
||||
props.unsetLnSpc();
|
||||
if (props.isSetLnSpc()) {
|
||||
props.unsetLnSpc();
|
||||
}
|
||||
} else {
|
||||
props.setLnSpc(spacing.getXmlObject());
|
||||
}
|
||||
@ -177,7 +203,9 @@ public class XDDFParagraphProperties {
|
||||
|
||||
public void setSpaceAfter(XDDFSpacing spacing) {
|
||||
if (spacing == null) {
|
||||
props.unsetSpcAft();
|
||||
if (props.isSetSpcAft()) {
|
||||
props.unsetSpcAft();
|
||||
}
|
||||
} else {
|
||||
props.setSpcAft(spacing.getXmlObject());
|
||||
}
|
||||
@ -185,7 +213,9 @@ public class XDDFParagraphProperties {
|
||||
|
||||
public void setSpaceBefore(XDDFSpacing spacing) {
|
||||
if (spacing == null) {
|
||||
props.unsetSpcBef();
|
||||
if (props.isSetSpcBef()) {
|
||||
props.unsetSpcBef();
|
||||
}
|
||||
} else {
|
||||
props.setSpcBef(spacing.getXmlObject());
|
||||
}
|
||||
@ -250,7 +280,9 @@ public class XDDFParagraphProperties {
|
||||
|
||||
public void setExtensionList(XDDFExtensionList list) {
|
||||
if (list == null) {
|
||||
props.unsetExtLst();
|
||||
if (props.isSetExtLst()) {
|
||||
props.unsetExtLst();
|
||||
}
|
||||
} else {
|
||||
props.setExtLst(list.getXmlObject());
|
||||
}
|
||||
|
@ -56,7 +56,9 @@ public class XDDFRunProperties {
|
||||
|
||||
public void setBaseline(Integer value) {
|
||||
if (value == null) {
|
||||
props.unsetBaseline();
|
||||
if (props.isSetBaseline()) {
|
||||
props.unsetBaseline();
|
||||
}
|
||||
} else {
|
||||
props.setBaseline(value);
|
||||
}
|
||||
@ -64,7 +66,9 @@ public class XDDFRunProperties {
|
||||
|
||||
public void setDirty(Boolean dirty) {
|
||||
if (dirty == null) {
|
||||
props.unsetDirty();
|
||||
if (props.isSetDirty()) {
|
||||
props.unsetDirty();
|
||||
}
|
||||
} else {
|
||||
props.setDirty(dirty);
|
||||
}
|
||||
@ -72,7 +76,9 @@ public class XDDFRunProperties {
|
||||
|
||||
public void setSpellError(Boolean error) {
|
||||
if (error == null) {
|
||||
props.unsetErr();
|
||||
if (props.isSetErr()) {
|
||||
props.unsetErr();
|
||||
}
|
||||
} else {
|
||||
props.setErr(error);
|
||||
}
|
||||
@ -80,7 +86,9 @@ public class XDDFRunProperties {
|
||||
|
||||
public void setNoProof(Boolean noproof) {
|
||||
if (noproof == null) {
|
||||
props.unsetNoProof();
|
||||
if (props.isSetNoProof()) {
|
||||
props.unsetNoProof();
|
||||
}
|
||||
} else {
|
||||
props.setNoProof(noproof);
|
||||
}
|
||||
@ -88,7 +96,9 @@ public class XDDFRunProperties {
|
||||
|
||||
public void setNormalizeHeights(Boolean normalize) {
|
||||
if (normalize == null) {
|
||||
props.unsetNormalizeH();
|
||||
if (props.isSetNormalizeH()) {
|
||||
props.unsetNormalizeH();
|
||||
}
|
||||
} else {
|
||||
props.setNormalizeH(normalize);
|
||||
}
|
||||
@ -96,7 +106,9 @@ public class XDDFRunProperties {
|
||||
|
||||
public void setKumimoji(Boolean kumimoji) {
|
||||
if (kumimoji == null) {
|
||||
props.unsetKumimoji();
|
||||
if (props.isSetKumimoji()) {
|
||||
props.unsetKumimoji();
|
||||
}
|
||||
} else {
|
||||
props.setKumimoji(kumimoji);
|
||||
}
|
||||
@ -104,7 +116,9 @@ public class XDDFRunProperties {
|
||||
|
||||
public void setBold(Boolean bold) {
|
||||
if (bold == null) {
|
||||
props.unsetB();
|
||||
if (props.isSetB()) {
|
||||
props.unsetB();
|
||||
}
|
||||
} else {
|
||||
props.setB(bold);
|
||||
}
|
||||
@ -112,7 +126,9 @@ public class XDDFRunProperties {
|
||||
|
||||
public void setItalic(Boolean italic) {
|
||||
if (italic == null) {
|
||||
props.unsetI();
|
||||
if (props.isSetI()) {
|
||||
props.unsetI();
|
||||
}
|
||||
} else {
|
||||
props.setI(italic);
|
||||
}
|
||||
@ -120,21 +136,35 @@ public class XDDFRunProperties {
|
||||
|
||||
public void setFontSize(Double size) {
|
||||
if (size == null) {
|
||||
props.unsetSz();
|
||||
if (props.isSetSz()) {
|
||||
props.unsetSz();
|
||||
}
|
||||
} else if (size < 1 || 400 < size) {
|
||||
throw new IllegalArgumentException("Minimum inclusive = 1. Maximum inclusive = 400.");
|
||||
} else {
|
||||
props.setSz((int)(100 * size));
|
||||
props.setSz((int) (100 * size));
|
||||
}
|
||||
}
|
||||
|
||||
public void setFillProperties(XDDFFillProperties properties) {
|
||||
props.unsetBlipFill();
|
||||
props.unsetGradFill();
|
||||
props.unsetGrpFill();
|
||||
props.unsetNoFill();
|
||||
props.unsetPattFill();
|
||||
props.unsetSolidFill();
|
||||
if (props.isSetBlipFill()) {
|
||||
props.unsetBlipFill();
|
||||
}
|
||||
if (props.isSetGradFill()) {
|
||||
props.unsetGradFill();
|
||||
}
|
||||
if (props.isSetGrpFill()) {
|
||||
props.unsetGrpFill();
|
||||
}
|
||||
if (props.isSetNoFill()) {
|
||||
props.unsetNoFill();
|
||||
}
|
||||
if (props.isSetPattFill()) {
|
||||
props.unsetPattFill();
|
||||
}
|
||||
if (props.isSetSolidFill()) {
|
||||
props.unsetSolidFill();
|
||||
}
|
||||
if (properties == null) {
|
||||
return;
|
||||
}
|
||||
@ -155,49 +185,61 @@ public class XDDFRunProperties {
|
||||
|
||||
public void setCharacterKerning(Double kerning) {
|
||||
if (kerning == null) {
|
||||
props.unsetKern();
|
||||
if (props.isSetKern()) {
|
||||
props.unsetKern();
|
||||
}
|
||||
} else if (kerning < 0 || 4000 < kerning) {
|
||||
throw new IllegalArgumentException("Minimum inclusive = 0. Maximum inclusive = 4000.");
|
||||
} else {
|
||||
props.setKern((int)(100*kerning));
|
||||
props.setKern((int) (100 * kerning));
|
||||
}
|
||||
}
|
||||
|
||||
public void setCharacterSpacing(Double spacing) {
|
||||
if (spacing == null) {
|
||||
props.unsetSpc();
|
||||
if (props.isSetSpc()) {
|
||||
props.unsetSpc();
|
||||
}
|
||||
} else if (spacing < -4000 || 4000 < spacing) {
|
||||
throw new IllegalArgumentException("Minimum inclusive = -4000. Maximum inclusive = 4000.");
|
||||
} else {
|
||||
props.setSpc((int)(100*spacing));
|
||||
props.setSpc((int) (100 * spacing));
|
||||
}
|
||||
}
|
||||
|
||||
public void setFonts(XDDFFont[] fonts) {
|
||||
for (XDDFFont font: fonts) {
|
||||
for (XDDFFont font : fonts) {
|
||||
CTTextFont xml = font.getXmlObject();
|
||||
switch (font.getGroup()) {
|
||||
case COMPLEX_SCRIPT:
|
||||
if (xml == null) {
|
||||
props.unsetCs();
|
||||
if (props.isSetCs()) {
|
||||
props.unsetCs();
|
||||
}
|
||||
} else {
|
||||
props.setCs(xml);
|
||||
}
|
||||
case EAST_ASIAN:
|
||||
if (xml == null) {
|
||||
props.unsetEa();
|
||||
if (props.isSetEa()) {
|
||||
props.unsetEa();
|
||||
}
|
||||
} else {
|
||||
props.setEa(xml);
|
||||
}
|
||||
case LATIN:
|
||||
if (xml == null) {
|
||||
props.unsetLatin();
|
||||
if (props.isSetLatin()) {
|
||||
props.unsetLatin();
|
||||
}
|
||||
} else {
|
||||
props.setLatin(xml);
|
||||
}
|
||||
case SYMBOL:
|
||||
if (xml == null) {
|
||||
props.unsetSym();
|
||||
if (props.isSetSym()) {
|
||||
props.unsetSym();
|
||||
}
|
||||
} else {
|
||||
props.setSym(xml);
|
||||
}
|
||||
@ -207,7 +249,9 @@ public class XDDFRunProperties {
|
||||
|
||||
public void setUnderline(UnderlineType underline) {
|
||||
if (underline == null) {
|
||||
props.unsetU();
|
||||
if (props.isSetU()) {
|
||||
props.unsetU();
|
||||
}
|
||||
} else {
|
||||
props.setU(underline.underlying);
|
||||
}
|
||||
@ -215,7 +259,9 @@ public class XDDFRunProperties {
|
||||
|
||||
public void setStrikeThrough(StrikeType strike) {
|
||||
if (strike == null) {
|
||||
props.unsetStrike();
|
||||
if (props.isSetStrike()) {
|
||||
props.unsetStrike();
|
||||
}
|
||||
} else {
|
||||
props.setStrike(strike.underlying);
|
||||
}
|
||||
@ -223,7 +269,9 @@ public class XDDFRunProperties {
|
||||
|
||||
public void setCapitals(CapsType caps) {
|
||||
if (caps == null) {
|
||||
props.unsetCap();
|
||||
if (props.isSetCap()) {
|
||||
props.unsetCap();
|
||||
}
|
||||
} else {
|
||||
props.setCap(caps.underlying);
|
||||
}
|
||||
@ -231,7 +279,9 @@ public class XDDFRunProperties {
|
||||
|
||||
public void setHyperlink(XDDFHyperlink link) {
|
||||
if (link == null) {
|
||||
props.unsetHlinkClick();
|
||||
if (props.isSetHlinkClick()) {
|
||||
props.unsetHlinkClick();
|
||||
}
|
||||
} else {
|
||||
props.setHlinkClick(link.getXmlObject());
|
||||
}
|
||||
@ -239,7 +289,9 @@ public class XDDFRunProperties {
|
||||
|
||||
public void setMouseOver(XDDFHyperlink link) {
|
||||
if (link == null) {
|
||||
props.unsetHlinkMouseOver();
|
||||
if (props.isSetHlinkMouseOver()) {
|
||||
props.unsetHlinkMouseOver();
|
||||
}
|
||||
} else {
|
||||
props.setHlinkMouseOver(link.getXmlObject());
|
||||
}
|
||||
@ -247,7 +299,9 @@ public class XDDFRunProperties {
|
||||
|
||||
public void setLanguage(Locale lang) {
|
||||
if (lang == null) {
|
||||
props.unsetLang();
|
||||
if (props.isSetLang()) {
|
||||
props.unsetLang();
|
||||
}
|
||||
} else {
|
||||
props.setLang(lang.toLanguageTag());
|
||||
}
|
||||
@ -255,7 +309,9 @@ public class XDDFRunProperties {
|
||||
|
||||
public void setAlternativeLanguage(Locale lang) {
|
||||
if (lang == null) {
|
||||
props.unsetAltLang();
|
||||
if (props.isSetAltLang()) {
|
||||
props.unsetAltLang();
|
||||
}
|
||||
} else {
|
||||
props.setAltLang(lang.toLanguageTag());
|
||||
}
|
||||
@ -263,7 +319,9 @@ public class XDDFRunProperties {
|
||||
|
||||
public void setHighlight(XDDFColor color) {
|
||||
if (color == null) {
|
||||
props.unsetHighlight();
|
||||
if (props.isSetHighlight()) {
|
||||
props.unsetHighlight();
|
||||
}
|
||||
} else {
|
||||
props.setHighlight(color.getColorContainer());
|
||||
}
|
||||
@ -271,7 +329,9 @@ public class XDDFRunProperties {
|
||||
|
||||
public void setLineProperties(XDDFLineProperties properties) {
|
||||
if (properties == null) {
|
||||
props.unsetLn();
|
||||
if (props.isSetLn()) {
|
||||
props.unsetLn();
|
||||
}
|
||||
} else {
|
||||
props.setLn(properties.getXmlObject());
|
||||
}
|
||||
@ -279,7 +339,9 @@ public class XDDFRunProperties {
|
||||
|
||||
public void setBookmark(String bookmark) {
|
||||
if (bookmark == null) {
|
||||
props.unsetBmk();
|
||||
if (props.isSetBmk()) {
|
||||
props.unsetBmk();
|
||||
}
|
||||
} else {
|
||||
props.setBmk(bookmark);
|
||||
}
|
||||
@ -295,7 +357,9 @@ public class XDDFRunProperties {
|
||||
|
||||
public void setExtensionList(XDDFExtensionList list) {
|
||||
if (list == null) {
|
||||
props.unsetExtLst();
|
||||
if (props.isSetExtLst()) {
|
||||
props.unsetExtLst();
|
||||
}
|
||||
} else {
|
||||
props.setExtLst(list.getXmlObject());
|
||||
}
|
||||
@ -311,7 +375,9 @@ public class XDDFRunProperties {
|
||||
|
||||
public void setEffectContainer(XDDFEffectContainer container) {
|
||||
if (container == null) {
|
||||
props.unsetEffectDag();
|
||||
if (props.isSetEffectDag()) {
|
||||
props.unsetEffectDag();
|
||||
}
|
||||
} else {
|
||||
props.setEffectDag(container.getXmlObject());
|
||||
}
|
||||
@ -327,7 +393,9 @@ public class XDDFRunProperties {
|
||||
|
||||
public void setEffectList(XDDFEffectList list) {
|
||||
if (list == null) {
|
||||
props.unsetEffectLst();
|
||||
if (props.isSetEffectLst()) {
|
||||
props.unsetEffectLst();
|
||||
}
|
||||
} else {
|
||||
props.setEffectLst(list.getXmlObject());
|
||||
}
|
||||
|
@ -29,7 +29,9 @@ public class XDDFSpacingPercent extends XDDFSpacing {
|
||||
|
||||
public XDDFSpacingPercent(double value) {
|
||||
this(CTTextSpacing.Factory.newInstance(), CTTextSpacingPercent.Factory.newInstance(), null);
|
||||
spacing.unsetSpcPts();
|
||||
if (spacing.isSetSpcPts()) {
|
||||
spacing.unsetSpcPts();
|
||||
}
|
||||
spacing.setSpcPct(percent);
|
||||
setPercent(value);
|
||||
}
|
||||
|
@ -28,7 +28,9 @@ public class XDDFSpacingPoints extends XDDFSpacing {
|
||||
|
||||
public XDDFSpacingPoints(double value) {
|
||||
this(CTTextSpacing.Factory.newInstance(), CTTextSpacingPoint.Factory.newInstance());
|
||||
spacing.unsetSpcPct();
|
||||
if (spacing.isSetSpcPct()) {
|
||||
spacing.unsetSpcPct();
|
||||
}
|
||||
spacing.setSpcPts(points);
|
||||
setPoints(value);
|
||||
}
|
||||
|
@ -46,7 +46,9 @@ public class XDDFTabStop {
|
||||
|
||||
public void setAlignment(TabAlignment align) {
|
||||
if (align == null) {
|
||||
stop.unsetAlgn();
|
||||
if (stop.isSetAlgn()) {
|
||||
stop.unsetAlgn();
|
||||
}
|
||||
} else {
|
||||
stop.setAlgn(align.underlying);
|
||||
}
|
||||
@ -62,7 +64,9 @@ public class XDDFTabStop {
|
||||
|
||||
public void setPosition(Double position) {
|
||||
if (position == null) {
|
||||
stop.unsetPos();
|
||||
if (stop.isSetPos()) {
|
||||
stop.unsetPos();
|
||||
}
|
||||
} else {
|
||||
stop.setPos(Units.toEMU(position));
|
||||
}
|
||||
|
@ -19,6 +19,7 @@ package org.apache.poi.xddf.usermodel.text;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.Locale;
|
||||
import java.util.Optional;
|
||||
import java.util.function.Function;
|
||||
import java.util.stream.Collectors;
|
||||
@ -37,7 +38,7 @@ public class XDDFTextBody {
|
||||
|
||||
public XDDFTextBody(TextContainer parent) {
|
||||
this(parent, CTTextBody.Factory.newInstance());
|
||||
this._body.addNewBodyPr();
|
||||
initialize();
|
||||
}
|
||||
|
||||
@Internal
|
||||
@ -55,6 +56,20 @@ public class XDDFTextBody {
|
||||
return _parent;
|
||||
}
|
||||
|
||||
public XDDFTextParagraph initialize() {
|
||||
_body.addNewLstStyle();
|
||||
_body.addNewBodyPr();
|
||||
XDDFBodyProperties bp = getBodyProperties();
|
||||
bp.setAnchoring(AnchorType.TOP);
|
||||
bp.setRightToLeft(false);
|
||||
XDDFTextParagraph p = addNewParagraph();
|
||||
p.setTextAlignment(TextAlignment.LEFT);
|
||||
XDDFRunProperties end = p.addAfterLastRunProperties();
|
||||
end.setLanguage(Locale.US);
|
||||
end.setFontSize(11.0);
|
||||
return p;
|
||||
}
|
||||
|
||||
public XDDFTextParagraph addNewParagraph() {
|
||||
return new XDDFTextParagraph(_body.addNewP(), this);
|
||||
}
|
||||
@ -72,11 +87,8 @@ public class XDDFTextBody {
|
||||
}
|
||||
|
||||
public List<XDDFTextParagraph> getParagraphs() {
|
||||
return Collections.unmodifiableList(_body
|
||||
.getPList()
|
||||
.stream()
|
||||
.map(ds -> new XDDFTextParagraph(ds, this))
|
||||
.collect(Collectors.toList()));
|
||||
return Collections.unmodifiableList(
|
||||
_body.getPList().stream().map(ds -> new XDDFTextParagraph(ds, this)).collect(Collectors.toList()));
|
||||
}
|
||||
|
||||
public XDDFBodyProperties getBodyProperties() {
|
||||
@ -102,7 +114,10 @@ public class XDDFTextBody {
|
||||
public void setDefaultProperties(XDDFParagraphProperties properties) {
|
||||
if (properties == null) {
|
||||
if (_body.isSetLstStyle()) {
|
||||
_body.getLstStyle().unsetDefPPr();
|
||||
CTTextListStyle style = _body.getLstStyle();
|
||||
if (style.isSetDefPPr()) {
|
||||
style.unsetDefPPr();
|
||||
}
|
||||
}
|
||||
} else {
|
||||
CTTextListStyle style = _body.isSetLstStyle() ? _body.getLstStyle() : _body.addNewLstStyle();
|
||||
@ -121,7 +136,10 @@ public class XDDFTextBody {
|
||||
public void setLevel1Properties(XDDFParagraphProperties properties) {
|
||||
if (properties == null) {
|
||||
if (_body.isSetLstStyle()) {
|
||||
_body.getLstStyle().unsetLvl1PPr();
|
||||
CTTextListStyle style = _body.getLstStyle();
|
||||
if (style.isSetLvl1PPr()) {
|
||||
style.unsetLvl1PPr();
|
||||
}
|
||||
}
|
||||
} else {
|
||||
CTTextListStyle style = _body.isSetLstStyle() ? _body.getLstStyle() : _body.addNewLstStyle();
|
||||
@ -140,7 +158,10 @@ public class XDDFTextBody {
|
||||
public void setLevel2Properties(XDDFParagraphProperties properties) {
|
||||
if (properties == null) {
|
||||
if (_body.isSetLstStyle()) {
|
||||
_body.getLstStyle().unsetLvl2PPr();
|
||||
CTTextListStyle style = _body.getLstStyle();
|
||||
if (style.isSetLvl2PPr()) {
|
||||
style.unsetLvl2PPr();
|
||||
}
|
||||
}
|
||||
} else {
|
||||
CTTextListStyle style = _body.isSetLstStyle() ? _body.getLstStyle() : _body.addNewLstStyle();
|
||||
@ -159,7 +180,10 @@ public class XDDFTextBody {
|
||||
public void setLevel3Properties(XDDFParagraphProperties properties) {
|
||||
if (properties == null) {
|
||||
if (_body.isSetLstStyle()) {
|
||||
_body.getLstStyle().unsetLvl3PPr();
|
||||
CTTextListStyle style = _body.getLstStyle();
|
||||
if (style.isSetLvl3PPr()) {
|
||||
style.unsetLvl3PPr();
|
||||
}
|
||||
}
|
||||
} else {
|
||||
CTTextListStyle style = _body.isSetLstStyle() ? _body.getLstStyle() : _body.addNewLstStyle();
|
||||
@ -178,7 +202,10 @@ public class XDDFTextBody {
|
||||
public void setLevel4Properties(XDDFParagraphProperties properties) {
|
||||
if (properties == null) {
|
||||
if (_body.isSetLstStyle()) {
|
||||
_body.getLstStyle().unsetLvl4PPr();
|
||||
CTTextListStyle style = _body.getLstStyle();
|
||||
if (style.isSetLvl4PPr()) {
|
||||
style.unsetLvl4PPr();
|
||||
}
|
||||
}
|
||||
} else {
|
||||
CTTextListStyle style = _body.isSetLstStyle() ? _body.getLstStyle() : _body.addNewLstStyle();
|
||||
@ -197,7 +224,10 @@ public class XDDFTextBody {
|
||||
public void setLevel5Properties(XDDFParagraphProperties properties) {
|
||||
if (properties == null) {
|
||||
if (_body.isSetLstStyle()) {
|
||||
_body.getLstStyle().unsetLvl5PPr();
|
||||
CTTextListStyle style = _body.getLstStyle();
|
||||
if (style.isSetLvl5PPr()) {
|
||||
style.unsetLvl5PPr();
|
||||
}
|
||||
}
|
||||
} else {
|
||||
CTTextListStyle style = _body.isSetLstStyle() ? _body.getLstStyle() : _body.addNewLstStyle();
|
||||
@ -216,7 +246,10 @@ public class XDDFTextBody {
|
||||
public void setLevel6Properties(XDDFParagraphProperties properties) {
|
||||
if (properties == null) {
|
||||
if (_body.isSetLstStyle()) {
|
||||
_body.getLstStyle().unsetLvl6PPr();
|
||||
CTTextListStyle style = _body.getLstStyle();
|
||||
if (style.isSetLvl6PPr()) {
|
||||
style.unsetLvl6PPr();
|
||||
}
|
||||
}
|
||||
} else {
|
||||
CTTextListStyle style = _body.isSetLstStyle() ? _body.getLstStyle() : _body.addNewLstStyle();
|
||||
@ -235,7 +268,10 @@ public class XDDFTextBody {
|
||||
public void setLevel7Properties(XDDFParagraphProperties properties) {
|
||||
if (properties == null) {
|
||||
if (_body.isSetLstStyle()) {
|
||||
_body.getLstStyle().unsetLvl7PPr();
|
||||
CTTextListStyle style = _body.getLstStyle();
|
||||
if (style.isSetLvl7PPr()) {
|
||||
style.unsetLvl7PPr();
|
||||
}
|
||||
}
|
||||
} else {
|
||||
CTTextListStyle style = _body.isSetLstStyle() ? _body.getLstStyle() : _body.addNewLstStyle();
|
||||
@ -254,7 +290,10 @@ public class XDDFTextBody {
|
||||
public void setLevel8Properties(XDDFParagraphProperties properties) {
|
||||
if (properties == null) {
|
||||
if (_body.isSetLstStyle()) {
|
||||
_body.getLstStyle().unsetLvl8PPr();
|
||||
CTTextListStyle style = _body.getLstStyle();
|
||||
if (style.isSetLvl8PPr()) {
|
||||
style.unsetLvl8PPr();
|
||||
}
|
||||
}
|
||||
} else {
|
||||
CTTextListStyle style = _body.isSetLstStyle() ? _body.getLstStyle() : _body.addNewLstStyle();
|
||||
@ -273,7 +312,10 @@ public class XDDFTextBody {
|
||||
public void setLevel9Properties(XDDFParagraphProperties properties) {
|
||||
if (properties == null) {
|
||||
if (_body.isSetLstStyle()) {
|
||||
_body.getLstStyle().unsetLvl9PPr();
|
||||
CTTextListStyle style = _body.getLstStyle();
|
||||
if (style.isSetLvl9PPr()) {
|
||||
style.unsetLvl9PPr();
|
||||
}
|
||||
}
|
||||
} else {
|
||||
CTTextListStyle style = _body.isSetLstStyle() ? _body.getLstStyle() : _body.addNewLstStyle();
|
||||
@ -292,8 +334,10 @@ public class XDDFTextBody {
|
||||
} else {
|
||||
return findDefinedParagraphProperty(isSet, getter, level - 1);
|
||||
}
|
||||
} else {
|
||||
} else if (_parent != null) {
|
||||
return _parent.findDefinedParagraphProperty(isSet, getter);
|
||||
} else {
|
||||
return Optional.empty();
|
||||
}
|
||||
}
|
||||
|
||||
@ -308,59 +352,71 @@ public class XDDFTextBody {
|
||||
} else {
|
||||
return findDefinedRunProperty(isSet, getter, level - 1);
|
||||
}
|
||||
} else {
|
||||
} else if (_parent != null) {
|
||||
return _parent.findDefinedRunProperty(isSet, getter);
|
||||
} else {
|
||||
return Optional.empty();
|
||||
}
|
||||
}
|
||||
|
||||
private CTTextParagraphProperties retrieveProperties(CTTextListStyle list, int level) {
|
||||
switch(level) {
|
||||
case 1: if (list.isSetLvl1PPr()) {
|
||||
return list.getLvl1PPr();
|
||||
} else {
|
||||
switch (level) {
|
||||
case 1:
|
||||
if (list.isSetLvl1PPr()) {
|
||||
return list.getLvl1PPr();
|
||||
} else {
|
||||
return null;
|
||||
}
|
||||
case 2:
|
||||
if (list.isSetLvl2PPr()) {
|
||||
return list.getLvl2PPr();
|
||||
} else {
|
||||
return null;
|
||||
}
|
||||
case 3:
|
||||
if (list.isSetLvl3PPr()) {
|
||||
return list.getLvl3PPr();
|
||||
} else {
|
||||
return null;
|
||||
}
|
||||
case 4:
|
||||
if (list.isSetLvl4PPr()) {
|
||||
return list.getLvl4PPr();
|
||||
} else {
|
||||
return null;
|
||||
}
|
||||
case 5:
|
||||
if (list.isSetLvl5PPr()) {
|
||||
return list.getLvl5PPr();
|
||||
} else {
|
||||
return null;
|
||||
}
|
||||
case 6:
|
||||
if (list.isSetLvl6PPr()) {
|
||||
return list.getLvl6PPr();
|
||||
} else {
|
||||
return null;
|
||||
}
|
||||
case 7:
|
||||
if (list.isSetLvl7PPr()) {
|
||||
return list.getLvl7PPr();
|
||||
} else {
|
||||
return null;
|
||||
}
|
||||
case 8:
|
||||
if (list.isSetLvl8PPr()) {
|
||||
return list.getLvl8PPr();
|
||||
} else {
|
||||
return null;
|
||||
}
|
||||
case 9:
|
||||
if (list.isSetLvl9PPr()) {
|
||||
return list.getLvl9PPr();
|
||||
} else {
|
||||
return null;
|
||||
}
|
||||
default:
|
||||
return null;
|
||||
}
|
||||
case 2: if (list.isSetLvl2PPr()) {
|
||||
return list.getLvl2PPr();
|
||||
} else {
|
||||
return null;
|
||||
}
|
||||
case 3: if (list.isSetLvl3PPr()) {
|
||||
return list.getLvl3PPr();
|
||||
} else {
|
||||
return null;
|
||||
}
|
||||
case 4: if (list.isSetLvl4PPr()) {
|
||||
return list.getLvl4PPr();
|
||||
} else {
|
||||
return null;
|
||||
}
|
||||
case 5: if (list.isSetLvl5PPr()) {
|
||||
return list.getLvl5PPr();
|
||||
} else {
|
||||
return null;
|
||||
}
|
||||
case 6: if (list.isSetLvl6PPr()) {
|
||||
return list.getLvl6PPr();
|
||||
} else {
|
||||
return null;
|
||||
}
|
||||
case 7: if (list.isSetLvl7PPr()) {
|
||||
return list.getLvl7PPr();
|
||||
} else {
|
||||
return null;
|
||||
}
|
||||
case 8: if (list.isSetLvl8PPr()) {
|
||||
return list.getLvl8PPr();
|
||||
} else {
|
||||
return null;
|
||||
}
|
||||
case 9: if (list.isSetLvl9PPr()) {
|
||||
return list.getLvl9PPr();
|
||||
} else {
|
||||
return null;
|
||||
}
|
||||
default: return null;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -40,8 +40,8 @@ import org.openxmlformats.schemas.drawingml.x2006.main.CTTextParagraphProperties
|
||||
import org.openxmlformats.schemas.drawingml.x2006.main.CTTextSpacing;
|
||||
|
||||
/**
|
||||
* Represents a paragraph of text within the containing text body.
|
||||
* The paragraph is the highest level text separation mechanism.
|
||||
* Represents a paragraph of text within the containing text body. The paragraph
|
||||
* is the highest level text separation mechanism.
|
||||
*/
|
||||
@Beta
|
||||
public class XDDFTextParagraph {
|
||||
@ -55,9 +55,7 @@ public class XDDFTextParagraph {
|
||||
this._p = paragraph;
|
||||
this._parent = parent;
|
||||
|
||||
final int count = paragraph.sizeOfBrArray()
|
||||
+ paragraph.sizeOfFldArray()
|
||||
+ paragraph.sizeOfRArray();
|
||||
final int count = paragraph.sizeOfBrArray() + paragraph.sizeOfFldArray() + paragraph.sizeOfRArray();
|
||||
this._runs = new ArrayList<>(count);
|
||||
|
||||
for (XmlObject xo : _p.selectChildren(QNameSet.ALL)) {
|
||||
@ -83,11 +81,11 @@ public class XDDFTextParagraph {
|
||||
return _parent;
|
||||
}
|
||||
|
||||
public List<XDDFTextRun> getTextRuns(){
|
||||
public List<XDDFTextRun> getTextRuns() {
|
||||
return _runs;
|
||||
}
|
||||
|
||||
public Iterator<XDDFTextRun> iterator(){
|
||||
public Iterator<XDDFTextRun> iterator() {
|
||||
return _runs.iterator();
|
||||
}
|
||||
|
||||
@ -96,10 +94,10 @@ public class XDDFTextParagraph {
|
||||
*
|
||||
* @return text run representing this line break ('\n').
|
||||
*/
|
||||
public XDDFTextRun appendLineBreak(){
|
||||
public XDDFTextRun appendLineBreak() {
|
||||
CTTextLineBreak br = _p.addNewBr();
|
||||
// by default, line break has the font properties of the last text run
|
||||
for (int i = _runs.size() - 1; i <= 0; i--){
|
||||
for (int i = _runs.size() - 1; i <= 0; i--) {
|
||||
CTTextCharacterProperties prevProps = _runs.get(i).getProperties();
|
||||
// let's find one that is not undefined
|
||||
if (prevProps != null) {
|
||||
@ -117,7 +115,7 @@ public class XDDFTextParagraph {
|
||||
*
|
||||
* @return the new text field.
|
||||
*/
|
||||
public XDDFTextRun appendField(String id, String type, String text){
|
||||
public XDDFTextRun appendField(String id, String type, String text) {
|
||||
CTTextField f = _p.addNewFld();
|
||||
f.setId(id);
|
||||
f.setType(type);
|
||||
@ -134,7 +132,7 @@ public class XDDFTextParagraph {
|
||||
*
|
||||
* @return the new run of text.
|
||||
*/
|
||||
public XDDFTextRun appendRegularRun(String text){
|
||||
public XDDFTextRun appendRegularRun(String text) {
|
||||
CTRegularTextRun r = _p.addNewR();
|
||||
r.setT(text);
|
||||
CTTextCharacterProperties rPr = r.addNewRPr();
|
||||
@ -148,19 +146,20 @@ public class XDDFTextParagraph {
|
||||
* Returns the alignment that is applied to the paragraph.
|
||||
*
|
||||
* If this attribute is omitted, then a value of left is implied.
|
||||
*
|
||||
* @return alignment that is applied to the paragraph
|
||||
*/
|
||||
public TextAlignment getTextAlignment() {
|
||||
return findDefinedParagraphProperty(props -> props.isSetAlgn(), props -> props.getAlgn())
|
||||
.map(align -> TextAlignment.valueOf(align))
|
||||
.orElse(null);
|
||||
.map(align -> TextAlignment.valueOf(align)).orElse(null);
|
||||
}
|
||||
|
||||
/**
|
||||
* Specifies the alignment that is to be applied to the paragraph.
|
||||
* Possible values for this include left, right, centered, justified and distributed,
|
||||
* Specifies the alignment that is to be applied to the paragraph. Possible
|
||||
* values for this include left, right, centered, justified and distributed,
|
||||
*
|
||||
* @param align text alignment
|
||||
* @param align
|
||||
* text alignment
|
||||
*/
|
||||
public void setTextAlignment(TextAlignment align) {
|
||||
if (align != null || _p.isSetPPr()) {
|
||||
@ -169,25 +168,27 @@ public class XDDFTextParagraph {
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns where vertically on a line of text the actual words are positioned. This deals
|
||||
* with vertical placement of the characters with respect to the baselines.
|
||||
* Returns where vertically on a line of text the actual words are
|
||||
* positioned. This deals with vertical placement of the characters with
|
||||
* respect to the baselines.
|
||||
*
|
||||
* If this attribute is omitted, then a value of baseline is implied.
|
||||
*
|
||||
* @return alignment that is applied to the paragraph
|
||||
*/
|
||||
public FontAlignment getFontAlignment() {
|
||||
return findDefinedParagraphProperty(props -> props.isSetFontAlgn(), props -> props.getFontAlgn())
|
||||
.map(align -> FontAlignment.valueOf(align))
|
||||
.orElse(null);
|
||||
.map(align -> FontAlignment.valueOf(align)).orElse(null);
|
||||
}
|
||||
|
||||
/**
|
||||
* Determines where vertically on a line of text the actual words are positioned. This deals
|
||||
* with vertical placement of the characters with respect to the baselines. For instance
|
||||
* having text anchored to the top baseline, anchored to the bottom baseline, centered in
|
||||
* between, etc.
|
||||
* Determines where vertically on a line of text the actual words are
|
||||
* positioned. This deals with vertical placement of the characters with
|
||||
* respect to the baselines. For instance having text anchored to the top
|
||||
* baseline, anchored to the bottom baseline, centered in between, etc.
|
||||
*
|
||||
* @param align text font alignment
|
||||
* @param align
|
||||
* text font alignment
|
||||
*/
|
||||
public void setFontAlignment(FontAlignment align) {
|
||||
if (align != null || _p.isSetPPr()) {
|
||||
@ -197,27 +198,31 @@ public class XDDFTextParagraph {
|
||||
|
||||
/**
|
||||
*
|
||||
* @return the indentation, in points, applied to the first line of text in the paragraph.
|
||||
* @return the indentation, in points, applied to the first line of text in
|
||||
* the paragraph.
|
||||
*/
|
||||
public Double getIndentation() {
|
||||
return findDefinedParagraphProperty(props -> props.isSetIndent(), props -> props.getIndent())
|
||||
.map(emu -> Units.toPoints(emu))
|
||||
.orElse(null);
|
||||
.map(emu -> Units.toPoints(emu)).orElse(null);
|
||||
}
|
||||
|
||||
/**
|
||||
* Specifies the indentation size that will be applied to the first line of text in the paragraph.
|
||||
* Specifies the indentation size that will be applied to the first line of
|
||||
* text in the paragraph.
|
||||
*
|
||||
* @param points the indentation in points.
|
||||
* The value <code>null</code> unsets the indentation for this paragraph.
|
||||
* <dl>
|
||||
* <dt>Minimum inclusive =</dt><dd>-4032</dd>
|
||||
* <dt>Maximum inclusive =</dt><dd>4032</dd>
|
||||
* </dt>
|
||||
* @param points
|
||||
* the indentation in points. The value <code>null</code> unsets
|
||||
* the indentation for this paragraph.
|
||||
* <dl>
|
||||
* <dt>Minimum inclusive =</dt>
|
||||
* <dd>-4032</dd>
|
||||
* <dt>Maximum inclusive =</dt>
|
||||
* <dd>4032</dd></dt>
|
||||
*/
|
||||
public void setIndentation(Double points) {
|
||||
if (points != null || _p.isSetPPr()) {
|
||||
getOrCreateProperties().setIndentation(points);;
|
||||
getOrCreateProperties().setIndentation(points);
|
||||
;
|
||||
}
|
||||
}
|
||||
|
||||
@ -227,21 +232,23 @@ public class XDDFTextParagraph {
|
||||
*/
|
||||
public Double getMarginLeft() {
|
||||
return findDefinedParagraphProperty(props -> props.isSetMarL(), props -> props.getMarL())
|
||||
.map(emu -> Units.toPoints(emu))
|
||||
.orElse(null);
|
||||
.map(emu -> Units.toPoints(emu)).orElse(null);
|
||||
}
|
||||
|
||||
/**
|
||||
* Specifies the left margin of the paragraph. This is specified in addition to the text body
|
||||
* inset and applies only to this text paragraph. That is the text body inset and the LeftMargin
|
||||
* attributes are additive with respect to the text position.
|
||||
* Specifies the left margin of the paragraph. This is specified in addition
|
||||
* to the text body inset and applies only to this text paragraph. That is
|
||||
* the text body inset and the LeftMargin attributes are additive with
|
||||
* respect to the text position.
|
||||
*
|
||||
* @param points the margin in points.
|
||||
* The value <code>null</code> unsets the left margin for this paragraph.
|
||||
* <dl>
|
||||
* <dt>Minimum inclusive =</dt><dd>0</dd>
|
||||
* <dt>Maximum inclusive =</dt><dd>4032</dd>
|
||||
* </dt>
|
||||
* @param points
|
||||
* the margin in points. The value <code>null</code> unsets the
|
||||
* left margin for this paragraph.
|
||||
* <dl>
|
||||
* <dt>Minimum inclusive =</dt>
|
||||
* <dd>0</dd>
|
||||
* <dt>Maximum inclusive =</dt>
|
||||
* <dd>4032</dd></dt>
|
||||
*/
|
||||
public void setMarginLeft(Double points) {
|
||||
if (points != null || _p.isSetPPr()) {
|
||||
@ -255,21 +262,23 @@ public class XDDFTextParagraph {
|
||||
*/
|
||||
public Double getMarginRight() {
|
||||
return findDefinedParagraphProperty(props -> props.isSetMarR(), props -> props.getMarR())
|
||||
.map(emu -> Units.toPoints(emu))
|
||||
.orElse(null);
|
||||
.map(emu -> Units.toPoints(emu)).orElse(null);
|
||||
}
|
||||
|
||||
/**
|
||||
* Specifies the right margin of the paragraph. This is specified in addition to the text body
|
||||
* inset and applies only to this text paragraph. That is the text body inset and the RightMargin
|
||||
* attributes are additive with respect to the text position.
|
||||
* Specifies the right margin of the paragraph. This is specified in
|
||||
* addition to the text body inset and applies only to this text paragraph.
|
||||
* That is the text body inset and the RightMargin attributes are additive
|
||||
* with respect to the text position.
|
||||
*
|
||||
* @param points the margin in points.
|
||||
* The value <code>null</code> unsets the right margin for this paragraph.
|
||||
* <dl>
|
||||
* <dt>Minimum inclusive =</dt><dd>0</dd>
|
||||
* <dt>Maximum inclusive =</dt><dd>4032</dd>
|
||||
* </dt>
|
||||
* @param points
|
||||
* the margin in points. The value <code>null</code> unsets the
|
||||
* right margin for this paragraph.
|
||||
* <dl>
|
||||
* <dt>Minimum inclusive =</dt>
|
||||
* <dd>0</dd>
|
||||
* <dt>Maximum inclusive =</dt>
|
||||
* <dd>4032</dd></dt>
|
||||
*/
|
||||
public void setMarginRight(Double points) {
|
||||
if (points != null || _p.isSetPPr()) {
|
||||
@ -279,19 +288,20 @@ public class XDDFTextParagraph {
|
||||
|
||||
/**
|
||||
*
|
||||
* @return the default size for a tab character within this paragraph in points.
|
||||
* @return the default size for a tab character within this paragraph in
|
||||
* points.
|
||||
*/
|
||||
public Double getDefaultTabSize() {
|
||||
return findDefinedParagraphProperty(props -> props.isSetDefTabSz(), props -> props.getDefTabSz())
|
||||
.map(emu -> Units.toPoints(emu))
|
||||
.orElse(null);
|
||||
.map(emu -> Units.toPoints(emu)).orElse(null);
|
||||
}
|
||||
|
||||
/**
|
||||
* Specifies the default size for a tab character within this paragraph.
|
||||
*
|
||||
* @param points the default tab size in points.
|
||||
* The value <code>null</code> unsets the default tab size for this paragraph.
|
||||
* @param points
|
||||
* the default tab size in points. The value <code>null</code>
|
||||
* unsets the default tab size for this paragraph.
|
||||
*/
|
||||
public void setDefaultTabSize(Double points) {
|
||||
if (points != null || _p.isSetPPr()) {
|
||||
@ -301,30 +311,35 @@ public class XDDFTextParagraph {
|
||||
|
||||
/**
|
||||
* Returns the vertical line spacing that is to be used within a paragraph.
|
||||
* This may be specified in two different ways, percentage spacing or font points spacing:
|
||||
* This may be specified in two different ways, percentage spacing or font
|
||||
* points spacing:
|
||||
* <p>
|
||||
* If line spacing is a percentage of normal line height, result is instance of XDDFSpacingPercent.
|
||||
* If line spacing is expressed in points, result is instance of XDDFSpacingPoints.
|
||||
* If line spacing is a percentage of normal line height, result is instance
|
||||
* of XDDFSpacingPercent. If line spacing is expressed in points, result is
|
||||
* instance of XDDFSpacingPoints.
|
||||
* </p>
|
||||
*
|
||||
* @return the vertical line spacing.
|
||||
*/
|
||||
public XDDFSpacing getLineSpacing() {
|
||||
return findDefinedParagraphProperty(props -> props.isSetLnSpc(), props -> props.getLnSpc())
|
||||
.map(spacing -> extractSpacing(spacing))
|
||||
.orElse(null);
|
||||
.map(spacing -> extractSpacing(spacing)).orElse(null);
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* This element specifies the vertical line spacing that is to be used within a paragraph.
|
||||
* This may be specified in two different ways, percentage spacing or font points spacing:
|
||||
* This element specifies the vertical line spacing that is to be used
|
||||
* within a paragraph. This may be specified in two different ways,
|
||||
* percentage spacing or font points spacing:
|
||||
* <p>
|
||||
* If spacing is instance of XDDFSpacingPercent, then line spacing is a percentage of normal line height.
|
||||
* If spacing is instance of XDDFSpacingPoints, then line spacing is expressed in points.
|
||||
* If spacing is instance of XDDFSpacingPercent, then line spacing is a
|
||||
* percentage of normal line height. If spacing is instance of
|
||||
* XDDFSpacingPoints, then line spacing is expressed in points.
|
||||
* </p>
|
||||
* Examples:
|
||||
* <pre><code>
|
||||
*
|
||||
* <pre>
|
||||
* <code>
|
||||
* // spacing will be 120% of the size of the largest text on each line
|
||||
* paragraph.setLineSpacing(new XDDFSpacingPercent(120));
|
||||
*
|
||||
@ -333,9 +348,11 @@ public class XDDFTextParagraph {
|
||||
*
|
||||
* // spacing will be 48 points
|
||||
* paragraph.setLineSpacing(new XDDFSpacingPoints(48.0));
|
||||
* </code></pre>
|
||||
* </code>
|
||||
* </pre>
|
||||
*
|
||||
* @param linespacing the vertical line spacing
|
||||
* @param linespacing
|
||||
* the vertical line spacing
|
||||
*/
|
||||
public void setLineSpacing(XDDFSpacing linespacing) {
|
||||
if (linespacing != null || _p.isSetPPr()) {
|
||||
@ -344,39 +361,46 @@ public class XDDFTextParagraph {
|
||||
}
|
||||
|
||||
/**
|
||||
* The amount of vertical white space before the paragraph.
|
||||
* This may be specified in two different ways, percentage spacing or font points spacing:
|
||||
* The amount of vertical white space before the paragraph. This may be
|
||||
* specified in two different ways, percentage spacing or font points
|
||||
* spacing:
|
||||
* <p>
|
||||
* If spacing is a percentage of normal line height, result is instance of XDDFSpacingPercent.
|
||||
* If spacing is expressed in points, result is instance of XDDFSpacingPoints.
|
||||
* If spacing is a percentage of normal line height, result is instance of
|
||||
* XDDFSpacingPercent. If spacing is expressed in points, result is instance
|
||||
* of XDDFSpacingPoints.
|
||||
* </p>
|
||||
*
|
||||
* @return the vertical white space before the paragraph.
|
||||
*/
|
||||
public XDDFSpacing getSpaceBefore() {
|
||||
return findDefinedParagraphProperty(props -> props.isSetSpcBef(), props -> props.getSpcBef())
|
||||
.map(spacing -> extractSpacing(spacing))
|
||||
.orElse(null);
|
||||
.map(spacing -> extractSpacing(spacing)).orElse(null);
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the amount of vertical white space that will be present before the paragraph.
|
||||
* This may be specified in two different ways, percentage spacing or font points spacing:
|
||||
* Set the amount of vertical white space that will be present before the
|
||||
* paragraph. This may be specified in two different ways, percentage
|
||||
* spacing or font points spacing:
|
||||
* <p>
|
||||
* If spacing is instance of XDDFSpacingPercent, then spacing is a percentage of normal line height.
|
||||
* If spacing is instance of XDDFSpacingPoints, then spacing is expressed in points.
|
||||
* If spacing is instance of XDDFSpacingPercent, then spacing is a
|
||||
* percentage of normal line height. If spacing is instance of
|
||||
* XDDFSpacingPoints, then spacing is expressed in points.
|
||||
* </p>
|
||||
* Examples:
|
||||
* <pre><code>
|
||||
*
|
||||
* <pre>
|
||||
* <code>
|
||||
* // The paragraph will be formatted to have a spacing before the paragraph text.
|
||||
* // The spacing will be 200% of the size of the largest text on each line
|
||||
* paragraph.setSpaceBefore(new XDDFSpacingPercent(200));
|
||||
*
|
||||
* // The spacing will be a size of 48 points
|
||||
* paragraph.setSpaceBefore(new XDDFSpacingPoints(48.0));
|
||||
* </code></pre>
|
||||
* </code>
|
||||
* </pre>
|
||||
*
|
||||
* @param spaceBefore the vertical white space before the paragraph.
|
||||
* @param spaceBefore
|
||||
* the vertical white space before the paragraph.
|
||||
*/
|
||||
public void setSpaceBefore(XDDFSpacing spaceBefore) {
|
||||
if (spaceBefore != null || _p.isSetPPr()) {
|
||||
@ -385,39 +409,46 @@ public class XDDFTextParagraph {
|
||||
}
|
||||
|
||||
/**
|
||||
* The amount of vertical white space after the paragraph.
|
||||
* This may be specified in two different ways, percentage spacing or font points spacing:
|
||||
* The amount of vertical white space after the paragraph. This may be
|
||||
* specified in two different ways, percentage spacing or font points
|
||||
* spacing:
|
||||
* <p>
|
||||
* If spacing is a percentage of normal line height, result is instance of XDDFSpacingPercent.
|
||||
* If spacing is expressed in points, result is instance of XDDFSpacingPoints.
|
||||
* If spacing is a percentage of normal line height, result is instance of
|
||||
* XDDFSpacingPercent. If spacing is expressed in points, result is instance
|
||||
* of XDDFSpacingPoints.
|
||||
* </p>
|
||||
*
|
||||
* @return the vertical white space after the paragraph.
|
||||
*/
|
||||
public XDDFSpacing getSpaceAfter() {
|
||||
return findDefinedParagraphProperty(props -> props.isSetSpcAft(), props -> props.getSpcAft())
|
||||
.map(spacing -> extractSpacing(spacing))
|
||||
.orElse(null);
|
||||
.map(spacing -> extractSpacing(spacing)).orElse(null);
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the amount of vertical white space that will be present after the paragraph.
|
||||
* This may be specified in two different ways, percentage spacing or font points spacing:
|
||||
* Set the amount of vertical white space that will be present after the
|
||||
* paragraph. This may be specified in two different ways, percentage
|
||||
* spacing or font points spacing:
|
||||
* <p>
|
||||
* If spacing is instance of XDDFSpacingPercent, then spacing is a percentage of normal line height.
|
||||
* If spacing is instance of XDDFSpacingPoints, then spacing is expressed in points.
|
||||
* If spacing is instance of XDDFSpacingPercent, then spacing is a
|
||||
* percentage of normal line height. If spacing is instance of
|
||||
* XDDFSpacingPoints, then spacing is expressed in points.
|
||||
* </p>
|
||||
* Examples:
|
||||
* <pre><code>
|
||||
*
|
||||
* <pre>
|
||||
* <code>
|
||||
* // The paragraph will be formatted to have a spacing after the paragraph text.
|
||||
* // The spacing will be 200% of the size of the largest text on each line
|
||||
* paragraph.setSpaceAfter(new XDDFSpacingPercent(200));
|
||||
*
|
||||
* // The spacing will be a size of 48 points
|
||||
* paragraph.setSpaceAfter(new XDDFSpacingPoints(48.0));
|
||||
* </code></pre>
|
||||
* </code>
|
||||
* </pre>
|
||||
*
|
||||
* @param spaceAfter the vertical white space after the paragraph.
|
||||
* @param spaceAfter
|
||||
* the vertical white space after the paragraph.
|
||||
*/
|
||||
public void setSpaceAfter(XDDFSpacing spaceAfter) {
|
||||
if (spaceAfter != null || _p.isSetPPr()) {
|
||||
@ -427,20 +458,19 @@ public class XDDFTextParagraph {
|
||||
|
||||
/**
|
||||
*
|
||||
* @return the color of bullet characters within a given paragraph.
|
||||
* A <code>null</code> value means to use the text font color.
|
||||
* @return the color of bullet characters within a given paragraph. A
|
||||
* <code>null</code> value means to use the text font color.
|
||||
*/
|
||||
public XDDFColor getBulletColor(){
|
||||
return findDefinedParagraphProperty(
|
||||
props -> props.isSetBuClr() || props.isSetBuClrTx(),
|
||||
props -> new XDDFParagraphBulletProperties(props).getBulletColor()
|
||||
).orElse(null);
|
||||
public XDDFColor getBulletColor() {
|
||||
return findDefinedParagraphProperty(props -> props.isSetBuClr() || props.isSetBuClrTx(),
|
||||
props -> new XDDFParagraphBulletProperties(props).getBulletColor()).orElse(null);
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the color to be used on bullet characters within a given paragraph.
|
||||
*
|
||||
* @param color the bullet color
|
||||
* @param color
|
||||
* the bullet color
|
||||
*/
|
||||
public void setBulletColor(XDDFColor color) {
|
||||
if (color != null || _p.isSetPPr()) {
|
||||
@ -449,7 +479,8 @@ public class XDDFTextParagraph {
|
||||
}
|
||||
|
||||
/**
|
||||
* Specifies the color to be used on bullet characters has to follow text color within a given paragraph.
|
||||
* Specifies the color to be used on bullet characters has to follow text
|
||||
* color within a given paragraph.
|
||||
*/
|
||||
public void setBulletColorFollowText() {
|
||||
getOrCreateBulletProperties().setBulletColorFollowText();
|
||||
@ -457,20 +488,19 @@ public class XDDFTextParagraph {
|
||||
|
||||
/**
|
||||
*
|
||||
* @return the font of bullet characters within a given paragraph.
|
||||
* A <code>null</code> value means to use the text font font.
|
||||
* @return the font of bullet characters within a given paragraph. A
|
||||
* <code>null</code> value means to use the text font font.
|
||||
*/
|
||||
public XDDFFont getBulletFont(){
|
||||
return findDefinedParagraphProperty(
|
||||
props -> props.isSetBuFont() || props.isSetBuFontTx(),
|
||||
props -> new XDDFParagraphBulletProperties(props).getBulletFont()
|
||||
).orElse(null);
|
||||
public XDDFFont getBulletFont() {
|
||||
return findDefinedParagraphProperty(props -> props.isSetBuFont() || props.isSetBuFontTx(),
|
||||
props -> new XDDFParagraphBulletProperties(props).getBulletFont()).orElse(null);
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the font to be used on bullet characters within a given paragraph.
|
||||
*
|
||||
* @param font the bullet font
|
||||
* @param font
|
||||
* the bullet font
|
||||
*/
|
||||
public void setBulletFont(XDDFFont font) {
|
||||
if (font != null || _p.isSetPPr()) {
|
||||
@ -479,40 +509,46 @@ public class XDDFTextParagraph {
|
||||
}
|
||||
|
||||
/**
|
||||
* Specifies the font to be used on bullet characters has to follow text font within a given paragraph.
|
||||
* Specifies the font to be used on bullet characters has to follow text
|
||||
* font within a given paragraph.
|
||||
*/
|
||||
public void setBulletFontFollowText() {
|
||||
getOrCreateBulletProperties().setBulletFontFollowText();
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the bullet size that is to be used within a paragraph.
|
||||
* This may be specified in three different ways, follows text size, percentage size and font points size:
|
||||
* Returns the bullet size that is to be used within a paragraph. This may
|
||||
* be specified in three different ways, follows text size, percentage size
|
||||
* and font points size:
|
||||
* <p>
|
||||
* If returned value is instance of XDDFBulletSizeFollowText, then bullet size is text size;
|
||||
* If returned value is instance of XDDFBulletSizePercent, then bullet size is a percentage of the font size;
|
||||
* If returned value is instance of XDDFBulletSizePoints, then bullet size is specified in points.
|
||||
* If returned value is instance of XDDFBulletSizeFollowText, then bullet
|
||||
* size is text size; If returned value is instance of
|
||||
* XDDFBulletSizePercent, then bullet size is a percentage of the font size;
|
||||
* If returned value is instance of XDDFBulletSizePoints, then bullet size
|
||||
* is specified in points.
|
||||
* </p>
|
||||
*
|
||||
* @return the bullet size
|
||||
*/
|
||||
public XDDFBulletSize getBulletSize(){
|
||||
public XDDFBulletSize getBulletSize() {
|
||||
return findDefinedParagraphProperty(
|
||||
props -> props.isSetBuSzPct() || props.isSetBuSzPts() || props.isSetBuSzTx(),
|
||||
props -> new XDDFParagraphBulletProperties(props).getBulletSize()
|
||||
).orElse(null);
|
||||
props -> props.isSetBuSzPct() || props.isSetBuSzPts() || props.isSetBuSzTx(),
|
||||
props -> new XDDFParagraphBulletProperties(props).getBulletSize()).orElse(null);
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the bullet size that is to be used within a paragraph.
|
||||
* This may be specified in three different ways, follows text size, percentage size and font points size:
|
||||
* Sets the bullet size that is to be used within a paragraph. This may be
|
||||
* specified in three different ways, follows text size, percentage size and
|
||||
* font points size:
|
||||
* <p>
|
||||
* If given value is instance of XDDFBulletSizeFollowText, then bullet size is text size;
|
||||
* If given value is instance of XDDFBulletSizePercent, then bullet size is a percentage of the font size;
|
||||
* If given value is instance of XDDFBulletSizePoints, then bullet size is specified in points.
|
||||
* If given value is instance of XDDFBulletSizeFollowText, then bullet size
|
||||
* is text size; If given value is instance of XDDFBulletSizePercent, then
|
||||
* bullet size is a percentage of the font size; If given value is instance
|
||||
* of XDDFBulletSizePoints, then bullet size is specified in points.
|
||||
* </p>
|
||||
*
|
||||
* @param size the bullet size specification
|
||||
* @param size
|
||||
* the bullet size specification
|
||||
*/
|
||||
public void setBulletSize(XDDFBulletSize size) {
|
||||
if (size != null || _p.isSetPPr()) {
|
||||
@ -520,11 +556,10 @@ public class XDDFTextParagraph {
|
||||
}
|
||||
}
|
||||
|
||||
public XDDFBulletStyle getBulletStyle(){
|
||||
public XDDFBulletStyle getBulletStyle() {
|
||||
return findDefinedParagraphProperty(
|
||||
props -> props.isSetBuAutoNum() || props.isSetBuBlip() || props.isSetBuChar() || props.isSetBuNone(),
|
||||
props -> new XDDFParagraphBulletProperties(props).getBulletStyle()
|
||||
).orElse(null);
|
||||
props -> props.isSetBuAutoNum() || props.isSetBuBlip() || props.isSetBuChar() || props.isSetBuNone(),
|
||||
props -> new XDDFParagraphBulletProperties(props).getBulletStyle()).orElse(null);
|
||||
}
|
||||
|
||||
public void setBulletStyle(XDDFBulletStyle style) {
|
||||
@ -534,8 +569,7 @@ public class XDDFTextParagraph {
|
||||
}
|
||||
|
||||
public boolean hasEastAsianLineBreak() {
|
||||
return findDefinedParagraphProperty(props -> props.isSetEaLnBrk(), props -> props.getEaLnBrk())
|
||||
.orElse(false);
|
||||
return findDefinedParagraphProperty(props -> props.isSetEaLnBrk(), props -> props.getEaLnBrk()).orElse(false);
|
||||
}
|
||||
|
||||
public void setEastAsianLineBreak(Boolean value) {
|
||||
@ -567,8 +601,7 @@ public class XDDFTextParagraph {
|
||||
}
|
||||
|
||||
public boolean isRightToLeft() {
|
||||
return findDefinedParagraphProperty(props -> props.isSetRtl(), props -> props.getRtl())
|
||||
.orElse(false);
|
||||
return findDefinedParagraphProperty(props -> props.isSetRtl(), props -> props.getRtl()).orElse(false);
|
||||
}
|
||||
|
||||
public void setRightToLeft(Boolean value) {
|
||||
@ -641,6 +674,13 @@ public class XDDFTextParagraph {
|
||||
}
|
||||
}
|
||||
|
||||
public XDDFRunProperties addAfterLastRunProperties() {
|
||||
if (!_p.isSetEndParaRPr()) {
|
||||
_p.addNewEndParaRPr();
|
||||
}
|
||||
return getAfterLastRunProperties();
|
||||
}
|
||||
|
||||
public XDDFRunProperties getAfterLastRunProperties() {
|
||||
if (_p.isSetEndParaRPr()) {
|
||||
return new XDDFRunProperties(_p.getEndParaRPr());
|
||||
@ -651,7 +691,9 @@ public class XDDFTextParagraph {
|
||||
|
||||
public void setAfterLastRunProperties(XDDFRunProperties properties) {
|
||||
if (properties == null) {
|
||||
_p.unsetEndParaRPr();
|
||||
if (_p.isSetEndParaRPr()) {
|
||||
_p.unsetEndParaRPr();
|
||||
}
|
||||
} else {
|
||||
_p.setEndParaRPr(properties.getXmlObject());
|
||||
}
|
||||
|
@ -22,8 +22,8 @@ import java.util.Locale;
|
||||
import java.util.Optional;
|
||||
import java.util.function.Function;
|
||||
|
||||
import org.apache.poi.POIXMLRelation;
|
||||
import org.apache.poi.common.usermodel.fonts.FontGroup;
|
||||
import org.apache.poi.ooxml.POIXMLRelation;
|
||||
import org.apache.poi.openxml4j.opc.PackagePart;
|
||||
import org.apache.poi.openxml4j.opc.PackagePartName;
|
||||
import org.apache.poi.openxml4j.opc.PackageRelationship;
|
||||
@ -88,9 +88,9 @@ public class XDDFTextRun {
|
||||
public String getText() {
|
||||
if (isLineBreak()) {
|
||||
return "\n";
|
||||
} else if (isField()) {
|
||||
} else if (isField()) {
|
||||
return _tf.getT();
|
||||
} else {
|
||||
} else {
|
||||
return _rtr.getT();
|
||||
}
|
||||
}
|
||||
@ -151,7 +151,8 @@ public class XDDFTextRun {
|
||||
/**
|
||||
* Specifies whether this run of text will be formatted as bold text.
|
||||
*
|
||||
* @param bold whether this run of text will be formatted as bold text.
|
||||
* @param bold
|
||||
* whether this run of text will be formatted as bold text.
|
||||
*/
|
||||
public void setBold(Boolean bold) {
|
||||
getOrCreateProperties().setBold(bold);
|
||||
@ -166,7 +167,8 @@ public class XDDFTextRun {
|
||||
}
|
||||
|
||||
/**
|
||||
* @param italic whether this run of text is formatted as italic text.
|
||||
* @param italic
|
||||
* whether this run of text is formatted as italic text.
|
||||
*/
|
||||
public void setItalic(Boolean italic) {
|
||||
getOrCreateProperties().setItalic(italic);
|
||||
@ -181,7 +183,8 @@ public class XDDFTextRun {
|
||||
}
|
||||
|
||||
/**
|
||||
* @param strike which strike style this run of text is formatted with.
|
||||
* @param strike
|
||||
* which strike style this run of text is formatted with.
|
||||
*/
|
||||
public void setStrikeThrough(StrikeType strike) {
|
||||
getOrCreateProperties().setStrikeThrough(strike);
|
||||
@ -206,7 +209,8 @@ public class XDDFTextRun {
|
||||
}
|
||||
|
||||
/**
|
||||
* @param underline which underline style this run of text is formatted with.
|
||||
* @param underline
|
||||
* which underline style this run of text is formatted with.
|
||||
*/
|
||||
public void setUnderline(UnderlineType underline) {
|
||||
getOrCreateProperties().setUnderline(underline);
|
||||
@ -231,7 +235,8 @@ public class XDDFTextRun {
|
||||
}
|
||||
|
||||
/**
|
||||
* @param caps which caps style this run of text is formatted with.
|
||||
* @param caps
|
||||
* which caps style this run of text is formatted with.
|
||||
*/
|
||||
public void setCapitals(CapsType caps) {
|
||||
getOrCreateProperties().setCapitals(caps);
|
||||
@ -256,7 +261,8 @@ public class XDDFTextRun {
|
||||
}
|
||||
|
||||
/**
|
||||
* @return whether a run of text will be formatted as a subscript text. Default is false.
|
||||
* @return whether a run of text will be formatted as a subscript text.
|
||||
* Default is false.
|
||||
*/
|
||||
public boolean isSubscript() {
|
||||
return findDefinedProperty(props -> props.isSetBaseline(), props -> props.getBaseline())
|
||||
@ -265,7 +271,8 @@ public class XDDFTextRun {
|
||||
}
|
||||
|
||||
/**
|
||||
* @return whether a run of text will be formatted as a superscript text. Default is false.
|
||||
* @return whether a run of text will be formatted as a superscript text.
|
||||
* Default is false.
|
||||
*/
|
||||
public boolean isSuperscript() {
|
||||
return findDefinedProperty(props -> props.isSetBaseline(), props -> props.getBaseline())
|
||||
@ -282,31 +289,35 @@ public class XDDFTextRun {
|
||||
*
|
||||
* @param offset
|
||||
*/
|
||||
public void setBaseline(Double offset){
|
||||
getOrCreateProperties().setBaseline((int)(offset * 1000));
|
||||
public void setBaseline(Double offset) {
|
||||
if (offset == null) {
|
||||
getOrCreateProperties().setBaseline(null);
|
||||
} else {
|
||||
getOrCreateProperties().setBaseline((int) (offset * 1000));
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Set whether the text in this run is formatted as superscript.
|
||||
* <p>
|
||||
* The size is specified using a percentage.
|
||||
* </p>
|
||||
* <p>
|
||||
* The size is specified using a percentage.
|
||||
* </p>
|
||||
*
|
||||
* @param offset
|
||||
*/
|
||||
public void setSuperscript(Double offset){
|
||||
public void setSuperscript(Double offset) {
|
||||
setBaseline(offset == null ? null : Math.abs(offset));
|
||||
}
|
||||
|
||||
/**
|
||||
* Set whether the text in this run is formatted as subscript.
|
||||
* <p>
|
||||
* The size is specified using a percentage.
|
||||
* </p>
|
||||
* <p>
|
||||
* The size is specified using a percentage.
|
||||
* </p>
|
||||
*
|
||||
* @param offset
|
||||
*/
|
||||
public void setSubscript(Double offset){
|
||||
public void setSubscript(Double offset) {
|
||||
setBaseline(offset == null ? null : -Math.abs(offset));
|
||||
}
|
||||
|
||||
@ -331,7 +342,8 @@ public class XDDFTextRun {
|
||||
* <em>Note</em>: In order to get fonts to unset the property for a given font family use
|
||||
* {@link XDDFFont#unsetFontForGroup(FontGroup)}
|
||||
*
|
||||
* @param fonts to set or unset on the run.
|
||||
* @param fonts
|
||||
* to set or unset on the run.
|
||||
*/
|
||||
public void setFonts(XDDFFont[] fonts) {
|
||||
getOrCreateProperties().setFonts(fonts);
|
||||
@ -357,12 +369,14 @@ public class XDDFTextRun {
|
||||
}
|
||||
|
||||
/**
|
||||
* @param size font size in points.
|
||||
* The value <code>null</code> unsets the size for this run.
|
||||
* <dl>
|
||||
* <dt>Minimum inclusive =</dt><dd>1</dd>
|
||||
* <dt>Maximum inclusive =</dt><dd>400</dd>
|
||||
* </dt>
|
||||
* @param size
|
||||
* font size in points. The value <code>null</code> unsets the
|
||||
* size for this run.
|
||||
* <dl>
|
||||
* <dt>Minimum inclusive =</dt>
|
||||
* <dd>1</dd>
|
||||
* <dt>Maximum inclusive =</dt>
|
||||
* <dd>400</dd></dt>
|
||||
*
|
||||
*/
|
||||
public void setFontSize(Double size) {
|
||||
@ -371,7 +385,7 @@ public class XDDFTextRun {
|
||||
|
||||
public Double getFontSize() {
|
||||
Integer size = findDefinedProperty(props -> props.isSetSz(), props -> props.getSz())
|
||||
.orElse(100 * XSSFFont.DEFAULT_FONT_SIZE); // default font size
|
||||
.orElse(100 * XSSFFont.DEFAULT_FONT_SIZE); // default font size
|
||||
double scale = _parent.getParentBody().getBodyProperties().getAutoFit().getFontScale() / 10_000_000.0;
|
||||
return size * scale;
|
||||
}
|
||||
@ -382,13 +396,15 @@ public class XDDFTextRun {
|
||||
* The value <code>null</code> unsets the kerning for this run.
|
||||
* </p>
|
||||
*
|
||||
* @param kerning character kerning in points.
|
||||
* <dl>
|
||||
* <dt>Minimum inclusive =</dt><dd>0</dd>
|
||||
* <dt>Maximum inclusive =</dt><dd>4000</dd>
|
||||
* </dt>
|
||||
* @param kerning
|
||||
* character kerning in points.
|
||||
* <dl>
|
||||
* <dt>Minimum inclusive =</dt>
|
||||
* <dd>0</dd>
|
||||
* <dt>Maximum inclusive =</dt>
|
||||
* <dd>4000</dd></dt>
|
||||
*/
|
||||
public void setCharacterKerning(Double kerning){
|
||||
public void setCharacterKerning(Double kerning) {
|
||||
getOrCreateProperties().setCharacterKerning(kerning);
|
||||
}
|
||||
|
||||
@ -413,13 +429,15 @@ public class XDDFTextRun {
|
||||
* The value <code>null</code> unsets the spacing for this run.
|
||||
* </p>
|
||||
*
|
||||
* @param spacing character spacing in points.
|
||||
* <dl>
|
||||
* <dt>Minimum inclusive =</dt><dd>-4000</dd>
|
||||
* <dt>Maximum inclusive =</dt><dd>4000</dd>
|
||||
* </dt>
|
||||
* @param spacing
|
||||
* character spacing in points.
|
||||
* <dl>
|
||||
* <dt>Minimum inclusive =</dt>
|
||||
* <dd>-4000</dd>
|
||||
* <dt>Maximum inclusive =</dt>
|
||||
* <dd>4000</dd></dt>
|
||||
*/
|
||||
public void setCharacterSpacing(Double spacing){
|
||||
public void setCharacterSpacing(Double spacing) {
|
||||
getOrCreateProperties().setCharacterSpacing(spacing);
|
||||
}
|
||||
|
||||
|
@ -77,8 +77,10 @@ public class XSLFAutoShape extends XSLFTextShape implements AutoShape<XSLFShape,
|
||||
CTShape shape = (CTShape) getXmlObject();
|
||||
CTTextBody txBody = shape.getTxBody();
|
||||
if (txBody == null && create) {
|
||||
txBody = shape.addNewTxBody();
|
||||
initTextBody(txBody);
|
||||
XDDFTextBody body = new XDDFTextBody(this);
|
||||
initTextBody(body);
|
||||
shape.setTxBody(body.getXmlObject());
|
||||
txBody = shape.getTxBody();
|
||||
}
|
||||
return txBody;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user