Examples of generating OfficeOpenXML Word (.docx) documents via com-hfg objects.

The OfficeOpenXML classes in the com-hfg library are still a work in progress but functional Word .docx files can be created.

  1. Hello Word
  2. Simple Styling
  3. Document Containing an Image
  4. Styled Table in Word

Example 1: Hello Word

      Docx docx = new Docx();

      DocumentPart docPart = docx.getDocumentPart();

      WmlBody body = docPart.getBody();

      WmlParagraph p = body.addParagraph();
      WmlTextRun run = p.addTextRun();
      run.addText("Hello Word!");

      File testFile = new File("testSimple.docx");
      docx.write(testFile);
Or simplifying the code further and using method chaining, the above code could be expressed thusly:
      Docx docx = new Docx();
      docx.getDocumentPart().getBody().addParagraph("Hello World!");
      docx.write(new File("testSimple.docx"));
The resulting docx file:
testSimple.docx

Example 2: Simple Styling

      Docx docx = new Docx();

      DocumentPart docPart = docx.getDocumentPart();

      WmlBody body = docPart.getBody();

      body.addParagraph().br(2);

      body.addParagraph().addTextRun("Hello Word w/ styling via the text run's rPr").getProperties().setBold().setColor(HTMLColor.DARK_GREEN).setFont("Courier New").setShadow();

      File testFile = new File("testStyling.docx");
      docx.write(testFile);
The resulting output looks like this:

Docx:
testStyling.docx

Example 3: Document Containing an Image

Also demonstrates page rotation.
      Docx docx = new Docx();

      DocumentPart docPart = docx.getDocumentPart();

      WmlBody body = docPart.getBody();

      WmlSectionProperties sectionProperties = body.getSectionProperties();
      sectionProperties.setPageSize(PaperSize.US_LETTER, Orientation.HORIZONAL);
      sectionProperties.getPageMargins().setTop(new Pixels(50)).setBottom(new Pixels(50)).setLeft(new Pixels(50)).setRight(new Pixels(50)).setGutter(new Pixels(0));

      WmlTextRun textRun = body.addParagraph().addTextRun();

      InputStream imgStream = getClass().getResourceAsStream("../../image/rsrc/test.png");
      if (null == imgStream)
      {
         throw new RuntimeException("The img rsrc couldn't be found!");
      }

      ImagePart imagePart = new ImagePart(imgStream, "test.png");
      imagePart.setDimensions(new GfxSize2D().setWidth(new Pixels(350)).setHeight(new Pixels(450)));

      textRun.addMedia(imagePart);
      textRun.br().addText("Fig 1. Test image on a horizontal page");

      File testFile = new File("testImage.docx");
      docx.write(testFile);
This resulting output looks like this:

Docx:
testImage.docx

Example 4: Styled Table in Word

      Docx docx = new Docx();

      DocumentPart docPart = docx.getDocumentPart();

      WmlBody body = docPart.getBody();

      WmlTableStyle tableStyle = new WmlTableStyle("testTableStyle", docx);
      WmlTableProperties tableProperties = tableStyle.getTableProperties();
      tableProperties.getBorders().addBorder(new WmlTableBorder().setStyle(WmlLineBorderStyle.single).setColor(Color.LIGHT_GRAY));

      tableProperties.getTableCellMargins().addMargins(new CSSDeclaration(CSSProperty.margin, "2px 5px;"));

      tableStyle.getTextRunProperties().setSize(new Points(10)).setFont("Helvetica");

      // Define properties of the first column
      WmlTableStyleProperties tblStyleProperties = tableStyle.getProperties(WmlTableStyleProperties.Type.firstCol);
      tblStyleProperties.getTableCellProperties().setVerticalJustification(WmlVerticalJustification.bottom).getShading().setFill(Color.GRAY);
      tblStyleProperties.getParagraphProperties().setJustification(WmlJustification.right);
      tblStyleProperties.getTextRunProperties().setBold().setColor(Color.WHITE);

      docx.getStylesPart().addStyle(tableStyle);

      WmlTable table = body.addTable();
      table.getTableProperties().setStyle(tableStyle.getId());

      WmlTableRow row = table.addRow();
      row.addCell("Table Type:");
      row.addCell("Styled");

      row = table.addRow();
      row.addCell("Run Date:");
      row.addCell(new Date().toString());

      File testFile = new File("testTable.docx");
      docx.write(testFile);
This produces a table that looks like this:

Docx:
testTable.docx
Return to Main Page