You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@poi.apache.org by ki...@apache.org on 2021/04/13 21:37:33 UTC
svn commit: r1888746 [1/3] - in /poi/trunk/poi-scratchpad: ./
src/main/java/org/apache/poi/hpbf/dev/
src/main/java/org/apache/poi/hslf/record/
src/main/java/org/apache/poi/hsmf/extractor/
src/main/java/org/apache/poi/hssf/converter/ src/main/java/org/a...
Author: kiwiwings
Date: Tue Apr 13 21:37:33 2021
New Revision: 1888746
URL: http://svn.apache.org/viewvc?rev=1888746&view=rev
Log:
:poi-scratchpad - fix javadocs - link to dependent/external project javadocs
Removed:
poi/trunk/poi-scratchpad/src/main/java/org/apache/poi/hssf/converter/ExcelToHtmlUtils.java
Modified:
poi/trunk/poi-scratchpad/build.gradle
poi/trunk/poi-scratchpad/src/main/java/org/apache/poi/hpbf/dev/HPBFDumper.java
poi/trunk/poi-scratchpad/src/main/java/org/apache/poi/hslf/record/AnimationInfoAtom.java
poi/trunk/poi-scratchpad/src/main/java/org/apache/poi/hslf/record/RecordTypes.java
poi/trunk/poi-scratchpad/src/main/java/org/apache/poi/hsmf/extractor/OutlookTextExtractor.java
poi/trunk/poi-scratchpad/src/main/java/org/apache/poi/hssf/converter/AbstractExcelUtils.java
poi/trunk/poi-scratchpad/src/main/java/org/apache/poi/hssf/converter/ExcelToFoConverter.java
poi/trunk/poi-scratchpad/src/main/java/org/apache/poi/hssf/converter/ExcelToHtmlConverter.java
poi/trunk/poi-scratchpad/src/main/java/org/apache/poi/hwmf/record/HwmfBitmapDib.java
poi/trunk/poi-scratchpad/src/main/java/org/apache/poi/hwpf/extractor/WordExtractor.java
poi/trunk/poi-scratchpad/src/main/java/org/apache/poi/hwpf/model/CharIndexTranslator.java
poi/trunk/poi-scratchpad/src/main/java/org/apache/poi/hwpf/model/ListTables.java
poi/trunk/poi-scratchpad/src/main/java/org/apache/poi/hwpf/model/PicturesTable.java
poi/trunk/poi-scratchpad/src/main/java/org/apache/poi/hwpf/model/types/FRDAbstractType.java
poi/trunk/poi-scratchpad/src/main/java/org/apache/poi/hwpf/model/types/GrfhicAbstractType.java
poi/trunk/poi-scratchpad/src/main/java/org/apache/poi/hwpf/model/types/PAPAbstractType.java
poi/trunk/poi-scratchpad/src/main/java/org/apache/poi/hwpf/model/types/TAPAbstractType.java
poi/trunk/poi-scratchpad/src/main/java/org/apache/poi/hwpf/usermodel/Paragraph.java
poi/trunk/poi-scratchpad/src/test/java/org/apache/poi/hssf/converter/TestExcelConverterSuite.java
Modified: poi/trunk/poi-scratchpad/build.gradle
URL: http://svn.apache.org/viewvc/poi/trunk/poi-scratchpad/build.gradle?rev=1888746&r1=1888745&r2=1888746&view=diff
==============================================================================
--- poi/trunk/poi-scratchpad/build.gradle (original)
+++ poi/trunk/poi-scratchpad/build.gradle Tue Apr 13 21:37:33 2021
@@ -31,6 +31,7 @@ final String VERSIONS9 = 'META-INF/versi
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 {
Modified: poi/trunk/poi-scratchpad/src/main/java/org/apache/poi/hpbf/dev/HPBFDumper.java
URL: http://svn.apache.org/viewvc/poi/trunk/poi-scratchpad/src/main/java/org/apache/poi/hpbf/dev/HPBFDumper.java?rev=1888746&r1=1888745&r2=1888746&view=diff
==============================================================================
--- poi/trunk/poi-scratchpad/src/main/java/org/apache/poi/hpbf/dev/HPBFDumper.java (original)
+++ poi/trunk/poi-scratchpad/src/main/java/org/apache/poi/hpbf/dev/HPBFDumper.java Tue Apr 13 21:37:33 2021
@@ -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)
Modified: poi/trunk/poi-scratchpad/src/main/java/org/apache/poi/hslf/record/AnimationInfoAtom.java
URL: http://svn.apache.org/viewvc/poi/trunk/poi-scratchpad/src/main/java/org/apache/poi/hslf/record/AnimationInfoAtom.java?rev=1888746&r1=1888745&r2=1888746&view=diff
==============================================================================
--- poi/trunk/poi-scratchpad/src/main/java/org/apache/poi/hslf/record/AnimationInfoAtom.java (original)
+++ poi/trunk/poi-scratchpad/src/main/java/org/apache/poi/hslf/record/AnimationInfoAtom.java Tue Apr 13 21:37:33 2021
@@ -97,7 +97,7 @@ public final class AnimationInfoAtom ext
/**
* Record header.
*/
- private byte[] _header;
+ private final byte[] _header;
/**
* record data
@@ -246,7 +246,7 @@ public final class AnimationInfoAtom ext
* 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 ext
* 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);
Modified: poi/trunk/poi-scratchpad/src/main/java/org/apache/poi/hslf/record/RecordTypes.java
URL: http://svn.apache.org/viewvc/poi/trunk/poi-scratchpad/src/main/java/org/apache/poi/hslf/record/RecordTypes.java?rev=1888746&r1=1888745&r2=1888746&view=diff
==============================================================================
--- poi/trunk/poi-scratchpad/src/main/java/org/apache/poi/hslf/record/RecordTypes.java (original)
+++ poi/trunk/poi-scratchpad/src/main/java/org/apache/poi/hslf/record/RecordTypes.java Tue Apr 13 21:37:33 2021
@@ -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),
@@ -183,12 +185,12 @@ public enum RecordTypes {
for(RecordTypes s : values()) {
LOOKUP.put(s.typeID, s);
}
- }
-
+ }
+
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;
}
Modified: poi/trunk/poi-scratchpad/src/main/java/org/apache/poi/hsmf/extractor/OutlookTextExtractor.java
URL: http://svn.apache.org/viewvc/poi/trunk/poi-scratchpad/src/main/java/org/apache/poi/hsmf/extractor/OutlookTextExtractor.java?rev=1888746&r1=1888745&r2=1888746&view=diff
==============================================================================
--- poi/trunk/poi-scratchpad/src/main/java/org/apache/poi/hsmf/extractor/OutlookTextExtractor.java (original)
+++ poi/trunk/poi-scratchpad/src/main/java/org/apache/poi/hsmf/extractor/OutlookTextExtractor.java Tue Apr 13 21:37:33 2021
@@ -101,8 +101,8 @@ public class OutlookTextExtractor implem
}
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 implem
// 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 implem
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 implem
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 implem
/**
* Takes a Display focused string, eg "Nick; Jim" and an iterator
* of emails, and does its best to return something like
- * "Nick <ni...@example.com>; Jim <ji...@example.com>"
+ * {@code "Nick <ni...@example.com>; Jim <ji...@example.com>"}
*/
protected void handleEmails(StringBuilder s, String type, String displayText, Iterator<String> emails) {
if (displayText == null || displayText.length() == 0) {
Modified: poi/trunk/poi-scratchpad/src/main/java/org/apache/poi/hssf/converter/AbstractExcelUtils.java
URL: http://svn.apache.org/viewvc/poi/trunk/poi-scratchpad/src/main/java/org/apache/poi/hssf/converter/AbstractExcelUtils.java?rev=1888746&r1=1888745&r2=1888746&view=diff
==============================================================================
--- poi/trunk/poi-scratchpad/src/main/java/org/apache/poi/hssf/converter/AbstractExcelUtils.java (original)
+++ poi/trunk/poi-scratchpad/src/main/java/org/apache/poi/hssf/converter/AbstractExcelUtils.java Tue Apr 13 21:37:33 2021
@@ -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,112 +28,114 @@ import org.apache.poi.ss.usermodel.Borde
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}
- *
- * @author Sergey Vladimirov (vlsergey {at} gmail {dot} com)
+ * Common class for {@link ExcelToFoConverter} and {@link ExcelToHtmlConverter}
+ *
* @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 ) {
- 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:
- return "left";
- case RIGHT:
- return "right";
- default:
- return "";
+ public static String getAlign(HorizontalAlignment alignment) {
+ switch (alignment) {
+ case CENTER:
+ case CENTER_SELECTION:
+ return "center";
+ case FILL:
+ // XXX: shall we support fill?
+ return "";
+ case JUSTIFY:
+ return "justify";
+ case LEFT:
+ return "left";
+ 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 ) {
- case NONE:
- borderStyle = "none";
- break;
- case DASH_DOT:
- case DASH_DOT_DOT:
- case DOTTED:
- case HAIR:
- case MEDIUM_DASH_DOT:
- case MEDIUM_DASH_DOT_DOT:
- case SLANTED_DASH_DOT:
- borderStyle = "dotted";
- break;
- case DASHED:
- case MEDIUM_DASHED:
- borderStyle = "dashed";
- break;
- case DOUBLE:
- borderStyle = "double";
- break;
- default:
- borderStyle = "solid";
- break;
+ switch (xlsBorder) {
+ case NONE:
+ borderStyle = "none";
+ break;
+ case DASH_DOT:
+ case DASH_DOT_DOT:
+ case DOTTED:
+ case HAIR:
+ case MEDIUM_DASH_DOT:
+ case MEDIUM_DASH_DOT_DOT:
+ case SLANTED_DASH_DOT:
+ borderStyle = "dotted";
+ break;
+ case DASHED:
+ case MEDIUM_DASHED:
+ borderStyle = "dashed";
+ break;
+ case DOUBLE:
+ borderStyle = "double";
+ break;
+ default:
+ borderStyle = "solid";
+ break;
}
return borderStyle;
}
- public static String getBorderWidth( BorderStyle xlsBorder ) {
+ public static String getBorderWidth(BorderStyle xlsBorder) {
final String borderWidth;
- switch ( xlsBorder ) {
- case MEDIUM_DASH_DOT:
- case MEDIUM_DASH_DOT_DOT:
- case MEDIUM_DASHED:
- borderWidth = "2pt";
- break;
- case THICK:
- borderWidth = "thick";
- break;
- default:
- borderWidth = "thin";
- break;
+ switch (xlsBorder) {
+ case MEDIUM_DASH_DOT:
+ case MEDIUM_DASH_DOT_DOT:
+ case MEDIUM_DASHED:
+ borderWidth = "2pt";
+ break;
+ case THICK:
+ borderWidth = "thick";
+ break;
+ default:
+ borderWidth = "thin";
+ break;
}
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,47 +145,93 @@ 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 )
- * UNIT_OFFSET_LENGTH;
+ 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
+ * 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;
+ : null;
return mergedRangeRowInfo != null
- && columnNumber < mergedRangeRowInfo.length ? mergedRangeRowInfo[columnNumber]
- : null;
+ && columnNumber < mergedRangeRowInfo.length ? mergedRangeRowInfo[columnNumber]
+ : 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;
}
}
Modified: poi/trunk/poi-scratchpad/src/main/java/org/apache/poi/hssf/converter/ExcelToFoConverter.java
URL: http://svn.apache.org/viewvc/poi/trunk/poi-scratchpad/src/main/java/org/apache/poi/hssf/converter/ExcelToFoConverter.java?rev=1888746&r1=1888745&r2=1888746&view=diff
==============================================================================
--- poi/trunk/poi-scratchpad/src/main/java/org/apache/poi/hssf/converter/ExcelToFoConverter.java (original)
+++ poi/trunk/poi-scratchpad/src/main/java/org/apache/poi/hssf/converter/ExcelToFoConverter.java Tue Apr 13 21:37:33 2021
@@ -16,6 +16,16 @@
==================================================================== */
package org.apache.poi.hssf.converter;
+import static org.apache.poi.hssf.converter.AbstractExcelUtils.buildMergedRangesMap;
+import static org.apache.poi.hssf.converter.AbstractExcelUtils.getAlign;
+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.util.ArrayList;
import java.util.List;
@@ -50,12 +60,9 @@ import org.w3c.dom.Text;
/**
* Converts xls files (97-2007) to XSL FO.
- *
- * @author Sergey Vladimirov (vlsergey {at} gmail {dot} com)
*/
@Beta
-public class ExcelToFoConverter extends AbstractExcelConverter
-{
+public class ExcelToFoConverter extends AbstractExcelConverter {
private static final float CM_PER_INCH = 2.54f;
private static final float DPI = 72;
@@ -67,45 +74,40 @@ public class ExcelToFoConverter extends
private static final float PAPER_A4_WIDTH_INCHES = 21.0f / CM_PER_INCH;
/**
- * Java main() interface to interact with {@link ExcelToFoConverter}
- *
- * <p>
* Usage: ExcelToHtmlConverter infile outfile
- * </p>
+ * <p>
* Where infile is an input .xls file ( Word 97-2007) which will be rendered
* as XSL FO into outfile
*/
- public static void main( String[] args ) throws Exception {
- if ( args.length < 2 ) {
- System.err.println( "Usage: ExcelToFoConverter <inputFile.xls> <saveTo.xml>" );
+ public static void main(String[] args) throws Exception {
+ if (args.length < 2) {
+ System.err.println("Usage: ExcelToFoConverter <inputFile.xls> <saveTo.xml>");
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]));
// TODO set encoding from a command argument
Transformer serializer = XMLHelper.newTransformer();
- serializer.transform( domSource, streamResult );
+ serializer.transform(domSource, streamResult);
}
/**
* Converts Excel file (97-2007) into XSL FO file.
*
- * @param xlsFile
- * file to process
+ * @param xlsFile file to process
* @return DOM representation of result XSL FO
*/
- public static Document process( File xlsFile ) throws Exception
- {
- try (HSSFWorkbook workbook = AbstractExcelUtils.loadXls(xlsFile)) {
+ public static Document process(File xlsFile) throws Exception {
+ try (HSSFWorkbook workbook = loadXls(xlsFile)) {
ExcelToFoConverter excelToHtmlConverter = new ExcelToFoConverter(
- XMLHelper.newDocumentBuilder().newDocument() );
+ XMLHelper.newDocumentBuilder().newDocument());
excelToHtmlConverter.processWorkbook(workbook);
return excelToHtmlConverter.getDocument();
}
@@ -115,35 +117,29 @@ public class ExcelToFoConverter extends
private float pageMarginInches = 0.4f;
- public ExcelToFoConverter( Document document )
- {
- this.foDocumentFacade = new FoDocumentFacade( document );
+ public ExcelToFoConverter(Document document) {
+ this.foDocumentFacade = new FoDocumentFacade(document);
}
- public ExcelToFoConverter( FoDocumentFacade foDocumentFacade )
- {
+ public ExcelToFoConverter(FoDocumentFacade foDocumentFacade) {
this.foDocumentFacade = foDocumentFacade;
}
- protected String createPageMaster( float tableWidthIn, String pageMasterName )
- {
+ protected String createPageMaster(float tableWidthIn, String pageMasterName) {
final float paperHeightIn;
final float paperWidthIn;
{
float requiredWidthIn = tableWidthIn + 2 * getPageMarginInches();
- if ( requiredWidthIn < PAPER_A4_WIDTH_INCHES )
- {
+ if (requiredWidthIn < PAPER_A4_WIDTH_INCHES) {
// portrait orientation
paperWidthIn = PAPER_A4_WIDTH_INCHES;
paperHeightIn = PAPER_A4_HEIGHT_INCHES;
- }
- else
- {
+ } else {
// landscape orientation
paperWidthIn = requiredWidthIn;
paperHeightIn = paperWidthIn
- * ( PAPER_A4_WIDTH_INCHES / PAPER_A4_HEIGHT_INCHES );
+ * (PAPER_A4_WIDTH_INCHES / PAPER_A4_HEIGHT_INCHES);
}
}
@@ -153,25 +149,23 @@ public class ExcelToFoConverter extends
final float bottomMargin = getPageMarginInches();
Element pageMaster = foDocumentFacade
- .addSimplePageMaster( pageMasterName );
- pageMaster.setAttribute( "page-height", paperHeightIn + "in" );
- pageMaster.setAttribute( "page-width", paperWidthIn + "in" );
-
- Element regionBody = foDocumentFacade.addRegionBody( pageMaster );
- regionBody.setAttribute( "margin", topMargin + "in " + rightMargin
- + "in " + bottomMargin + "in " + leftMargin + "in" );
+ .addSimplePageMaster(pageMasterName);
+ pageMaster.setAttribute("page-height", paperHeightIn + "in");
+ pageMaster.setAttribute("page-width", paperWidthIn + "in");
+
+ Element regionBody = foDocumentFacade.addRegionBody(pageMaster);
+ regionBody.setAttribute("margin", topMargin + "in " + rightMargin
+ + "in " + bottomMargin + "in " + leftMargin + "in");
return pageMasterName;
}
@Override
- protected Document getDocument()
- {
+ protected Document getDocument() {
return foDocumentFacade.getDocument();
}
- public float getPageMarginInches()
- {
+ public float getPageMarginInches() {
return pageMarginInches;
}
@@ -180,85 +174,79 @@ public class ExcelToFoConverter extends
* borders, fill, etc.) worth a mention, <tt>true</tt> otherwise
*
* @return <tt>false</tt> if cell style by itself (without text, i.e.
- * borders, fill, etc.) worth a mention, <tt>true</tt> otherwise
+ * borders, fill, etc.) worth a mention, <tt>true</tt> otherwise
*/
- protected boolean isEmptyStyle( CellStyle cellStyle ) {
+ protected boolean isEmptyStyle(CellStyle cellStyle) {
return cellStyle == null || (
- cellStyle.getFillPattern() == FillPatternType.NO_FILL
- && cellStyle.getBorderTop() == BorderStyle.NONE
- && cellStyle.getBorderRight() == BorderStyle.NONE
- && cellStyle.getBorderBottom() == BorderStyle.NONE
- && cellStyle.getBorderLeft() == BorderStyle.NONE
+ cellStyle.getFillPattern() == FillPatternType.NO_FILL
+ && cellStyle.getBorderTop() == BorderStyle.NONE
+ && cellStyle.getBorderRight() == BorderStyle.NONE
+ && cellStyle.getBorderBottom() == BorderStyle.NONE
+ && cellStyle.getBorderLeft() == BorderStyle.NONE
);
}
- protected boolean processCell( HSSFWorkbook workbook, HSSFCell cell,
- Element tableCellElement, int normalWidthPx, int maxSpannedWidthPx,
- float normalHeightPt )
- {
+ protected boolean processCell(HSSFWorkbook workbook, HSSFCell cell,
+ Element tableCellElement, int normalWidthPx, int maxSpannedWidthPx,
+ float normalHeightPt) {
final HSSFCellStyle cellStyle = cell.getCellStyle();
String value;
- switch ( cell.getCellType() )
- {
- case STRING:
- // XXX: enrich
- value = cell.getRichStringCellValue().getString();
- break;
- case FORMULA:
- switch ( cell.getCachedFormulaResultType() )
- {
+ switch (cell.getCellType()) {
case STRING:
- HSSFRichTextString str = cell.getRichStringCellValue();
- if ( str != null && str.length() > 0 )
- {
- value = ( str.toString() );
- }
- else
- {
- value = AbstractExcelUtils.EMPTY;
+ // XXX: enrich
+ value = cell.getRichStringCellValue().getString();
+ break;
+ case FORMULA:
+ switch (cell.getCachedFormulaResultType()) {
+ case STRING:
+ HSSFRichTextString str = cell.getRichStringCellValue();
+ if (str != null && str.length() > 0) {
+ value = (str.toString());
+ } else {
+ value = AbstractExcelUtils.EMPTY;
+ }
+ break;
+ case NUMERIC:
+ double nValue = cell.getNumericCellValue();
+ short df = cellStyle.getDataFormat();
+ String dfs = cellStyle.getDataFormatString();
+ value = _formatter.formatRawCellContents(nValue, df, dfs);
+ break;
+ case BOOLEAN:
+ value = Boolean.toString(cell.getBooleanCellValue());
+ break;
+ case ERROR:
+ value = ErrorEval.getText(cell.getErrorCellValue());
+ break;
+ default:
+ LOG.atWarn().log("Unexpected cell cachedFormulaResultType ({})", cell.getCachedFormulaResultType());
+ value = AbstractExcelUtils.EMPTY;
+ break;
}
break;
+ case BLANK:
+ value = AbstractExcelUtils.EMPTY;
+ break;
case NUMERIC:
- double nValue = cell.getNumericCellValue();
- short df = cellStyle.getDataFormat();
- String dfs = cellStyle.getDataFormatString();
- value = _formatter.formatRawCellContents(nValue, df, dfs );
+ value = _formatter.formatCellValue(cell);
break;
case BOOLEAN:
- value = Boolean.toString( cell.getBooleanCellValue() );
+ value = Boolean.toString(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());
- value = AbstractExcelUtils.EMPTY;
- break;
- }
- break;
- case BLANK:
- value = AbstractExcelUtils.EMPTY;
- break;
- case NUMERIC:
- value = _formatter.formatCellValue( cell );
- break;
- case BOOLEAN:
- value = Boolean.toString( cell.getBooleanCellValue() );
- break;
- case ERROR:
- value = ErrorEval.getText( cell.getErrorCellValue() );
- break;
- default:
- LOG.atWarn().log("Unexpected cell type ({})", cell.getCellType());
- return true;
+ 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 && !cellStyle.getWrapText();
- final boolean emptyStyle = isEmptyStyle( cellStyle );
- if ( !emptyStyle && noText ) {
+ final boolean emptyStyle = isEmptyStyle(cellStyle);
+ if (!emptyStyle && noText) {
/*
* if cell style is defined (like borders, etc.) but cell text
* is empty, add " " to output, so browser won't collapse
@@ -267,179 +255,170 @@ public class ExcelToFoConverter extends
value = "\u00A0";
}
- 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 = foDocumentFacade.createText( value );
+ Text text = foDocumentFacade.createText(value);
Element block = foDocumentFacade.createBlock();
- if ( wrapInDivs )
- {
- block.setAttribute( "absolute-position", "fixed" );
- block.setAttribute( "left", "0px" );
- block.setAttribute( "top", "0px" );
- block.setAttribute( "bottom", "0px" );
- block.setAttribute( "min-width", normalWidthPx + "px" );
+ if (wrapInDivs) {
+ block.setAttribute("absolute-position", "fixed");
+ block.setAttribute("left", "0px");
+ block.setAttribute("top", "0px");
+ block.setAttribute("bottom", "0px");
+ block.setAttribute("min-width", normalWidthPx + "px");
- if ( maxSpannedWidthPx != Integer.MAX_VALUE )
- {
- block.setAttribute( "max-width", maxSpannedWidthPx + "px" );
+ if (maxSpannedWidthPx != Integer.MAX_VALUE) {
+ block.setAttribute("max-width", maxSpannedWidthPx + "px");
}
- block.setAttribute( "overflow", "hidden" );
- block.setAttribute( "height", normalHeightPt + "pt" );
- block.setAttribute( "keep-together.within-line", "always" );
- block.setAttribute( "wrap-option", "no-wrap" );
+ block.setAttribute("overflow", "hidden");
+ block.setAttribute("height", normalHeightPt + "pt");
+ block.setAttribute("keep-together.within-line", "always");
+ block.setAttribute("wrap-option", "no-wrap");
}
- processCellStyle( workbook, cell.getCellStyle(), tableCellElement,
- block );
+ processCellStyle(workbook, cell.getCellStyle(), tableCellElement,
+ block);
- block.appendChild( text );
- tableCellElement.appendChild( block );
+ block.appendChild(text);
+ tableCellElement.appendChild(block);
- return AbstractExcelUtils.isEmpty( value ) && emptyStyle;
+ return isEmpty(value) && emptyStyle;
}
- protected void processCellStyle( HSSFWorkbook workbook,
- HSSFCellStyle cellStyle, Element cellTarget, Element blockTarget )
- {
- blockTarget.setAttribute( "white-space-collapse", "false" );
+ protected void processCellStyle(HSSFWorkbook workbook,
+ HSSFCellStyle cellStyle, Element cellTarget, Element blockTarget) {
+ blockTarget.setAttribute("white-space-collapse", "false");
{
- String textAlign = AbstractExcelUtils.getAlign( cellStyle.getAlignment() );
- if ( AbstractExcelUtils.isNotEmpty( textAlign ) )
- blockTarget.setAttribute( "text-align", textAlign );
+ String textAlign = getAlign(cellStyle.getAlignment());
+ if (isNotEmpty(textAlign)) {
+ blockTarget.setAttribute("text-align", textAlign);
+ }
}
- if ( cellStyle.getFillPattern() == FillPatternType.NO_FILL )
- {
+ if (cellStyle.getFillPattern() == FillPatternType.NO_FILL) {
// no fill
- }
- else if ( cellStyle.getFillPattern() == FillPatternType.SOLID_FOREGROUND )
- {
+ } else if (cellStyle.getFillPattern() == FillPatternType.SOLID_FOREGROUND) {
final HSSFColor foregroundColor = cellStyle
- .getFillForegroundColorColor();
- if ( foregroundColor != null )
- cellTarget.setAttribute( "background-color",
- AbstractExcelUtils.getColor( foregroundColor ) );
- }
- else
- {
+ .getFillForegroundColorColor();
+ if (foregroundColor != null) {
+ cellTarget.setAttribute("background-color",
+ getColor(foregroundColor));
+ }
+ } else {
final HSSFColor backgroundColor = cellStyle
- .getFillBackgroundColorColor();
- if ( backgroundColor != null )
- cellTarget.setAttribute( "background-color",
- AbstractExcelUtils.getColor( backgroundColor ) );
- }
-
- processCellStyleBorder( workbook, cellTarget, "top",
- cellStyle.getBorderTop(), cellStyle.getTopBorderColor() );
- processCellStyleBorder( workbook, cellTarget, "right",
- cellStyle.getBorderRight(), cellStyle.getRightBorderColor() );
- processCellStyleBorder( workbook, cellTarget, "bottom",
- cellStyle.getBorderBottom(), cellStyle.getBottomBorderColor() );
- processCellStyleBorder( workbook, cellTarget, "left",
- cellStyle.getBorderLeft(), cellStyle.getLeftBorderColor() );
-
- HSSFFont font = cellStyle.getFont( workbook );
- processCellStyleFont( workbook, blockTarget, font );
+ .getFillBackgroundColorColor();
+ if (backgroundColor != null) {
+ cellTarget.setAttribute("background-color",
+ getColor(backgroundColor));
+ }
+ }
+
+ processCellStyleBorder(workbook, cellTarget, "top",
+ cellStyle.getBorderTop(), cellStyle.getTopBorderColor());
+ processCellStyleBorder(workbook, cellTarget, "right",
+ cellStyle.getBorderRight(), cellStyle.getRightBorderColor());
+ processCellStyleBorder(workbook, cellTarget, "bottom",
+ cellStyle.getBorderBottom(), cellStyle.getBottomBorderColor());
+ processCellStyleBorder(workbook, cellTarget, "left",
+ cellStyle.getBorderLeft(), cellStyle.getLeftBorderColor());
+
+ HSSFFont font = cellStyle.getFont(workbook);
+ processCellStyleFont(workbook, blockTarget, font);
}
- protected void processCellStyleBorder( HSSFWorkbook workbook,
- Element cellTarget, String type, BorderStyle xlsBorder, short borderColor )
- {
- if ( xlsBorder == BorderStyle.NONE )
+ protected void processCellStyleBorder(HSSFWorkbook workbook,
+ Element cellTarget, String type, BorderStyle xlsBorder, short borderColor) {
+ if (xlsBorder == BorderStyle.NONE) {
return;
+ }
StringBuilder borderStyle = new StringBuilder();
- borderStyle.append( AbstractExcelUtils.getBorderWidth( xlsBorder ) );
+ borderStyle.append(getBorderWidth(xlsBorder));
final HSSFColor color = workbook.getCustomPalette().getColor(
- borderColor );
- if ( color != null )
- {
- borderStyle.append( ' ' );
- borderStyle.append( AbstractExcelUtils.getColor( color ) );
+ borderColor);
+ if (color != null) {
+ borderStyle.append(' ');
+ borderStyle.append(getColor(color));
- borderStyle.append( ' ' );
- borderStyle.append( AbstractExcelUtils.getBorderStyle( xlsBorder ) );
+ borderStyle.append(' ');
+ borderStyle.append(getBorderStyle(xlsBorder));
}
- cellTarget.setAttribute( "border-" + type, borderStyle.toString() );
+ cellTarget.setAttribute("border-" + type, borderStyle.toString());
}
- protected void processCellStyleFont( HSSFWorkbook workbook,
- Element blockTarget, HSSFFont font )
- {
+ protected void processCellStyleFont(HSSFWorkbook workbook,
+ Element blockTarget, HSSFFont font) {
Triplet triplet = new Triplet();
triplet.fontName = font.getFontName();
triplet.bold = font.getBold();
triplet.italic = font.getItalic();
- getFontReplacer().update( triplet );
- setBlockProperties( blockTarget, triplet );
+ getFontReplacer().update(triplet);
+ setBlockProperties(blockTarget, triplet);
final HSSFColor fontColor = workbook.getCustomPalette().getColor(
- font.getColor() );
- if ( fontColor != null )
- blockTarget.setAttribute( "color",
- AbstractExcelUtils.getColor( fontColor ) );
+ font.getColor());
+ if (fontColor != null) {
+ blockTarget.setAttribute("color",
+ getColor(fontColor));
+ }
- if ( font.getFontHeightInPoints() != 0 )
- blockTarget.setAttribute( "font-size", font.getFontHeightInPoints()
- + "pt" );
+ if (font.getFontHeightInPoints() != 0) {
+ blockTarget.setAttribute("font-size", font.getFontHeightInPoints()
+ + "pt");
+ }
}
- protected void processColumnHeaders( HSSFSheet sheet, int maxSheetColumns,
- Element table )
- {
+ protected void processColumnHeaders(HSSFSheet sheet, int maxSheetColumns,
+ Element table) {
Element tableHeader = foDocumentFacade.createTableHeader();
Element row = foDocumentFacade.createTableRow();
- if ( isOutputRowNumbers() )
- {
+ if (isOutputRowNumbers()) {
// empty cell at left-top corner
final Element tableCellElement = foDocumentFacade.createTableCell();
- tableCellElement.appendChild( foDocumentFacade.createBlock() );
- row.appendChild( tableCellElement );
+ tableCellElement.appendChild(foDocumentFacade.createBlock());
+ row.appendChild(tableCellElement);
}
- 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 cell = foDocumentFacade.createTableCell();
Element block = foDocumentFacade.createBlock();
- block.setAttribute( "text-align", "center" );
- block.setAttribute( "font-weight", "bold" );
+ block.setAttribute("text-align", "center");
+ block.setAttribute("font-weight", "bold");
- String text = getColumnName( c );
- block.appendChild( foDocumentFacade.createText( text ) );
+ String text = getColumnName(c);
+ block.appendChild(foDocumentFacade.createText(text));
- cell.appendChild( block );
- row.appendChild( cell );
+ cell.appendChild(block);
+ row.appendChild(cell);
}
- tableHeader.appendChild( row );
- table.appendChild( tableHeader );
+ tableHeader.appendChild(row);
+ table.appendChild(tableHeader);
}
/**
@@ -448,163 +427,155 @@ public class ExcelToFoConverter extends
*
* @return table width in inches
*/
- protected float processColumnWidths( HSSFSheet sheet, int maxSheetColumns,
- Element table )
- {
+ protected float processColumnWidths(HSSFSheet sheet, int maxSheetColumns,
+ Element table) {
float tableWidth = 0;
- if ( isOutputRowNumbers() )
- {
- final float columnWidthIn = getDefaultColumnWidth( sheet ) / DPI;
+ if (isOutputRowNumbers()) {
+ final float columnWidthIn = getDefaultColumnWidth(sheet) / DPI;
final Element rowNumberColumn = foDocumentFacade
- .createTableColumn();
- rowNumberColumn.setAttribute( "column-width", columnWidthIn + "in" );
- table.appendChild( rowNumberColumn );
+ .createTableColumn();
+ rowNumberColumn.setAttribute("column-width", columnWidthIn + "in");
+ table.appendChild(rowNumberColumn);
tableWidth += columnWidthIn;
}
- 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;
+ }
- final float columnWidthIn = getColumnWidth( sheet, c ) / DPI;
+ final float columnWidthIn = getColumnWidth(sheet, c) / DPI;
Element col = foDocumentFacade.createTableColumn();
- col.setAttribute( "column-width", columnWidthIn + "in" );
- table.appendChild( col );
+ col.setAttribute("column-width", columnWidthIn + "in");
+ table.appendChild(col);
tableWidth += columnWidthIn;
}
- table.setAttribute( "width", tableWidth + "in" );
+ table.setAttribute("width", tableWidth + "in");
return tableWidth;
}
protected void processDocumentInformation(
- SummaryInformation summaryInformation )
- {
- if ( AbstractExcelUtils.isNotEmpty( summaryInformation.getTitle() ) )
- foDocumentFacade.setTitle( summaryInformation.getTitle() );
+ SummaryInformation summaryInformation) {
+ if (isNotEmpty(summaryInformation.getTitle())) {
+ foDocumentFacade.setTitle(summaryInformation.getTitle());
+ }
- if ( AbstractExcelUtils.isNotEmpty( summaryInformation.getAuthor() ) )
- foDocumentFacade.setCreator( summaryInformation.getAuthor() );
+ if (isNotEmpty(summaryInformation.getAuthor())) {
+ foDocumentFacade.setCreator(summaryInformation.getAuthor());
+ }
- if ( AbstractExcelUtils.isNotEmpty( summaryInformation.getKeywords() ) )
- foDocumentFacade.setKeywords( summaryInformation.getKeywords() );
+ if (isNotEmpty(summaryInformation.getKeywords())) {
+ foDocumentFacade.setKeywords(summaryInformation.getKeywords());
+ }
- if ( AbstractExcelUtils.isNotEmpty( summaryInformation.getComments() ) )
- foDocumentFacade.setDescription( summaryInformation.getComments() );
+ if (isNotEmpty(summaryInformation.getComments())) {
+ foDocumentFacade.setDescription(summaryInformation.getComments());
+ }
}
/**
* @return maximum 1-base index of column that were rendered, zero if none
*/
- protected int processRow( HSSFWorkbook workbook,
- CellRangeAddress[][] mergedRanges, HSSFRow row,
- Element tableRowElement )
- {
+ protected int processRow(HSSFWorkbook workbook,
+ 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() )
- {
- Element tableRowNumberCellElement = processRowNumber( row );
- emptyCells.add( tableRowNumberCellElement );
+ if (isOutputRowNumbers()) {
+ Element tableRowNumberCellElement = processRowNumber(row);
+ 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);
// spanning using overlapping blocks
int divWidthPx = 0;
{
- divWidthPx = getColumnWidth( sheet, colIx );
+ 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 = foDocumentFacade.createTableCell();
- if ( range != null )
- {
- if ( range.getFirstColumn() != range.getLastColumn() )
+ if (range != null) {
+ if (range.getFirstColumn() != range.getLastColumn()) {
tableCellElement.setAttribute(
- "number-columns-spanned",
- String.valueOf( range.getLastColumn()
- - range.getFirstColumn() + 1 ) );
- if ( range.getFirstRow() != range.getLastRow() )
+ "number-columns-spanned",
+ String.valueOf(range.getLastColumn()
+ - range.getFirstColumn() + 1));
+ }
+ if (range.getFirstRow() != range.getLastRow()) {
tableCellElement.setAttribute(
- "number-rows-spanned",
- String.valueOf( range.getLastRow()
- - range.getFirstRow() + 1 ) );
+ "number-rows-spanned",
+ String.valueOf(range.getLastRow()
+ - range.getFirstRow() + 1));
+ }
}
boolean emptyCell;
- if ( cell != null )
- {
- emptyCell = processCell( workbook, cell, tableCellElement,
- getColumnWidth( sheet, colIx ), divWidthPx,
- row.getHeight() / 20f );
- }
- else
- {
- tableCellElement.appendChild( foDocumentFacade.createBlock() );
+ if (cell != null) {
+ emptyCell = processCell(workbook, cell, tableCellElement,
+ getColumnWidth(sheet, colIx), divWidthPx,
+ row.getHeight() / 20f);
+ } else {
+ tableCellElement.appendChild(foDocumentFacade.createBlock());
emptyCell = true;
}
- if ( emptyCell )
- {
- emptyCells.add( tableCellElement );
- }
- else
- {
- for ( Element emptyCellElement : emptyCells )
- {
- tableRowElement.appendChild( emptyCellElement );
+ if (emptyCell) {
+ emptyCells.add(tableCellElement);
+ } else {
+ for (Element emptyCellElement : emptyCells) {
+ tableRowElement.appendChild(emptyCellElement);
}
emptyCells.clear();
- tableRowElement.appendChild( tableCellElement );
+ tableRowElement.appendChild(tableCellElement);
maxRenderedColumn = colIx;
}
}
@@ -612,94 +583,86 @@ public class ExcelToFoConverter extends
return maxRenderedColumn + 1;
}
- protected Element processRowNumber( HSSFRow row )
- {
+ protected Element processRowNumber(HSSFRow row) {
Element tableRowNumberCellElement = foDocumentFacade.createTableCell();
Element block = foDocumentFacade.createBlock();
- block.setAttribute( "text-align", "right" );
- block.setAttribute( "font-weight", "bold" );
+ block.setAttribute("text-align", "right");
+ block.setAttribute("font-weight", "bold");
- Text text = foDocumentFacade.createText( getRowName( row ) );
- block.appendChild( text );
+ Text text = foDocumentFacade.createText(getRowName(row));
+ block.appendChild(text);
- tableRowNumberCellElement.appendChild( block );
+ tableRowNumberCellElement.appendChild(block);
return tableRowNumberCellElement;
}
- protected float processSheet( HSSFWorkbook workbook, HSSFSheet sheet,
- Element flow )
- {
+ protected float processSheet(HSSFWorkbook workbook, HSSFSheet sheet,
+ Element flow) {
final int physicalNumberOfRows = sheet.getPhysicalNumberOfRows();
- if ( physicalNumberOfRows <= 0 )
+ if (physicalNumberOfRows <= 0) {
return 0;
+ }
- processSheetName( sheet, flow );
+ processSheetName(sheet, flow);
Element table = foDocumentFacade.createTable();
- table.setAttribute( "table-layout", "fixed" );
+ table.setAttribute("table-layout", "fixed");
Element tableBody = foDocumentFacade.createTableBody();
- final CellRangeAddress[][] mergedRanges = ExcelToHtmlUtils
- .buildMergedRangesMap( sheet );
+ final CellRangeAddress[][] mergedRanges = buildMergedRangesMap(sheet);
final List<Element> emptyRowElements = new ArrayList<>(
- physicalNumberOfRows);
+ 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 = foDocumentFacade.createTableRow();
- tableRowElement.setAttribute( "height", row.getHeight() / 20f
- + "pt" );
+ tableRowElement.setAttribute("height", row.getHeight() / 20f
+ + "pt");
- int maxRowColumnNumber = processRow( workbook, mergedRanges, row,
- tableRowElement );
+ int maxRowColumnNumber = processRow(workbook, mergedRanges, row,
+ tableRowElement);
- if ( tableRowElement.getChildNodes().getLength() == 0 )
- {
+ if (tableRowElement.getChildNodes().getLength() == 0) {
Element emptyCellElement = foDocumentFacade.createTableCell();
- emptyCellElement.appendChild( foDocumentFacade.createBlock() );
- tableRowElement.appendChild( emptyCellElement );
+ emptyCellElement.appendChild(foDocumentFacade.createBlock());
+ tableRowElement.appendChild(emptyCellElement);
}
- if ( maxRowColumnNumber == 0 )
- {
- emptyRowElements.add( tableRowElement );
- }
- else
- {
- if ( !emptyRowElements.isEmpty() )
- {
- for ( Element emptyRowElement : emptyRowElements )
- {
- tableBody.appendChild( emptyRowElement );
+ if (maxRowColumnNumber == 0) {
+ emptyRowElements.add(tableRowElement);
+ } else {
+ 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);
}
- float tableWidthIn = processColumnWidths( sheet, maxSheetColumns, table );
+ float tableWidthIn = processColumnWidths(sheet, maxSheetColumns, table);
- if ( isOutputColumnHeaders() )
- {
- processColumnHeaders( sheet, maxSheetColumns, table );
+ if (isOutputColumnHeaders()) {
+ processColumnHeaders(sheet, maxSheetColumns, table);
}
- table.appendChild( tableBody );
- flow.appendChild( table );
+ table.appendChild(tableBody);
+ flow.appendChild(table);
return tableWidthIn;
}
@@ -708,82 +671,79 @@ public class ExcelToFoConverter extends
* Process single sheet (as specified by 0-based sheet index)
*
* @return <tt>true</tt> if result were added to FO document, <tt>false</tt>
- * otherwise
+ * otherwise
*/
- protected boolean processSheet( HSSFWorkbook workbook, int sheetIndex )
- {
+ protected boolean processSheet(HSSFWorkbook workbook, int sheetIndex) {
String pageMasterName = "sheet-" + sheetIndex;
Element pageSequence = foDocumentFacade
- .createPageSequence( pageMasterName );
- Element flow = foDocumentFacade.addFlowToPageSequence( pageSequence,
- "xsl-region-body" );
+ .createPageSequence(pageMasterName);
+ Element flow = foDocumentFacade.addFlowToPageSequence(pageSequence,
+ "xsl-region-body");
- HSSFSheet sheet = workbook.getSheetAt( sheetIndex );
- float tableWidthIn = processSheet( workbook, sheet, flow );
+ HSSFSheet sheet = workbook.getSheetAt(sheetIndex);
+ float tableWidthIn = processSheet(workbook, sheet, flow);
- if ( tableWidthIn == 0 )
+ if (tableWidthIn == 0) {
return false;
+ }
- createPageMaster( tableWidthIn, pageMasterName );
- foDocumentFacade.addPageSequence( pageSequence );
+ createPageMaster(tableWidthIn, pageMasterName);
+ foDocumentFacade.addPageSequence(pageSequence);
return true;
}
- protected void processSheetName( HSSFSheet sheet, Element flow )
- {
+ protected void processSheetName(HSSFSheet sheet, Element flow) {
Element titleBlock = foDocumentFacade.createBlock();
Triplet triplet = new Triplet();
triplet.bold = true;
triplet.italic = false;
triplet.fontName = "Arial";
- getFontReplacer().update( triplet );
+ getFontReplacer().update(triplet);
- setBlockProperties( titleBlock, triplet );
- titleBlock.setAttribute( "font-size", "200%" );
+ setBlockProperties(titleBlock, triplet);
+ titleBlock.setAttribute("font-size", "200%");
Element titleInline = foDocumentFacade.createInline();
- titleInline.appendChild( foDocumentFacade.createText( sheet
- .getSheetName() ) );
- titleBlock.appendChild( titleInline );
- flow.appendChild( titleBlock );
+ titleInline.appendChild(foDocumentFacade.createText(sheet
+ .getSheetName()));
+ titleBlock.appendChild(titleInline);
+ flow.appendChild(titleBlock);
Element titleBlock2 = foDocumentFacade.createBlock();
Element titleInline2 = foDocumentFacade.createInline();
- titleBlock2.appendChild( titleInline2 );
- flow.appendChild( titleBlock2 );
+ titleBlock2.appendChild(titleInline2);
+ flow.appendChild(titleBlock2);
}
- public void processWorkbook( HSSFWorkbook workbook )
- {
+ public void processWorkbook(HSSFWorkbook workbook) {
final SummaryInformation summaryInformation = workbook
- .getSummaryInformation();
- if ( summaryInformation != null )
- {
- processDocumentInformation( summaryInformation );
+ .getSummaryInformation();
+ if (summaryInformation != null) {
+ processDocumentInformation(summaryInformation);
}
- for ( int s = 0; s < workbook.getNumberOfSheets(); s++ )
- {
- processSheet( workbook, s );
+ for (int s = 0; s < workbook.getNumberOfSheets(); s++) {
+ processSheet(workbook, s);
}
}
- private void setBlockProperties( Element textBlock, Triplet triplet )
- {
- if ( triplet.bold )
- textBlock.setAttribute( "font-weight", "bold" );
+ private void setBlockProperties(Element textBlock, Triplet triplet) {
+ if (triplet.bold) {
+ textBlock.setAttribute("font-weight", "bold");
+ }
- if ( triplet.italic )
- textBlock.setAttribute( "font-style", "italic" );
+ if (triplet.italic) {
+ textBlock.setAttribute("font-style", "italic");
+ }
- if ( AbstractExcelUtils.isNotEmpty( triplet.fontName ) )
- textBlock.setAttribute( "font-family", triplet.fontName );
+ if (isNotEmpty(triplet.fontName)) {
+ textBlock.setAttribute("font-family", triplet.fontName);
+ }
}
- public void setPageMarginInches( float pageMarginInches )
- {
+ public void setPageMarginInches(float pageMarginInches) {
this.pageMarginInches = pageMarginInches;
}
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@poi.apache.org
For additional commands, e-mail: commits-help@poi.apache.org