You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@poi.apache.org by pa...@apache.org on 2009/09/28 09:42:51 UTC
svn commit: r819469 - in /poi/trunk:
src/ooxml/java/org/apache/poi/xwpf/usermodel/
src/ooxml/testcases/org/apache/poi/xwpf/usermodel/ test-data/document/
Author: paolo
Date: Mon Sep 28 07:42:50 2009
New Revision: 819469
URL: http://svn.apache.org/viewvc?rev=819469&view=rev
Log:
Table of Contents first implementation
Added:
poi/trunk/src/ooxml/java/org/apache/poi/xwpf/usermodel/TOC.java
poi/trunk/src/ooxml/testcases/org/apache/poi/xwpf/usermodel/TestXWPFHeadings.java
poi/trunk/test-data/document/heading123.docx (with props)
Modified:
poi/trunk/src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFDocument.java
poi/trunk/src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFParagraph.java
Added: poi/trunk/src/ooxml/java/org/apache/poi/xwpf/usermodel/TOC.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/ooxml/java/org/apache/poi/xwpf/usermodel/TOC.java?rev=819469&view=auto
==============================================================================
--- poi/trunk/src/ooxml/java/org/apache/poi/xwpf/usermodel/TOC.java (added)
+++ poi/trunk/src/ooxml/java/org/apache/poi/xwpf/usermodel/TOC.java Mon Sep 28 07:42:50 2009
@@ -0,0 +1,106 @@
+package org.apache.poi.xwpf.usermodel;
+
+import java.math.BigInteger;
+
+import org.apache.xmlbeans.impl.xb.xmlschema.SpaceAttribute.Space;
+import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTDecimalNumber;
+import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTFonts;
+import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTP;
+import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTPPr;
+import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTR;
+import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTRPr;
+import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTSdtBlock;
+import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTSdtContentBlock;
+import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTSdtEndPr;
+import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTSdtPr;
+import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTabStop;
+import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTabs;
+import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTText;
+import org.openxmlformats.schemas.wordprocessingml.x2006.main.STFldCharType;
+import org.openxmlformats.schemas.wordprocessingml.x2006.main.STOnOff;
+import org.openxmlformats.schemas.wordprocessingml.x2006.main.STTabJc;
+import org.openxmlformats.schemas.wordprocessingml.x2006.main.STTabTlc;
+import org.openxmlformats.schemas.wordprocessingml.x2006.main.STTheme;
+
+public class TOC {
+
+ CTSdtBlock block;
+
+ public TOC() {
+ this(CTSdtBlock.Factory.newInstance());
+ }
+
+ public TOC(CTSdtBlock block) {
+ this.block = block;
+ CTSdtPr sdtPr = block.addNewSdtPr();
+ CTDecimalNumber id = sdtPr.addNewId();
+ id.setVal(new BigInteger("4844945"));
+ sdtPr.addNewDocPartObj().addNewDocPartGallery().setVal("Table of contents");
+ CTSdtEndPr sdtEndPr = block.addNewSdtEndPr();
+ CTRPr rPr = sdtEndPr.addNewRPr();
+ CTFonts fonts = rPr.addNewRFonts();
+ fonts.setAsciiTheme(STTheme.MINOR_H_ANSI);
+ fonts.setEastAsiaTheme(STTheme.MINOR_H_ANSI);
+ fonts.setHAnsiTheme(STTheme.MINOR_H_ANSI);
+ fonts.setCstheme(STTheme.MINOR_BIDI);
+ rPr.addNewB().setVal(STOnOff.OFF);
+ rPr.addNewBCs().setVal(STOnOff.OFF);
+ rPr.addNewColor().setVal("auto");
+ rPr.addNewSz().setVal(new BigInteger("24"));
+ rPr.addNewSzCs().setVal(new BigInteger("24"));
+ CTSdtContentBlock content = block.addNewSdtContent();
+ CTP p = content.addNewP();
+ p.setRsidR("00EF7E24".getBytes());
+ p.setRsidRDefault("00EF7E24".getBytes());
+ p.addNewPPr().addNewPStyle().setVal("TOCHeading");
+ p.addNewR().addNewT().set("Table of Contents");
+ }
+
+ public CTSdtBlock getBlock() {
+ return this.block;
+ }
+
+ public void addRow(int level, String title, int page, String bookmarkRef) {
+ CTSdtContentBlock contentBlock = this.block.getSdtContent();
+ CTP p = contentBlock.addNewP();
+ p.setRsidR("00EF7E24".getBytes());
+ p.setRsidRDefault("00EF7E24".getBytes());
+ CTPPr pPr = p.addNewPPr();
+ pPr.addNewPStyle().setVal("TOC" + level);
+ CTTabs tabs = pPr.addNewTabs();
+ CTTabStop tab = tabs.addNewTab();
+ tab.setVal(STTabJc.RIGHT);
+ tab.setLeader(STTabTlc.DOT);
+ tab.setPos(new BigInteger("8290"));
+ pPr.addNewRPr().addNewNoProof();
+ CTR run = p.addNewR();
+ run.addNewRPr().addNewNoProof();
+ run.addNewT().set(title);
+ run = p.addNewR();
+ run.addNewRPr().addNewNoProof();
+ run.addNewTab();
+ run = p.addNewR();
+ run.addNewRPr().addNewNoProof();
+ run.addNewFldChar().setFldCharType(STFldCharType.BEGIN);
+ // pageref run
+ run = p.addNewR();
+ run.addNewRPr().addNewNoProof();
+ CTText text = run.addNewInstrText();
+ text.setSpace(Space.PRESERVE);
+ // bookmark reference
+ text.set(" PAGEREF _Toc" + bookmarkRef + " \\h ");
+ p.addNewR().addNewRPr().addNewNoProof();
+ run = p.addNewR();
+ run.addNewRPr().addNewNoProof();
+ run.addNewFldChar().setFldCharType(STFldCharType.SEPARATE);
+ // page number run
+ run = p.addNewR();
+ run.addNewRPr().addNewNoProof();
+ run.addNewT().set(new Integer(page).toString());
+ run = p.addNewR();
+ run.addNewRPr().addNewNoProof();
+ run.addNewFldChar().setFldCharType(STFldCharType.END);
+
+ }
+
+}
Modified: poi/trunk/src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFDocument.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFDocument.java?rev=819469&r1=819468&r2=819469&view=diff
==============================================================================
--- poi/trunk/src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFDocument.java (original)
+++ poi/trunk/src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFDocument.java Mon Sep 28 07:42:50 2009
@@ -371,5 +371,24 @@
public XWPFTable createTable(int rows, int cols) {
return new XWPFTable(this, ctDocument.getBody().addNewTbl(), rows, cols);
}
+
+ public void createTOC() {
+ CTSdtBlock block = this.getDocument().getBody().addNewSdt();
+ TOC toc = new TOC(block);
+ int i = 1;
+ for (Iterator<XWPFParagraph> iterator = getParagraphsIterator() ; iterator.hasNext() ; ) {
+ XWPFParagraph par = iterator.next();
+ String parStyle = par.getStyle();
+ if (parStyle != null && parStyle.substring(0, 7).equals("Heading")) {
+ try {
+ int level = new Integer(parStyle.substring("Heading".length()));
+ toc.addRow(level, par.getText(), 1, "112723803");
+ }
+ catch (NumberFormatException e) {
+ e.printStackTrace();
+ }
+ }
+ }
+ }
}
Modified: poi/trunk/src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFParagraph.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFParagraph.java?rev=819469&r1=819468&r2=819469&view=diff
==============================================================================
--- poi/trunk/src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFParagraph.java (original)
+++ poi/trunk/src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFParagraph.java Mon Sep 28 07:42:50 2009
@@ -939,6 +939,27 @@
}
/**
+ * This method provides a style to the paragraph
+ * This is useful when, e.g. an Heading style has to be assigned
+ * @param newStyle
+ */
+ public void setStyle(String newStyle) {
+ CTPPr pr = getCTPPr();
+ CTString style = pr.getPStyle() != null ? pr.getPStyle() : pr.addNewPStyle();
+ style.setVal(newStyle);
+ }
+
+ /**
+ * Gets the style of the paragraph
+ * @return
+ */
+ public String getStyle() {
+ CTPPr pr = getCTPPr();
+ CTString style = pr.isSetPStyle() ? pr.getPStyle() : null;
+ return style != null ? style.getVal() : null;
+ }
+
+ /**
* Get a <b>copy</b> of the currently used CTPBrd, if none is used, return
* a new instance.
*/
Added: poi/trunk/src/ooxml/testcases/org/apache/poi/xwpf/usermodel/TestXWPFHeadings.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/ooxml/testcases/org/apache/poi/xwpf/usermodel/TestXWPFHeadings.java?rev=819469&view=auto
==============================================================================
--- poi/trunk/src/ooxml/testcases/org/apache/poi/xwpf/usermodel/TestXWPFHeadings.java (added)
+++ poi/trunk/src/ooxml/testcases/org/apache/poi/xwpf/usermodel/TestXWPFHeadings.java Mon Sep 28 07:42:50 2009
@@ -0,0 +1,44 @@
+package org.apache.poi.xwpf.usermodel;
+
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.OutputStream;
+
+import junit.framework.TestCase;
+
+import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
+import org.apache.poi.xwpf.XWPFTestDataSamples;
+import org.apache.xmlbeans.XmlException;
+import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTSdtBlock;
+
+public class TestXWPFHeadings extends TestCase{
+ private static final String HEADING1 = "Heading1";
+
+ public void testSetParagraphStyle() throws IOException, XmlException, InvalidFormatException {
+ //new clean instance of paragraph
+ XWPFDocument doc = XWPFTestDataSamples.openSampleDocument("heading123.docx");
+ XWPFParagraph p = doc.createParagraph();
+ XWPFRun run = p.createRun();
+ run.setText("Heading 1");
+
+ CTSdtBlock block = doc.getDocument().getBody().addNewSdt();
+
+ assertNull(p.getStyle());
+ p.setStyle(HEADING1);
+ assertEquals(HEADING1, p.getCTP().getPPr().getPStyle().getVal());
+
+ doc.createTOC();
+
+// CTStyles styles = doc.getStyle();
+// CTStyle style = styles.addNewStyle();
+// style.setType(STStyleType.PARAGRAPH);
+// style.setStyleId("Heading1");
+
+ File file = new File("/Users/paolomoz/Desktop/testHeaders.docx");
+ OutputStream out = new FileOutputStream(file);
+ doc.write(out);
+ out.close();
+ }
+
+}
Added: poi/trunk/test-data/document/heading123.docx
URL: http://svn.apache.org/viewvc/poi/trunk/test-data/document/heading123.docx?rev=819469&view=auto
==============================================================================
Binary file - no diff available.
Propchange: poi/trunk/test-data/document/heading123.docx
------------------------------------------------------------------------------
svn:mime-type = application/octet-stream
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@poi.apache.org
For additional commands, e-mail: commits-help@poi.apache.org