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

📄 textrun.java

📁 java 读写word excel ppt
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
			} else {				// Need to swap a TextBytesAtom for a TextCharsAtom								// Build the new TextCharsAtom				_charAtom = new TextCharsAtom();				_charAtom.setText(s);								// Use the TextHeaderAtom to do the swap on the parent				RecordContainer parent = _headerAtom.getParentRecord();				Record[] cr = parent.getChildRecords();				for(int i=0; i<cr.length; i++) {					// Look for TextBytesAtom					if(cr[i].equals(_byteAtom)) {						// Found it, so replace, then all done						cr[i] = _charAtom;						break;					}				}								// Flag the change				_byteAtom = null;				_isUnicode = true;			}		}	}		/**	 * Handles an update to the text stored in one of the Rich Text Runs	 * @param run	 * @param s	 */	public synchronized void changeTextInRichTextRun(RichTextRun run, String s) {		// Figure out which run it is		int runID = -1;		for(int i=0; i<_rtRuns.length; i++) {			if(run.equals(_rtRuns[i])) {				runID = i;			}		}		if(runID == -1) {			throw new IllegalArgumentException("Supplied RichTextRun wasn't from this TextRun");		}				// Ensure a StyleTextPropAtom is present, adding if required		ensureStyleAtomPresent();				// Update the text length for its Paragraph and Character stylings		// If it's shared:		//   * calculate the new length based on the run's old text		//   * this should leave in any +1's for the end of block if needed		// If it isn't shared:		//   * reset the length, to the new string's length		//   * add on +1 if the last block		// The last run needs its stylings to be 1 longer than the raw		//  text is. This is to define the stylings that any new text		//  that is added will inherit		TextPropCollection pCol = run._getRawParagraphStyle();		TextPropCollection cCol = run._getRawCharacterStyle();		int newSize = s.length();		if(runID == _rtRuns.length-1) {			newSize++;		}				if(run._isParagraphStyleShared()) {			pCol.updateTextSize( pCol.getCharactersCovered() - run.getLength() + s.length() );		} else {			pCol.updateTextSize(newSize);		}		if(run._isCharacterStyleShared()) {			cCol.updateTextSize( cCol.getCharactersCovered() - run.getLength() + s.length() );		} else {			cCol.updateTextSize(newSize);		}				// Build up the new text		// As we go through, update the start position for all subsequent runs		// The building relies on the old text still being present		StringBuffer newText = new StringBuffer();		for(int i=0; i<_rtRuns.length; i++) {			int newStartPos = newText.length();						// Build up the new text			if(i != runID) {				// Not the affected run, so keep old text				newText.append(_rtRuns[i].getRawText());			} else {				// Affected run, so use new text				newText.append(s);			}						// Do we need to update the start position of this run?			// (Need to get the text before we update the start pos)			if(i <= runID) {				// Change is after this, so don't need to change start position			} else {				// Change has occured, so update start position				_rtRuns[i].updateStartPosition(newStartPos);			}		}				// Now we can save the new text		storeText(newText.toString());	}	/**	 * Changes the text, and sets it all to have the same styling	 *  as the the first character has. 	 * If you care about styling, do setText on a RichTextRun instead 	 */	public synchronized void setText(String s) {		// Save the new text to the atoms		storeText(s);		RichTextRun fst = _rtRuns[0];		// Finally, zap and re-do the RichTextRuns		for(int i=0; i<_rtRuns.length; i++) { _rtRuns[i] = null; }		_rtRuns = new RichTextRun[1];        _rtRuns[0] = fst;		// Now handle record stylings:		// If there isn't styling		//  no change, stays with no styling		// If there is styling:		//  everthing gets the same style that the first block has		if(_styleAtom != null) {			LinkedList pStyles = _styleAtom.getParagraphStyles();			while(pStyles.size() > 1) { pStyles.removeLast(); }						LinkedList cStyles = _styleAtom.getCharacterStyles();			while(cStyles.size() > 1) { cStyles.removeLast(); }						_rtRuns[0].setText(s);		} else {			// Recreate rich text run with no styling			_rtRuns[0] = new RichTextRun(this,0,s.length());		}	}	/**	 * Ensure a StyleTextPropAtom is present for this run, 	 *  by adding if required. Normally for internal TextRun use.	 */	public synchronized void ensureStyleAtomPresent() {		if(_styleAtom != null) {			// All there			return;		}				// Create a new one at the right size		_styleAtom = new StyleTextPropAtom(getRawText().length() + 1);				// Use the TextHeader atom to get at the parent		RecordContainer runAtomsParent = _headerAtom.getParentRecord();				// Add the new StyleTextPropAtom after the TextCharsAtom / TextBytesAtom		Record addAfter = _byteAtom;		if(_byteAtom == null) { addAfter = _charAtom; }		runAtomsParent.addChildAfter(_styleAtom, addAfter);				// Feed this to our sole rich text run		if(_rtRuns.length != 1) {			throw new IllegalStateException("Needed to add StyleTextPropAtom when had many rich text runs");		}		// These are the only styles for now 		_rtRuns[0].supplyTextProps(				(TextPropCollection)_styleAtom.getParagraphStyles().get(0),				(TextPropCollection)_styleAtom.getCharacterStyles().get(0),				false,				false		);	}	// Accesser methods follow	/**	 * Returns the text content of the run, which has been made safe	 * for printing and other use.	 */	public String getText() {		String rawText = getRawText();		// PowerPoint seems to store files with \r as the line break		// The messes things up on everything but a Mac, so translate		//  them to \n		String text = rawText.replace('\r','\n');		return text;	}	/**	* Returns the raw text content of the run. This hasn't had any	*  changes applied to it, and so is probably unlikely to print	*  out nicely.	*/	public String getRawText() {		if(_isUnicode) {			return _charAtom.getText();		} else {			return _byteAtom.getText();		}	}		/**	 * Fetch the rich text runs (runs of text with the same styling) that	 *  are contained within this block of text	 * @return	 */	public RichTextRun[] getRichTextRuns() {		return 	_rtRuns;	}		/**	* Returns the type of the text, from the TextHeaderAtom.	* Possible values can be seen from TextHeaderAtom	* @see org.apache.poi.hslf.record.TextHeaderAtom	*/	public int getRunType() { 		return _headerAtom.getTextType();	}	/**	* Changes the type of the text. Values should be taken	*  from TextHeaderAtom. No checking is done to ensure you	*  set this to a valid value!	* @see org.apache.poi.hslf.record.TextHeaderAtom	*/	public void setRunType(int type) {		_headerAtom.setTextType(type);	}		/**	 * Supply the SlideShow we belong to.	 * Also passes it on to our child RichTextRuns	 */	public void supplySlideShow(SlideShow ss) {		slideShow = ss;		if(_rtRuns != null) {			for(int i=0; i<_rtRuns.length; i++) {				_rtRuns[i].supplySlideShow(slideShow);			}		}	}    public void setSheet(Sheet sheet){        this.sheet = sheet;    }    public Sheet getSheet(){        return this.sheet;            }    /**     * @return  Shape ID     */    protected int getShapeId(){        return shapeId;    }    /**     *  @param id Shape ID     */    protected void setShapeId(int id){        shapeId = id;    }    /**     * Returns the array of all hyperlinks in this text run     *     * @return the array of all hyperlinks in this text run     * or <code>null</code> if not found.     */    public Hyperlink[] getHyperlinks(){        return Hyperlink.find(this);    }}

⌨️ 快捷键说明

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