@Override
  public void encode(Sheet sheet, SheetGraphics graphics, ReportSession session)
      throws DocumentException {
    sheet.startPortraitPage(graphics, session);
    int firstSet = 0, secondSet = 0;
    boolean DBT = hasDBT(session.getCharacter());
    firstSet += encodeSpiritForms(graphics, session, firstSet, DBT);
    if (DBT) {
      firstSet += PADDING;
      secondSet = firstSet;
      firstSet += encodeArsenal(graphics, session, firstSet) + PADDING;
      firstSet += encodePanoply(graphics, session, firstSet, 80) + PADDING;
      firstSet += encodeMovementAndHealth(graphics, session, firstSet, 99);

      secondSet += encodeCombatStats(graphics, session, secondSet) + PADDING;
      encodePowers(graphics, session, secondSet, firstSet - secondSet, false);
    } else {
      encodePowers(graphics, session, secondSet, firstSet, true);
    }

    firstSet += PADDING;

    int remaining = (int) (pageConfiguration.getContentHeight() - firstSet);
    encodeKnacks(graphics, session, firstSet, remaining);
    encodeAnimalForms(graphics, session, firstSet, remaining);
  }
 @Override
 public SimpleEssenceContent create(ReportSession session) {
   return new SimpleEssenceContent(resources, session.getCharacter(), session.getHero());
 }