Exemplo n.º 1
0
  /* Replace any nested content controls with their content. */
  public void flatten() {

    /*
    <w:sdt xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main">
    	<w:sdtPr><w:tag w:val="30" /><w:id w:val="871785936" /></w:sdtPr>
    	<w:sdtContent>
    		<w:p w:rsidR="00283267" w:rsidRDefault="00E8712C">
    			<w:r><w:t>S</w:t></w:r>
    			<w:sdt><w:sdtPr><w:tag w:val="0" /><w:id w:val="589321610" /></w:sdtPr><w:sdtContent><w:r><w:t>Para1</w:t></w:r></w:sdtContent></w:sdt>
    		</w:p>
    	</w:sdtContent>
    </w:sdt>
    */

    log.info("Flattening sdt: " + sdtPr.getId().toString());
    boolean startAgain;
    do {
      startAgain = false;
      //        	java.util.Iterator it = sdtContent.getBlockLevelElements().iterator();
      //	    	while ( it.hasNext() ) {
      //
      //	    		Object o = it.next();

      for (Object o : sdtContent.getEGContentBlockContent()) {

        if (o instanceof SdtBlock) { // A block level SDT - but this doesn't happen
          log.debug(
              "Interesting .. detected BLOCK level nested sdt: "
                  + ((SdtBlock) o).sdtPr.getId().toString());
          sdtContent.replaceElement(o, ((SdtBlock) o).getSdtContent().getContent());
          // need to refresh the list we are iterating
          startAgain = true;
          break;
        } else if (o instanceof org.docx4j.wml.P) {
          log.debug("Paragraph object: ");
          org.docx4j.wml.P p = (org.docx4j.wml.P) o;
          flattenP(p);
        } else if (o instanceof javax.xml.bind.JAXBElement) {

          //	    			if ( ((JAXBElement)o).getDeclaredType().getName().equals("org.docx4j.wml.P") ) {
          //	    				log.debug( "Paragraph object: ");
          //	    				org.docx4j.wml.P p = (org.docx4j.wml.P)((JAXBElement)o).getValue();
          //
          //	    				flattenP(p);
          //	    				// Is this necessary?
          //	    				((JAXBElement)o).setValue(p);
          //	    			} else {

          log.debug("JAXB: " + ((JAXBElement) o).getValue().getClass().getName());

          //	    			}

        } else {
          log.debug(o.getClass().getName() + ".. not an sdt");
        }
      }
    } while (startAgain);
  }