rtflist.java
来自「有关对pdf操作的代码」· Java 代码 · 共 645 行 · 第 1/2 页
JAVA
645 行
result.write(RtfParagraphStyle.INDENT_LEFT); result.write(intToByteArray(leftIndent)); result.write(RtfParagraphStyle.INDENT_RIGHT); result.write(intToByteArray(rightIndent)); } /** * Writes the definition part of this list level */ public void writeDefinition(final OutputStream result) throws IOException { result.write(OPEN_GROUP); result.write(LIST_LEVEL); result.write(LIST_LEVEL_TYPE); switch(this.listType) { case LIST_TYPE_BULLET : result.write(intToByteArray(23)); break; case LIST_TYPE_NUMBERED : result.write(intToByteArray(0)); break; case LIST_TYPE_UPPER_LETTERS : result.write(intToByteArray(3)); break; case LIST_TYPE_LOWER_LETTERS : result.write(intToByteArray(4)); break; case LIST_TYPE_UPPER_ROMAN : result.write(intToByteArray(1)); break; case LIST_TYPE_LOWER_ROMAN : result.write(intToByteArray(2)); break; } result.write(LIST_LEVEL_TYPE_NEW); switch(this.listType) { case LIST_TYPE_BULLET : result.write(intToByteArray(23)); break; case LIST_TYPE_NUMBERED : result.write(intToByteArray(0)); break; case LIST_TYPE_UPPER_LETTERS : result.write(intToByteArray(3)); break; case LIST_TYPE_LOWER_LETTERS : result.write(intToByteArray(4)); break; case LIST_TYPE_UPPER_ROMAN : result.write(intToByteArray(1)); break; case LIST_TYPE_LOWER_ROMAN : result.write(intToByteArray(2)); break; } result.write(LIST_LEVEL_ALIGNMENT); result.write(intToByteArray(0)); result.write(LIST_LEVEL_ALIGNMENT_NEW); result.write(intToByteArray(0)); result.write(LIST_LEVEL_START_AT); result.write(intToByteArray(this.listStartAt)); result.write(OPEN_GROUP); result.write(LIST_LEVEL_TEXT); if(this.listType != LIST_TYPE_BULLET) { result.write(LIST_LEVEL_STYLE_NUMBERED_BEGIN); if(listLevel < 10) { result.write(intToByteArray(0)); } result.write(intToByteArray(listLevel)); result.write(LIST_LEVEL_STYLE_NUMBERED_END); } else { result.write(LIST_LEVEL_STYLE_BULLETED_BEGIN); this.document.filterSpecialChar(result, this.bulletCharacter, false, false); result.write(LIST_LEVEL_STYLE_BULLETED_END); } result.write(CLOSE_GROUP); result.write(OPEN_GROUP); result.write(LIST_LEVEL_NUMBERS_BEGIN); if(this.listType != LIST_TYPE_BULLET) { result.write(LIST_LEVEL_NUMBERS_NUMBERED); } result.write(LIST_LEVEL_NUMBERS_END); result.write(CLOSE_GROUP); result.write(RtfFontList.FONT_NUMBER); if(this.listType != LIST_TYPE_BULLET) { result.write(intToByteArray(fontNumber.getFontNumber())); } else { result.write(intToByteArray(fontBullet.getFontNumber())); } writeIndentation(result); result.write(LIST_LEVEL_SYMBOL_INDENT); result.write(intToByteArray(this.leftIndent)); result.write(CLOSE_GROUP); result.write("\n".getBytes()); for(int i = 0; i < items.size(); i++) { RtfElement rtfElement = (RtfElement) items.get(i); if(rtfElement instanceof RtfList) { RtfList rl = (RtfList)rtfElement; rl.writeDefinition(result); break; } else if(rtfElement instanceof RtfListItem) { RtfListItem rli = (RtfListItem) rtfElement; if(rli.writeDefinition(result)) break; } } } /** * Writes the initialization part of the RtfList * * @param result The <code>OutputStream</code> to write to * @throws IOException On i/o errors. */ protected void writeListBeginning(final OutputStream result) throws IOException { result.write(RtfParagraph.PARAGRAPH_DEFAULTS); if(this.inTable) { result.write(RtfParagraph.IN_TABLE); } switch (this.alignment) { case Element.ALIGN_LEFT: result.write(RtfParagraphStyle.ALIGN_LEFT); break; case Element.ALIGN_RIGHT: result.write(RtfParagraphStyle.ALIGN_RIGHT); break; case Element.ALIGN_CENTER: result.write(RtfParagraphStyle.ALIGN_CENTER); break; case Element.ALIGN_JUSTIFIED: case Element.ALIGN_JUSTIFIED_ALL: result.write(RtfParagraphStyle.ALIGN_JUSTIFY); break; } writeIndentation(result); result.write(RtfFont.FONT_SIZE); result.write(intToByteArray(fontNumber.getFontSize() * 2)); if(this.symbolIndent > 0) { result.write("\\tx".getBytes()); result.write(intToByteArray(this.leftIndent)); } } /** * Writes only the list number and list level number. * * @param result The <code>OutputStream</code> to write to * @throws IOException On i/o errors. */ protected void writeListNumbers(final OutputStream result) throws IOException { result.write(RtfListTable.LIST_NUMBER); result.write(intToByteArray(listNumber)); if(listLevel > 0) { result.write(LIST_LEVEL_NUMBER); result.write(intToByteArray(listLevel)); } } /** * Writes the content of the RtfList */ public void writeContent(final OutputStream result) throws IOException { if(this.listLevel == 0) { correctIndentation(); } if(!this.inTable) { result.write(OPEN_GROUP); } int itemNr = 0; for(int i = 0; i < items.size(); i++) { RtfElement rtfElement = (RtfElement) items.get(i); if(rtfElement instanceof RtfListItem) { itemNr++; result.write(OPEN_GROUP); result.write(LIST_TEXT); result.write(RtfParagraph.PARAGRAPH_DEFAULTS); if(this.inTable) { result.write(RtfParagraph.IN_TABLE); } result.write(RtfFontList.FONT_NUMBER); if(this.listType != LIST_TYPE_BULLET) { result.write(intToByteArray(fontNumber.getFontNumber())); } else { result.write(intToByteArray(fontBullet.getFontNumber())); } writeIndentation(result); result.write(DELIMITER); if(this.listType != LIST_TYPE_BULLET) { switch(this.listType) { case LIST_TYPE_NUMBERED : result.write(intToByteArray(itemNr)); break; case LIST_TYPE_UPPER_LETTERS : result.write(RomanAlphabetFactory.getUpperCaseString(itemNr).getBytes()); break; case LIST_TYPE_LOWER_LETTERS : result.write(RomanAlphabetFactory.getLowerCaseString(itemNr).getBytes()); break; case LIST_TYPE_UPPER_ROMAN : result.write(RomanNumberFactory.getUpperCaseString(itemNr).getBytes()); break; case LIST_TYPE_LOWER_ROMAN : result.write(RomanNumberFactory.getLowerCaseString(itemNr).getBytes()); break; } result.write(LIST_NUMBER_END); } else { this.document.filterSpecialChar(result, this.bulletCharacter, true, false); } result.write(TAB); result.write(CLOSE_GROUP); if(i == 0) { writeListBeginning(result); writeListNumbers(result); } rtfElement.writeContent(result); if(i < (items.size() - 1) || !this.inTable || this.listLevel > 0) { // TODO Fix no paragraph on last list item in tables result.write(RtfParagraph.PARAGRAPH); } result.write("\n".getBytes()); } else if(rtfElement instanceof RtfList) { rtfElement.writeContent(result); writeListBeginning(result); writeListNumbers(result); result.write("\n".getBytes()); } } if(!this.inTable) { result.write(CLOSE_GROUP); result.write(RtfParagraph.PARAGRAPH_DEFAULTS); } } /** * Gets the list level of this RtfList * * @return Returns the list level. */ public int getListLevel() { return listLevel; } /** * Sets the list level of this RtfList. A list level > 0 will * unregister this RtfList from the RtfListTable * * @param listLevel The list level to set. */ public void setListLevel(int listLevel) { this.listLevel = listLevel; if(this.listLevel != 0) { document.getDocumentHeader().freeListNumber(this); for(int i = 0; i < this.items.size(); i++) { if(this.items.get(i) instanceof RtfList) { ((RtfList) this.items.get(i)).setListNumber(this.listNumber); ((RtfList) this.items.get(i)).setListLevel(this.listLevel + 1); } } } else { this.listNumber = document.getDocumentHeader().getListNumber(this); } } /** * Sets the parent RtfList of this RtfList * * @param parent The parent RtfList to use. */ protected void setParent(RtfList parent) { this.parentList = parent; } /** * Gets the id of this list * * @return Returns the list number. */ public int getListNumber() { return listNumber; } /** * Sets the id of this list * * @param listNumber The list number to set. */ public void setListNumber(int listNumber) { this.listNumber = listNumber; } /** * Sets whether this RtfList is in a table. Sets the correct inTable setting for all * child elements. * * @param inTable <code>True</code> if this RtfList is in a table, <code>false</code> otherwise */ public void setInTable(boolean inTable) { super.setInTable(inTable); for(int i = 0; i < this.items.size(); i++) { ((RtfBasicElement) this.items.get(i)).setInTable(inTable); } } /** * Sets whether this RtfList is in a header. Sets the correct inTable setting for all * child elements. * * @param inHeader <code>True</code> if this RtfList is in a header, <code>false</code> otherwise */ public void setInHeader(boolean inHeader) { super.setInHeader(inHeader); for(int i = 0; i < this.items.size(); i++) { ((RtfBasicElement) this.items.get(i)).setInHeader(inHeader); } } /** * Correct the indentation of this RtfList by adding left/first line indentation * from the parent RtfList. Also calls correctIndentation on all child RtfLists. */ protected void correctIndentation() { if(this.parentList != null) { this.leftIndent = this.leftIndent + this.parentList.getLeftIndent() + this.parentList.getFirstIndent(); } for(int i = 0; i < this.items.size(); i++) { if(this.items.get(i) instanceof RtfList) { ((RtfList) this.items.get(i)).correctIndentation(); } else if(this.items.get(i) instanceof RtfListItem) { ((RtfListItem) this.items.get(i)).correctIndentation(); } } } /** * Get the left indentation of this RtfList. * * @return The left indentation. */ private int getLeftIndent() { return this.leftIndent; } /** * Get the first line indentation of this RtfList. * * @return The first line indentation. */ private int getFirstIndent() { return this.firstIndent; }}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?