XWPF: support for pictures in headers

git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1083764 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Maxim Valyanskiy 2011-03-21 12:43:58 +00:00
parent 1ba16fb3b9
commit 8d72b9137a
7 changed files with 56 additions and 10 deletions

View File

@ -107,9 +107,14 @@ public class XWPFHeaderFooterPolicy {
// Get the header // Get the header
CTHdrFtrRef ref = sectPr.getHeaderReferenceArray(i); CTHdrFtrRef ref = sectPr.getHeaderReferenceArray(i);
PackagePart hdrPart = doc.getPartById(ref.getId()); PackagePart hdrPart = doc.getPartById(ref.getId());
HdrDocument hdrDoc = HdrDocument.Factory.parse(hdrPart.getInputStream());
CTHdrFtr hdrFtr = hdrDoc.getHdr(); XWPFHeader hdr = null;
XWPFHeader hdr = new XWPFHeader(doc, hdrFtr);
for (POIXMLDocumentPart part : doc.getRelations()) {
if (part.getPackagePart().getPartName().equals(hdrPart.getPartName())) {
hdr = (XWPFHeader) part;
}
}
// Assign it // Assign it
Enum type = ref.getType(); Enum type = ref.getType();

View File

@ -133,7 +133,6 @@ public class XWPFHeader extends XWPFHeaderFooter {
} }
} }
cursor.dispose(); cursor.dispose();
getAllPictures();
} catch (IOException e) { } catch (IOException e) {
// TODO Auto-generated catch block // TODO Auto-generated catch block
e.printStackTrace(); e.printStackTrace();

View File

@ -64,7 +64,7 @@ public class XWPFPicture {
*/ */
public XWPFPictureData getPictureData(){ public XWPFPictureData getPictureData(){
String blipId = ctPic.getBlipFill().getBlip().getEmbed(); String blipId = ctPic.getBlipFill().getBlip().getEmbed();
for(POIXMLDocumentPart part: paragraph.getDocument().getRelations()){ for(POIXMLDocumentPart part: ((POIXMLDocumentPart) paragraph.getPart()).getRelations()){
if(part.getPackageRelationship().getId().equals(blipId)){ if(part.getPackageRelationship().getId().equals(blipId)){
return (XWPFPictureData)part; return (XWPFPictureData)part;
} }

View File

@ -34,17 +34,23 @@ public final class TestXWPFHeader extends TestCase {
XWPFHeaderFooterPolicy policy = sampleDoc.getHeaderFooterPolicy(); XWPFHeaderFooterPolicy policy = sampleDoc.getHeaderFooterPolicy();
XWPFHeader header = policy.getDefaultHeader(); XWPFHeader header = policy.getDefaultHeader();
XWPFFooter footer = policy.getDefaultFooter(); XWPFFooter footer = policy.getDefaultFooter();
assertNotNull(header); assertNotNull(header);
assertNotNull(footer); assertNotNull(footer);
// TODO verify if the following is correct
assertNull(header.toString());
} }
public void testImageInHeader() {
XWPFDocument sampleDoc = XWPFTestDataSamples.openSampleDocument("headerPic.docx");
XWPFHeaderFooterPolicy policy = sampleDoc.getHeaderFooterPolicy();
XWPFHeader header = policy.getDefaultHeader();
assertNotNull(header.getRelations());
assertEquals(1, header.getRelations().size());
}
public void testSetHeader() throws IOException { public void testSetHeader() throws IOException {
XWPFDocument sampleDoc = XWPFTestDataSamples.openSampleDocument("SampleDoc.docx"); XWPFDocument sampleDoc = XWPFTestDataSamples.openSampleDocument("SampleDoc.docx");
// no header is set (yet) // no header is set (yet)

View File

@ -26,6 +26,7 @@ import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
import org.apache.poi.openxml4j.opc.PackageRelationship; import org.apache.poi.openxml4j.opc.PackageRelationship;
import org.apache.poi.xssf.usermodel.XSSFRelation; import org.apache.poi.xssf.usermodel.XSSFRelation;
import org.apache.poi.xwpf.XWPFTestDataSamples; import org.apache.poi.xwpf.XWPFTestDataSamples;
import org.apache.poi.xwpf.model.XWPFHeaderFooterPolicy;
public class TestXWPFPictureData extends TestCase { public class TestXWPFPictureData extends TestCase {
public void testRead(){ public void testRead(){
@ -58,6 +59,16 @@ public class TestXWPFPictureData extends TestCase {
} }
} }
public void testPictureInHeader() {
XWPFDocument sampleDoc = XWPFTestDataSamples.openSampleDocument("headerPic.docx");
XWPFHeaderFooterPolicy policy = sampleDoc.getHeaderFooterPolicy();
XWPFHeader header = policy.getDefaultHeader();
List<XWPFPictureData> pictures = header.getAllPictures();
assertEquals(1, pictures.size());
}
public void testNew() throws Exception { public void testNew() throws Exception {
XWPFDocument doc = XWPFTestDataSamples.openSampleDocument("EmptyDocumentWithHeaderFooter.docx"); XWPFDocument doc = XWPFTestDataSamples.openSampleDocument("EmptyDocumentWithHeaderFooter.docx");
byte[] jpegData = "test jpeg data".getBytes(); byte[] jpegData = "test jpeg data".getBytes();

View File

@ -17,10 +17,12 @@
package org.apache.poi.xwpf.usermodel; package org.apache.poi.xwpf.usermodel;
import java.math.BigInteger; import java.math.BigInteger;
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.apache.poi.xwpf.model.XWPFHeaderFooterPolicy;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTBr; import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTBr;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTR; import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTR;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTRPr; import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTRPr;
@ -326,4 +328,27 @@ public class TestXWPFRun extends TestCase {
assertEquals(false, run.isStrike()); assertEquals(false, run.isStrike());
assertEquals(null, run.getCTR().getRPr()); assertEquals(null, run.getCTR().getRPr());
} }
public void testPictureInHeader() {
XWPFDocument sampleDoc = XWPFTestDataSamples.openSampleDocument("headerPic.docx");
XWPFHeaderFooterPolicy policy = sampleDoc.getHeaderFooterPolicy();
XWPFHeader header = policy.getDefaultHeader();
int count = 0;
for (XWPFParagraph p : header.getParagraphs()) {
for (XWPFRun r : p.getRuns()) {
List<XWPFPicture> pictures = r.getEmbeddedPictures();
for (XWPFPicture pic : pictures) {
assertNotNull(pic.getPictureData());
}
count+= pictures.size();
}
}
assertEquals(1, count);
}
} }

Binary file not shown.