Package org.docx4j.samples

Source Code of org.docx4j.samples.NumberingRestart

/*
*  Copyright 2007-2008, Plutext Pty Ltd.
*  
*  This file is part of docx4j.

    docx4j is licensed 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.docx4j.samples;

import java.math.BigInteger;

import org.docx4j.XmlUtils;
import org.docx4j.jaxb.Context;
import org.docx4j.openpackaging.packages.WordprocessingMLPackage;
import org.docx4j.openpackaging.parts.WordprocessingML.NumberingDefinitionsPart;
import org.docx4j.wml.Numbering;
import org.docx4j.wml.P;
import org.docx4j.wml.PPrBase.NumPr;
import org.docx4j.wml.PPrBase.NumPr.Ilvl;
import org.docx4j.wml.PPrBase.NumPr.NumId;

/**
* Creates a WordprocessingML document from scratch,
* including a numbering definitions part, and use
* it to demonstrate restart numbering.
*
* @author Jason Harrop
*/
public class NumberingRestart {
 
  static org.docx4j.wml.ObjectFactory factory = Context.getWmlObjectFactory();
 
  static String filename = "OUT_NumberingRestart.docx";

  public static void main(String[] args) throws Exception {
   
    WordprocessingMLPackage wordMLPackage = WordprocessingMLPackage.createPackage();
   
    // Add numbering part
    NumberingDefinitionsPart ndp = new NumberingDefinitionsPart();
    wordMLPackage.getMainDocumentPart().addTargetPart(ndp);
    ndp.setJaxbElement( (Numbering) XmlUtils.unmarshalString(initialNumbering) );
   
    // Add some document content
    wordMLPackage.getMainDocumentPart().addParagraphOfText("Example of restarting numbering");
   
    P p = createNumberedParagraph(1, 0, "text on top level" );
      wordMLPackage.getMainDocumentPart().addObject(p);
   
      wordMLPackage.getMainDocumentPart().addObject(
          createNumberedParagraph(1, 0, "more text on top level" ));
   
      wordMLPackage.getMainDocumentPart().addObject(
          createNumberedParagraph(1, 1, "text on level 1" ));
     
      // Ok, lets restart numbering
      long newNumId = ndp.restart(1, 0, 1);
     
      wordMLPackage.getMainDocumentPart().addObject(
          createNumberedParagraph(newNumId, 0, "text on top level - restarted" ));
     
      // After first using newNumId, it doesn't matter whether
      // subsequent paragraphs use that or the original numId
      wordMLPackage.getMainDocumentPart().addObject(
          createNumberedParagraph(newNumId, 0, "text on top level - using newNumId" ));

      wordMLPackage.getMainDocumentPart().addObject(
          createNumberedParagraph(1, 0, "text on top level - using original NumId" ));
     
    // Now save it
    wordMLPackage.save(new java.io.File(System.getProperty("user.dir") + "/" + filename) );
   
    System.out.println("Done. Saved " + filename);
       
  }
 
