:poi-scratchpad - fix javadocs - link to dependent/external project javadocs

git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1888746 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Andreas Beeker 2021-04-13 21:37:33 +00:00
parent 240b02daec
commit 088d1dd197
20 changed files with 1097 additions and 1264 deletions

View File

@ -31,6 +31,7 @@ final String VERSIONS9 = 'META-INF/versions/9'
configurations {
tests
javadocs
}
sourceSets {
@ -56,6 +57,9 @@ dependencies {
testImplementation project(path: ':poi', configuration: 'tests')
testImplementation "org.junit.jupiter:junit-jupiter-api:${junitVersion}"
testRuntimeOnly "org.junit.jupiter:junit-jupiter-engine:${junitVersion}"
javadocs project(':poi')
javadocs project(':poi-ooxml')
}
final MODULE_NAME = 'org.apache.poi.scratchpad'
@ -202,11 +206,20 @@ test {
}
javadoc {
// fails currently, need to fix the sources
failOnError = false
// if(JavaVersion.current().isJava9Compatible()) {
// options.addBooleanOption('html5', true)
// }
failOnError = true
doFirst {
options {
if (JavaVersion.current().isJava9Compatible()) {
addBooleanOption('html5', true)
}
links 'https://poi.apache.org/apidocs/dev/'
links 'https://docs.oracle.com/javase/8/docs/api/'
use = true
splitIndex = true
source = "1.8"
classpath += configurations.javadocs.files
}
}
}
publishing {

View File

@ -99,7 +99,7 @@ public final class HPBFDumper {
/**
* Dump out the escher parts of the file.
* Escher -> EscherStm and EscherDelayStm
* Escher -> EscherStm and EscherDelayStm
*/
public void dumpEscher() throws IOException {
DirectoryNode escherDir = (DirectoryNode)

View File

@ -97,7 +97,7 @@ public final class AnimationInfoAtom extends RecordAtom {
/**
* Record header.
*/
private byte[] _header;
private final byte[] _header;
/**
* record data
@ -246,7 +246,7 @@ public final class AnimationInfoAtom extends RecordAtom {
* A signed integer that specifies the order of the animation in the slide.
* It MUST be greater than or equal to -2. The value -2 specifies that this animation follows the order of
* the corresponding placeholder shape on the main master slide or title master slide.
* The value -1 SHOULD NOT <105> be used.
* The value -1 SHOULD NOT be used.
*/
public int getOrderID(){
return LittleEndian.getInt(_recdata, 16);
@ -256,7 +256,7 @@ public final class AnimationInfoAtom extends RecordAtom {
* A signed integer that specifies the order of the animation in the slide.
* It MUST be greater than or equal to -2. The value -2 specifies that this animation follows the order of
* the corresponding placeholder shape on the main master slide or title master slide.
* The value -1 SHOULD NOT <105> be used.
* The value -1 SHOULD NOT be used.
*/
public void setOrderID(int id){
LittleEndian.putInt(_recdata, 16, id);

View File

@ -24,8 +24,10 @@ import java.util.Map;
* List of all known record types in a PowerPoint document, and the
* classes that handle them.
* There are two categories of records:
* <li> PowerPoint records: 0 <= info <= 10002 (will carry class info)
* <li> Escher records: info >= 0xF000 (handled by DDF, so no class info)
* <ul>
* <li> PowerPoint records: {@code 0 <= info <= 10002} (will carry class info)
* <li> Escher records: {@code info >= 0xF000} (handled by DDF, so no class info)
* </ul>
*/
public enum RecordTypes {
Unknown(0,null),
@ -186,9 +188,9 @@ public enum RecordTypes {
}
public final short typeID;
public final RecordConstructor recordConstructor;
public final RecordConstructor<?> recordConstructor;
RecordTypes(int typeID, RecordConstructor recordConstructor) {
RecordTypes(int typeID, RecordConstructor<?> recordConstructor) {
this.typeID = (short)typeID;
this.recordConstructor = recordConstructor;
}

View File

@ -101,8 +101,8 @@ public class OutlookTextExtractor implements POIOLE2TextExtractor {
}
try {
s.append("From: " + msg.getDisplayFrom() + "\n");
} catch (ChunkNotFoundException e) {
s.append("From: ").append(msg.getDisplayFrom()).append("\n");
} catch (ChunkNotFoundException ignored) {
}
// For To, CC and BCC, try to match the names
@ -111,15 +111,15 @@ public class OutlookTextExtractor implements POIOLE2TextExtractor {
// people in To + CC + BCC.
try {
handleEmails(s, "To", msg.getDisplayTo(), emails);
} catch (ChunkNotFoundException e) {
} catch (ChunkNotFoundException ignored) {
}
try {
handleEmails(s, "CC", msg.getDisplayCC(), emails);
} catch (ChunkNotFoundException e) {
} catch (ChunkNotFoundException ignored) {
}
try {
handleEmails(s, "BCC", msg.getDisplayBCC(), emails);
} catch (ChunkNotFoundException e) {
} catch (ChunkNotFoundException ignored) {
}
// Date - try two ways to find it
@ -145,7 +145,7 @@ public class OutlookTextExtractor implements POIOLE2TextExtractor {
try {
s.append("Subject: ").append(msg.getSubject()).append("\n");
} catch (ChunkNotFoundException e) {
} catch (ChunkNotFoundException ignored) {
}
// Display attachment names
@ -164,7 +164,7 @@ public class OutlookTextExtractor implements POIOLE2TextExtractor {
try {
s.append("\n").append(msg.getTextBody()).append("\n");
} catch (ChunkNotFoundException e) {
} catch (ChunkNotFoundException ignored) {
}
return s.toString();
@ -173,7 +173,7 @@ public class OutlookTextExtractor implements POIOLE2TextExtractor {
/**
* Takes a Display focused string, eg "Nick; Jim" and an iterator
* of emails, and does its best to return something like
* "Nick <nick@example.com>; Jim <jim@example.com>"
* {@code "Nick <nick@example.com>; Jim <jim@example.com>"}
*/
protected void handleEmails(StringBuilder s, String type, String displayText, Iterator<String> emails) {
if (displayText == null || displayText.length() == 0) {

View File

@ -19,6 +19,7 @@ package org.apache.poi.hssf.converter;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.Arrays;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.hssf.util.HSSFColor;
@ -27,32 +28,28 @@ import org.apache.poi.ss.usermodel.BorderStyle;
import org.apache.poi.ss.usermodel.HorizontalAlignment;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.util.CellRangeAddress;
import org.apache.poi.util.Beta;
import org.apache.poi.util.Internal;
/**
* Common class for {@link ExcelToFoUtils} and {@link ExcelToHtmlUtils}
* Common class for {@link ExcelToFoConverter} and {@link ExcelToHtmlConverter}
*
* @author Sergey Vladimirov (vlsergey {at} gmail {dot} com)
* @see AbstractWordUtils
* @since POI 3.8 beta 5
*/
@Beta
public class AbstractExcelUtils {
@Internal
class AbstractExcelUtils {
/*package*/ static final String EMPTY = "";
private static final short EXCEL_COLUMN_WIDTH_FACTOR = 256;
private static final int UNIT_OFFSET_LENGTH = 7;
public static String getAlign( HorizontalAlignment alignment ) {
switch ( alignment ) {
public static String getAlign(HorizontalAlignment alignment) {
switch (alignment) {
case CENTER:
return "center";
case CENTER_SELECTION:
return "center";
case FILL:
// XXX: shall we support fill?
return "";
case GENERAL:
return "";
case JUSTIFY:
return "justify";
case LEFT:
@ -60,13 +57,14 @@ public class AbstractExcelUtils {
case RIGHT:
return "right";
default:
case GENERAL:
return "";
}
}
public static String getBorderStyle( BorderStyle xlsBorder ) {
public static String getBorderStyle(BorderStyle xlsBorder) {
final String borderStyle;
switch ( xlsBorder ) {
switch (xlsBorder) {
case NONE:
borderStyle = "none";
break;
@ -93,9 +91,9 @@ public class AbstractExcelUtils {
return borderStyle;
}
public static String getBorderWidth( BorderStyle xlsBorder ) {
public static String getBorderWidth(BorderStyle xlsBorder) {
final String borderWidth;
switch ( xlsBorder ) {
switch (xlsBorder) {
case MEDIUM_DASH_DOT:
case MEDIUM_DASH_DOT_DOT:
case MEDIUM_DASHED:
@ -111,28 +109,33 @@ public class AbstractExcelUtils {
return borderWidth;
}
public static String getColor( HSSFColor color ) {
StringBuilder stringBuilder = new StringBuilder( 7 );
stringBuilder.append( '#' );
for ( short s : color.getTriplet() ) {
if ( s < 10 )
stringBuilder.append( '0' );
public static String getColor(HSSFColor color) {
StringBuilder stringBuilder = new StringBuilder(7);
stringBuilder.append('#');
for (short s : color.getTriplet()) {
if (s < 10) {
stringBuilder.append('0');
}
stringBuilder.append( Integer.toHexString( s ) );
stringBuilder.append(Integer.toHexString(s));
}
String result = stringBuilder.toString();
if ( result.equals( "#ffffff" ) )
if (result.equals("#ffffff")) {
return "white";
}
if ( result.equals( "#c0c0c0" ) )
if (result.equals("#c0c0c0")) {
return "silver";
}
if ( result.equals( "#808080" ) )
if (result.equals("#808080")) {
return "gray";
}
if ( result.equals( "#000000" ) )
if (result.equals("#000000")) {
return "black";
}
return result;
}
@ -142,26 +145,25 @@ public class AbstractExcelUtils {
* "http://apache-poi.1045710.n5.nabble.com/Excel-Column-Width-Unit-Converter-pixels-excel-column-width-units-td2301481.html"
* >here</a> for Xio explanation and details
*/
public static int getColumnWidthInPx( int widthUnits ) {
int pixels = ( widthUnits / EXCEL_COLUMN_WIDTH_FACTOR )
public static int getColumnWidthInPx(int widthUnits) {
int pixels = (widthUnits / EXCEL_COLUMN_WIDTH_FACTOR)
* UNIT_OFFSET_LENGTH;
int offsetWidthUnits = widthUnits % EXCEL_COLUMN_WIDTH_FACTOR;
pixels += Math.round( offsetWidthUnits
/ ( (float) EXCEL_COLUMN_WIDTH_FACTOR / UNIT_OFFSET_LENGTH ) );
pixels += Math.round(offsetWidthUnits
/ ((float) EXCEL_COLUMN_WIDTH_FACTOR / UNIT_OFFSET_LENGTH));
return pixels;
}
/**
* @param mergedRanges
* map of sheet merged ranges built with
* {@link ExcelToHtmlUtils#buildMergedRangesMap(Sheet)}
* @param mergedRanges map of sheet merged ranges built with
* {@link #buildMergedRangesMap(Sheet)}
* @return {@link CellRangeAddress} from map if cell with specified row and
* column numbers contained in found range, <tt>null</tt> otherwise
*/
public static CellRangeAddress getMergedRange(
CellRangeAddress[][] mergedRanges, int rowNumber, int columnNumber ) {
CellRangeAddress[][] mergedRanges, int rowNumber, int columnNumber) {
CellRangeAddress[] mergedRangeRowInfo = rowNumber < mergedRanges.length ? mergedRanges[rowNumber]
: null;
@ -170,19 +172,66 @@ public class AbstractExcelUtils {
: null;
}
static boolean isEmpty( String str )
{
static boolean isEmpty(String str) {
return str == null || str.length() == 0;
}
static boolean isNotEmpty( String str )
{
return !isEmpty( str );
static boolean isNotEmpty(String str) {
return !isEmpty(str);
}
public static HSSFWorkbook loadXls(File xlsFile ) throws IOException {
try (final FileInputStream inputStream = new FileInputStream( xlsFile )) {
return new HSSFWorkbook( inputStream );
public static HSSFWorkbook loadXls(File xlsFile) throws IOException {
try (final FileInputStream inputStream = new FileInputStream(xlsFile)) {
return new HSSFWorkbook(inputStream);
}
}
public static void appendAlign(StringBuilder style, HorizontalAlignment alignment) {
String cssAlign = getAlign(alignment);
if (isEmpty(cssAlign)) {
return;
}
style.append("text-align:");
style.append(cssAlign);
style.append(";");
}
/**
* Creates a map (i.e. two-dimensional array) filled with ranges. Allow fast
* retrieving {@link CellRangeAddress} of any cell, if cell is contained in
* range.
*
* @see #getMergedRange(CellRangeAddress[][], int, int)
*/
public static CellRangeAddress[][] buildMergedRangesMap(Sheet sheet) {
CellRangeAddress[][] mergedRanges = new CellRangeAddress[1][];
for (final CellRangeAddress cellRangeAddress : sheet.getMergedRegions()) {
final int requiredHeight = cellRangeAddress.getLastRow() + 1;
if (mergedRanges.length < requiredHeight) {
mergedRanges = Arrays.copyOf(mergedRanges, requiredHeight, CellRangeAddress[][].class);
}
for (int r = cellRangeAddress.getFirstRow(); r <= cellRangeAddress
.getLastRow(); r++) {
final int requiredWidth = cellRangeAddress.getLastColumn() + 1;
CellRangeAddress[] rowMerged = mergedRanges[r];
if (rowMerged == null) {
rowMerged = new CellRangeAddress[requiredWidth];
mergedRanges[r] = rowMerged;
} else {
final int rowMergedLength = rowMerged.length;
if (rowMergedLength < requiredWidth) {
rowMerged = mergedRanges[r] =
Arrays.copyOf(rowMerged, requiredWidth, CellRangeAddress[].class);
}
}
Arrays.fill(rowMerged, cellRangeAddress.getFirstColumn(),
cellRangeAddress.getLastColumn() + 1, cellRangeAddress);
}
}
return mergedRanges;
}
}

View File

@ -16,6 +16,16 @@
==================================================================== */
package org.apache.poi.hssf.converter;
import static org.apache.poi.hssf.converter.AbstractExcelUtils.appendAlign;
import static org.apache.poi.hssf.converter.AbstractExcelUtils.buildMergedRangesMap;
import static org.apache.poi.hssf.converter.AbstractExcelUtils.getBorderStyle;
import static org.apache.poi.hssf.converter.AbstractExcelUtils.getBorderWidth;
import static org.apache.poi.hssf.converter.AbstractExcelUtils.getColor;
import static org.apache.poi.hssf.converter.AbstractExcelUtils.getMergedRange;
import static org.apache.poi.hssf.converter.AbstractExcelUtils.isEmpty;
import static org.apache.poi.hssf.converter.AbstractExcelUtils.isNotEmpty;
import static org.apache.poi.hssf.converter.AbstractExcelUtils.loadXls;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
@ -53,8 +63,6 @@ import org.w3c.dom.Text;
/**
* Converts xls files (97-2007) to HTML file.
*
* @author Sergey Vladimirov (vlsergey {at} gmail {dot} com)
*/
@Beta
public class ExcelToHtmlConverter extends AbstractExcelConverter {
@ -69,37 +77,36 @@ public class ExcelToHtmlConverter extends AbstractExcelConverter {
* Where infile is an input .xls file ( Word 97-2007) which will be rendered
* as HTML into outfile
*/
public static void main( String[] args ) throws Exception {
if ( args.length < 2 ) {
System.err.println( "Usage: ExcelToHtmlConverter <inputFile.xls> <saveTo.html>" );
public static void main(String[] args) throws Exception {
if (args.length < 2) {
System.err.println("Usage: ExcelToHtmlConverter <inputFile.xls> <saveTo.html>");
return;
}
System.out.println( "Converting " + args[0] );
System.out.println( "Saving output to " + args[1] );
System.out.println("Converting " + args[0]);
System.out.println("Saving output to " + args[1]);
Document doc = ExcelToHtmlConverter.process( new File( args[0] ) );
Document doc = ExcelToHtmlConverter.process(new File(args[0]));
DOMSource domSource = new DOMSource( doc );
StreamResult streamResult = new StreamResult( new File(args[1]) );
DOMSource domSource = new DOMSource(doc);
StreamResult streamResult = new StreamResult(new File(args[1]));
Transformer serializer = XMLHelper.newTransformer();
// TODO set encoding from a command argument
serializer.setOutputProperty( OutputKeys.METHOD, "html" );
serializer.transform( domSource, streamResult );
serializer.setOutputProperty(OutputKeys.METHOD, "html");
serializer.transform(domSource, streamResult);
}
/**
* Converts Excel file (97-2007) into HTML file.
*
* @param xlsFile
* workbook file to process
* @param xlsFile workbook file to process
* @return DOM representation of result HTML
* @throws IOException If an error occurs reading or writing files
* @throws ParserConfigurationException If configuration is incorrect
*/
public static Document process( File xlsFile ) throws IOException, ParserConfigurationException {
try (HSSFWorkbook workbook = AbstractExcelUtils.loadXls(xlsFile)) {
public static Document process(File xlsFile) throws IOException, ParserConfigurationException {
try (HSSFWorkbook workbook = loadXls(xlsFile)) {
return ExcelToHtmlConverter.process(workbook);
}
}
@ -112,7 +119,7 @@ public class ExcelToHtmlConverter extends AbstractExcelConverter {
* @throws IOException If an error occurs reading or writing files
* @throws ParserConfigurationException If configuration is incorrect
*/
public static Document process( InputStream xlsStream ) throws IOException, ParserConfigurationException {
public static Document process(InputStream xlsStream) throws IOException, ParserConfigurationException {
try (HSSFWorkbook workbook = new HSSFWorkbook(xlsStream)) {
return ExcelToHtmlConverter.process(workbook);
}
@ -126,10 +133,10 @@ public class ExcelToHtmlConverter extends AbstractExcelConverter {
* @throws IOException If an error occurs reading or writing files
* @throws ParserConfigurationException If configuration is incorrect
*/
public static Document process( HSSFWorkbook workbook ) throws IOException, ParserConfigurationException {
public static Document process(HSSFWorkbook workbook) throws IOException, ParserConfigurationException {
ExcelToHtmlConverter excelToHtmlConverter = new ExcelToHtmlConverter(
XMLHelper.newDocumentBuilder().newDocument() );
excelToHtmlConverter.processWorkbook( workbook );
XMLHelper.newDocumentBuilder().newDocument());
excelToHtmlConverter.processWorkbook(workbook);
return excelToHtmlConverter.getDocument();
}
@ -145,167 +152,161 @@ public class ExcelToHtmlConverter extends AbstractExcelConverter {
private String cssClassPrefixTable = "t";
private Map<Short, String> excelStyleToClass = new LinkedHashMap<>();
private final Map<Short, String> excelStyleToClass = new LinkedHashMap<>();
private final HtmlDocumentFacade htmlDocumentFacade;
private boolean useDivsToSpan;
public ExcelToHtmlConverter( Document doc )
{
htmlDocumentFacade = new HtmlDocumentFacade( doc );
public ExcelToHtmlConverter(Document doc) {
htmlDocumentFacade = new HtmlDocumentFacade(doc);
}
public ExcelToHtmlConverter( HtmlDocumentFacade htmlDocumentFacade ) {
public ExcelToHtmlConverter(HtmlDocumentFacade htmlDocumentFacade) {
this.htmlDocumentFacade = htmlDocumentFacade;
}
protected String buildStyle( HSSFWorkbook workbook, HSSFCellStyle cellStyle ) {
protected String buildStyle(HSSFWorkbook workbook, HSSFCellStyle cellStyle) {
StringBuilder style = new StringBuilder();
style.append( "white-space:pre-wrap;" );
ExcelToHtmlUtils.appendAlign( style, cellStyle.getAlignment() );
style.append("white-space:pre-wrap;");
appendAlign(style, cellStyle.getAlignment());
switch (cellStyle.getFillPattern()) {
// no fill
case NO_FILL: break;
case NO_FILL:
break;
case SOLID_FOREGROUND:
final HSSFColor foregroundColor = cellStyle.getFillForegroundColorColor();
if ( foregroundColor == null ) break;
String fgCol = AbstractExcelUtils.getColor( foregroundColor );
if (foregroundColor == null) {
break;
}
String fgCol = getColor(foregroundColor);
style.append("background-color:").append(fgCol).append(";");
break;
default:
final HSSFColor backgroundColor = cellStyle.getFillBackgroundColorColor();
if ( backgroundColor == null ) break;
String bgCol = AbstractExcelUtils.getColor( backgroundColor );
if (backgroundColor == null) {
break;
}
String bgCol = getColor(backgroundColor);
style.append("background-color:").append(bgCol).append(";");
break;
}
buildStyle_border( workbook, style, "top", cellStyle.getBorderTop(),
cellStyle.getTopBorderColor() );
buildStyle_border( workbook, style, "right",
cellStyle.getBorderRight(), cellStyle.getRightBorderColor() );
buildStyle_border( workbook, style, "bottom",
cellStyle.getBorderBottom(), cellStyle.getBottomBorderColor() );
buildStyle_border( workbook, style, "left", cellStyle.getBorderLeft(),
cellStyle.getLeftBorderColor() );
buildStyle_border(workbook, style, "top", cellStyle.getBorderTop(),
cellStyle.getTopBorderColor());
buildStyle_border(workbook, style, "right",
cellStyle.getBorderRight(), cellStyle.getRightBorderColor());
buildStyle_border(workbook, style, "bottom",
cellStyle.getBorderBottom(), cellStyle.getBottomBorderColor());
buildStyle_border(workbook, style, "left", cellStyle.getBorderLeft(),
cellStyle.getLeftBorderColor());
HSSFFont font = cellStyle.getFont( workbook );
buildStyle_font( workbook, style, font );
HSSFFont font = cellStyle.getFont(workbook);
buildStyle_font(workbook, style, font);
return style.toString();
}
private void buildStyle_border( HSSFWorkbook workbook, StringBuilder style,
String type, BorderStyle xlsBorder, short borderColor ) {
if ( xlsBorder == BorderStyle.NONE ) {
private void buildStyle_border(HSSFWorkbook workbook, StringBuilder style,
String type, BorderStyle xlsBorder, short borderColor) {
if (xlsBorder == BorderStyle.NONE) {
return;
}
StringBuilder borderStyle = new StringBuilder();
borderStyle.append( AbstractExcelUtils.getBorderWidth( xlsBorder ) );
borderStyle.append( ' ' );
borderStyle.append( AbstractExcelUtils.getBorderStyle( xlsBorder ) );
borderStyle.append(getBorderWidth(xlsBorder));
borderStyle.append(' ');
borderStyle.append(getBorderStyle(xlsBorder));
final HSSFColor color = workbook.getCustomPalette().getColor(
borderColor );
if ( color != null )
{
borderStyle.append( ' ' );
borderStyle.append( AbstractExcelUtils.getColor( color ) );
final HSSFColor color = workbook.getCustomPalette().getColor(borderColor);
if (color != null) {
borderStyle.append(' ');
borderStyle.append(getColor(color));
}
style.append("border-").append(type).append(":").append(borderStyle).append(";");
}
void buildStyle_font( HSSFWorkbook workbook, StringBuilder style,
HSSFFont font ) {
if ( font.getBold() )
{
style.append( "font-weight:bold;" );
void buildStyle_font(HSSFWorkbook workbook, StringBuilder style,
HSSFFont font) {
if (font.getBold()) {
style.append("font-weight:bold;");
}
final HSSFColor fontColor = workbook.getCustomPalette().getColor(
font.getColor() );
if ( fontColor != null )
style.append("color: ").append(AbstractExcelUtils.getColor(fontColor)).append("; ");
font.getColor());
if (fontColor != null) {
style.append("color: ").append(getColor(fontColor)).append("; ");
}
if ( font.getFontHeightInPoints() != 0 )
if (font.getFontHeightInPoints() != 0) {
style.append("font-size:").append(font.getFontHeightInPoints()).append("pt;");
}
if ( font.getItalic() )
{
style.append( "font-style:italic;" );
if (font.getItalic()) {
style.append("font-style:italic;");
}
}
public String getCssClassPrefixCell()
{
public String getCssClassPrefixCell() {
return cssClassPrefixCell;
}
public String getCssClassPrefixDiv()
{
public String getCssClassPrefixDiv() {
return cssClassPrefixDiv;
}
public String getCssClassPrefixRow()
{
public String getCssClassPrefixRow() {
return cssClassPrefixRow;
}
public String getCssClassPrefixTable()
{
public String getCssClassPrefixTable() {
return cssClassPrefixTable;
}
public Document getDocument()
{
public Document getDocument() {
return htmlDocumentFacade.getDocument();
}
protected String getStyleClassName( HSSFWorkbook workbook,
HSSFCellStyle cellStyle ) {
final Short cellStyleKey = Short.valueOf( cellStyle.getIndex() );
protected String getStyleClassName(HSSFWorkbook workbook,
HSSFCellStyle cellStyle) {
final Short cellStyleKey = Short.valueOf(cellStyle.getIndex());
String knownClass = excelStyleToClass.get( cellStyleKey );
if ( knownClass != null )
String knownClass = excelStyleToClass.get(cellStyleKey);
if (knownClass != null) {
return knownClass;
}
String cssStyle = buildStyle( workbook, cellStyle );
String cssStyle = buildStyle(workbook, cellStyle);
String cssClass = htmlDocumentFacade.getOrCreateCssClass(
cssClassPrefixCell, cssStyle );
excelStyleToClass.put( cellStyleKey, cssClass );
cssClassPrefixCell, cssStyle);
excelStyleToClass.put(cellStyleKey, cssClass);
return cssClass;
}
public boolean isUseDivsToSpan()
{
public boolean isUseDivsToSpan() {
return useDivsToSpan;
}
protected boolean processCell( HSSFCell cell, Element tableCellElement,
int normalWidthPx, int maxSpannedWidthPx, float normalHeightPt ) {
protected boolean processCell(HSSFCell cell, Element tableCellElement,
int normalWidthPx, int maxSpannedWidthPx, float normalHeightPt) {
final HSSFCellStyle cellStyle = cell.getCellStyle();
String value;
switch ( cell.getCellType() ) {
switch (cell.getCellType()) {
case STRING:
// XXX: enrich
value = cell.getRichStringCellValue().getString();
break;
case FORMULA:
switch ( cell.getCachedFormulaResultType() ) {
switch (cell.getCachedFormulaResultType()) {
case STRING:
HSSFRichTextString str = cell.getRichStringCellValue();
if ( str != null && str.length() > 0 )
{
value = ( str.toString() );
}
else
{
if (str != null && str.length() > 0) {
value = (str.toString());
} else {
value = AbstractExcelUtils.EMPTY;
}
break;
@ -316,10 +317,10 @@ public class ExcelToHtmlConverter extends AbstractExcelConverter {
value = _formatter.formatRawCellContents(nValue, df, dfs);
break;
case BOOLEAN:
value = String.valueOf( cell.getBooleanCellValue() );
value = String.valueOf(cell.getBooleanCellValue());
break;
case ERROR:
value = ErrorEval.getText( cell.getErrorCellValue() );
value = ErrorEval.getText(cell.getErrorCellValue());
break;
default:
LOG.atWarn().log("Unexpected cell cachedFormulaResultType ({})", cell.getCachedFormulaResultType());
@ -331,35 +332,35 @@ public class ExcelToHtmlConverter extends AbstractExcelConverter {
value = AbstractExcelUtils.EMPTY;
break;
case NUMERIC:
value = _formatter.formatCellValue( cell );
value = _formatter.formatCellValue(cell);
break;
case BOOLEAN:
value = String.valueOf( cell.getBooleanCellValue() );
value = String.valueOf(cell.getBooleanCellValue());
break;
case ERROR:
value = ErrorEval.getText( cell.getErrorCellValue() );
value = ErrorEval.getText(cell.getErrorCellValue());
break;
default:
LOG.atWarn().log("Unexpected cell type ({})", cell.getCellType());
return true;
}
final boolean noText = AbstractExcelUtils.isEmpty( value );
final boolean noText = isEmpty(value);
final boolean wrapInDivs = !noText && isUseDivsToSpan() && !cellStyle.getWrapText();
if ( cellStyle.getIndex() != 0 ) {
if (cellStyle.getIndex() != 0) {
@SuppressWarnings("resource")
HSSFWorkbook workbook = cell.getRow().getSheet().getWorkbook();
String mainCssClass = getStyleClassName( workbook, cellStyle );
String mainCssClass = getStyleClassName(workbook, cellStyle);
if ( wrapInDivs ) {
tableCellElement.setAttribute( "class", mainCssClass + " "
+ cssClassContainerCell );
if (wrapInDivs) {
tableCellElement.setAttribute("class", mainCssClass + " "
+ cssClassContainerCell);
} else {
tableCellElement.setAttribute( "class", mainCssClass );
tableCellElement.setAttribute("class", mainCssClass);
}
if ( noText ) {
if (noText) {
/*
* if cell style is defined (like borders, etc.) but cell text
* is empty, add "&nbsp;" to output, so browser won't collapse
@ -369,216 +370,219 @@ public class ExcelToHtmlConverter extends AbstractExcelConverter {
}
}
if ( isOutputLeadingSpacesAsNonBreaking() && value.startsWith( " " ) ) {
if (isOutputLeadingSpacesAsNonBreaking() && value.startsWith(" ")) {
StringBuilder builder = new StringBuilder();
for ( int c = 0; c < value.length(); c++ )
{
if ( value.charAt( c ) != ' ' )
for (int c = 0; c < value.length(); c++) {
if (value.charAt(c) != ' ') {
break;
builder.append( '\u00a0' );
}
builder.append('\u00a0');
}
if ( value.length() != builder.length() )
builder.append( value.substring( builder.length() ) );
if (value.length() != builder.length()) {
builder.append(value.substring(builder.length()));
}
value = builder.toString();
}
Text text = htmlDocumentFacade.createText( value );
Text text = htmlDocumentFacade.createText(value);
if ( wrapInDivs ) {
if (wrapInDivs) {
Element outerDiv = htmlDocumentFacade.createBlock();
outerDiv.setAttribute( "class", this.cssClassContainerDiv );
outerDiv.setAttribute("class", this.cssClassContainerDiv);
Element innerDiv = htmlDocumentFacade.createBlock();
StringBuilder innerDivStyle = new StringBuilder();
innerDivStyle.append( "position:absolute;min-width:" );
innerDivStyle.append( normalWidthPx );
innerDivStyle.append( "px;" );
if ( maxSpannedWidthPx != Integer.MAX_VALUE ) {
innerDivStyle.append( "max-width:" );
innerDivStyle.append( maxSpannedWidthPx );
innerDivStyle.append( "px;" );
innerDivStyle.append("position:absolute;min-width:");
innerDivStyle.append(normalWidthPx);
innerDivStyle.append("px;");
if (maxSpannedWidthPx != Integer.MAX_VALUE) {
innerDivStyle.append("max-width:");
innerDivStyle.append(maxSpannedWidthPx);
innerDivStyle.append("px;");
}
innerDivStyle.append( "overflow:hidden;max-height:" );
innerDivStyle.append( normalHeightPt );
innerDivStyle.append( "pt;white-space:nowrap;" );
ExcelToHtmlUtils.appendAlign( innerDivStyle, cellStyle.getAlignment() );
htmlDocumentFacade.addStyleClass( outerDiv, cssClassPrefixDiv,
innerDivStyle.toString() );
innerDivStyle.append("overflow:hidden;max-height:");
innerDivStyle.append(normalHeightPt);
innerDivStyle.append("pt;white-space:nowrap;");
appendAlign(innerDivStyle, cellStyle.getAlignment());
htmlDocumentFacade.addStyleClass(outerDiv, cssClassPrefixDiv,
innerDivStyle.toString());
innerDiv.appendChild( text );
outerDiv.appendChild( innerDiv );
tableCellElement.appendChild( outerDiv );
innerDiv.appendChild(text);
outerDiv.appendChild(innerDiv);
tableCellElement.appendChild(outerDiv);
} else {
tableCellElement.appendChild( text );
tableCellElement.appendChild(text);
}
return AbstractExcelUtils.isEmpty( value ) && (cellStyle.getIndex() == 0);
return isEmpty(value) && (cellStyle.getIndex() == 0);
}
protected void processColumnHeaders( HSSFSheet sheet, int maxSheetColumns,
Element table ) {
protected void processColumnHeaders(HSSFSheet sheet, int maxSheetColumns,
Element table) {
Element tableHeader = htmlDocumentFacade.createTableHeader();
table.appendChild( tableHeader );
table.appendChild(tableHeader);
Element tr = htmlDocumentFacade.createTableRow();
if ( isOutputRowNumbers() ) {
if (isOutputRowNumbers()) {
// empty row at left-top corner
tr.appendChild( htmlDocumentFacade.createTableHeaderCell() );
tr.appendChild(htmlDocumentFacade.createTableHeaderCell());
}
for ( int c = 0; c < maxSheetColumns; c++ ) {
if ( !isOutputHiddenColumns() && sheet.isColumnHidden( c ) )
for (int c = 0; c < maxSheetColumns; c++) {
if (!isOutputHiddenColumns() && sheet.isColumnHidden(c)) {
continue;
}
Element th = htmlDocumentFacade.createTableHeaderCell();
String text = getColumnName( c );
th.appendChild( htmlDocumentFacade.createText( text ) );
tr.appendChild( th );
String text = getColumnName(c);
th.appendChild(htmlDocumentFacade.createText(text));
tr.appendChild(th);
}
tableHeader.appendChild( tr );
tableHeader.appendChild(tr);
}
/**
* Creates COLGROUP element with width specified for all columns. (Except
* first if <tt>{@link #isOutputRowNumbers()}==true</tt>)
*/
protected void processColumnWidths( HSSFSheet sheet, int maxSheetColumns,
Element table ) {
protected void processColumnWidths(HSSFSheet sheet, int maxSheetColumns,
Element table) {
// draw COLS after we know max column number
Element columnGroup = htmlDocumentFacade.createTableColumnGroup();
if ( isOutputRowNumbers() )
{
columnGroup.appendChild( htmlDocumentFacade.createTableColumn() );
if (isOutputRowNumbers()) {
columnGroup.appendChild(htmlDocumentFacade.createTableColumn());
}
for ( int c = 0; c < maxSheetColumns; c++ )
{
if ( !isOutputHiddenColumns() && sheet.isColumnHidden( c ) )
for (int c = 0; c < maxSheetColumns; c++) {
if (!isOutputHiddenColumns() && sheet.isColumnHidden(c)) {
continue;
}
Element col = htmlDocumentFacade.createTableColumn();
col.setAttribute( "width",
String.valueOf( getColumnWidth( sheet, c ) ) );
columnGroup.appendChild( col );
col.setAttribute("width",
String.valueOf(getColumnWidth(sheet, c)));
columnGroup.appendChild(col);
}
table.appendChild( columnGroup );
table.appendChild(columnGroup);
}
protected void processDocumentInformation(SummaryInformation summaryInformation ) {
if ( AbstractExcelUtils.isNotEmpty( summaryInformation.getTitle() ) )
htmlDocumentFacade.setTitle( summaryInformation.getTitle() );
protected void processDocumentInformation(SummaryInformation summaryInformation) {
if (isNotEmpty(summaryInformation.getTitle())) {
htmlDocumentFacade.setTitle(summaryInformation.getTitle());
}
if ( AbstractExcelUtils.isNotEmpty( summaryInformation.getAuthor() ) )
htmlDocumentFacade.addAuthor( summaryInformation.getAuthor() );
if (isNotEmpty(summaryInformation.getAuthor())) {
htmlDocumentFacade.addAuthor(summaryInformation.getAuthor());
}
if ( AbstractExcelUtils.isNotEmpty( summaryInformation.getKeywords() ) )
htmlDocumentFacade.addKeywords( summaryInformation.getKeywords() );
if (isNotEmpty(summaryInformation.getKeywords())) {
htmlDocumentFacade.addKeywords(summaryInformation.getKeywords());
}
if ( AbstractExcelUtils.isNotEmpty( summaryInformation.getComments() ) )
if (isNotEmpty(summaryInformation.getComments())) {
htmlDocumentFacade
.addDescription( summaryInformation.getComments() );
.addDescription(summaryInformation.getComments());
}
}
/**
* @return maximum 1-base index of column that were rendered, zero if none
*/
protected int processRow( CellRangeAddress[][] mergedRanges, HSSFRow row,
Element tableRowElement ) {
protected int processRow(CellRangeAddress[][] mergedRanges, HSSFRow row,
Element tableRowElement) {
final HSSFSheet sheet = row.getSheet();
final short maxColIx = row.getLastCellNum();
if ( maxColIx <= 0 )
if (maxColIx <= 0) {
return 0;
}
final List<Element> emptyCells = new ArrayList<>(maxColIx);
if ( isOutputRowNumbers() )
{
if (isOutputRowNumbers()) {
Element tableRowNumberCellElement = htmlDocumentFacade
.createTableHeaderCell();
processRowNumber( row, tableRowNumberCellElement );
emptyCells.add( tableRowNumberCellElement );
processRowNumber(row, tableRowNumberCellElement);
emptyCells.add(tableRowNumberCellElement);
}
int maxRenderedColumn = 0;
for ( int colIx = 0; colIx < maxColIx; colIx++ )
{
if ( !isOutputHiddenColumns() && sheet.isColumnHidden( colIx ) )
for (int colIx = 0; colIx < maxColIx; colIx++) {
if (!isOutputHiddenColumns() && sheet.isColumnHidden(colIx)) {
continue;
}
CellRangeAddress range = AbstractExcelUtils.getMergedRange(
mergedRanges, row.getRowNum(), colIx );
CellRangeAddress range = getMergedRange(mergedRanges, row.getRowNum(), colIx);
if ( range != null
&& ( range.getFirstColumn() != colIx || range.getFirstRow() != row
.getRowNum() ) )
if (range != null
&& (range.getFirstColumn() != colIx || range.getFirstRow() != row
.getRowNum())) {
continue;
}
HSSFCell cell = row.getCell( colIx );
HSSFCell cell = row.getCell(colIx);
int divWidthPx = 0;
if ( isUseDivsToSpan() )
{
divWidthPx = getColumnWidth( sheet, colIx );
if (isUseDivsToSpan()) {
divWidthPx = getColumnWidth(sheet, colIx);
boolean hasBreaks = false;
for ( int nextColumnIndex = colIx + 1; nextColumnIndex < maxColIx; nextColumnIndex++ )
{
if ( !isOutputHiddenColumns()
&& sheet.isColumnHidden( nextColumnIndex ) )
for (int nextColumnIndex = colIx + 1; nextColumnIndex < maxColIx; nextColumnIndex++) {
if (!isOutputHiddenColumns()
&& sheet.isColumnHidden(nextColumnIndex)) {
continue;
}
if ( row.getCell( nextColumnIndex ) != null
&& !isTextEmpty( row.getCell( nextColumnIndex ) ) )
{
if (row.getCell(nextColumnIndex) != null
&& !isTextEmpty(row.getCell(nextColumnIndex))) {
hasBreaks = true;
break;
}
divWidthPx += getColumnWidth( sheet, nextColumnIndex );
divWidthPx += getColumnWidth(sheet, nextColumnIndex);
}
if ( !hasBreaks )
if (!hasBreaks) {
divWidthPx = Integer.MAX_VALUE;
}
}
Element tableCellElement = htmlDocumentFacade.createTableCell();
if ( range != null )
{
if ( range.getFirstColumn() != range.getLastColumn() )
if (range != null) {
if (range.getFirstColumn() != range.getLastColumn()) {
tableCellElement.setAttribute(
"colspan",
String.valueOf( range.getLastColumn()
- range.getFirstColumn() + 1 ) );
if ( range.getFirstRow() != range.getLastRow() )
String.valueOf(range.getLastColumn()
- range.getFirstColumn() + 1));
}
if (range.getFirstRow() != range.getLastRow()) {
tableCellElement.setAttribute(
"rowspan",
String.valueOf( range.getLastRow()
- range.getFirstRow() + 1 ) );
String.valueOf(range.getLastRow()
- range.getFirstRow() + 1));
}
}
boolean emptyCell;
if ( cell != null )
{
emptyCell = processCell( cell, tableCellElement,
getColumnWidth( sheet, colIx ), divWidthPx,
row.getHeight() / 20f );
if (cell != null) {
emptyCell = processCell(cell, tableCellElement,
getColumnWidth(sheet, colIx), divWidthPx,
row.getHeight() / 20f);
} else {
emptyCell = true;
}
if ( emptyCell ) {
emptyCells.add( tableCellElement );
if (emptyCell) {
emptyCells.add(tableCellElement);
} else {
for ( Element emptyCellElement : emptyCells )
{
tableRowElement.appendChild( emptyCellElement );
for (Element emptyCellElement : emptyCells) {
tableRowElement.appendChild(emptyCellElement);
}
emptyCells.clear();
tableRowElement.appendChild( tableCellElement );
tableRowElement.appendChild(tableCellElement);
maxRenderedColumn = colIx;
}
}
@ -586,122 +590,120 @@ public class ExcelToHtmlConverter extends AbstractExcelConverter {
return maxRenderedColumn + 1;
}
protected void processRowNumber( HSSFRow row,
Element tableRowNumberCellElement ) {
tableRowNumberCellElement.setAttribute( "class", "rownumber" );
Text text = htmlDocumentFacade.createText( getRowName( row ) );
tableRowNumberCellElement.appendChild( text );
protected void processRowNumber(HSSFRow row,
Element tableRowNumberCellElement) {
tableRowNumberCellElement.setAttribute("class", "rownumber");
Text text = htmlDocumentFacade.createText(getRowName(row));
tableRowNumberCellElement.appendChild(text);
}
protected void processSheet( HSSFSheet sheet ) {
processSheetHeader( htmlDocumentFacade.getBody(), sheet );
protected void processSheet(HSSFSheet sheet) {
processSheetHeader(htmlDocumentFacade.getBody(), sheet);
final int physicalNumberOfRows = sheet.getPhysicalNumberOfRows();
if ( physicalNumberOfRows <= 0 )
if (physicalNumberOfRows <= 0) {
return;
}
Element table = htmlDocumentFacade.createTable();
htmlDocumentFacade.addStyleClass( table, cssClassPrefixTable,
"border-collapse:collapse;border-spacing:0;" );
htmlDocumentFacade.addStyleClass(table, cssClassPrefixTable,
"border-collapse:collapse;border-spacing:0;");
Element tableBody = htmlDocumentFacade.createTableBody();
final CellRangeAddress[][] mergedRanges = ExcelToHtmlUtils
.buildMergedRangesMap( sheet );
final CellRangeAddress[][] mergedRanges = buildMergedRangesMap(sheet);
final List<Element> emptyRowElements = new ArrayList<>(
physicalNumberOfRows);
int maxSheetColumns = 1;
for ( int r = sheet.getFirstRowNum(); r <= sheet.getLastRowNum(); r++ ) {
HSSFRow row = sheet.getRow( r );
for (int r = sheet.getFirstRowNum(); r <= sheet.getLastRowNum(); r++) {
HSSFRow row = sheet.getRow(r);
if ( row == null )
if (row == null) {
continue;
}
if ( !isOutputHiddenRows() && row.getZeroHeight() )
if (!isOutputHiddenRows() && row.getZeroHeight()) {
continue;
}
Element tableRowElement = htmlDocumentFacade.createTableRow();
htmlDocumentFacade.addStyleClass( tableRowElement,
cssClassPrefixRow, "height:" + ( row.getHeight() / 20f )
+ "pt;" );
htmlDocumentFacade.addStyleClass(tableRowElement,
cssClassPrefixRow, "height:" + (row.getHeight() / 20f)
+ "pt;");
int maxRowColumnNumber = processRow( mergedRanges, row,
tableRowElement );
int maxRowColumnNumber = processRow(mergedRanges, row,
tableRowElement);
if ( maxRowColumnNumber == 0 ) {
emptyRowElements.add( tableRowElement );
if (maxRowColumnNumber == 0) {
emptyRowElements.add(tableRowElement);
} else {
if ( !emptyRowElements.isEmpty() ) {
for ( Element emptyRowElement : emptyRowElements ) {
tableBody.appendChild( emptyRowElement );
if (!emptyRowElements.isEmpty()) {
for (Element emptyRowElement : emptyRowElements) {
tableBody.appendChild(emptyRowElement);
}
emptyRowElements.clear();
}
tableBody.appendChild( tableRowElement );
tableBody.appendChild(tableRowElement);
}
maxSheetColumns = Math.max( maxSheetColumns, maxRowColumnNumber );
maxSheetColumns = Math.max(maxSheetColumns, maxRowColumnNumber);
}
processColumnWidths( sheet, maxSheetColumns, table );
processColumnWidths(sheet, maxSheetColumns, table);
if ( isOutputColumnHeaders() ) {
processColumnHeaders( sheet, maxSheetColumns, table );
if (isOutputColumnHeaders()) {
processColumnHeaders(sheet, maxSheetColumns, table);
}
table.appendChild( tableBody );
table.appendChild(tableBody);
htmlDocumentFacade.getBody().appendChild( table );
htmlDocumentFacade.getBody().appendChild(table);
}
protected void processSheetHeader( Element htmlBody, HSSFSheet sheet ) {
protected void processSheetHeader(Element htmlBody, HSSFSheet sheet) {
Element h2 = htmlDocumentFacade.createHeader2();
h2.appendChild( htmlDocumentFacade.createText( sheet.getSheetName() ) );
htmlBody.appendChild( h2 );
h2.appendChild(htmlDocumentFacade.createText(sheet.getSheetName()));
htmlBody.appendChild(h2);
}
public void processWorkbook( HSSFWorkbook workbook ) {
public void processWorkbook(HSSFWorkbook workbook) {
final SummaryInformation summaryInformation = workbook
.getSummaryInformation();
if ( summaryInformation != null ) {
processDocumentInformation( summaryInformation );
if (summaryInformation != null) {
processDocumentInformation(summaryInformation);
}
if ( isUseDivsToSpan() ) {
if (isUseDivsToSpan()) {
// prepare CSS classes for later usage
this.cssClassContainerCell = htmlDocumentFacade
.getOrCreateCssClass( cssClassPrefixCell,
"padding:0;margin:0;align:left;vertical-align:top;" );
.getOrCreateCssClass(cssClassPrefixCell,
"padding:0;margin:0;align:left;vertical-align:top;");
this.cssClassContainerDiv = htmlDocumentFacade.getOrCreateCssClass(
cssClassPrefixDiv, "position:relative;" );
cssClassPrefixDiv, "position:relative;");
}
for ( int s = 0; s < workbook.getNumberOfSheets(); s++ ) {
HSSFSheet sheet = workbook.getSheetAt( s );
processSheet( sheet );
for (int s = 0; s < workbook.getNumberOfSheets(); s++) {
HSSFSheet sheet = workbook.getSheetAt(s);
processSheet(sheet);
}
htmlDocumentFacade.updateStylesheet();
}
public void setCssClassPrefixCell( String cssClassPrefixCell )
{
public void setCssClassPrefixCell(String cssClassPrefixCell) {
this.cssClassPrefixCell = cssClassPrefixCell;
}
public void setCssClassPrefixDiv( String cssClassPrefixDiv )
{
public void setCssClassPrefixDiv(String cssClassPrefixDiv) {
this.cssClassPrefixDiv = cssClassPrefixDiv;
}
public void setCssClassPrefixRow( String cssClassPrefixRow )
{
public void setCssClassPrefixRow(String cssClassPrefixRow) {
this.cssClassPrefixRow = cssClassPrefixRow;
}
public void setCssClassPrefixTable( String cssClassPrefixTable )
{
public void setCssClassPrefixTable(String cssClassPrefixTable) {
this.cssClassPrefixTable = cssClassPrefixTable;
}
@ -713,8 +715,7 @@ public class ExcelToHtmlConverter extends AbstractExcelConverter {
* with INDENT=YES option, because line breaks will make additional
* (unwanted) changes
*/
public void setUseDivsToSpan( boolean useDivsToSpan )
{
public void setUseDivsToSpan(boolean useDivsToSpan) {
this.useDivsToSpan = useDivsToSpan;
}
}

View File

@ -1,75 +0,0 @@
/* ====================================================================
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.hssf.converter;
import java.util.Arrays;
import org.apache.poi.ss.usermodel.HorizontalAlignment;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.util.CellRangeAddress;
import org.apache.poi.util.Beta;
@Beta
public class ExcelToHtmlUtils extends AbstractExcelUtils {
public static void appendAlign( StringBuilder style, HorizontalAlignment alignment ) {
String cssAlign = getAlign( alignment );
if ( isEmpty( cssAlign ) )
return;
style.append( "text-align:" );
style.append( cssAlign );
style.append( ";" );
}
/**
* Creates a map (i.e. two-dimensional array) filled with ranges. Allow fast
* retrieving {@link CellRangeAddress} of any cell, if cell is contained in
* range.
*
* @see #getMergedRange(CellRangeAddress[][], int, int)
*/
public static CellRangeAddress[][] buildMergedRangesMap( Sheet sheet ) {
CellRangeAddress[][] mergedRanges = new CellRangeAddress[1][];
for ( final CellRangeAddress cellRangeAddress : sheet.getMergedRegions() ) {
final int requiredHeight = cellRangeAddress.getLastRow() + 1;
if ( mergedRanges.length < requiredHeight ) {
mergedRanges = Arrays.copyOf(mergedRanges, requiredHeight, CellRangeAddress[][].class);
}
for ( int r = cellRangeAddress.getFirstRow(); r <= cellRangeAddress
.getLastRow(); r++ ) {
final int requiredWidth = cellRangeAddress.getLastColumn() + 1;
CellRangeAddress[] rowMerged = mergedRanges[r];
if ( rowMerged == null ) {
rowMerged = new CellRangeAddress[requiredWidth];
mergedRanges[r] = rowMerged;
} else {
final int rowMergedLength = rowMerged.length;
if ( rowMergedLength < requiredWidth ) {
rowMerged = mergedRanges[r] =
Arrays.copyOf(rowMerged, requiredWidth, CellRangeAddress[].class);
}
}
Arrays.fill( rowMerged, cellRangeAddress.getFirstColumn(),
cellRangeAddress.getLastColumn() + 1, cellRangeAddress );
}
}
return mergedRanges;
}
}

View File

@ -58,7 +58,7 @@ public class HwmfBitmapDib implements GenericRecord {
public enum BitCount {
/**
* The image SHOULD be in either JPEG or PNG format. <6> Neither of these formats includes
* The image SHOULD be in either JPEG or PNG format. Neither of these formats includes
* a color table, so this value specifies that no color table is present. See [JFIF] and [RFC2083]
* for more information concerning JPEG and PNG compression formats.
*/
@ -257,7 +257,7 @@ public class HwmfBitmapDib implements GenericRecord {
headerCompression == Compression.BI_RGB ||
headerCompression == Compression.BI_BITFIELDS ||
headerCompression == Compression.BI_CMYK) {
int fileSize = (int)Math.min(introSize+bodySize,recordSize);
int fileSize = Math.min(introSize+bodySize,recordSize);
imageData = IOUtils.safelyAllocate(fileSize, MAX_RECORD_LENGTH);
leis.readFully(imageData, 0, introSize);
leis.skipFully(recordSize-fileSize);
@ -271,10 +271,10 @@ public class HwmfBitmapDib implements GenericRecord {
}
}
protected int readHeader(LittleEndianInputStream leis) throws IOException {
protected int readHeader(LittleEndianInputStream leis) {
int size = 0;
/**
/*
* DIBHeaderInfo (variable): Either a BitmapCoreHeader Object or a
* BitmapInfoHeader Object that specifies information about the image.
*

View File

@ -205,7 +205,7 @@ public final class WordExtractor implements POIOLE2TextExtractor {
/**
* Grab the text out of the text pieces. Might also include various bits of
* crud, but will work in cases where the text piece -> paragraph mapping is
* crud, but will work in cases where the text piece -&gt; paragraph mapping is
* broken. Fast too.
*/
public String getTextFromPieces() {

View File

@ -50,7 +50,7 @@ public interface CharIndexTranslator {
boolean isIndexInTable(int bytePos);
/**
* Return first index >= bytePos that is in table
* Return first index &gt;= bytePos that is in table
*
* @param bytePos
* @return first index greater or equal to bytePos that is in table
@ -58,7 +58,7 @@ public interface CharIndexTranslator {
int lookIndexForward(int bytePos);
/**
* Return last index <= bytePos that is in table
* Return last index &lt;= bytePos that is in table
*
* @param bytePos
* @return last index less of equal to bytePos that is in table

View File

@ -137,7 +137,7 @@ public final class ListTables
/**
* Get the ListLevel for a given lsid and level
* @return ListLevel if found, or <code>null</code> if ListData can't be found or if level is > that available
* @return ListLevel if found, or {@code null} if ListData can't be found or if level is &gt; that available
*/
public ListLevel getLevel(int lsid, int level)
{

View File

@ -17,6 +17,8 @@
package org.apache.poi.hwpf.model;
import static org.apache.logging.log4j.util.Unbox.box;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.List;
@ -36,13 +38,11 @@ import org.apache.poi.hwpf.usermodel.Range;
import org.apache.poi.util.Internal;
import org.apache.poi.util.LittleEndian;
import static org.apache.logging.log4j.util.Unbox.box;
/**
* Holds information about all pictures embedded in Word Document either via "Insert -> Picture -> From File" or via
* Holds information about all pictures embedded in Word Document either via "Insert -&gt; Picture -&gt; From File" or via
* clipboard. Responsible for images extraction and determining whether some document's piece contains embedded image.
* Analyzes raw data bytestream 'Data' (where Word stores all embedded objects) provided by HWPFDocument.
*
* <p>
* Word stores images as is within so called "Data stream" - the stream within a Word docfile containing various data
* that hang off of characters in the main stream. For example, binary data describing in-line pictures and/or
* formfields an also embedded objects-native data. Word picture structures are concatenated one after the other in
@ -67,26 +67,16 @@ public final class PicturesTable {
static final int BLOCK_TYPE_OFFSET = 0xE;
static final int MM_MODE_TYPE_OFFSET = 0x6;
private HWPFDocument _document;
private byte[] _dataStream;
private byte[] _mainStream;
private final HWPFDocument _document;
private final byte[] _dataStream;
private final byte[] _mainStream;
@Deprecated
private FSPATable _fspa;
@Deprecated
private OfficeArtContent _dgg;
/** @link dependency
* @stereotype instantiate*/
/*# Picture lnkPicture; */
/**
*
* @param _document
* @param _dataStream
*/
@Deprecated
public PicturesTable(HWPFDocument _document, byte[] _dataStream, byte[] _mainStream, FSPATable fspa, OfficeArtContent dgg)
{
public PicturesTable(HWPFDocument _document, byte[] _dataStream, byte[] _mainStream, FSPATable fspa, OfficeArtContent dgg) {
this._document = _document;
this._dataStream = _dataStream;
this._mainStream = _mainStream;
@ -94,9 +84,8 @@ public final class PicturesTable {
this._dgg = dgg;
}
public PicturesTable( HWPFDocument _document, byte[] _dataStream,
byte[] _mainStream )
{
public PicturesTable(HWPFDocument _document, byte[] _dataStream,
byte[] _mainStream) {
this._document = _document;
this._dataStream = _dataStream;
this._mainStream = _mainStream;
@ -104,16 +93,15 @@ public final class PicturesTable {
/**
* determines whether specified CharacterRun contains reference to a picture
* @param run
*/
public boolean hasPicture(CharacterRun run) {
if (run==null) {
if (run == null) {
return false;
}
if (run.isSpecialCharacter() && !run.isObj() && !run.isOle2() && !run.isData()) {
// Image should be in it's own run, or in a run with the end-of-special marker
if("\u0001".equals(run.text()) || "\u0001\u0015".equals(run.text())) {
if ("\u0001".equals(run.text()) || "\u0001\u0015".equals(run.text())) {
return isBlockContainsImage(run.getPicOffset());
}
}
@ -121,15 +109,11 @@ public final class PicturesTable {
}
public boolean hasEscherPicture(CharacterRun run) {
if (run.isSpecialCharacter() && !run.isObj() && !run.isOle2() && !run.isData() && run.text().startsWith("\u0008")) {
return true;
}
return false;
return run.isSpecialCharacter() && !run.isObj() && !run.isOle2() && !run.isData() && run.text().startsWith("\u0008");
}
/**
* determines whether specified CharacterRun contains reference to a picture
* @param run
*/
public boolean hasHorizontalLine(CharacterRun run) {
if (run.isSpecialCharacter() && "\u0001".equals(run.text())) {
@ -139,7 +123,10 @@ public final class PicturesTable {
}
private boolean isPictureRecognized(short blockType, short mappingModeOfMETAFILEPICT) {
return (blockType == TYPE_IMAGE || blockType == TYPE_IMAGE_PASTED_FROM_CLIPBOARD || (blockType==TYPE_IMAGE_WORD2000 && mappingModeOfMETAFILEPICT==0x64) || (blockType==TYPE_IMAGE_PASTED_FROM_CLIPBOARD_WORD2000 && mappingModeOfMETAFILEPICT==0x64));
return blockType == TYPE_IMAGE
|| blockType == TYPE_IMAGE_PASTED_FROM_CLIPBOARD
|| blockType == TYPE_IMAGE_WORD2000 && mappingModeOfMETAFILEPICT == 0x64
|| blockType == TYPE_IMAGE_PASTED_FROM_CLIPBOARD_WORD2000 && mappingModeOfMETAFILEPICT == 0x64;
}
private static short getBlockType(byte[] dataStream, int pictOffset) {
@ -152,11 +139,11 @@ public final class PicturesTable {
/**
* Returns picture object tied to specified CharacterRun
* @param run
*
* @param fillBytes if true, Picture will be returned with filled byte array that represent picture's contents. If you don't want
* to have that byte array in memory but only write picture's contents to stream, pass false and then use Picture.writeImageContent
* @see Picture#writeImageContent(OutputStream)
* @return a Picture object if picture exists for specified CharacterRun, null otherwise. PicturesTable.hasPicture is used to determine this.
* @see Picture#writeImageContent(OutputStream)
* @see #hasPicture(CharacterRun)
*/
public Picture extractPicture(CharacterRun run, boolean fillBytes) {
@ -172,36 +159,28 @@ public final class PicturesTable {
* @param escherRecords the escher records.
* @param pictures the list to populate with the pictures.
*/
private void searchForPictures(List<EscherRecord> escherRecords, List<Picture> pictures)
{
for(EscherRecord escherRecord : escherRecords) {
private void searchForPictures(List<EscherRecord> escherRecords, List<Picture> pictures) {
for (EscherRecord escherRecord : escherRecords) {
if (escherRecord instanceof EscherBSERecord) {
EscherBSERecord bse = (EscherBSERecord) escherRecord;
EscherBlipRecord blip = bse.getBlipRecord();
if (blip != null)
{
if (blip != null) {
pictures.add(new Picture(blip));
}
else if ( bse.getOffset() > 0 )
{
try
{
} else if (bse.getOffset() > 0) {
try {
// Blip stored in delay stream, which in a word doc, is
// the main stream
EscherRecordFactory recordFactory = new DefaultEscherRecordFactory();
EscherRecord record = recordFactory.createRecord(
_mainStream, bse.getOffset() );
_mainStream, bse.getOffset());
if ( record instanceof EscherBlipRecord )
{
record.fillFields( _mainStream, bse.getOffset(),
recordFactory );
if (record instanceof EscherBlipRecord) {
record.fillFields(_mainStream, bse.getOffset(),
recordFactory);
blip = (EscherBlipRecord) record;
pictures.add( new Picture( blip ) );
pictures.add(new Picture(blip));
}
}
catch ( Exception exc )
{
} catch (Exception exc) {
LOG.atWarn().withThrowable(exc).log("Unable to load picture from BLIP record at offset #{}", box(bse.getOffset()));
}
}
@ -222,7 +201,7 @@ public final class PicturesTable {
for (int i = 0; i < range.numCharacterRuns(); i++) {
CharacterRun run = range.getCharacterRun(i);
if (run==null) {
if (run == null) {
continue;
}
@ -240,14 +219,12 @@ public final class PicturesTable {
return pictures;
}
private boolean isBlockContainsImage(int i)
{
private boolean isBlockContainsImage(int i) {
return isPictureRecognized(getBlockType(_dataStream, i), getMmMode(_dataStream, i));
}
private boolean isBlockContainsHorizontalLine(int i)
{
return getBlockType(_dataStream, i)==TYPE_HORIZONTAL_LINE && getMmMode(_dataStream, i)==0x64;
private boolean isBlockContainsHorizontalLine(int i) {
return getBlockType(_dataStream, i) == TYPE_HORIZONTAL_LINE && getMmMode(_dataStream, i) == 0x64;
}
}

View File

@ -56,17 +56,13 @@ public abstract class FRDAbstractType {
public String toString()
{
StringBuilder builder = new StringBuilder();
builder.append( "[FRD]\n" );
builder.append( " .nAuto = " );
builder.append( " (" ).append( getNAuto() ).append( " )\n" );
builder.append( "[/FRD]\n" );
return builder.toString();
return "[FRD]\n" +
" .nAuto = (" + getNAuto() + " )\n" +
"[/FRD]\n";
}
/**
* If > 0, the note is an automatically numbered note, otherwise it has a
* If &gt; 0, the note is an automatically numbered note, otherwise it has a
* custom mark.
*/
public short getNAuto()
@ -75,7 +71,7 @@ public abstract class FRDAbstractType {
}
/**
* If > 0, the note is an automatically numbered note, otherwise it has a
* If &gt; 0, the note is an automatically numbered note, otherwise it has a
* custom mark.
*/
public void setNAuto( short field_1_nAuto )
@ -83,4 +79,4 @@ public abstract class FRDAbstractType {
this.field_1_nAuto = field_1_nAuto;
}
} // END OF CLASS
}

View File

@ -81,7 +81,7 @@ public abstract class GrfhicAbstractType
*/
public static int getSize()
{
return 0 + 1;
return 1;
}
@Override
@ -94,9 +94,7 @@ public abstract class GrfhicAbstractType
if ( getClass() != obj.getClass() )
return false;
GrfhicAbstractType other = (GrfhicAbstractType) obj;
if ( field_1_grfhic != other.field_1_grfhic )
return false;
return true;
return field_1_grfhic == other.field_1_grfhic;
}
@Override
@ -106,22 +104,19 @@ public abstract class GrfhicAbstractType
public String toString()
{
StringBuilder builder = new StringBuilder();
builder.append("[Grfhic]\n");
builder.append( " .grfhic = " );
builder.append(" ( ").append( field_1_grfhic ).append( " )\n" );
builder.append(" .fHtmlChecked = ").append(isFHtmlChecked()).append('\n');
builder.append(" .fHtmlUnsupported = ").append(isFHtmlUnsupported()).append('\n');
builder.append(" .fHtmlListTextNotSharpDot = ").append(isFHtmlListTextNotSharpDot()).append('\n');
builder.append(" .fHtmlNotPeriod = ").append(isFHtmlNotPeriod()).append('\n');
builder.append(" .fHtmlFirstLineMismatch = ").append(isFHtmlFirstLineMismatch()).append('\n');
builder.append(" .fHtmlTabLeftIndentMismatch = ").append(isFHtmlTabLeftIndentMismatch()).append('\n');
builder.append(" .fHtmlHangingIndentBeneathNumber = ").append(isFHtmlHangingIndentBeneathNumber()).append('\n');
builder.append(" .fHtmlBuiltInBullet = ").append(isFHtmlBuiltInBullet()).append('\n');
builder.append("[/Grfhic]");
return builder.toString();
String builder = "[Grfhic]\n" +
" .grfhic = " +
" ( " + field_1_grfhic + " )\n" +
" .fHtmlChecked = " + isFHtmlChecked() + '\n' +
" .fHtmlUnsupported = " + isFHtmlUnsupported() + '\n' +
" .fHtmlListTextNotSharpDot = " + isFHtmlListTextNotSharpDot() + '\n' +
" .fHtmlNotPeriod = " + isFHtmlNotPeriod() + '\n' +
" .fHtmlFirstLineMismatch = " + isFHtmlFirstLineMismatch() + '\n' +
" .fHtmlTabLeftIndentMismatch = " + isFHtmlTabLeftIndentMismatch() + '\n' +
" .fHtmlHangingIndentBeneathNumber = " + isFHtmlHangingIndentBeneathNumber() + '\n' +
" .fHtmlBuiltInBullet = " + isFHtmlBuiltInBullet() + '\n' +
"[/Grfhic]";
return builder;
}
/**
@ -164,7 +159,7 @@ public abstract class GrfhicAbstractType
/**
* Sets the fHtmlUnsupported field value.
* The numbering sequence or format is unsupported (includes tab & size)
* The numbering sequence or format is unsupported (includes tab &amp; size)
*/
@Internal
public void setFHtmlUnsupported( boolean value )
@ -173,7 +168,7 @@ public abstract class GrfhicAbstractType
}
/**
* The numbering sequence or format is unsupported (includes tab & size)
* The numbering sequence or format is unsupported (includes tab &amp; size)
* @return the fHtmlUnsupported field value.
*/
@Internal

View File

@ -247,174 +247,91 @@ public abstract class PAPAbstractType {
}
public String toString()
{
StringBuilder builder = new StringBuilder();
builder.append("[PAP]\n");
builder.append(" .istd = ");
builder.append(" (").append(getIstd()).append(" )\n");
builder.append(" .fSideBySide = ");
builder.append(" (").append(getFSideBySide()).append(" )\n");
builder.append(" .fKeep = ");
builder.append(" (").append(getFKeep()).append(" )\n");
builder.append(" .fKeepFollow = ");
builder.append(" (").append(getFKeepFollow()).append(" )\n");
builder.append(" .fPageBreakBefore = ");
builder.append(" (").append(getFPageBreakBefore()).append(" )\n");
builder.append(" .brcl = ");
builder.append(" (").append(getBrcl()).append(" )\n");
builder.append(" .brcp = ");
builder.append(" (").append(getBrcp()).append(" )\n");
builder.append(" .ilvl = ");
builder.append(" (").append(getIlvl()).append(" )\n");
builder.append(" .ilfo = ");
builder.append(" (").append(getIlfo()).append(" )\n");
builder.append(" .fNoLnn = ");
builder.append(" (").append(getFNoLnn()).append(" )\n");
builder.append(" .lspd = ");
builder.append(" (").append(getLspd()).append(" )\n");
builder.append(" .dyaBefore = ");
builder.append(" (").append(getDyaBefore()).append(" )\n");
builder.append(" .dyaAfter = ");
builder.append(" (").append(getDyaAfter()).append(" )\n");
builder.append(" .fInTable = ");
builder.append(" (").append(getFInTable()).append(" )\n");
builder.append(" .finTableW97 = ");
builder.append(" (").append(getFinTableW97()).append(" )\n");
builder.append(" .fTtp = ");
builder.append(" (").append(getFTtp()).append(" )\n");
builder.append(" .dxaAbs = ");
builder.append(" (").append(getDxaAbs()).append(" )\n");
builder.append(" .dyaAbs = ");
builder.append(" (").append(getDyaAbs()).append(" )\n");
builder.append(" .dxaWidth = ");
builder.append(" (").append(getDxaWidth()).append(" )\n");
builder.append(" .fBrLnAbove = ");
builder.append(" (").append(getFBrLnAbove()).append(" )\n");
builder.append(" .fBrLnBelow = ");
builder.append(" (").append(getFBrLnBelow()).append(" )\n");
builder.append(" .pcVert = ");
builder.append(" (").append(getPcVert()).append(" )\n");
builder.append(" .pcHorz = ");
builder.append(" (").append(getPcHorz()).append(" )\n");
builder.append(" .wr = ");
builder.append(" (").append(getWr()).append(" )\n");
builder.append(" .fNoAutoHyph = ");
builder.append(" (").append(getFNoAutoHyph()).append(" )\n");
builder.append(" .dyaHeight = ");
builder.append(" (").append(getDyaHeight()).append(" )\n");
builder.append(" .fMinHeight = ");
builder.append(" (").append(getFMinHeight()).append(" )\n");
builder.append(" .dcs = ");
builder.append(" (").append(getDcs()).append(" )\n");
builder.append(" .dyaFromText = ");
builder.append(" (").append(getDyaFromText()).append(" )\n");
builder.append(" .dxaFromText = ");
builder.append(" (").append(getDxaFromText()).append(" )\n");
builder.append(" .fLocked = ");
builder.append(" (").append(getFLocked()).append(" )\n");
builder.append(" .fWidowControl = ");
builder.append(" (").append(getFWidowControl()).append(" )\n");
builder.append(" .fKinsoku = ");
builder.append(" (").append(getFKinsoku()).append(" )\n");
builder.append(" .fWordWrap = ");
builder.append(" (").append(getFWordWrap()).append(" )\n");
builder.append(" .fOverflowPunct = ");
builder.append(" (").append(getFOverflowPunct()).append(" )\n");
builder.append(" .fTopLinePunct = ");
builder.append(" (").append(getFTopLinePunct()).append(" )\n");
builder.append(" .fAutoSpaceDE = ");
builder.append(" (").append(getFAutoSpaceDE()).append(" )\n");
builder.append(" .fAutoSpaceDN = ");
builder.append(" (").append(getFAutoSpaceDN()).append(" )\n");
builder.append(" .wAlignFont = ");
builder.append(" (").append(getWAlignFont()).append(" )\n");
builder.append(" .fontAlign = ");
builder.append(" (").append(getFontAlign()).append(" )\n");
builder.append(" .fVertical = ").append(isFVertical()).append('\n');
builder.append(" .fBackward = ").append(isFBackward()).append('\n');
builder.append(" .fRotateFont = ").append(isFRotateFont()).append('\n');
builder.append(" .lvl = ");
builder.append(" (").append(getLvl()).append(" )\n");
builder.append(" .fBiDi = ");
builder.append(" (").append(getFBiDi()).append(" )\n");
builder.append(" .fNumRMIns = ");
builder.append(" (").append(getFNumRMIns()).append(" )\n");
builder.append(" .fCrLf = ");
builder.append(" (").append(getFCrLf()).append(" )\n");
builder.append(" .fUsePgsuSettings = ");
builder.append(" (").append(getFUsePgsuSettings()).append(" )\n");
builder.append(" .fAdjustRight = ");
builder.append(" (").append(getFAdjustRight()).append(" )\n");
builder.append(" .itap = ");
builder.append(" (").append(getItap()).append(" )\n");
builder.append(" .fInnerTableCell = ");
builder.append(" (").append(getFInnerTableCell()).append(" )\n");
builder.append(" .fOpenTch = ");
builder.append(" (").append(getFOpenTch()).append(" )\n");
builder.append(" .fTtpEmbedded = ");
builder.append(" (").append(getFTtpEmbedded()).append(" )\n");
builder.append(" .dxcRight = ");
builder.append(" (").append(getDxcRight()).append(" )\n");
builder.append(" .dxcLeft = ");
builder.append(" (").append(getDxcLeft()).append(" )\n");
builder.append(" .dxcLeft1 = ");
builder.append(" (").append(getDxcLeft1()).append(" )\n");
builder.append(" .fDyaBeforeAuto = ");
builder.append(" (").append(getFDyaBeforeAuto()).append(" )\n");
builder.append(" .fDyaAfterAuto = ");
builder.append(" (").append(getFDyaAfterAuto()).append(" )\n");
builder.append(" .dxaRight = ");
builder.append(" (").append(getDxaRight()).append(" )\n");
builder.append(" .dxaLeft = ");
builder.append(" (").append(getDxaLeft()).append(" )\n");
builder.append(" .dxaLeft1 = ");
builder.append(" (").append(getDxaLeft1()).append(" )\n");
builder.append(" .jc = ");
builder.append(" (").append(getJc()).append(" )\n");
builder.append(" .brcTop = ");
builder.append(" (").append(getBrcTop()).append(" )\n");
builder.append(" .brcLeft = ");
builder.append(" (").append(getBrcLeft()).append(" )\n");
builder.append(" .brcBottom = ");
builder.append(" (").append(getBrcBottom()).append(" )\n");
builder.append(" .brcRight = ");
builder.append(" (").append(getBrcRight()).append(" )\n");
builder.append(" .brcBetween = ");
builder.append(" (").append(getBrcBetween()).append(" )\n");
builder.append(" .brcBar = ");
builder.append(" (").append(getBrcBar()).append(" )\n");
builder.append(" .shd = ");
builder.append(" (").append(getShd()).append(" )\n");
builder.append(" .anld = ");
builder.append(" (").append(Arrays.toString(getAnld())).append(" )\n");
builder.append(" .phe = ");
builder.append(" (").append(Arrays.toString(getPhe())).append(" )\n");
builder.append(" .fPropRMark = ");
builder.append(" (").append(getFPropRMark()).append(" )\n");
builder.append(" .ibstPropRMark = ");
builder.append(" (").append(getIbstPropRMark()).append(" )\n");
builder.append(" .dttmPropRMark = ");
builder.append(" (").append(getDttmPropRMark()).append(" )\n");
builder.append(" .itbdMac = ");
builder.append(" (").append(getItbdMac()).append(" )\n");
builder.append(" .rgdxaTab = ");
builder.append(" (").append(Arrays.toString(getRgdxaTab())).append(" )\n");
builder.append(" .rgtbd = ");
builder.append(" (").append(Arrays.toString(getRgtbd())).append(" )\n");
builder.append(" .numrm = ");
builder.append(" (").append(Arrays.toString(getNumrm())).append(" )\n");
builder.append(" .ptap = ");
builder.append(" (").append(Arrays.toString(getPtap())).append(" )\n");
builder.append(" .fNoAllowOverlap = ");
builder.append(" (").append(getFNoAllowOverlap()).append(" )\n");
builder.append(" .ipgp = ");
builder.append(" (").append(getIpgp()).append(" )\n");
builder.append(" .rsid = ");
builder.append(" (").append(getRsid()).append(" )\n");
builder.append("[/PAP]\n");
return builder.toString();
public String toString() {
return "[PAP]\n" +
" .istd = (" + getIstd() + " )\n" +
" .fSideBySide = (" + getFSideBySide() + " )\n" +
" .fKeep = (" + getFKeep() + " )\n" +
" .fKeepFollow = (" + getFKeepFollow() + " )\n" +
" .fPageBreakBefore = (" + getFPageBreakBefore() + " )\n" +
" .brcl = (" + getBrcl() + " )\n" +
" .brcp = (" + getBrcp() + " )\n" +
" .ilvl = (" + getIlvl() + " )\n" +
" .ilfo = (" + getIlfo() + " )\n" +
" .fNoLnn = (" + getFNoLnn() + " )\n" +
" .lspd = (" + getLspd() + " )\n" +
" .dyaBefore = (" + getDyaBefore() + " )\n" +
" .dyaAfter = (" + getDyaAfter() + " )\n" +
" .fInTable = (" + getFInTable() + " )\n" +
" .finTableW97 = (" + getFinTableW97() + " )\n" +
" .fTtp = (" + getFTtp() + " )\n" +
" .dxaAbs = (" + getDxaAbs() + " )\n" +
" .dyaAbs = (" + getDyaAbs() + " )\n" +
" .dxaWidth = (" + getDxaWidth() + " )\n" +
" .fBrLnAbove = (" + getFBrLnAbove() + " )\n" +
" .fBrLnBelow = (" + getFBrLnBelow() + " )\n" +
" .pcVert = (" + getPcVert() + " )\n" +
" .pcHorz = (" + getPcHorz() + " )\n" +
" .wr = (" + getWr() + " )\n" +
" .fNoAutoHyph = (" + getFNoAutoHyph() + " )\n" +
" .dyaHeight = (" + getDyaHeight() + " )\n" +
" .fMinHeight = (" + getFMinHeight() + " )\n" +
" .dcs = (" + getDcs() + " )\n" +
" .dyaFromText = (" + getDyaFromText() + " )\n" +
" .dxaFromText = (" + getDxaFromText() + " )\n" +
" .fLocked = (" + getFLocked() + " )\n" +
" .fWidowControl = (" + getFWidowControl() + " )\n" +
" .fKinsoku = (" + getFKinsoku() + " )\n" +
" .fWordWrap = (" + getFWordWrap() + " )\n" +
" .fOverflowPunct = (" + getFOverflowPunct() + " )\n" +
" .fTopLinePunct = (" + getFTopLinePunct() + " )\n" +
" .fAutoSpaceDE = (" + getFAutoSpaceDE() + " )\n" +
" .fAutoSpaceDN = (" + getFAutoSpaceDN() + " )\n" +
" .wAlignFont = (" + getWAlignFont() + " )\n" +
" .fontAlign = (" + getFontAlign() + " )\n" +
" .fVertical = " + isFVertical() + '\n' +
" .fBackward = " + isFBackward() + '\n' +
" .fRotateFont = " + isFRotateFont() + '\n' +
" .lvl = (" + getLvl() + " )\n" +
" .fBiDi = (" + getFBiDi() + " )\n" +
" .fNumRMIns = (" + getFNumRMIns() + " )\n" +
" .fCrLf = (" + getFCrLf() + " )\n" +
" .fUsePgsuSettings = (" + getFUsePgsuSettings() + " )\n" +
" .fAdjustRight = (" + getFAdjustRight() + " )\n" +
" .itap = (" + getItap() + " )\n" +
" .fInnerTableCell = (" + getFInnerTableCell() + " )\n" +
" .fOpenTch = (" + getFOpenTch() + " )\n" +
" .fTtpEmbedded = (" + getFTtpEmbedded() + " )\n" +
" .dxcRight = (" + getDxcRight() + " )\n" +
" .dxcLeft = (" + getDxcLeft() + " )\n" +
" .dxcLeft1 = (" + getDxcLeft1() + " )\n" +
" .fDyaBeforeAuto = (" + getFDyaBeforeAuto() + " )\n" +
" .fDyaAfterAuto = (" + getFDyaAfterAuto() + " )\n" +
" .dxaRight = (" + getDxaRight() + " )\n" +
" .dxaLeft = (" + getDxaLeft() + " )\n" +
" .dxaLeft1 = (" + getDxaLeft1() + " )\n" +
" .jc = (" + getJc() + " )\n" +
" .brcTop = (" + getBrcTop() + " )\n" +
" .brcLeft = (" + getBrcLeft() + " )\n" +
" .brcBottom = (" + getBrcBottom() + " )\n" +
" .brcRight = (" + getBrcRight() + " )\n" +
" .brcBetween = (" + getBrcBetween() + " )\n" +
" .brcBar = (" + getBrcBar() + " )\n" +
" .shd = (" + getShd() + " )\n" +
" .anld = (" + Arrays.toString(getAnld()) + " )\n" +
" .phe = (" + Arrays.toString(getPhe()) + " )\n" +
" .fPropRMark = (" + getFPropRMark() + " )\n" +
" .ibstPropRMark = (" + getIbstPropRMark() + " )\n" +
" .dttmPropRMark = (" + getDttmPropRMark() + " )\n" +
" .itbdMac = (" + getItbdMac() + " )\n" +
" .rgdxaTab = (" + Arrays.toString(getRgdxaTab()) + " )\n" +
" .rgtbd = (" + Arrays.toString(getRgtbd()) + " )\n" +
" .numrm = (" + Arrays.toString(getNumrm()) + " )\n" +
" .ptap = (" + Arrays.toString(getPtap()) + " )\n" +
" .fNoAllowOverlap = (" + getFNoAllowOverlap() + " )\n" +
" .ipgp = (" + getIpgp() + " )\n" +
" .rsid = (" + getRsid() + " )\n" +
"[/PAP]\n";
}
/**
@ -1785,7 +1702,7 @@ public abstract class PAPAbstractType {
}
/**
* Number of tabs stops defined for paragraph. Must be >= 0 and <= 64..
* Number of tabs stops defined for paragraph. Must be &gt;= 0 and &lt;= 64..
*/
@Internal
public int getItbdMac()
@ -1794,7 +1711,7 @@ public abstract class PAPAbstractType {
}
/**
* Number of tabs stops defined for paragraph. Must be >= 0 and <= 64..
* Number of tabs stops defined for paragraph. Must be &gt;= 0 and &lt;= 64..
*/
@Internal
public void setItbdMac( int field_72_itbdMac )

View File

@ -895,7 +895,7 @@ public abstract class TAPAbstractType {
}
/**
* Count of cells defined for this row. itcMac must be >= 0 and less than or equal to 64..
* Count of cells defined for this row. itcMac must be &gt;= 0 and less than or equal to 64..
*/
@Internal
public short getItcMac()
@ -904,7 +904,7 @@ public abstract class TAPAbstractType {
}
/**
* Count of cells defined for this row. itcMac must be >= 0 and less than or equal to 64..
* Count of cells defined for this row. itcMac must be &gt;= 0 and less than or equal to 64..
*/
@Internal
public void setItcMac( short field_26_itcMac )

View File

@ -547,11 +547,9 @@ public class Paragraph extends Range implements Duplicatable {
}
/**
* Returns number of tabs stops defined for paragraph. Must be >= 0 and <=
* 64.
* Returns number of tabs stops defined for paragraph. Must be &gt;= 0 and &lt;= 64.
*
* @return number of tabs stops defined for paragraph. Must be >= 0 and <=
* 64
* @return number of tabs stops defined for paragraph. Must be &gt;= 0 and &lt;= 64
*/
public int getTabStopsNumber()
{

View File

@ -65,7 +65,7 @@ public class TestExcelConverterSuite
{
HSSFWorkbook workbook;
try {
workbook = ExcelToHtmlUtils.loadXls( child );
workbook = AbstractExcelUtils.loadXls( child );
} catch ( Exception exc ) {
// unable to parse file -- not ExcelToFoConverter fault
return;
@ -91,7 +91,7 @@ public class TestExcelConverterSuite
{
HSSFWorkbook workbook;
try {
workbook = ExcelToHtmlUtils.loadXls( child );
workbook = AbstractExcelUtils.loadXls( child );
} catch ( Exception exc ) {
// unable to parse file -- not ExcelToFoConverter fault
return;