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

📄 metado.java

📁 iText可以制作中文PDF文件的JAVA源程序
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
                    cb.arc(state.transformX(l), state.transformY(b), state.transformX(r), state.transformY(t), 0, 360);                    strokeAndFill();                    break;                }                case META_ARC:                {                    if (isNullStrokeFill(state.getLineNeutral()))                        break;                    float yend = state.transformY(in.readShort());                    float xend = state.transformX(in.readShort());                    float ystart = state.transformY(in.readShort());                    float xstart = state.transformX(in.readShort());                    float b = state.transformY(in.readShort());                    float r = state.transformX(in.readShort());                    float t = state.transformY(in.readShort());                    float l = state.transformX(in.readShort());                    float cx = (r + l) / 2;                    float cy = (t + b) / 2;                    float arc1 = getArc(cx, cy, xstart, ystart);                    float arc2 = getArc(cx, cy, xend, yend);                    arc2 -= arc1;                    if (arc2 <= 0)                        arc2 += 360;                    cb.arc(l, b, r, t, arc1, arc2);                    cb.stroke();                    break;                }                case META_PIE:                {                    if (isNullStrokeFill(state.getLineNeutral()))                        break;                    float yend = state.transformY(in.readShort());                    float xend = state.transformX(in.readShort());                    float ystart = state.transformY(in.readShort());                    float xstart = state.transformX(in.readShort());                    float b = state.transformY(in.readShort());                    float r = state.transformX(in.readShort());                    float t = state.transformY(in.readShort());                    float l = state.transformX(in.readShort());                    float cx = (r + l) / 2;                    float cy = (t + b) / 2;                    float arc1 = getArc(cx, cy, xstart, ystart);                    float arc2 = getArc(cx, cy, xend, yend);                    arc2 -= arc1;                    if (arc2 <= 0)                        arc2 += 360;                    ArrayList ar = cb.bezierArc(l, b, r, t, arc1, arc2);                    if (ar.size() == 0)                        break;                    float pt[] = (float [])ar.get(0);                    cb.moveTo(cx, cy);                    cb.lineTo(pt[0], pt[1]);                    for (int k = 0; k < ar.size(); ++k) {                        pt = (float [])ar.get(k);                        cb.curveTo(pt[2], pt[3], pt[4], pt[5], pt[6], pt[7]);                    }                    cb.lineTo(cx, cy);                    strokeAndFill();                    break;                }                case META_CHORD:                {                    if (isNullStrokeFill(state.getLineNeutral()))                        break;                    float yend = state.transformY(in.readShort());                    float xend = state.transformX(in.readShort());                    float ystart = state.transformY(in.readShort());                    float xstart = state.transformX(in.readShort());                    float b = state.transformY(in.readShort());                    float r = state.transformX(in.readShort());                    float t = state.transformY(in.readShort());                    float l = state.transformX(in.readShort());                    float cx = (r + l) / 2;                    float cy = (t + b) / 2;                    float arc1 = getArc(cx, cy, xstart, ystart);                    float arc2 = getArc(cx, cy, xend, yend);                    arc2 -= arc1;                    if (arc2 <= 0)                        arc2 += 360;                    ArrayList ar = cb.bezierArc(l, b, r, t, arc1, arc2);                    if (ar.size() == 0)                        break;                    float pt[] = (float [])ar.get(0);                    cx = pt[0];                    cy = pt[1];                    cb.moveTo(cx, cy);                    for (int k = 0; k < ar.size(); ++k) {                        pt = (float [])ar.get(k);                        cb.curveTo(pt[2], pt[3], pt[4], pt[5], pt[6], pt[7]);                    }                    cb.lineTo(cx, cy);                    strokeAndFill();                    break;                }                case META_RECTANGLE:                {                    if (isNullStrokeFill(true))                        break;                    float b = state.transformY(in.readShort());                    float r = state.transformX(in.readShort());                    float t = state.transformY(in.readShort());                    float l = state.transformX(in.readShort());                    cb.rectangle(l, b, r - l, t - b);                    strokeAndFill();                    break;                }                case META_INTERSECTCLIPRECT:                {                    float b = state.transformY(in.readShort());                    float r = state.transformX(in.readShort());                    float t = state.transformY(in.readShort());                    float l = state.transformX(in.readShort());                    cb.rectangle(l, b, r - l, t - b);                    cb.eoClip();                    cb.newPath();                    break;                }                case META_EXTTEXTOUT:                {                    int y = in.readShort();                    int x = in.readShort();                    int count = in.readWord();                    int flag = in.readWord();                    int x1 = 0;                    int y1 = 0;                    int x2 = 0;                    int y2 = 0;                    if ((flag & (MetaFont.ETO_CLIPPED | MetaFont.ETO_OPAQUE)) != 0) {                        x1 = in.readShort();                        y1 = in.readShort();                        x2 = in.readShort();                        y2 = in.readShort();                    }                    byte text[] = new byte[count];                    int k;                    for (k = 0; k < count; ++k) {                        byte c = (byte)in.readByte();                        if (c == 0)                            break;                        text[k] = c;                    }                    String s;                    try {                        s = new String(text, 0, k, "Cp1252");                    }                    catch (UnsupportedEncodingException e) {                        s = new String(text, 0, k);                    }                    outputText(x, y, flag, x1, y1, x2, y2, s);                    break;                }                case META_TEXTOUT:                {                    int count = in.readWord();                    byte text[] = new byte[count];                    int k;                    for (k = 0; k < count; ++k) {                        byte c = (byte)in.readByte();                        if (c == 0)                            break;                        text[k] = c;                    }                    String s;                    try {                        s = new String(text, 0, k, "Cp1252");                    }                    catch (UnsupportedEncodingException e) {                        s = new String(text, 0, k);                    }                    count = (count + 1) & 0xfffe;                    in.skip(count - k);                    int y = in.readShort();                    int x = in.readShort();                    outputText(x, y, 0, 0, 0, 0, 0, s);                    break;                }                case META_SETBKCOLOR:                    state.setCurrentBackgroundColor(in.readColor());                    break;                case META_SETTEXTCOLOR:                    state.setCurrentTextColor(in.readColor());                    break;                case META_SETTEXTALIGN:                    state.setTextAlign(in.readWord());                    break;                case META_SETBKMODE:                    state.setBackgroundMode(in.readWord());                    break;                case META_SETPOLYFILLMODE:                    state.setPolyFillMode(in.readWord());                    break;                case META_SETPIXEL:                {                    Color color = in.readColor();                    int y = in.readShort();                    int x = in.readShort();                    cb.saveState();                    cb.setColorFill(color);                    cb.rectangle(state.transformX(x), state.transformY(y), .2f, .2f);                    cb.fill();                    cb.restoreState();                    break;                }            }            in.skip((tsize * 2) - (in.getLength() - lenMarker));        }            }        public void outputText(int x, int y, int flag, int x1, int y1, int x2, int y2, String text) throws IOException {        MetaFont font = state.getCurrentFont();        float refX = state.transformX(x);        float refY = state.transformY(y);        float sin = (float)Math.sin(font.getAngle());        float cos = (float)Math.cos(font.getAngle());        float fontSize = font.getFontSize(state);        BaseFont bf = font.getFont();        int align = state.getTextAlign();        float textWidth = bf.getWidthPoint(text, fontSize);        float tx = 0;        float ty = 0;        float descender = bf.getFontDescriptor(BaseFont.DESCENT, fontSize);        float ury = bf.getFontDescriptor(BaseFont.BBOXURY, fontSize);        cb.saveState();        cb.concatCTM(cos, sin, -sin, cos, refX, refY);        if ((align & MetaState.TA_CENTER) == MetaState.TA_CENTER)            tx = -textWidth / 2;        else if ((align & MetaState.TA_RIGHT) == MetaState.TA_RIGHT)            tx = -textWidth;        if ((align & MetaState.TA_BASELINE) == MetaState.TA_BASELINE)            ty = 0;        else if ((align & MetaState.TA_BOTTOM) == MetaState.TA_BOTTOM)            ty = -descender;        else            ty = -ury;        Color textColor;        if (state.getBackgroundMode() == MetaState.OPAQUE) {            textColor = state.getCurrentBackgroundColor();            cb.setColorFill(textColor);            cb.rectangle(tx, ty + descender, textWidth, ury - descender);            cb.fill();        }        textColor = state.getCurrentTextColor();        cb.setColorFill(textColor);        cb.beginText();        cb.setFontAndSize(bf, fontSize);        cb.setTextMatrix(tx, ty);        cb.showText(text);        cb.endText();        if (font.isUnderline()) {            cb.rectangle(tx, ty - fontSize / 4, textWidth, fontSize / 15);            cb.fill();        }        if (font.isStrikeout()) {            cb.rectangle(tx, ty + fontSize / 3, textWidth, fontSize / 15);            cb.fill();        }        cb.restoreState();    }        public boolean isNullStrokeFill(boolean isRectangle) {        MetaPen pen = state.getCurrentPen();        MetaBrush brush = state.getCurrentBrush();        boolean noPen = (pen.getStyle() == MetaPen.PS_NULL);        int style = brush.getStyle();        boolean isBrush = (style == MetaBrush.BS_SOLID || (style == MetaBrush.BS_HATCHED && state.getBackgroundMode() == MetaState.OPAQUE));        boolean result = noPen && !isBrush;        if (!noPen) {            if (isRectangle)                state.setLineJoinRectangle(cb);            else                state.setLineJoinPolygon(cb);        }        return result;    }    public void strokeAndFill(){        MetaPen pen = state.getCurrentPen();        MetaBrush brush = state.getCurrentBrush();        int penStyle = pen.getStyle();        int brushStyle = brush.getStyle();        if (penStyle == MetaPen.PS_NULL) {            cb.closePath();            if (state.getPolyFillMode() == MetaState.ALTERNATE) {                cb.eoFill();            }            else {                cb.fill();            }        }        else {            boolean isBrush = (brushStyle == MetaBrush.BS_SOLID || (brushStyle == MetaBrush.BS_HATCHED && state.getBackgroundMode() == MetaState.OPAQUE));            if (isBrush) {                if (state.getPolyFillMode() == MetaState.ALTERNATE)                    cb.closePathEoFillStroke();                else                    cb.closePathFillStroke();            }            else {                cb.closePathStroke();            }        }    }        static float getArc(float xCenter, float yCenter, float xDot, float yDot) {        double s = Math.atan2(yDot - yCenter, xDot - xCenter);        if (s < 0)            s += Math.PI * 2;        return (float)(s / Math.PI * 180);    }}

⌨️ 快捷键说明

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