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

📄 barcodepdf417.java

📁 源码包含生成 PDF 和 HTML 的类库
💻 JAVA
📖 第 1 页 / 共 5 页
字号:
    }        protected int getTextTypeAndValue(int maxLength, int idx) {        return getTextTypeAndValue(text, maxLength,idx);    }        private void textCompaction(byte[] input, int start, int length) {        int dest[] = new int[ABSOLUTE_MAX_TEXT_SIZE * 2];        int mode = ALPHA;        int ptr = 0;        int fullBytes = 0;        int v = 0;        int k;        int size;        length += start;        for (k = start; k < length; ++k) {            v = getTextTypeAndValue(input, length, k);            if ((v & mode) != 0) {                dest[ptr++] = v & 0xff;                continue;            }            if ((v & ISBYTE) != 0) {                if ((ptr & 1) != 0) {                    //add a padding word                    dest[ptr++] = PAL;                    mode = (mode & PUNCTUATION) != 0 ? ALPHA : mode;                }                dest[ptr++] = BYTESHIFT;                dest[ptr++] = v & 0xff;                fullBytes += 2;                continue;            }            switch (mode) {            case ALPHA:                if ((v & LOWER) != 0) {                    dest[ptr++] = LL;                    dest[ptr++] = v & 0xff;                    mode = LOWER;                }                else if ((v & MIXED) != 0) {                    dest[ptr++] = ML;                    dest[ptr++] = v & 0xff;                    mode = MIXED;                }                else if ((getTextTypeAndValue(input, length, k + 1) & getTextTypeAndValue(input, length, k + 2) & PUNCTUATION) != 0) {                    dest[ptr++] = ML;                    dest[ptr++] = PL;                    dest[ptr++] = v & 0xff;                    mode = PUNCTUATION;                }                else {                    dest[ptr++] = PS;                    dest[ptr++] = v & 0xff;                }                break;            case LOWER:                if ((v & ALPHA) != 0) {                    if ((getTextTypeAndValue(input, length, k + 1) & getTextTypeAndValue(input, length, k + 2) & ALPHA) != 0) {                        dest[ptr++] = ML;                        dest[ptr++] = AL;                        mode = ALPHA;                    }                    else {                        dest[ptr++] = AS;                    }                    dest[ptr++] = v & 0xff;                }                else if ((v & MIXED) != 0) {                    dest[ptr++] = ML;                    dest[ptr++] = v & 0xff;                    mode = MIXED;                }                else if ((getTextTypeAndValue(input, length, k + 1) & getTextTypeAndValue(input, length, k + 2) & PUNCTUATION) != 0) {                    dest[ptr++] = ML;                    dest[ptr++] = PL;                    dest[ptr++] = v & 0xff;                    mode = PUNCTUATION;                }                else {                    dest[ptr++] = PS;                    dest[ptr++] = v & 0xff;                }                break;            case MIXED:                if ((v & LOWER) != 0) {                    dest[ptr++] = LL;                    dest[ptr++] = v & 0xff;                    mode = LOWER;                }                else if ((v & ALPHA) != 0) {                    dest[ptr++] = AL;                    dest[ptr++] = v & 0xff;                    mode = ALPHA;                }                else if ((getTextTypeAndValue(input, length, k + 1) & getTextTypeAndValue(input, length, k + 2) & PUNCTUATION) != 0) {                    dest[ptr++] = PL;                    dest[ptr++] = v & 0xff;                    mode = PUNCTUATION;                }                else {                    dest[ptr++] = PS;                    dest[ptr++] = v & 0xff;                }                break;            case PUNCTUATION:                dest[ptr++] = PAL;                mode = ALPHA;                --k;                break;            }        }        if ((ptr & 1) != 0)            dest[ptr++] = PS;        size = (ptr + fullBytes) / 2;        if (size + cwPtr > MAX_DATA_CODEWORDS) {            throw new IndexOutOfBoundsException("The text is too big.");        }        length = ptr;        ptr = 0;        while (ptr < length) {            v = dest[ptr++];            if (v >= 30) {                codewords[cwPtr++] = v;                codewords[cwPtr++] = dest[ptr++];            }            else                codewords[cwPtr++] = v * 30 + dest[ptr++];        }    }    protected void textCompaction(int start, int length) {        textCompaction(text, start, length);    }    protected void basicNumberCompaction(int start, int length) {        basicNumberCompaction(text, start, length);    }    private void basicNumberCompaction(byte[] input, int start, int length) {        int ret = cwPtr;        int retLast = length / 3;        int ni, k;        cwPtr += retLast + 1;        for (k = 0; k <= retLast; ++k)            codewords[ret + k] = 0;        codewords[ret + retLast] = 1;        length += start;        for (ni = start; ni < length; ++ni) {            // multiply by 10            for (k = retLast; k >= 0; --k)                codewords[ret + k] *= 10;            // add the digit            codewords[ret + retLast] += input[ni] - '0';            // propagate carry            for (k = retLast; k > 0; --k) {                codewords[ret + k - 1] += codewords[ret + k] / 900;                codewords[ret + k] %= 900;            }        }    }    private void numberCompaction(byte[] input, int start, int length) {        int full = (length / 44) * 15;        int size = length % 44;        int k;        if (size == 0)            size = full;        else            size = full + size / 3 + 1;        if (size + cwPtr > MAX_DATA_CODEWORDS) {            throw new IndexOutOfBoundsException("The text is too big.");        }        length += start;        for (k = start; k < length; k += 44) {            size = length - k < 44 ? length - k : 44;            basicNumberCompaction(input, k, size);        }                }        protected void numberCompaction(int start, int length) {        numberCompaction(text, start, length);    }    protected void byteCompaction6(int start) {        int length = 6;        int ret = cwPtr;        int retLast = 4;        int ni, k;        cwPtr += retLast + 1;        for (k = 0; k <= retLast ; ++k)            codewords[ret + k] = 0;        length += start;        for (ni = start; ni < length; ++ni) {            // multiply by 256            for (k = retLast; k >= 0; --k)                codewords[ret + k] *= 256;            // add the digit            codewords[ret + retLast] += text[ni] & 0xff;            // propagate carry            for (k = retLast; k > 0; --k) {                codewords[ret + k - 1] += codewords[ret + k] / 900;                codewords[ret + k] %= 900;            }        }    }    void byteCompaction(int start, int length) {        int k, j;        int size = (length / 6) * 5 + (length % 6);        if (size + cwPtr > MAX_DATA_CODEWORDS) {            throw new IndexOutOfBoundsException("The text is too big.");        }        length += start;        for (k = start; k < length; k += 6) {            size = length - k < 44 ? length - k : 6;            if (size < 6) {                for (j = 0; j < size; ++j)                    codewords[cwPtr++] = text[k + j] & 0xff;            }            else {                byteCompaction6(k);            }        }    }    void breakString() {        int textLength = text.length;        int lastP = 0;        int startN = 0;        int nd = 0;        char c = 0;        int k, j;        boolean lastTxt, txt;        Segment v;        Segment vp;        Segment vn;                if ((options & PDF417_FORCE_BINARY) != 0) {            segmentList.add('B', 0, textLength);            return;        }        for (k = 0; k < textLength; ++k) {            c = (char)(text[k] & 0xff);            if (c >= '0' && c <= '9') {                if (nd == 0)                    startN = k;                ++nd;                continue;            }            if (nd >= 13) {                if (lastP != startN) {                    c = (char)(text[lastP] & 0xff);                    lastTxt = (c >= ' ' && c < 127) || c == '\r' || c == '\n' || c == '\t';                    for (j = lastP; j < startN; ++j) {                        c = (char)(text[j] & 0xff);                        txt = (c >= ' ' && c < 127) || c == '\r' || c == '\n' || c == '\t';                        if (txt != lastTxt) {                            segmentList.add(lastTxt ? 'T' : 'B', lastP, j);                            lastP = j;                            lastTxt = txt;                        }                    }                    segmentList.add(lastTxt ? 'T' : 'B', lastP, startN);                }                segmentList.add('N', startN, k);                lastP = k;            }            nd = 0;        }        if (nd < 13)            startN = textLength;        if (lastP != startN) {            c = (char)(text[lastP] & 0xff);            lastTxt = (c >= ' ' && c < 127) || c == '\r' || c == '\n' || c == '\t';            for (j = lastP; j < startN; ++j) {                c = (char)(text[j] & 0xff);                txt = (c >= ' ' && c < 127) || c == '\r' || c == '\n' || c == '\t';                if (txt != lastTxt) {                    segmentList.add(lastTxt ? 'T' : 'B', lastP, j);                    lastP = j;                    lastTxt = txt;                }            }            segmentList.add(lastTxt ? 'T' : 'B', lastP, startN);        }        if (nd >= 13)            segmentList.add('N', startN, textLength);        //optimize        //merge short binary        for (k = 0; k < segmentList.size(); ++k) {

⌨️ 快捷键说明

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