phrase.java

来自「有关对pdf操作的代码」· Java 代码 · 共 554 行 · 第 1/2 页

JAVA
554
字号
            element.type() == Element.MARKED) {                super.add(index, element);            }            else {                throw new ClassCastException(String.valueOf(element.type()));            }        }        catch(ClassCastException cce) {            throw new ClassCastException("Insertion of illegal Element: " + cce.getMessage());        }    }        /**     * Adds a <CODE>Chunk</CODE>, <CODE>Anchor</CODE> or another <CODE>Phrase</CODE>     * to this <CODE>Phrase</CODE>.     *     * @param	o	an object of type <CODE>Chunk</CODE>, <CODE>Anchor</CODE> or <CODE>Phrase</CODE>     * @return	a boolean     * @throws	ClassCastException	when you try to add something that isn't a <CODE>Chunk</CODE>, <CODE>Anchor</CODE> or <CODE>Phrase</CODE>     */    public boolean add(Object o) {    	if (o == null) return false;        if (o instanceof String) {            return super.add(new Chunk((String) o, font));        }        if (o instanceof RtfElementInterface) {        	return super.add(o);        }        try {            Element element = (Element) o;            switch(element.type()) {                case Element.CHUNK:                    return addChunk((Chunk) o);                case Element.PHRASE:                case Element.PARAGRAPH:                    Phrase phrase = (Phrase) o;                    boolean success = true;                    Element e;                    for (Iterator i = phrase.iterator(); i.hasNext(); ) {                        e = (Element) i.next();                        if (e instanceof Chunk) {                            success &= addChunk((Chunk)e);                        }                        else {                            success &= this.add(e);                        }                    }                    return success;                case Element.MARKED:                case Element.ANCHOR:                case Element.ANNOTATION:                case Element.TABLE: // case added by David Freels                case Element.PTABLE: // case added by mr. Karen Vardanyan                	// This will only work for PDF!!! Not for RTF/HTML                case Element.LIST:                	return super.add(o);                    default:                        throw new ClassCastException(String.valueOf(element.type()));            }        }        catch(ClassCastException cce) {            throw new ClassCastException("Insertion of illegal Element: " + cce.getMessage());        }    }        /**     * Adds a collection of <CODE>Chunk</CODE>s     * to this <CODE>Phrase</CODE>.     *     * @param	collection	a collection of <CODE>Chunk</CODE>s, <CODE>Anchor</CODE>s and <CODE>Phrase</CODE>s.     * @return	<CODE>true</CODE> if the action succeeded, <CODE>false</CODE> if not.     * @throws	ClassCastException	when you try to add something that isn't a <CODE>Chunk</CODE>, <CODE>Anchor</CODE> or <CODE>Phrase</CODE>     */    public boolean addAll(Collection collection) {        for (Iterator iterator = collection.iterator(); iterator.hasNext(); ) {            this.add(iterator.next());        }        return true;    }        /**     * Adds a Chunk.     * <p>     * This method is a hack to solve a problem I had with phrases that were split between chunks     * in the wrong place.     * @param chunk a Chunk to add to the Phrase     * @return true if adding the Chunk succeeded     */    protected boolean addChunk(Chunk chunk) {    	Font f = chunk.getFont();    	String c = chunk.getContent();        if (font != null && !font.isStandardFont()) {            f = font.difference(chunk.getFont());        }        if (size() > 0 && !chunk.hasAttributes()) {            try {                Chunk previous = (Chunk) get(size() - 1);                if (!previous.hasAttributes()                		&& (f == null                		|| f.compareTo(previous.getFont()) == 0)                		&& !"".equals(previous.getContent().trim())                		&& !"".equals(c.trim())) {                    previous.append(c);                    return true;                }            }            catch(ClassCastException cce) {            }        }        Chunk newChunk = new Chunk(c, f);        newChunk.setAttributes(chunk.getAttributes());        return super.add(newChunk);    }        /**     * Adds a <CODE>Object</CODE> to the <CODE>Paragraph</CODE>.     *     * @param	object		the object to add.     */    protected void addSpecial(Object object) {        super.add(object);    }        // other methods that change the member variables        /**     * Sets the leading of this phrase.     *     * @param	leading		the new leading     */        public void setLeading(float leading) {        this.leading = leading;    }        /**     * Sets the main font of this phrase.     * @param font	the new font     */    public void setFont(Font font) {    	this.font = font;    }        // methods to retrieve information	/**     * Gets the leading of this phrase.     *     * @return	the linespacing     */    public float getLeading() {        if (Float.isNaN(leading) && font != null) {            return font.getCalculatedLeading(1.5f);        }        return leading;    }    /**     * Checks you if the leading of this phrase is defined.     *     * @return	true if the leading is defined     */     public boolean hasLeading() {        if (Float.isNaN(leading)) {            return false;        }        return true;    }	/**     * Gets the font of the first <CODE>Chunk</CODE> that appears in this <CODE>Phrase</CODE>.     *     * @return	a <CODE>Font</CODE>     */      public Font getFont() {        return font;    }	/**     * Returns the content as a String object.     * This method differs from toString because toString will return an ArrayList with the toString value of the Chunks in this Phrase.     */    public String getContent() {    	StringBuffer buf = new StringBuffer();    	for (Iterator i = getChunks().iterator(); i.hasNext(); ) {    		buf.append(i.next().toString());    	}    	return buf.toString();    }        /**     * Checks is this <CODE>Phrase</CODE> contains no or 1 empty <CODE>Chunk</CODE>.     *     * @return	<CODE>false</CODE> if the <CODE>Phrase</CODE>     * contains more than one or more non-empty<CODE>Chunk</CODE>s.     */    public boolean isEmpty() {        switch(size()) {            case 0:                return true;            case 1:                Element element = (Element) get(0);                if (element.type() == Element.CHUNK && ((Chunk) element).isEmpty()) {                    return true;                }                return false;                default:                    return false;        }    }        // kept for historical reasons; people should use FontSelector    // eligible for deprecation, but the methods are mentioned in the book p277.        /**     * Constructs a Phrase that can be used in the static getInstance() method.     * @param	dummy	a dummy parameter     */    private Phrase(boolean dummy) {    }        /**     * Gets a special kind of Phrase that changes some characters into corresponding symbols.     * @param string     * @return a newly constructed Phrase     */    public static final Phrase getInstance(String string) {    	return getInstance(16, string, new Font());    }        /**     * Gets a special kind of Phrase that changes some characters into corresponding symbols.     * @param leading     * @param string     * @return a newly constructed Phrase     */    public static final Phrase getInstance(int leading, String string) {    	return getInstance(leading, string, new Font());    }        /**     * Gets a special kind of Phrase that changes some characters into corresponding symbols.     * @param leading     * @param string     * @param font     * @return a newly constructed Phrase     */    public static final Phrase getInstance(int leading, String string, Font font) {    	Phrase p = new Phrase(true);    	p.setLeading(leading);    	p.font = font;    	if (font.getFamily() != Font.SYMBOL && font.getFamily() != Font.ZAPFDINGBATS && font.getBaseFont() == null) {            int index;            while((index = SpecialSymbol.index(string)) > -1) {                if (index > 0) {                    String firstPart = string.substring(0, index);                    ((ArrayList)p).add(new Chunk(firstPart, font));                    string = string.substring(index);                }                Font symbol = new Font(Font.SYMBOL, font.getSize(), font.getStyle(), font.getColor());                StringBuffer buf = new StringBuffer();                buf.append(SpecialSymbol.getCorrespondingSymbol(string.charAt(0)));                string = string.substring(1);                while (SpecialSymbol.index(string) == 0) {                    buf.append(SpecialSymbol.getCorrespondingSymbol(string.charAt(0)));                    string = string.substring(1);                }                ((ArrayList)p).add(new Chunk(buf.toString(), symbol));            }        }        if (string != null && string.length() != 0) {        	((ArrayList)p).add(new Chunk(string, font));        }    	return p;    }}

⌨️ 快捷键说明

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