⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 worddocument.java

📁 Office格式转换代码
💻 JAVA
📖 第 1 页 / 共 4 页
字号:
                               BTreeSet characterTable, BTreeSet text)  {    StringBuffer blockBuffer = _bodyBuffer;    byte[] papx = currentNode.getPapx();    int istd = Utils.convertBytesToShort(papx, 0);    StyleDescription std = _styleSheet.getStyleDescription(istd);    PAP pap = (PAP)StyleSheet.uncompressProperty(papx, std.getPAP(), _styleSheet);    //handle table cells    if(pap._fInTable > 0)    {      if(pap._fTtp == 0)      {        if(_cellBuffer == null)        {          _cellBuffer = new StringBuffer();        }        blockBuffer = _cellBuffer;      }      else      {        if(_table == null)        {          _table = new ArrayList();        }        TAP tap = (TAP)StyleSheet.uncompressProperty(papx, new TAP(), _styleSheet);        TableRow nextRow = new TableRow(_cells, tap);        _table.add(nextRow);        _cells = null;        return;      }    }    else    {      //just prints out any table that is stored in _table      printTable();    }    if(pap._ilfo > 0)    {      LVL lvl = _listTables.getLevel(pap._ilfo, pap._ilvl);      addListParagraphContent(lvl, blockBuffer, pap, currentNode, start, end, std);    }    else    {      addParagraphContent(blockBuffer, pap, currentNode, start, end, std);    }  }  private void addListParagraphContent(LVL lvl, StringBuffer blockBuffer, PAP pap,                                       PapxNode currentNode, int start, int end,                                       StyleDescription std)  {    pap = (PAP)StyleSheet.uncompressProperty(lvl._papx, pap, _styleSheet, false);    addParagraphProperties(pap, blockBuffer);    ArrayList charRuns = findProperties(Math.max(currentNode.getStart(), start),                                     Math.min(currentNode.getEnd(), end),                                     _characterTable.root);    int len = charRuns.size();    CHP numChp = (CHP)StyleSheet.uncompressProperty(((ChpxNode)charRuns.get(len-1)).getChpx(), std.getCHP(), _styleSheet);    numChp = (CHP)StyleSheet.uncompressProperty(lvl._chpx, numChp, _styleSheet);    //StyleContext context = StyleContext.getDefaultStyleContext();    //FontMetrics metrics = getFontMetrics(numChp, context);    int indent = -1 * pap._dxaLeft1;    String bulletText = getBulletText(lvl, pap);    indent = indent - (bulletText.length() * 10) * 20;//(metrics.stringWidth(bulletText) * 20);    if(indent > 0)    {      numChp._paddingEnd = (short)indent;    }    addCharacterProperties(numChp, blockBuffer);    int listNum = 0;    //if(number != null)    //{    blockBuffer.append(bulletText);      //listNum = 1;    //}    //for(;listNum < lvl._xst.length; listNum++)    //{    //  addText(lvl._xst[listNum], blockBuffer);    //}    switch (lvl._ixchFollow)    {      case 0:        addText('\u0009', blockBuffer);        break;      case 1:        addText(' ', blockBuffer);        break;    }    closeLine(blockBuffer);    for(int x = 0; x < len; x++)    {      ChpxNode charNode = (ChpxNode)charRuns.get(x);      byte[] chpx = charNode.getChpx();      CHP chp = (CHP)StyleSheet.uncompressProperty(chpx, std.getCHP(), _styleSheet);      addCharacterProperties(chp, blockBuffer);      int charStart = Math.max(charNode.getStart(), currentNode.getStart());      int charEnd = Math.min(charNode.getEnd(), currentNode.getEnd());      ArrayList textRuns = findProperties(charStart, charEnd, _text.root);      int textRunLen = textRuns.size();      for(int y = 0; y < textRunLen; y++)      {        TextPiece piece = (TextPiece)textRuns.get(y);        charStart = Math.max(charStart, piece.getStart());        charEnd = Math.min(charEnd, piece.getEnd());        if(piece.usesUnicode())        {          addUnicodeText(charStart, charEnd, blockBuffer);        }        else        {          addText(charStart, charEnd, blockBuffer);        }        closeLine(blockBuffer);      }    }    closeBlock(blockBuffer);  }  private void addParagraphContent(StringBuffer blockBuffer, PAP pap,                                   PapxNode currentNode, int start, int end,                                   StyleDescription std)  {    addParagraphProperties(pap, blockBuffer);    ArrayList charRuns = findProperties(Math.max(currentNode.getStart(), start),                                     Math.min(currentNode.getEnd(), end),                                     _characterTable.root);    int len = charRuns.size();    for(int x = 0; x < len; x++)    {      ChpxNode charNode = (ChpxNode)charRuns.get(x);      byte[] chpx = charNode.getChpx();      CHP chp = (CHP)StyleSheet.uncompressProperty(chpx, std.getCHP(), _styleSheet);      addCharacterProperties(chp, blockBuffer);      int charStart = Math.max(charNode.getStart(), currentNode.getStart());      int charEnd = Math.min(charNode.getEnd(), currentNode.getEnd());      ArrayList textRuns = findProperties(charStart, charEnd, _text.root);      int textRunLen = textRuns.size();      for(int y = 0; y < textRunLen; y++)      {        TextPiece piece = (TextPiece)textRuns.get(y);        charStart = Math.max(charStart, piece.getStart());        charEnd = Math.min(charEnd, piece.getEnd());        if(piece.usesUnicode())        {          addUnicodeText(charStart, charEnd, blockBuffer);        }        else        {          addText(charStart, charEnd, blockBuffer);        }        closeLine(blockBuffer);      }    }    closeBlock(blockBuffer);  }  private void addText(int start, int end, StringBuffer buf)  {    for(int x = start; x < end; x++)    {      char ch = '?';      ch = (char)_header[x];      addText(ch, buf);    }  }  private void addText(char ch, StringBuffer buf)  {    int num = 0xffff & ch;    if((ch >= 'a' && ch <= 'z') || (ch >= 'A' && ch <= 'Z') ||      (ch >= '0' && ch <= '9') || ch == '_' || ch == ' ' || ch == '-' || ch == '.' || ch == '$')    {      buf.append(ch);    }    else if(num == 0x07 && _cellBuffer != null)    {      if(_cells == null)      {        _cells = new ArrayList();      }      closeLine(_cellBuffer);      closeBlock(_cellBuffer);      _cells.add(_cellBuffer.toString());      _cellBuffer = null;    }    else    {      /** @todo handle special characters */      if(num < 0x20)      num=0x20;      buf.append("&#");      buf.append(num);      buf.append(';');    }  }  private void addUnicodeText(int start, int end, StringBuffer buf)  {    for(int x = start; x < end; x += 2)    {      char ch = Utils.getUnicodeCharacter(_header, x);      //if(ch < 0x0020)      //{      //  _bodyBuffer.append('?');      //}      //else      //{        addText(ch, buf);      //}    }  }  private void addParagraphProperties(PAP pap, StringBuffer buf)  {    buf.append("<fo:block ");    buf.append("text-align=\"" + getTextAlignment(pap._jc) + "\"\r\n");    buf.append("linefeed-treatment=\"preserve\" ");    buf.append("white-space-collapse=\"false\" ");    if(pap._fKeep > 0)    {      buf.append("keep-together.within-page=\"always\"\r\n");    }    if(pap._fKeepFollow > 0)    {      buf.append("keep-with-next.within-page=\"always\"\r\n");    }    if(pap._fPageBreakBefore > 0)    {      buf.append("break-before=\"page\"\r\n");    }    if(pap._fNoAutoHyph == 0)    {      buf.append("hyphenate=\"true\"\r\n");    }    else    {      buf.append("hyphenate=\"false\"\r\n");    }    if(pap._dxaLeft > 0)    {      buf.append("start-indent=\"" + ((float)pap._dxaLeft)/1440.0f + "in\"\r\n");    }    if(pap._dxaRight > 0)    {      buf.append("end-indent=\"" + ((float)pap._dxaRight)/1440.0f + "in\"\r\n");    }    if(pap._dxaLeft1 != 0)    {      buf.append("text-indent=\"" + ((float)pap._dxaLeft1)/1440.0f + "in\"\r\n");    }    if(pap._lspd[1] == 0)    {      //buf.append("line-height=\"" + ((float)pap._lspd[0])/1440.0f + "in\"\r\n");    }    addBorder(buf, pap._brcTop, "top");    addBorder(buf, pap._brcBottom, "bottom");    addBorder(buf, pap._brcLeft, "left");    addBorder(buf, pap._brcRight, "right");    buf.append(">");  }  private void addCharacterProperties(CHP chp, StringBuffer buf)  {    buf.append("<fo:inline ");    buf.append("font-family=\"" + _fonts.getFont(chp._ftcAscii) + "\" ");    buf.append("font-size=\"" + (chp._hps / 2) + "pt\" ");    buf.append("color=\"" + getColor(chp._ico) + "\" ");    //not supported by fop    //buf.append("letter-spacing=\"" + ((double)chp._dxaSpace)/1440.0f + "in\" ");    addBorder(buf, chp._brc, "top");    addBorder(buf, chp._brc, "bottom");    addBorder(buf, chp._brc, "left");    addBorder(buf, chp._brc, "right");    if(chp._italic)    {      buf.append("font-style=\"italic\" ");    }    if(chp._bold)    {      buf.append("font-weight=\"bold\" ");    }    if(chp._fSmallCaps)    {      buf.append("font-variant=\"small-caps\" ");    }    if(chp._fCaps)    {      buf.append("text-transform=\"uppercase\" ");    }    if(chp._fStrike || chp._fDStrike)    {      buf.append("text-decoration=\"line-through\" ");    }    if(chp._fShadow)    {      int size = chp._hps/24;      buf.append("text-shadow=\"" + size + "pt\"");    }    if(chp._fLowerCase)    {      buf.append("text-transform=\"lowercase\" ");    }    if(chp._kul > 0)    {      buf.append("text-decoration=\"underline\" ");    }    if(chp._highlighted)    {      buf.append("background-color=\"" + getColor(chp._icoHighlight) + "\" ");    }    if(chp._paddingStart != 0)    {      buf.append("padding-start=\"" + (float)chp._paddingStart/1440.0f + "in\" ");    }    if(chp._paddingEnd != 0)    {      buf.append("padding-end=\"" + (float)chp._paddingEnd/1440.0f + "in\" ");    }    buf.append(">");  }  private void addStaticContent(String flowName, HeaderFooter content)  {    _bodyBuffer.append("<fo:static-content flow-name=\"" + flowName + "\">");    //_bodyBuffer.append("<fo:float float=\"before\">");    addBlockContent(content.getStart(), content.getEnd(),_text, _paragraphTable, _characterTable);    //_bodyBuffer.append("</fo:float>");    _bodyBuffer.append("</fo:static-content>");  }  private String getBulletText(LVL lvl, PAP pap)  {    StringBuffer bulletBuffer = new StringBuffer();    for(int x = 0; x < lvl._xst.length; x++)    {      if(lvl._xst[x] < 9)      {        LVL numLevel = _listTables.getLevel(pap._ilfo, lvl._xst[x]);        int num = numLevel._iStartAt;        if(lvl == numLevel)        {          numLevel._iStartAt++;        }        else if(num > 1)        {          num--;        }        bulletBuffer.append(NumberFormatter.getNumber(num, lvl._nfc));      }      else      {        bulletBuffer.append(lvl._xst[x]);      }    }    return bulletBuffer.toString();  }  /**   * finds all chpx's that are between start and end   */  private ArrayList findProperties(int start, int end, BTreeSet.BTreeNode root)  {    ArrayList results = new ArrayList();    BTreeSet.Entry[] entries = root.entries;    for(int x = 0; x < entries.length; x++)    {      if(entries[x] != null)      {        BTreeSet.BTreeNode child = entries[x].child;        PropertyNode xNode = (PropertyNode)entries[x].element;        if(xNode != null)        {          int xStart = xNode.getStart();          int xEnd = xNode.getEnd();          if(xStart < end)          {            if(xStart >= start)            {              if(child != null)              {                ArrayList beforeItems = findProperties(start, end, child);                results.addAll(beforeItems);              }              results.add(xNode);            }            else if(start < xEnd)            {              results.add(xNode);              //break;            }          }          else          {            if(child != null)            {              ArrayList beforeItems = findProperties(start, end, child);              results.addAll(beforeItems);            }            break;          }        }        else if(child != null)        {          ArrayList afterItems = findProperties(start, end, child);          results.addAll(afterItems);        }      }      else      {        break;      }    }    return results;  }  private void openPage(String page, String type)  {    _bodyBuffer.append("<fo:page-sequence master-reference=\"" + page + "\">\r\n");  }  private void openFlow()  {    _bodyBuffer.append("<fo:flow flow-name=\"xsl-region-body\">\r\n");  }  private void closeFlow()  {    _bodyBuffer.append("</fo:flow>\r\n");  }  private void closePage()  {    _bodyBuffer.append("</fo:page-sequence>\r\n");  }  private void closeLine(StringBuffer buf)  {    buf.append("</fo:inline>");

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -