diff options
author | Andreas Beeker <kiwiwings@apache.org> | 2018-12-14 00:44:40 +0000 |
---|---|---|
committer | Andreas Beeker <kiwiwings@apache.org> | 2018-12-14 00:44:40 +0000 |
commit | fce876b4eff2f6629656648bf0e955b39ab79683 (patch) | |
tree | 2e425864c8bc655d5e11104f0c4157113db3df7a /src/ooxml/java/org | |
parent | 11cbe34ee56eafb96761f7d48365682b0b0857ad (diff) | |
download | poi-fce876b4eff2f6629656648bf0e955b39ab79683.tar.gz poi-fce876b4eff2f6629656648bf0e955b39ab79683.zip |
merge trunk
git-svn-id: https://svn.apache.org/repos/asf/poi/branches/hemf@1848906 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'src/ooxml/java/org')
16 files changed, 248 insertions, 60 deletions
diff --git a/src/ooxml/java/org/apache/poi/ooxml/POIXMLDocumentPart.java b/src/ooxml/java/org/apache/poi/ooxml/POIXMLDocumentPart.java index 54fa790eca..c8e1a277a4 100644 --- a/src/ooxml/java/org/apache/poi/ooxml/POIXMLDocumentPart.java +++ b/src/ooxml/java/org/apache/poi/ooxml/POIXMLDocumentPart.java @@ -615,7 +615,7 @@ public class POIXMLDocumentPart { protected void read(POIXMLFactory factory, Map<PackagePart, POIXMLDocumentPart> context) throws OpenXML4JException { PackagePart pp = getPackagePart(); - if (pp.getContentType().equals(XWPFRelation.TEMPLATE.getContentType())) { + if (pp.getContentType().equals(XWPFRelation.GLOSSARY_DOCUMENT.getContentType())) { logger.log(POILogger.WARN, "POI does not currently support template.main+xml (glossary) parts. " + "Skipping this part for now."); diff --git a/src/ooxml/java/org/apache/poi/ooxml/extractor/CommandLineTextExtractor.java b/src/ooxml/java/org/apache/poi/ooxml/extractor/CommandLineTextExtractor.java index 999abd46ee..c3d429b3c7 100644 --- a/src/ooxml/java/org/apache/poi/ooxml/extractor/CommandLineTextExtractor.java +++ b/src/ooxml/java/org/apache/poi/ooxml/extractor/CommandLineTextExtractor.java @@ -22,41 +22,37 @@ import org.apache.poi.extractor.POITextExtractor; /** * A command line wrapper around {@link ExtractorFactory}, useful - * for when debugging. + * for when debugging. */ public class CommandLineTextExtractor { - public static final String DIVIDER = "======================="; - - public static void main(String[] args) throws Exception { - if(args.length < 1) { - System.err.println("Use:"); - System.err.println(" CommandLineTextExtractor <filename> [filename] [filename]"); - System.exit(1); - } - - for (String arg : args) { - System.out.println(DIVIDER); - - File f = new File(arg); - System.out.println(f); - - POITextExtractor extractor = - ExtractorFactory.createExtractor(f); - try { - POITextExtractor metadataExtractor = - extractor.getMetadataTextExtractor(); - - System.out.println(" " + DIVIDER); - String metaData = metadataExtractor.getText(); - System.out.println(metaData); - System.out.println(" " + DIVIDER); - String text = extractor.getText(); - System.out.println(text); - System.out.println(DIVIDER); - System.out.println("Had " + metaData.length() + " characters of metadata and " + text.length() + " characters of text"); - } finally { - extractor.close(); - } - } - } + public static final String DIVIDER = "======================="; + + public static void main(String[] args) throws Exception { + if (args.length < 1) { + System.err.println("Use:"); + System.err.println(" CommandLineTextExtractor <filename> [filename] [filename]"); + System.exit(1); + } + + for (String arg : args) { + System.out.println(DIVIDER); + + File f = new File(arg); + System.out.println(f); + + try (POITextExtractor extractor = ExtractorFactory.createExtractor(f)) { + POITextExtractor metadataExtractor = + extractor.getMetadataTextExtractor(); + + System.out.println(" " + DIVIDER); + String metaData = metadataExtractor.getText(); + System.out.println(metaData); + System.out.println(" " + DIVIDER); + String text = extractor.getText(); + System.out.println(text); + System.out.println(DIVIDER); + System.out.println("Had " + metaData.length() + " characters of metadata and " + text.length() + " characters of text"); + } + } + } } diff --git a/src/ooxml/java/org/apache/poi/ooxml/util/POIXMLConstants.java b/src/ooxml/java/org/apache/poi/ooxml/util/POIXMLConstants.java index ab58e35833..c6d7935fda 100644 --- a/src/ooxml/java/org/apache/poi/ooxml/util/POIXMLConstants.java +++ b/src/ooxml/java/org/apache/poi/ooxml/util/POIXMLConstants.java @@ -20,6 +20,7 @@ package org.apache.poi.ooxml.util; public class POIXMLConstants { public static final String FEATURE_LOAD_DTD_GRAMMAR = "http://apache.org/xml/features/nonvalidating/load-dtd-grammar"; public static final String FEATURE_LOAD_EXTERNAL_DTD = "http://apache.org/xml/features/nonvalidating/load-external-dtd"; + public static final String FEATURE_DISALLOW_DOCTYPE_DECL = "http://apache.org/xml/features/disallow-doctype-decl"; public static final String PROPERTY_ENTITY_EXPANSION_LIMIT = "http://www.oracle.com/xml/jaxp/properties/entityExpansionLimit"; public static final String PROPERTY_SECURITY_MANAGER = "http://apache.org/xml/properties/security-manager"; } diff --git a/src/ooxml/java/org/apache/poi/openxml4j/opc/internal/ZipHelper.java b/src/ooxml/java/org/apache/poi/openxml4j/opc/internal/ZipHelper.java index 094e89c6d7..0169909c9b 100644 --- a/src/ooxml/java/org/apache/poi/openxml4j/opc/internal/ZipHelper.java +++ b/src/ooxml/java/org/apache/poi/openxml4j/opc/internal/ZipHelper.java @@ -154,8 +154,6 @@ public final class ZipHelper { "The supplied data appears to be a raw XML file. " + "Formats such as Office 2003 XML are not supported"); default: - case OOXML: - case UNKNOWN: // Don't check for a Zip header, as to maintain backwards // compatibility we need to let them seek over junk at the // start before beginning processing. diff --git a/src/ooxml/java/org/apache/poi/openxml4j/util/ZipInputStreamZipEntrySource.java b/src/ooxml/java/org/apache/poi/openxml4j/util/ZipInputStreamZipEntrySource.java index 048b34e251..0a56966d4f 100644 --- a/src/ooxml/java/org/apache/poi/openxml4j/util/ZipInputStreamZipEntrySource.java +++ b/src/ooxml/java/org/apache/poi/openxml4j/util/ZipInputStreamZipEntrySource.java @@ -38,7 +38,7 @@ public class ZipInputStreamZipEntrySource implements ZipEntrySource { /** * Reads all the entries from the ZipInputStream - * into memory, and closes the source stream. + * into memory, and don't close (since POI 4.0.1) the source stream. * We'll then eat lots of memory, but be able to * work with the entries at-will. */ diff --git a/src/ooxml/java/org/apache/poi/poifs/crypt/dsig/SignatureOutputStream.java b/src/ooxml/java/org/apache/poi/poifs/crypt/dsig/SignatureOutputStream.java index 0a00e29f1a..0ba11fbd34 100644 --- a/src/ooxml/java/org/apache/poi/poifs/crypt/dsig/SignatureOutputStream.java +++ b/src/ooxml/java/org/apache/poi/poifs/crypt/dsig/SignatureOutputStream.java @@ -20,6 +20,7 @@ package org.apache.poi.poifs.crypt.dsig; import java.io.IOException; import java.security.GeneralSecurityException; import java.security.PrivateKey; +import java.security.Security; import java.security.Signature; import java.security.SignatureException; @@ -35,7 +36,12 @@ import org.apache.poi.poifs.crypt.HashAlgorithm; @Override public void init() throws GeneralSecurityException { final String provider = isMSCapi(key) ? "SunMSCAPI" : "SunRsaSign"; - signature = Signature.getInstance(algo.ecmaString+"withRSA", provider); + if (Security.getProvider(provider) != null) { + signature = Signature.getInstance(algo.ecmaString + "withRSA", provider); + } else { + signature = Signature.getInstance(algo.ecmaString + "withRSA"); + } + signature.initSign(key); } diff --git a/src/ooxml/java/org/apache/poi/xddf/usermodel/chart/XDDFChart.java b/src/ooxml/java/org/apache/poi/xddf/usermodel/chart/XDDFChart.java index 321626d71f..4267898309 100644 --- a/src/ooxml/java/org/apache/poi/xddf/usermodel/chart/XDDFChart.java +++ b/src/ooxml/java/org/apache/poi/xddf/usermodel/chart/XDDFChart.java @@ -53,6 +53,7 @@ import org.apache.poi.xddf.usermodel.text.XDDFTextBody; import org.apache.poi.xssf.usermodel.XSSFCell; import org.apache.poi.xssf.usermodel.XSSFRow; import org.apache.poi.xssf.usermodel.XSSFSheet; +import org.apache.poi.xssf.usermodel.XSSFTable; import org.apache.poi.xssf.usermodel.XSSFWorkbook; import org.apache.xmlbeans.XmlException; import org.apache.xmlbeans.XmlOptions; @@ -81,6 +82,27 @@ import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTTableColumns; @Beta public abstract class XDDFChart extends POIXMLDocumentPart implements TextContainer { + + /** + * default width of chart in emu + */ + public static final int DEFAULT_WIDTH = 500000; + + /** + * default height of chart in emu + */ + public static final int DEFAULT_HEIGHT = 500000; + + /** + * default x-coordinate of chart in emu + */ + public static final int DEFAULT_X = 10; + + /** + * default y-coordinate value of chart in emu + */ + public static final int DEFAULT_Y = 10; + /** * Underlying workbook */ @@ -712,11 +734,30 @@ public abstract class XDDFChart extends POIXMLDocumentPart implements TextContai XSSFRow row = this.getRow(sheet, 0); XSSFCell cell = this.getCell(row, column); cell.setCellValue(title); - this.updateSheetTable(sheet.getTables().get(0).getCTTable(), title, column); + + CTTable ctTable = this.getSheetTable(sheet); + + this.updateSheetTable(ctTable, title, column); return new CellReference(sheet.getSheetName(), 0, column, true, true); } /** + * this method will check whether sheet have table + * in case table size zero then create new table and add table columns element + * @param sheet + * @return table object + */ + private CTTable getSheetTable(XSSFSheet sheet) { + if(sheet.getTables().size() == 0) + { + XSSFTable newTable = sheet.createTable(null); + newTable.getCTTable().addNewTableColumns(); + sheet.getTables().add(newTable); + } + return sheet.getTables().get(0).getCTTable(); + } + + /** * this method update column header of sheet into table * * @param ctTable @@ -729,7 +770,8 @@ public abstract class XDDFChart extends POIXMLDocumentPart implements TextContai private void updateSheetTable(CTTable ctTable, String title, int index) { CTTableColumns tableColumnList = ctTable.getTableColumns(); CTTableColumn column = null; - for( int i = 0; tableColumnList.getCount() < index; i++) { + int columnCount = tableColumnList.getTableColumnList().size()-1; + for( int i = columnCount; i < index; i++) { column = tableColumnList.addNewTableColumn(); column.setId(i); } diff --git a/src/ooxml/java/org/apache/poi/xslf/usermodel/XMLSlideShow.java b/src/ooxml/java/org/apache/poi/xslf/usermodel/XMLSlideShow.java index 687ddc5f5b..b0cbc59dd1 100644 --- a/src/ooxml/java/org/apache/poi/xslf/usermodel/XMLSlideShow.java +++ b/src/ooxml/java/org/apache/poi/xslf/usermodel/XMLSlideShow.java @@ -302,14 +302,23 @@ public class XMLSlideShow extends POIXMLDocument * Create a blank chart on the given slide. */ public XSLFChart createChart(XSLFSlide slide) { + XSLFChart chart = createChart(); + slide.addRelation(null, XSLFRelation.CHART, chart); + return chart; + } + + /** + * This method is used to create template for chart XML. + * @return Xslf chart object + * @since POI 4.0.2 + */ + public XSLFChart createChart() { int chartIdx = findNextAvailableFileNameIndex(XSLFRelation.CHART, _charts.size() + 1); XSLFChart chart = (XSLFChart) createRelationship(XSLFRelation.CHART, XSLFFactory.getInstance(), chartIdx, true).getDocumentPart(); - slide.addRelation(null, XSLFRelation.CHART, chart); chart.setChartIndex(chartIdx); _charts.add(chart); return chart; } - /** * Return notes slide for the specified slide or create new if it does not exist yet. */ @@ -416,7 +425,7 @@ public class XMLSlideShow extends POIXMLDocument * Return all the charts in the slideshow */ public List<XSLFChart> getCharts() { - return _charts; + return Collections.unmodifiableList(_charts); } /** diff --git a/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFChart.java b/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFChart.java index 8e6612f875..5e8d73cd06 100644 --- a/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFChart.java +++ b/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFChart.java @@ -19,16 +19,28 @@ package org.apache.poi.xslf.usermodel; +import java.awt.geom.Rectangle2D; import java.io.IOException; +import javax.xml.namespace.QName; + import org.apache.poi.ooxml.POIXMLFactory; import org.apache.poi.ooxml.POIXMLRelation; import org.apache.poi.openxml4j.opc.PackagePart; +import org.apache.poi.openxml4j.opc.PackageRelationshipTypes; import org.apache.poi.util.Beta; import org.apache.poi.xddf.usermodel.chart.XDDFChart; +import org.apache.xmlbeans.XmlCursor; import org.apache.xmlbeans.XmlException; import org.openxmlformats.schemas.drawingml.x2006.chart.CTTitle; +import org.openxmlformats.schemas.drawingml.x2006.main.CTGraphicalObjectData; +import org.openxmlformats.schemas.drawingml.x2006.main.CTNonVisualDrawingProps; +import org.openxmlformats.schemas.drawingml.x2006.main.CTPoint2D; +import org.openxmlformats.schemas.drawingml.x2006.main.CTPositiveSize2D; import org.openxmlformats.schemas.drawingml.x2006.main.CTTextBody; +import org.openxmlformats.schemas.drawingml.x2006.main.CTTransform2D; +import org.openxmlformats.schemas.presentationml.x2006.main.CTGraphicalObjectFrame; +import org.openxmlformats.schemas.presentationml.x2006.main.CTGraphicalObjectFrameNonVisual; /** * Represents a Chart in a .pptx presentation @@ -36,6 +48,8 @@ import org.openxmlformats.schemas.drawingml.x2006.main.CTTextBody; @Beta public final class XSLFChart extends XDDFChart { + private static String CHART_URI = "http://schemas.openxmlformats.org/drawingml/2006/chart"; + /** * Construct a PresentationML chart. */ @@ -90,4 +104,47 @@ public final class XSLFChart extends XDDFChart { }; } } + + /** + * method to add graphic frame for XSLF chart + * + * @param shapeId shape id + * @param rID relation id + * @param anchor size and location of chart + * @return graphic frame object + * @since POI 4.0.2 + */ + static CTGraphicalObjectFrame prototype(int shapeId, String rID, Rectangle2D anchor) { + CTGraphicalObjectFrame frame = CTGraphicalObjectFrame.Factory.newInstance(); + CTGraphicalObjectFrameNonVisual nvGr = frame.addNewNvGraphicFramePr(); + + CTNonVisualDrawingProps cnv = nvGr.addNewCNvPr(); + cnv.setName("Chart " + shapeId); + cnv.setId(shapeId); + nvGr.addNewCNvGraphicFramePr().addNewGraphicFrameLocks().setNoGrp(true); + nvGr.addNewNvPr(); + + CTTransform2D xfrm = frame.addNewXfrm(); + + CTPoint2D off = xfrm.addNewOff(); + off.setX((int)anchor.getX()); + off.setY((int)anchor.getY()); + + CTPositiveSize2D ext = xfrm.addNewExt(); + ext.setCx((int)anchor.getWidth()); + ext.setCy((int)anchor.getHeight()); + + xfrm.setExt(ext); + xfrm.setOff(off); + + CTGraphicalObjectData gr = frame.addNewGraphic().addNewGraphicData(); + XmlCursor grCur = gr.newCursor(); + grCur.toNextToken(); + grCur.beginElement(new QName(CHART_URI, "chart")); + grCur.insertAttributeWithValue("id", PackageRelationshipTypes.CORE_PROPERTIES_ECMA376_NS, rID); + grCur.dispose(); + + gr.setUri(CHART_URI); + return frame; + } } diff --git a/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFDrawing.java b/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFDrawing.java index f4cd0d8e1c..ba93988d0b 100644 --- a/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFDrawing.java +++ b/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFDrawing.java @@ -107,6 +107,19 @@ public class XSLFDrawing { return shape; } + /** + * This method will add chart into slide's graphic frame + * + * @param rID relation id of chart + * @param rect2D Chart Bounding values + * @since POI 4.0.2 + */ + public void addChart(String rID, Rectangle2D rect2D) { + CTGraphicalObjectFrame sp = _spTree.addNewGraphicFrame(); + sp.set(XSLFChart.prototype(_sheet.allocateShapeId(), rID, rect2D)); + } + + public XSLFObjectShape createOleShape(String pictureRel) { CTGraphicalObjectFrame sp = _spTree.addNewGraphicFrame(); sp.set(XSLFObjectShape.prototype(_sheet.allocateShapeId(), pictureRel)); diff --git a/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFFreeformShape.java b/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFFreeformShape.java index 54acd2b7ba..8c41fe1b93 100644 --- a/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFFreeformShape.java +++ b/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFFreeformShape.java @@ -24,6 +24,12 @@ import java.awt.geom.Path2D; import java.awt.geom.PathIterator; import java.awt.geom.Rectangle2D; +import javax.xml.stream.XMLStreamException; +import javax.xml.stream.XMLStreamReader; + +import org.apache.poi.ooxml.POIXMLTypeLoader; +import org.apache.poi.sl.draw.geom.CustomGeometry; +import org.apache.poi.sl.draw.geom.PresetGeometries; import org.apache.poi.sl.usermodel.FreeformShape; import org.apache.poi.util.Beta; import org.apache.poi.util.POILogFactory; @@ -31,6 +37,7 @@ import org.apache.poi.util.POILogger; import org.apache.poi.util.Units; import org.apache.xmlbeans.XmlCursor; import org.apache.xmlbeans.XmlObject; +import org.apache.xmlbeans.XmlOptions; import org.openxmlformats.schemas.drawingml.x2006.main.CTAdjPoint2D; import org.openxmlformats.schemas.drawingml.x2006.main.CTCustomGeometry2D; import org.openxmlformats.schemas.drawingml.x2006.main.CTGeomRect; @@ -61,7 +68,7 @@ public class XSLFFreeformShape extends XSLFAutoShape } @Override - public int setPath(final Path2D.Double path) { + public int setPath(final Path2D path) { final CTPath2D ctPath = CTPath2D.Factory.newInstance(); final Rectangle2D bounds = path.getBounds2D(); @@ -117,6 +124,30 @@ public class XSLFFreeformShape extends XSLFAutoShape return numPoints; } + /** + * @return definition of the shape geometry + */ + @Override + public CustomGeometry getGeometry() { + final XmlObject xo = getShapeProperties(); + if (!(xo instanceof CTShapeProperties)) { + return null; + } + + XmlOptions xop = new XmlOptions(POIXMLTypeLoader.DEFAULT_XML_OPTIONS); + xop.setSaveOuter(); + + XMLStreamReader staxReader = ((CTShapeProperties)xo).getCustGeom().newXMLStreamReader(xop); + CustomGeometry custGeo = PresetGeometries.convertCustomGeometry(staxReader); + try { + staxReader.close(); + } catch (XMLStreamException e) { + LOG.log(POILogger.WARN, + "An error occurred while closing a Custom Geometry XML Stream Reader: " + e.getMessage()); + } + + return custGeo; + } @Override public Path2D.Double getPath() { diff --git a/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFSheet.java b/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFSheet.java index b67264ba0f..2bcf063990 100644 --- a/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFSheet.java +++ b/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFSheet.java @@ -20,6 +20,7 @@ import static org.apache.poi.ooxml.POIXMLTypeLoader.DEFAULT_XML_OPTIONS; import java.awt.Dimension; import java.awt.Graphics2D; +import java.awt.geom.Rectangle2D; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; @@ -52,6 +53,7 @@ import org.apache.poi.util.IOUtils; import org.apache.poi.util.POILogFactory; import org.apache.poi.util.POILogger; import org.apache.poi.util.Units; +import org.apache.poi.xddf.usermodel.chart.XDDFChart; import org.apache.xmlbeans.XmlCursor; import org.apache.xmlbeans.XmlException; import org.apache.xmlbeans.XmlObject; @@ -306,14 +308,13 @@ implements XSLFShapeContainer, Sheet<XSLFShape,XSLFTextParagraph> { throw new IllegalArgumentException("pictureData needs to be of type XSLFPictureData"); } RelationPart rp = addRelation(null, XSLFRelation.IMAGES, (XSLFPictureData)pictureData); - + XSLFObjectShape sh = getDrawing().createOleShape(rp.getRelationship().getId()); CTOleObject oleObj = sh.getCTOleObject(); Dimension dim = pictureData.getImageDimension(); oleObj.setImgW(Units.toEMU(dim.getWidth())); oleObj.setImgH(Units.toEMU(dim.getHeight())); - - + getShapes().add(sh); sh.setParent(this); return sh; @@ -719,4 +720,28 @@ implements XSLFShapeContainer, Sheet<XSLFShape,XSLFTextParagraph> { return (ph == null) ? null : new XSLFPlaceholderDetails(ph); } + /** + * this method will add chart into slide + * with default height, width, x and y + * @param chart xslf chart object + * @since POI 4.0.2 + */ + public void addChart(XSLFChart chart) { + Rectangle2D rect2D = new java.awt.Rectangle(XDDFChart.DEFAULT_X, XDDFChart.DEFAULT_Y, + XDDFChart.DEFAULT_WIDTH, XDDFChart.DEFAULT_HEIGHT); + + this.addChart(chart, rect2D); + } + + /** + * this method will add chart into slide + * with given height, width, x and y + * @param chart xslf chart object + * @since POI 4.0.2 + */ + public void addChart(XSLFChart chart, Rectangle2D rect2D) { + RelationPart rp = addRelation(null, XSLFRelation.CHART, chart); + getDrawing().addChart(rp.getRelationship().getId(), rect2D); + } + } diff --git a/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFSimpleShape.java b/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFSimpleShape.java index 4e54712a77..89f312327b 100644 --- a/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFSimpleShape.java +++ b/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFSimpleShape.java @@ -716,7 +716,6 @@ public abstract class XSLFSimpleShape extends XSLFShape } /** - * * @return definition of the shape geometry */ @Override diff --git a/src/ooxml/java/org/apache/poi/xssf/streaming/SXSSFWorkbook.java b/src/ooxml/java/org/apache/poi/xssf/streaming/SXSSFWorkbook.java index ed52e0e16b..16d7903a37 100644 --- a/src/ooxml/java/org/apache/poi/xssf/streaming/SXSSFWorkbook.java +++ b/src/ooxml/java/org/apache/poi/xssf/streaming/SXSSFWorkbook.java @@ -32,6 +32,7 @@ import java.util.List; import java.util.Map; import java.util.NoSuchElementException; +import org.apache.commons.compress.archivers.zip.Zip64Mode; import org.apache.commons.compress.archivers.zip.ZipArchiveEntry; import org.apache.commons.compress.archivers.zip.ZipArchiveOutputStream; import org.apache.poi.openxml4j.opc.OPCPackage; @@ -51,13 +52,7 @@ import org.apache.poi.ss.usermodel.Row.MissingCellPolicy; import org.apache.poi.ss.usermodel.Sheet; import org.apache.poi.ss.usermodel.SheetVisibility; import org.apache.poi.ss.usermodel.Workbook; -import org.apache.poi.util.IOUtils; -import org.apache.poi.util.Internal; -import org.apache.poi.util.NotImplemented; -import org.apache.poi.util.POILogFactory; -import org.apache.poi.util.POILogger; -import org.apache.poi.util.Removal; -import org.apache.poi.util.TempFile; +import org.apache.poi.util.*; import org.apache.poi.xssf.model.SharedStringsTable; import org.apache.poi.xssf.usermodel.XSSFChartSheet; import org.apache.poi.xssf.usermodel.XSSFSheet; @@ -117,6 +112,8 @@ public class SXSSFWorkbook implements Workbook { */ private final SharedStringsTable _sharedStringSource; + private Zip64Mode zip64Mode = Zip64Mode.AsNeeded; + /** * Construct a new workbook with default row window size */ @@ -250,6 +247,7 @@ public class SXSSFWorkbook implements Workbook { } } } + /** * Construct an empty workbook and specify the window for row access. * <p> @@ -291,6 +289,16 @@ public class SXSSFWorkbook implements Workbook { } /** + * @param zip64Mode {@link Zip64Mode} + * + * @since 4.0.3 + */ + @Beta + public void setZip64Mode(Zip64Mode zip64Mode) { + this.zip64Mode = zip64Mode; + } + + /** * Get whether temp files should be compressed. * * @return whether to compress temp files @@ -298,6 +306,7 @@ public class SXSSFWorkbook implements Workbook { public boolean isCompressTempFiles() { return _compressTmpFiles; } + /** * Set whether temp files should be compressed. * <p> @@ -377,6 +386,7 @@ public class SXSSFWorkbook implements Workbook { protected void injectData(ZipEntrySource zipEntrySource, OutputStream out) throws IOException { ZipArchiveOutputStream zos = new ZipArchiveOutputStream(out); + zos.setUseZip64(zip64Mode); try { Enumeration<? extends ZipArchiveEntry> en = zipEntrySource.getEntries(); while (en.hasMoreElements()) { diff --git a/src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFChart.java b/src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFChart.java index 44820a5871..495cde1bf9 100644 --- a/src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFChart.java +++ b/src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFChart.java @@ -39,12 +39,12 @@ public class XWPFChart extends XDDFChart { /** * default width of chart in emu */ - public static final int DEFAULT_WIDTH = 500000; + public static final int DEFAULT_WIDTH = XDDFChart.DEFAULT_WIDTH; /** * default height of chart in emu */ - public static final int DEFAULT_HEIGHT = 500000; + public static final int DEFAULT_HEIGHT = XDDFChart.DEFAULT_HEIGHT; // lazy initialization private Long checksum; diff --git a/src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFDocument.java b/src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFDocument.java index e3cc314a4a..8e7e383d45 100644 --- a/src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFDocument.java +++ b/src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFDocument.java @@ -58,6 +58,7 @@ import org.apache.poi.util.Internal; import org.apache.poi.util.POILogFactory; import org.apache.poi.util.POILogger; import org.apache.poi.wp.usermodel.HeaderFooterType; +import org.apache.poi.xddf.usermodel.chart.XDDFChart; import org.apache.poi.xwpf.model.XWPFHeaderFooterPolicy; import org.apache.xmlbeans.XmlCursor; import org.apache.xmlbeans.XmlException; @@ -1672,7 +1673,7 @@ public class XWPFDocument extends POIXMLDocument implements Document, IBody { * @since POI 4.0.0 */ public XWPFChart createChart() throws InvalidFormatException, IOException { - return createChart(XWPFChart.DEFAULT_WIDTH, XWPFChart.DEFAULT_HEIGHT); + return createChart(XDDFChart.DEFAULT_WIDTH, XDDFChart.DEFAULT_HEIGHT); } /** |