mirror of https://github.com/apache/poi.git
Start on xwpf header/footer support
git-svn-id: https://svn.apache.org/repos/asf/poi/branches/ooxml@684229 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
0bedde6467
commit
b9d51638ea
|
@ -35,10 +35,14 @@ import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTP;
|
||||||
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTStyles;
|
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTStyles;
|
||||||
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTComment;
|
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTComment;
|
||||||
import org.openxmlformats.schemas.wordprocessingml.x2006.main.DocumentDocument;
|
import org.openxmlformats.schemas.wordprocessingml.x2006.main.DocumentDocument;
|
||||||
|
import org.openxmlformats.schemas.wordprocessingml.x2006.main.FtrDocument;
|
||||||
|
import org.openxmlformats.schemas.wordprocessingml.x2006.main.HdrDocument;
|
||||||
import org.openxmlformats.schemas.wordprocessingml.x2006.main.StylesDocument;
|
import org.openxmlformats.schemas.wordprocessingml.x2006.main.StylesDocument;
|
||||||
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CommentsDocument;
|
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CommentsDocument;
|
||||||
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTbl;
|
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTbl;
|
||||||
|
|
||||||
|
import org.apache.poi.xwpf.usermodel.XWPFFooter;
|
||||||
|
import org.apache.poi.xwpf.usermodel.XWPFHeader;
|
||||||
import org.apache.poi.xwpf.usermodel.XWPFHyperlink;
|
import org.apache.poi.xwpf.usermodel.XWPFHyperlink;
|
||||||
import org.apache.poi.xwpf.usermodel.XWPFParagraph;
|
import org.apache.poi.xwpf.usermodel.XWPFParagraph;
|
||||||
import org.apache.poi.xwpf.usermodel.XWPFComment;
|
import org.apache.poi.xwpf.usermodel.XWPFComment;
|
||||||
|
@ -57,8 +61,10 @@ import org.apache.poi.xwpf.usermodel.XWPFTable;
|
||||||
*/
|
*/
|
||||||
public class XWPFDocument extends POIXMLDocument {
|
public class XWPFDocument extends POIXMLDocument {
|
||||||
public static final String MAIN_CONTENT_TYPE = "application/vnd.openxmlformats-officedocument.wordprocessingml.document.main+xml";
|
public static final String MAIN_CONTENT_TYPE = "application/vnd.openxmlformats-officedocument.wordprocessingml.document.main+xml";
|
||||||
public static final String FOOTER_CONTENT_TYPE = "application/vnd.openxmlformats-officedocument.wordprocessingml.footer+xml";
|
|
||||||
public static final String HEADER_CONTENT_TYPE = "application/vnd.openxmlformats-officedocument.wordprocessingml.header+xml";
|
public static final String HEADER_CONTENT_TYPE = "application/vnd.openxmlformats-officedocument.wordprocessingml.header+xml";
|
||||||
|
public static final String HEADER_RELATION_TYPE = "http://schemas.openxmlformats.org/officeDocument/2006/relationships/header";
|
||||||
|
public static final String FOOTER_CONTENT_TYPE = "application/vnd.openxmlformats-officedocument.wordprocessingml.footer+xml";
|
||||||
|
public static final String FOOTER_RELATION_TYPE = "http://schemas.openxmlformats.org/officeDocument/2006/relationships/footer";
|
||||||
public static final String STYLES_CONTENT_TYPE = "application/vnd.openxmlformats-officedocument.wordprocessingml.styles+xml";
|
public static final String STYLES_CONTENT_TYPE = "application/vnd.openxmlformats-officedocument.wordprocessingml.styles+xml";
|
||||||
public static final String STYLES_RELATION_TYPE = "http://schemas.openxmlformats.org/officeDocument/2006/relationships/styles";
|
public static final String STYLES_RELATION_TYPE = "http://schemas.openxmlformats.org/officeDocument/2006/relationships/styles";
|
||||||
public static final String HYPERLINK_RELATION_TYPE = "http://schemas.openxmlformats.org/officeDocument/2006/relationships/hyperlink";
|
public static final String HYPERLINK_RELATION_TYPE = "http://schemas.openxmlformats.org/officeDocument/2006/relationships/hyperlink";
|
||||||
|
@ -69,6 +75,10 @@ public class XWPFDocument extends POIXMLDocument {
|
||||||
protected List<XWPFHyperlink> hyperlinks;
|
protected List<XWPFHyperlink> hyperlinks;
|
||||||
protected List<XWPFParagraph> paragraphs;
|
protected List<XWPFParagraph> paragraphs;
|
||||||
protected List<XWPFTable> tables;
|
protected List<XWPFTable> tables;
|
||||||
|
/** Should only ever be zero or one of these, we think */
|
||||||
|
protected XWPFHeader header;
|
||||||
|
/** Should only ever be zero or one of these, we think */
|
||||||
|
protected XWPFFooter footer;
|
||||||
|
|
||||||
public XWPFDocument(Package container) throws OpenXML4JException, IOException, XmlException {
|
public XWPFDocument(Package container) throws OpenXML4JException, IOException, XmlException {
|
||||||
super(container);
|
super(container);
|
||||||
|
@ -122,6 +132,24 @@ public class XWPFDocument extends POIXMLDocument {
|
||||||
for(PackageRelationship rel : getCorePart().getRelationshipsByType(PACK_OBJECT_REL_TYPE)) {
|
for(PackageRelationship rel : getCorePart().getRelationshipsByType(PACK_OBJECT_REL_TYPE)) {
|
||||||
embedds.add(getTargetPart(rel));
|
embedds.add(getTargetPart(rel));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Fetch the header, if there's one
|
||||||
|
PackageRelationshipCollection headerRel = getCorePart().getRelationshipsByType(HEADER_RELATION_TYPE);
|
||||||
|
if(headerRel != null && headerRel.size() > 0) {
|
||||||
|
PackagePart headerPart = getTargetPart(headerRel.getRelationship(0));
|
||||||
|
header = new XWPFHeader(
|
||||||
|
HdrDocument.Factory.parse(headerPart.getInputStream()).getHdr()
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Fetch the footer, if there's one
|
||||||
|
PackageRelationshipCollection footerRel = getCorePart().getRelationshipsByType(FOOTER_RELATION_TYPE);
|
||||||
|
if(footerRel != null && footerRel.size() > 0) {
|
||||||
|
PackagePart footerPart = getTargetPart(footerRel.getRelationship(0));
|
||||||
|
footer = new XWPFFooter(
|
||||||
|
FtrDocument.Factory.parse(footerPart.getInputStream()).getFtr()
|
||||||
|
);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -141,8 +169,7 @@ public class XWPFDocument extends POIXMLDocument {
|
||||||
return tables.iterator();
|
return tables.iterator();
|
||||||
}
|
}
|
||||||
|
|
||||||
public XWPFHyperlink getHyperlinkByID(String id)
|
public XWPFHyperlink getHyperlinkByID(String id) {
|
||||||
{
|
|
||||||
Iterator<XWPFHyperlink> iter = hyperlinks.iterator();
|
Iterator<XWPFHyperlink> iter = hyperlinks.iterator();
|
||||||
while(iter.hasNext())
|
while(iter.hasNext())
|
||||||
{
|
{
|
||||||
|
@ -153,9 +180,13 @@ public class XWPFDocument extends POIXMLDocument {
|
||||||
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
public XWPFHyperlink[] getHyperlinks() {
|
||||||
|
return hyperlinks.toArray(
|
||||||
|
new XWPFHyperlink[hyperlinks.size()]
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
public XWPFComment getCommentByID(String id)
|
public XWPFComment getCommentByID(String id) {
|
||||||
{
|
|
||||||
Iterator<XWPFComment> iter = comments.iterator();
|
Iterator<XWPFComment> iter = comments.iterator();
|
||||||
while(iter.hasNext())
|
while(iter.hasNext())
|
||||||
{
|
{
|
||||||
|
@ -166,6 +197,18 @@ public class XWPFDocument extends POIXMLDocument {
|
||||||
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
public XWPFComment[] getComments() {
|
||||||
|
return comments.toArray(
|
||||||
|
new XWPFComment[comments.size()]
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
public XWPFHeader getDocumentHeader() {
|
||||||
|
return header;
|
||||||
|
}
|
||||||
|
public XWPFFooter getDocumentFooter() {
|
||||||
|
return footer;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the low level body of the document
|
* Returns the low level body of the document
|
||||||
|
|
|
@ -31,4 +31,25 @@ public class XMLWordDocument {
|
||||||
public XWPFDocument _getXWPFXML() {
|
public XWPFDocument _getXWPFXML() {
|
||||||
return xwpfXML;
|
return xwpfXML;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public XWPFHyperlink getHyperlinkByID(String id) {
|
||||||
|
return xwpfXML.getHyperlinkByID(id);
|
||||||
|
}
|
||||||
|
public XWPFHyperlink[] getHyperlinks() {
|
||||||
|
return xwpfXML.getHyperlinks();
|
||||||
|
}
|
||||||
|
|
||||||
|
public XWPFComment getCommentByID(String id) {
|
||||||
|
return xwpfXML.getCommentByID(id);
|
||||||
|
}
|
||||||
|
public XWPFComment[] getComments() {
|
||||||
|
return xwpfXML.getComments();
|
||||||
|
}
|
||||||
|
|
||||||
|
public XWPFHeader getHeader() {
|
||||||
|
return xwpfXML.getDocumentHeader();
|
||||||
|
}
|
||||||
|
public XWPFFooter getFooter() {
|
||||||
|
return xwpfXML.getDocumentFooter();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,32 @@
|
||||||
|
/* ====================================================================
|
||||||
|
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.xwpf.usermodel;
|
||||||
|
|
||||||
|
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTHdrFtr;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sketch of XWPF footer class
|
||||||
|
*/
|
||||||
|
public class XWPFFooter extends XWPFHeaderFooter {
|
||||||
|
public XWPFFooter() {
|
||||||
|
super();
|
||||||
|
}
|
||||||
|
public XWPFFooter(CTHdrFtr hdrFtr) {
|
||||||
|
super(hdrFtr);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,32 @@
|
||||||
|
/* ====================================================================
|
||||||
|
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.xwpf.usermodel;
|
||||||
|
|
||||||
|
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTHdrFtr;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sketch of XWPF header class
|
||||||
|
*/
|
||||||
|
public class XWPFHeader extends XWPFHeaderFooter {
|
||||||
|
public XWPFHeader() {
|
||||||
|
super();
|
||||||
|
}
|
||||||
|
public XWPFHeader(CTHdrFtr hdrFtr) {
|
||||||
|
super(hdrFtr);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,33 @@
|
||||||
|
/* ====================================================================
|
||||||
|
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.xwpf.usermodel;
|
||||||
|
|
||||||
|
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTHdrFtr;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Parent of XWPF headers and footers
|
||||||
|
*/
|
||||||
|
public abstract class XWPFHeaderFooter {
|
||||||
|
protected CTHdrFtr headerFooter;
|
||||||
|
|
||||||
|
protected XWPFHeaderFooter(CTHdrFtr hdrFtr) {
|
||||||
|
headerFooter = hdrFtr;
|
||||||
|
}
|
||||||
|
protected XWPFHeaderFooter() {
|
||||||
|
headerFooter = CTHdrFtr.Factory.newInstance();
|
||||||
|
}
|
||||||
|
}
|
|
@ -111,7 +111,7 @@ public class TestXWPFWordExtractor extends TestCase {
|
||||||
assertTrue(text.length() > 0);
|
assertTrue(text.length() > 0);
|
||||||
|
|
||||||
char euro = '\u20ac';
|
char euro = '\u20ac';
|
||||||
System.err.println("'"+text.substring(text.length() - 20) + "'");
|
// System.err.println("'"+text.substring(text.length() - 20) + "'");
|
||||||
|
|
||||||
// Check contents
|
// Check contents
|
||||||
assertTrue(text.startsWith(
|
assertTrue(text.startsWith(
|
||||||
|
|
Loading…
Reference in New Issue