mirror of https://github.com/apache/poi.git
add more xsbs to the ooxml-lite jar by recursing through XWPF and XSSF documents
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1887978 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
207b98a5dc
commit
7c6e80e903
|
@ -25,6 +25,8 @@ import org.apache.poi.ooxml.POIXMLDocument;
|
||||||
import org.apache.poi.poifs.crypt.Decryptor;
|
import org.apache.poi.poifs.crypt.Decryptor;
|
||||||
import org.apache.poi.poifs.filesystem.FileMagic;
|
import org.apache.poi.poifs.filesystem.FileMagic;
|
||||||
import org.apache.poi.poifs.filesystem.POIFSFileSystem;
|
import org.apache.poi.poifs.filesystem.POIFSFileSystem;
|
||||||
|
import org.apache.xmlbeans.XmlCursor;
|
||||||
|
import org.apache.xmlbeans.XmlObject;
|
||||||
|
|
||||||
public final class POIXMLDocumentHandler {
|
public final class POIXMLDocumentHandler {
|
||||||
protected void handlePOIXMLDocument(POIXMLDocument doc) throws Exception {
|
protected void handlePOIXMLDocument(POIXMLDocument doc) throws Exception {
|
||||||
|
@ -46,4 +48,25 @@ public final class POIXMLDocumentHandler {
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Recurse through the document and convert all elements so they are available in the ooxml-lite jar.
|
||||||
|
* This method only makes sense for hierarchical documents like .docx.
|
||||||
|
* If the document is split up in different parts like in .pptx, each part needs to be provided.
|
||||||
|
*
|
||||||
|
* @param base the entry point
|
||||||
|
*/
|
||||||
|
protected static void cursorRecursive(XmlObject base) {
|
||||||
|
XmlCursor cur = base.newCursor();
|
||||||
|
try {
|
||||||
|
if (!cur.toFirstChild()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
do {
|
||||||
|
cursorRecursive(cur.getObject());
|
||||||
|
} while (cur.toNextSibling());
|
||||||
|
} finally {
|
||||||
|
cur.dispose();
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -48,11 +48,13 @@ import org.apache.poi.openxml4j.opc.OPCPackage;
|
||||||
import org.apache.poi.poifs.crypt.Decryptor;
|
import org.apache.poi.poifs.crypt.Decryptor;
|
||||||
import org.apache.poi.poifs.crypt.EncryptionInfo;
|
import org.apache.poi.poifs.crypt.EncryptionInfo;
|
||||||
import org.apache.poi.poifs.filesystem.POIFSFileSystem;
|
import org.apache.poi.poifs.filesystem.POIFSFileSystem;
|
||||||
|
import org.apache.poi.ss.usermodel.Sheet;
|
||||||
import org.apache.poi.util.IOUtils;
|
import org.apache.poi.util.IOUtils;
|
||||||
import org.apache.poi.util.NullPrintStream;
|
import org.apache.poi.util.NullPrintStream;
|
||||||
import org.apache.poi.xssf.eventusermodel.XSSFReader;
|
import org.apache.poi.xssf.eventusermodel.XSSFReader;
|
||||||
import org.apache.poi.xssf.extractor.XSSFExportToXml;
|
import org.apache.poi.xssf.extractor.XSSFExportToXml;
|
||||||
import org.apache.poi.xssf.usermodel.XSSFMap;
|
import org.apache.poi.xssf.usermodel.XSSFMap;
|
||||||
|
import org.apache.poi.xssf.usermodel.XSSFSheet;
|
||||||
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
|
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
|
||||||
import org.junit.jupiter.api.Test;
|
import org.junit.jupiter.api.Test;
|
||||||
import org.xml.sax.SAXException;
|
import org.xml.sax.SAXException;
|
||||||
|
@ -106,6 +108,11 @@ class XSSFFileHandler extends SpreadsheetHandler {
|
||||||
// also verify general POIFS-stuff
|
// also verify general POIFS-stuff
|
||||||
new POIXMLDocumentHandler().handlePOIXMLDocument(wb);
|
new POIXMLDocumentHandler().handlePOIXMLDocument(wb);
|
||||||
|
|
||||||
|
POIXMLDocumentHandler.cursorRecursive(wb.getCTWorkbook());
|
||||||
|
for (Sheet sh : wb) {
|
||||||
|
POIXMLDocumentHandler.cursorRecursive(((XSSFSheet)sh).getCTWorksheet());
|
||||||
|
}
|
||||||
|
|
||||||
// and finally ensure that exporting to XML works
|
// and finally ensure that exporting to XML works
|
||||||
exportToXML(wb);
|
exportToXML(wb);
|
||||||
|
|
||||||
|
|
|
@ -34,6 +34,7 @@ class XWPFFileHandler extends AbstractFileHandler {
|
||||||
try (XWPFDocument doc = new XWPFDocument(stream)) {
|
try (XWPFDocument doc = new XWPFDocument(stream)) {
|
||||||
|
|
||||||
new POIXMLDocumentHandler().handlePOIXMLDocument(doc);
|
new POIXMLDocumentHandler().handlePOIXMLDocument(doc);
|
||||||
|
POIXMLDocumentHandler.cursorRecursive(doc.getDocument());
|
||||||
} catch (POIXMLException e) {
|
} catch (POIXMLException e) {
|
||||||
Exception cause = (Exception)e.getCause();
|
Exception cause = (Exception)e.getCause();
|
||||||
throw cause == null ? e : cause;
|
throw cause == null ? e : cause;
|
||||||
|
|
Binary file not shown.
|
@ -29,6 +29,7 @@ open module org.apache.poi.ooxml.schemas {
|
||||||
exports com.microsoft.schemas.office.excel;
|
exports com.microsoft.schemas.office.excel;
|
||||||
exports com.microsoft.schemas.office.office;
|
exports com.microsoft.schemas.office.office;
|
||||||
exports com.microsoft.schemas.office.visio.x2012.main;
|
exports com.microsoft.schemas.office.visio.x2012.main;
|
||||||
|
exports com.microsoft.schemas.office.word;
|
||||||
exports com.microsoft.schemas.office.x2006.digsig;
|
exports com.microsoft.schemas.office.x2006.digsig;
|
||||||
exports com.microsoft.schemas.vml;
|
exports com.microsoft.schemas.vml;
|
||||||
exports org.apache.poi.schemas.ooxml.system.ooxml;
|
exports org.apache.poi.schemas.ooxml.system.ooxml;
|
||||||
|
|
Loading…
Reference in New Issue