Support XWPF field runs, the same way that we handle hyperlink runs
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1695361 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
3b1e99d58f
commit
87a2acf935
@ -0,0 +1,48 @@
|
|||||||
|
/* ====================================================================
|
||||||
|
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.apache.poi.util.Internal;
|
||||||
|
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTR;
|
||||||
|
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTSimpleField;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A run of text which is part of a field, such as Title
|
||||||
|
* of Page number or Author.
|
||||||
|
* Any given Field may be made up of multiple of these.
|
||||||
|
*/
|
||||||
|
public class XWPFFieldRun extends XWPFRun {
|
||||||
|
private CTSimpleField field;
|
||||||
|
|
||||||
|
public XWPFFieldRun(CTSimpleField field, CTR run, IRunBody p) {
|
||||||
|
super(run, p);
|
||||||
|
this.field = field;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Internal
|
||||||
|
public CTSimpleField getCTField() {
|
||||||
|
return field;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getFieldInstruction() {
|
||||||
|
return field.getInstr();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setFieldInstruction(String instruction) {
|
||||||
|
field.setInstr(instruction);
|
||||||
|
}
|
||||||
|
}
|
@ -16,6 +16,7 @@
|
|||||||
==================================================================== */
|
==================================================================== */
|
||||||
package org.apache.poi.xwpf.usermodel;
|
package org.apache.poi.xwpf.usermodel;
|
||||||
|
|
||||||
|
import org.apache.poi.util.Internal;
|
||||||
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTHyperlink;
|
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTHyperlink;
|
||||||
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTR;
|
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTR;
|
||||||
|
|
||||||
@ -30,7 +31,8 @@ public class XWPFHyperlinkRun extends XWPFRun {
|
|||||||
super(run, p);
|
super(run, p);
|
||||||
this.hyperlink = hyperlink;
|
this.hyperlink = hyperlink;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Internal
|
||||||
public CTHyperlink getCTHyperlink() {
|
public CTHyperlink getCTHyperlink() {
|
||||||
return hyperlink;
|
return hyperlink;
|
||||||
}
|
}
|
||||||
|
@ -142,13 +142,21 @@ public class XWPFParagraph implements IBodyElement, IRunBody, ISDTContents, Para
|
|||||||
iruns.add(r);
|
iruns.add(r);
|
||||||
}
|
}
|
||||||
if (o instanceof CTHyperlink) {
|
if (o instanceof CTHyperlink) {
|
||||||
CTHyperlink link = (CTHyperlink) o;
|
CTHyperlink link = (CTHyperlink)o;
|
||||||
for (CTR r : link.getRArray()) {
|
for (CTR r : link.getRArray()) {
|
||||||
XWPFHyperlinkRun hr = new XWPFHyperlinkRun(link, r, this);
|
XWPFHyperlinkRun hr = new XWPFHyperlinkRun(link, r, this);
|
||||||
runs.add(hr);
|
runs.add(hr);
|
||||||
iruns.add(hr);
|
iruns.add(hr);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (o instanceof CTSimpleField) {
|
||||||
|
CTSimpleField field = (CTSimpleField)o;
|
||||||
|
for (CTR r : field.getRArray()) {
|
||||||
|
XWPFFieldRun fr = new XWPFFieldRun(field, r, this);
|
||||||
|
runs.add(fr);
|
||||||
|
iruns.add(fr);
|
||||||
|
}
|
||||||
|
}
|
||||||
if (o instanceof CTSdtBlock) {
|
if (o instanceof CTSdtBlock) {
|
||||||
XWPFSDT cc = new XWPFSDT((CTSdtBlock) o, part);
|
XWPFSDT cc = new XWPFSDT((CTSdtBlock) o, part);
|
||||||
iruns.add(cc);
|
iruns.add(cc);
|
||||||
@ -164,13 +172,6 @@ public class XWPFParagraph implements IBodyElement, IRunBody, ISDTContents, Para
|
|||||||
iruns.add(cr);
|
iruns.add(cr);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (o instanceof CTSimpleField) {
|
|
||||||
for (CTR r : ((CTSimpleField) o).getRArray()) {
|
|
||||||
XWPFRun cr = new XWPFRun(r, this);
|
|
||||||
runs.add(cr);
|
|
||||||
iruns.add(cr);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (o instanceof CTSmartTagRun) {
|
if (o instanceof CTSmartTagRun) {
|
||||||
// Smart Tags can be nested many times.
|
// Smart Tags can be nested many times.
|
||||||
// This implementation does not preserve the tagging information
|
// This implementation does not preserve the tagging information
|
||||||
|
@ -22,6 +22,7 @@ import java.math.BigInteger;
|
|||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import junit.framework.TestCase;
|
import junit.framework.TestCase;
|
||||||
|
|
||||||
import org.apache.poi.xwpf.XWPFTestDataSamples;
|
import org.apache.poi.xwpf.XWPFTestDataSamples;
|
||||||
import org.openxmlformats.schemas.drawingml.x2006.picture.CTPicture;
|
import org.openxmlformats.schemas.drawingml.x2006.picture.CTPicture;
|
||||||
import org.openxmlformats.schemas.drawingml.x2006.picture.PicDocument;
|
import org.openxmlformats.schemas.drawingml.x2006.picture.PicDocument;
|
||||||
@ -495,6 +496,24 @@ public final class TestXWPFParagraph extends TestCase {
|
|||||||
|
|
||||||
assertTrue(p.removeRun(0));
|
assertTrue(p.removeRun(0));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void testFieldRuns() throws Exception {
|
||||||
|
XWPFDocument doc = XWPFTestDataSamples.openSampleDocument("FldSimple.docx");
|
||||||
|
List<XWPFParagraph> ps = doc.getParagraphs();
|
||||||
|
assertEquals(1, ps.size());
|
||||||
|
|
||||||
|
XWPFParagraph p = ps.get(0);
|
||||||
|
assertEquals(1, p.getRuns().size());
|
||||||
|
assertEquals(1, p.getIRuns().size());
|
||||||
|
|
||||||
|
XWPFRun r = p.getRuns().get(0);
|
||||||
|
assertEquals(XWPFFieldRun.class, r.getClass());
|
||||||
|
|
||||||
|
XWPFFieldRun fr = (XWPFFieldRun)r;
|
||||||
|
assertEquals(" FILENAME \\* MERGEFORMAT ", fr.getFieldInstruction());
|
||||||
|
assertEquals("FldSimple.docx", fr.text());
|
||||||
|
assertEquals("FldSimple.docx", p.getText());
|
||||||
|
}
|
||||||
|
|
||||||
@SuppressWarnings("deprecation")
|
@SuppressWarnings("deprecation")
|
||||||
public void testRuns() {
|
public void testRuns() {
|
||||||
|
Loading…
Reference in New Issue
Block a user