/* ====================================================================
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.xssf.usermodel.extensions;
import org.apache.poi.ss.usermodel.HeaderFooter;
import org.apache.poi.xssf.usermodel.helpers.HeaderFooterHelper;
import org.apache.poi.util.Internal;
import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTHeaderFooter;
Parent class of all XSSF headers and footers.
For a list of all the different fields that can be placed into a header or
footer, such as page number, bold, underline etc, see the follow formatting
syntax
Header/Footer Formatting Syntax
There are a number of formatting codes that can be written inline with the
actual header / footer text, which affect the formatting in the header or
footer.
This example shows the text "Center Bold Header" on the first line (center
section), and the date on the second line (center section). &CCenter
&"-,Bold"Bold &"-,Regular"Header_x000A_&D
General Rules: There is no required order in which these codes must
appear. The first occurrence of the following codes turns the formatting ON,
the second occurrence turns it OFF again:
- &L
- code for "left section" (there are three header / footer locations,
"left", "center", and "right"). When two or more occurrences of this section
marker exist, the contents from all markers are concatenated, in the order of
appearance, and placed into the left section.
- &P
- code for "current page #"
- &N
- code for "total pages"
- &font size
- code for "text font size", where font size is a font size in points.
- &K
- code for "text font color" RGB Color is specified as RRGGBB Theme Color
is specifed as TTSNN where TT is the theme color Id, S is either "+" or "-"
of the tint/shade value, NN is the tint/shade value.
- &S
- code for "text strikethrough" on / off
- &X
- code for "text super script" on / off
- &Y
- code for "text subscript" on / off
- &C
- code for "center section". When two or more occurrences of this section
marker exist, the contents from all markers are concatenated, in the order of
appearance, and placed into the center section. SpreadsheetML Reference
Material - Worksheets 1966
- &D
- code for "date"
- &T
- code for "time"
- &G
- code for "picture as background"
- &U
- code for "text single underline"
- &E
- code for "double underline"
- &R
- code for "right section". When two or more occurrences of this section
marker exist, the contents from all markers are concatenated, in the order of
appearance, and placed into the right section.
- &Z
- code for "this workbook's file path"
- &F
- code for "this workbook's file name"
- &A
- code for "sheet tab name"
- &+
- code for add to page #.
- &-
- code for subtract from page #.
- &"font name,font type" - code for "text font name" and "text font type",
where font name and font type are strings specifying the name and type of the
font, separated by a comma. When a hyphen appears in font name, it means
"none specified". Both of font name and font type can be localized
values.
- &"-,Bold"
- code for "bold font style"
- &B
- also means "bold font style"
- &"-,Regular"
- code for "regular font style"
- &"-,Italic"
- code for "italic font style"
- &I
- also means "italic font style"
- &"-,Bold Italic"
- code for "bold italic font style"
- &O
- code for "outline style"
- &H
- code for "shadow style"
/**
* Parent class of all XSSF headers and footers.
*
* For a list of all the different fields that can be placed into a header or
* footer, such as page number, bold, underline etc, see the follow formatting
* syntax
*
*<b> Header/Footer Formatting Syntax</b>
*<p>
* There are a number of formatting codes that can be written inline with the
* actual header / footer text, which affect the formatting in the header or
* footer.
*</p>
*
* This example shows the text "Center Bold Header" on the first line (center
* section), and the date on the second line (center section). &CCenter
* &"-,Bold"Bold &"-,Regular"Header_x000A_&D
*
* <b>General Rules:</b> There is no required order in which these codes must
* appear. The first occurrence of the following codes turns the formatting ON,
* the second occurrence turns it OFF again:
*
* <dl>
* <dt>&L</dt>
* <dd>code for "left section" (there are three header / footer locations,
* "left", "center", and "right"). When two or more occurrences of this section
* marker exist, the contents from all markers are concatenated, in the order of
* appearance, and placed into the left section.</dd>
* <dt>&P</dt>
* <dd>code for "current page #"</dd>
* <dt>&N</dt>
* <dd>code for "total pages"</dd>
* <dt>&font size</dt>
* <dd>code for "text font size", where font size is a font size in points.</dd>
* <dt>&K</dt>
* <dd>code for "text font color" RGB Color is specified as RRGGBB Theme Color
* is specifed as TTSNN where TT is the theme color Id, S is either "+" or "-"
* of the tint/shade value, NN is the tint/shade value.</dd>
* <dt>&S</dt>
* <dd>code for "text strikethrough" on / off</dd>
* <dt>&X</dt>
* <dd>code for "text super script" on / off</dd>
* <dt>&Y</dt>
* <dd>code for "text subscript" on / off</dd>
* <dt>&C</dt>
* <dd>code for "center section". When two or more occurrences of this section
* marker exist, the contents from all markers are concatenated, in the order of
* appearance, and placed into the center section. SpreadsheetML Reference
* Material - Worksheets 1966</dd>
* <dt>&D</dt>
* <dd>code for "date"</dd>
* <dt>&T</dt>
* <dd>code for "time"</dd>
* <dt>&G</dt>
* <dd>code for "picture as background"</dd>
* <dt>&U</dt>
* <dd>code for "text single underline"</dd>
* <dt>&E</dt>
* <dd>code for "double underline"</dd>
* <dt>&R</dt>
* <dd>code for "right section". When two or more occurrences of this section
* marker exist, the contents from all markers are concatenated, in the order of
* appearance, and placed into the right section.</dd>
* <dt>&Z</dt>
* <dd>code for "this workbook's file path"</dd>
* <dt>&F</dt>
* <dd>code for "this workbook's file name"</dd>
* <dt>&A</dt>
* <dd>code for "sheet tab name"</dd>
* <dt>&+</dt>
* <dd>code for add to page #.</dd>
* <dt>&-</dt>
* <dd>code for subtract from page #.</dd>
* <dt>&"font name,font type" - code for "text font name" and "text font type",
* where font name and font type are strings specifying the name and type of the
* font, separated by a comma. When a hyphen appears in font name, it means
* "none specified". Both of font name and font type can be localized
* values.</dd>
* <dt>&"-,Bold"</dt>
* <dd>code for "bold font style"</dd>
* <dt>&B</dt>
* <dd>also means "bold font style"</dd>
* <dt>&"-,Regular"</dt>
* <dd>code for "regular font style"</dd>
* <dt>&"-,Italic"</dt>
* <dd>code for "italic font style"</dd>
* <dt>&I</dt>
* <dd>also means "italic font style"</dd>
* <dt>&"-,Bold Italic"</dt>
* <dd>code for "bold italic font style"</dd>
* <dt>&O</dt>
* <dd>code for "outline style"</dd>
* <dt>&H</dt>
* <dd>code for "shadow style"</dd>
* </dl>
*
*
*/
public abstract class XSSFHeaderFooter implements HeaderFooter {
private HeaderFooterHelper helper;
private CTHeaderFooter headerFooter;
private boolean stripFields;
Create an instance of XSSFAbstractHeaderFooter from the supplied XML bean
Params: - headerFooter –
/**
* Create an instance of XSSFAbstractHeaderFooter from the supplied XML bean
*
* @param headerFooter
*/
public XSSFHeaderFooter(CTHeaderFooter headerFooter) {
this.headerFooter = headerFooter;
this.helper = new HeaderFooterHelper();
}
Returns the underlying CTHeaderFooter xml bean
Returns: the underlying CTHeaderFooter xml bean
/**
* Returns the underlying CTHeaderFooter xml bean
*
* @return the underlying CTHeaderFooter xml bean
*/
@Internal
public CTHeaderFooter getHeaderFooter() {
return this.headerFooter;
}
Returns the value of the header or footer.
Returns: the value of the header or footer.
/**
* Returns the value of the header or footer.
*
* @return the value of the header or footer.
*/
public String getValue() {
String value = getText();
if (value == null)
return "";
return value;
}
Are fields currently being stripped from the text that this XSSFHeaderFooter
returns? Default is false, but can be changed /**
* Are fields currently being stripped from the text that this
* {@link XSSFHeaderFooter} returns? Default is false, but can be changed
*/
public boolean areFieldsStripped() {
return stripFields;
}
Should fields (eg macros) be stripped from the text that this class
returns? Default is not to strip.
Params: - stripFields –
/**
* Should fields (eg macros) be stripped from the text that this class
* returns? Default is not to strip.
*
* @param stripFields
*/
public void setAreFieldsStripped(boolean stripFields) {
this.stripFields = stripFields;
}
Removes any fields (eg macros, page markers etc) from the string.
Normally used to make some text suitable for showing to humans, and the
resultant text should not normally be saved back into the document!
/**
* Removes any fields (eg macros, page markers etc) from the string.
* Normally used to make some text suitable for showing to humans, and the
* resultant text should not normally be saved back into the document!
*/
public static String stripFields(String text) {
return org.apache.poi.hssf.usermodel.HeaderFooter.stripFields(text);
}
public abstract String getText();
protected abstract void setText(String text);
get the text representing the center part of this element
/**
* get the text representing the center part of this element
*/
@Override
public String getCenter() {
String text = helper.getCenterSection(getText());
if (stripFields)
return stripFields(text);
return text;
}
get the text representing the left part of this element
/**
* get the text representing the left part of this element
*/
@Override
public String getLeft() {
String text = helper.getLeftSection(getText());
if (stripFields)
return stripFields(text);
return text;
}
get the text representing the right part of this element
/**
* get the text representing the right part of this element
*/
@Override
public String getRight() {
String text = helper.getRightSection(getText());
if (stripFields)
return stripFields(text);
return text;
}
set a centered string value for this element
/**
* set a centered string value for this element
*/
@Override
public void setCenter(String newCenter) {
setText(helper.setCenterSection(getText(), newCenter));
}
set a left string value for this element
/**
* set a left string value for this element
*/
@Override
public void setLeft(String newLeft) {
setText(helper.setLeftSection(getText(), newLeft));
}
set a right string value for this element
/**
* set a right string value for this element
*/
@Override
public void setRight(String newRight) {
setText(helper.setRightSection(getText(), newRight));
}
}