<property name="ooxml.xsds.ozip" location="${ooxml.lib}/OfficeOpenXML-Part4.zip"/>
<property name="ooxml.xsds.izip" location="${ooxml.lib}/OfficeOpenXML-XMLSchema.zip"/>
<property name="ooxml.xsds.url" value="http://www.ecma-international.org/publications/files/ECMA-ST/Office%20Open%20XML%20Part%204%20(DOCX).zip" />
+ <property name="ooxml.xsds.jar" location="${ooxml.lib}/ooxml-schemas.jar"/>
<property name="build.site" location="build/tmp/site/build/site"/>
<property name="build.site.src" location="build/tmp/site"/>
<mkdir dir="${scratchpad.output.dir}"/>
<mkdir dir="${contrib.output.dir}"/>
<mkdir dir="${examples.output.dir}"/>
+ <mkdir dir="${ooxml.output.dir}"/>
<mkdir dir="${main.output.test.dir}"/>
<mkdir dir="${contrib.output.test.dir}"/>
<mkdir dir="${scratchpad.output.test.dir}"/>
+ <mkdir dir="${ooxml.output.test.dir}"/>
<mkdir dir="${main.reports.test}"/>
<mkdir dir="${scratchpad.reports.test}"/>
<mkdir dir="${contrib.reports.test}"/>
</patternset>
</unzip>
</target>
- <target name="compile-ooxml-xsds" depends="check-jars,fetch-jars,check-ooxml-xsds,fetch-ooxml-xsds"
+ <target name="check-compiled-ooxml-xsds">
+ <condition property="ooxml-compiled-xsds.present">
+ <or>
+ <and>
+ <available file="${ooxml.xsds.jar}"/>
+ </and>
+ <isset property="disconnected"/>
+ </or>
+ </condition>
+ </target>
+ <target name="compile-ooxml-xsds" unless="ooxml-compiled-xsds.present"
+ depends="check-jars,fetch-jars,check-ooxml-xsds,fetch-ooxml-xsds,check-compiled-ooxml-xsds"
description="Unpacks the OOXML xsd files, and compiles them into XmlBeans">
<taskdef name="xmlbean"
classname="org.apache.xmlbeans.impl.tool.XMLBean"
-->
<xmlbean
schema="build/ooxml-xsds/"
- destfile="${ooxml.lib}/ooxml-schemas.jar"
+ destfile="${ooxml.xsds.jar}"
javasource="1.4"
failonerror="false"
>
</target>
<target name="compile-ooxml" depends="init, check-ooxml-xsds, fetch-ooxml-xsds, compile-ooxml-xsds, compile-main">
- <javac target="${jdk.version.class}" source="${jdk.version.source}"
+ <!-- openxml4j requires java 1.5, so so must we, for now -->
+ <javac target="1.5" source="1.5"
destdir="${ooxml.output.dir}" debug="on" srcdir="${ooxml.src}">
<classpath refid="ooxml.classpath"/>
</javac>
+++ /dev/null
-/* ====================================================================
- 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;
-
-import java.io.File;
-import java.io.IOException;
-import java.util.ArrayList;
-
-import org.dom4j.Document;
-import org.dom4j.DocumentException;
-import org.dom4j.io.SAXReader;
-import org.openxml4j.exceptions.InvalidFormatException;
-import org.openxml4j.exceptions.OpenXML4JException;
-import org.openxml4j.opc.Package;
-import org.openxml4j.opc.PackageAccess;
-import org.openxml4j.opc.PackagePart;
-
-/**
- * Parent class of the low level interface to
- * all POI XML (OOXML) implementations.
- * Normal users should probably deal with things that
- * extends {@link POIXMLDocument}, unless they really
- * do need to get low level access to the files.
- *
- * WARNING - APIs expected to change rapidly
- */
-public abstract class HXFDocument {
- /**
- * File package/container.
- */
- protected Package container;
- /**
- * The Package Part for our base document
- */
- protected PackagePart basePart;
- /**
- * The base document of this instance, eg Workbook for
- * xslsx
- */
- protected Document baseDocument;
-
- protected HXFDocument(Package container, String baseContentType) throws OpenXML4JException {
- this.container = container;
-
- // Find the base document
- ArrayList<PackagePart> baseParts =
- container.getPartsByContentType(baseContentType);
- if(baseParts.size() != 1) {
- throw new OpenXML4JException("Expecting one entry with content type of " + baseContentType + ", but found " + baseParts.size());
- }
- basePart = baseParts.get(0);
-
- // And load it up
- try {
- SAXReader reader = new SAXReader();
- baseDocument = reader.read(basePart.getInputStream());
- } catch (DocumentException e) {
- throw new OpenXML4JException(e.getMessage());
- } catch (IOException ioe) {
- throw new OpenXML4JException(ioe.getMessage());
- }
- }
-
- public static Package openPackage(File f) throws InvalidFormatException {
- return Package.open(f.toString(), PackageAccess.READ_WRITE);
- }
-
- /**
- * Get the package container.
- * @return The package associated to this document.
- */
- public Package getPackage() {
- return container;
- }
-}
import java.io.IOException;
-import org.apache.poi.HXFDocument;
+import org.apache.poi.hxf.HXFDocument;
import org.apache.xmlbeans.XmlException;
import org.openxml4j.exceptions.OpenXML4JException;
import org.openxml4j.opc.Package;
--- /dev/null
+/* ====================================================================
+ 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.hxf;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.ArrayList;
+
+import org.apache.poi.POIXMLDocument;
+import org.dom4j.Document;
+import org.dom4j.DocumentException;
+import org.dom4j.io.SAXReader;
+import org.openxml4j.exceptions.InvalidFormatException;
+import org.openxml4j.exceptions.OpenXML4JException;
+import org.openxml4j.opc.Package;
+import org.openxml4j.opc.PackageAccess;
+import org.openxml4j.opc.PackagePart;
+
+/**
+ * Parent class of the low level interface to
+ * all POI XML (OOXML) implementations.
+ * Normal users should probably deal with things that
+ * extends {@link POIXMLDocument}, unless they really
+ * do need to get low level access to the files.
+ *
+ * WARNING - APIs expected to change rapidly
+ */
+public abstract class HXFDocument {
+ /**
+ * File package/container.
+ */
+ protected Package container;
+ /**
+ * The Package Part for our base document
+ */
+ protected PackagePart basePart;
+ /**
+ * The base document of this instance, eg Workbook for
+ * xslsx
+ */
+ protected Document baseDocument;
+
+ protected HXFDocument(Package container, String baseContentType) throws OpenXML4JException {
+ this.container = container;
+
+ // Find the base document
+ ArrayList<PackagePart> baseParts =
+ container.getPartsByContentType(baseContentType);
+ if(baseParts.size() != 1) {
+ throw new OpenXML4JException("Expecting one entry with content type of " + baseContentType + ", but found " + baseParts.size());
+ }
+ basePart = baseParts.get(0);
+
+ // And load it up
+ try {
+ SAXReader reader = new SAXReader();
+ baseDocument = reader.read(basePart.getInputStream());
+ } catch (DocumentException e) {
+ throw new OpenXML4JException(e.getMessage());
+ } catch (IOException ioe) {
+ throw new OpenXML4JException(ioe.getMessage());
+ }
+ }
+
+ public static Package openPackage(File f) throws InvalidFormatException {
+ return Package.open(f.toString(), PackageAccess.READ_WRITE);
+ }
+
+ /**
+ * Get the package container.
+ * @return The package associated to this document.
+ */
+ public Package getPackage() {
+ return container;
+ }
+}
--- /dev/null
+/* ====================================================================
+ 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.hxf.dev;
+
+import java.io.File;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.PrintStream;
+import java.util.ArrayList;
+
+import org.openxml4j.opc.Package;
+import org.openxml4j.opc.PackageAccess;
+import org.openxml4j.opc.PackagePart;
+import org.openxml4j.opc.PackageRelationship;
+import org.openxml4j.opc.PackageRelationshipCollection;
+
+/**
+ * Prints out the contents of a HXF (ooxml) container.
+ * Useful for seeing what parts are defined, and how
+ * they're all related to each other.
+ */
+public class HXFLister {
+ private Package container;
+ private PrintStream disp;
+
+ public HXFLister(Package container) {
+ this(container, System.out);
+ }
+ public HXFLister(Package container, PrintStream disp) {
+ this.container = container;
+ this.disp = disp;
+ }
+
+ /**
+ * Figures out how big a given PackagePart is.
+ */
+ public static long getSize(PackagePart part) throws IOException {
+ InputStream in = part.getInputStream();
+ byte[] b = new byte[8192];
+ long size = 0;
+ int read = 0;
+
+ while(read > -1) {
+ read = in.read(b);
+ if(read > 0) {
+ size += read;
+ }
+ }
+
+ return size;
+ }
+
+ /**
+ * Displays information on all the different
+ * parts of the OOXML file container.
+ */
+ public void displayParts() throws Exception {
+ ArrayList<PackagePart> parts = container.getParts();
+ for (PackagePart part : parts) {
+ disp.println(part.getPartName());
+ disp.println("\t" + part.getContentType());
+
+ if(! part.getPartName().toString().equals("/docProps/core.xml")) {
+ disp.println("\t" + getSize(part) + " bytes");
+ }
+
+ if(! part.isRelationshipPart()) {
+ disp.println("\t" + part.getRelationships().size() + " relations");
+ }
+ }
+ }
+ /**
+ * Displays information on all the different
+ * relationships between different parts
+ * of the OOXML file container.
+ */
+ public void displayRelations() throws Exception {
+ PackageRelationshipCollection rels =
+ container.getRelationships();
+ for (PackageRelationship rel : rels) {
+ disp.println("Relationship:");
+ disp.println("\tFrom: "+ rel.getSourceURI());
+ disp.println("\tTo: " + rel.getTargetURI());
+ disp.println("\tMode: " + rel.getTargetMode());
+ disp.println("\tType: " + rel.getRelationshipType());
+ }
+ }
+
+ public static void main(String[] args) throws Exception {
+ if(args.length == 0) {
+ System.err.println("Use:");
+ System.err.println("\tjava HXFLister <filename>");
+ System.exit(1);
+ }
+
+ File f = new File(args[0]);
+ if(! f.exists()) {
+ System.err.println("Error, file not found!");
+ System.err.println("\t" + f.toString());
+ System.exit(2);
+ }
+
+ HXFLister lister = new HXFLister(
+ Package.open(f.toString(), PackageAccess.READ)
+ );
+
+ lister.disp.println(f.toString() + "\n");
+ lister.displayParts();
+ lister.disp.println();
+ lister.displayRelations();
+ }
+}
import java.io.File;
-import org.apache.poi.HXFDocument;
+import org.apache.poi.hxf.HXFDocument;
import org.openxml4j.opc.Package;
import org.openxml4j.opc.PackagePart;