  /**
   * Create something like:
   *
   *               <w:p>
                        <w:pPr>
                            <w:numPr>
                                <w:ilvl w:val="0"/>
                                <w:numId w:val="1"/>
                            </w:numPr>
                        </w:pPr>
                        <w:r>
                            <w:t>B</w:t>
                        </w:r>
                    </w:p>

   * @return
   */
  private static P createNumberedParagraph(long numId, long ilvl, String paragraphText ) {
   
    P  p = factory.createP();

    org.docx4j.wml.Text  t = factory.createText();
    t.setValue(paragraphText);

    org.docx4j.wml.R  run = factory.createR();
    run.getContent().add(t);   
   
    p.getContent().add(run);
           
      org.docx4j.wml.PPr ppr = factory.createPPr();     
      p.setPPr( ppr );
     
      // Create and add <w:numPr>
      NumPr numPr =  factory.createPPrBaseNumPr();
      ppr.setNumPr(numPr);
     
      // The <w:ilvl> element
      Ilvl ilvlElement = factory.createPPrBaseNumPrIlvl();
      numPr.setIlvl(ilvlElement);
      ilvlElement.setVal(BigInteger.valueOf(ilvl));
           
      // The <w:numId> element
      NumId numIdElement = factory.createPPrBaseNumPrNumId();
      numPr.setNumId(numIdElement);
      numIdElement.setVal(BigInteger.valueOf(numId));
     
    return p;
   
  }
 
 
  static final String initialNumbering = "<w:numbering xmlns:ve=\"http://schemas.openxmlformats.org/markup-compatibility/2006\" xmlns:o=\"urn:schemas-microsoft-com:office:office\" xmlns:r=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships\" xmlns:m=\"http://schemas.openxmlformats.org/officeDocument/2006/math\" xmlns:v=\"urn:schemas-microsoft-com:vml\" xmlns:wp=\"http://schemas.openxmlformats.org/drawingml/2006/wordprocessingDrawing\" xmlns:w10=\"urn:schemas-microsoft-com:office:word\" xmlns:w=\"http://schemas.openxmlformats.org/wordprocessingml/2006/main\" xmlns:wne=\"http://schemas.microsoft.com/office/word/2006/wordml\">"
          + "<w:abstractNum w:abstractNumId=\"0\">"
          + "<w:nsid w:val=\"2DD860C0\"/>"
          + "<w:multiLevelType w:val=\"multilevel\"/>"
          + "<w:tmpl w:val=\"0409001D\"/>"
          + "<w:lvl w:ilvl=\"0\">"
              + "<w:start w:val=\"1\"/>"
              + "<w:numFmt w:val=\"decimal\"/>"
              + "<w:lvlText w:val=\"%1)\"/>"
              + "<w:lvlJc w:val=\"left\"/>"
              + "<w:pPr>"
                  + "<w:ind w:left=\"360\" w:hanging=\"360\"/>"
              + "</w:pPr>"
          + "</w:lvl>"
          + "<w:lvl w:ilvl=\"1\">"
              + "<w:start w:val=\"1\"/>"
              + "<w:numFmt w:val=\"lowerLetter\"/>"
              + "<w:lvlText w:val=\"%2)\"/>"
              + "<w:lvlJc w:val=\"left\"/>"
              + "<w:pPr>"
                  + "<w:ind w:left=\"720\" w:hanging=\"360\"/>"
              + "</w:pPr>"
          + "</w:lvl>"
          + "<w:lvl w:ilvl=\"2\">"
              + "<w:start w:val=\"1\"/>"
              + "<w:numFmt w:val=\"lowerRoman\"/>"
              + "<w:lvlText w:val=\"%3)\"/>"
              + "<w:lvlJc w:val=\"left\"/>"
              + "<w:pPr>"
                  + "<w:ind w:left=\"1080\" w:hanging=\"360\"/>"
              + "</w:pPr>"
          + "</w:lvl>"
          + "<w:lvl w:ilvl=\"3\">"
              + "<w:start w:val=\"1\"/>"
              + "<w:numFmt w:val=\"decimal\"/>"
              + "<w:lvlText w:val=\"(%4)\"/>"
              + "<w:lvlJc w:val=\"left\"/>"
              + "<w:pPr>"
                  + "<w:ind w:left=\"1440\" w:hanging=\"360\"/>"
              + "</w:pPr>"
          + "</w:lvl>"
          + "<w:lvl w:ilvl=\"4\">"
              + "<w:start w:val=\"1\"/>"
              + "<w:numFmt w:val=\"lowerLetter\"/>"
              + "<w:lvlText w:val=\"(%5)\"/>"
              + "<w:lvlJc w:val=\"left\"/>"
              + "<w:pPr>"
                  + "<w:ind w:left=\"1800\" w:hanging=\"360\"/>"
              + "</w:pPr>"
          + "</w:lvl>"
          + "<w:lvl w:ilvl=\"5\">"
              + "<w:start w:val=\"1\"/>"
              + "<w:numFmt w:val=\"lowerRoman\"/>"
              + "<w:lvlText w:val=\"(%6)\"/>"
              + "<w:lvlJc w:val=\"left\"/>"
              + "<w:pPr>"
                  + "<w:ind w:left=\"2160\" w:hanging=\"360\"/>"
              + "</w:pPr>"
          + "</w:lvl>"
          + "<w:lvl w:ilvl=\"6\">"
              + "<w:start w:val=\"1\"/>"
              + "<w:numFmt w:val=\"decimal\"/>"
              + "<w:lvlText w:val=\"%7.\"/>"
              + "<w:lvlJc w:val=\"left\"/>"
              + "<w:pPr>"
                  + "<w:ind w:left=\"2520\" w:hanging=\"360\"/>"
              + "</w:pPr>"
          + "</w:lvl>"
          + "<w:lvl w:ilvl=\"7\">"
              + "<w:start w:val=\"1\"/>"
              + "<w:numFmt w:val=\"lowerLetter\"/>"
              + "<w:lvlText w:val=\"%8.\"/>"
              + "<w:lvlJc w:val=\"left\"/>"
              + "<w:pPr>"
                  + "<w:ind w:left=\"2880\" w:hanging=\"360\"/>"
              + "</w:pPr>"
          + "</w:lvl>"
          + "<w:lvl w:ilvl=\"8\">"
              + "<w:start w:val=\"1\"/>"
              + "<w:numFmt w:val=\"lowerRoman\"/>"
              + "<w:lvlText w:val=\"%9.\"/>"
              + "<w:lvlJc w:val=\"left\"/>"
              + "<w:pPr>"
                  + "<w:ind w:left=\"3240\" w:hanging=\"360\"/>"
              + "</w:pPr>"
          + "</w:lvl>"
      + "</w:abstractNum>"
      + "<w:num w:numId=\"1\">"
          + "<w:abstractNumId w:val=\"0\"/>"
       + "</w:num>"
      + "</w:numbering>";

 
}
TOP

Related Classes of org.docx4j.samples.NumberingRestart

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.