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

📄 barcodepdf417.java

📁 iText是一个能够快速产生PDF文件的java类库。iText的java类对于那些要产生包含文本
💻 JAVA
📖 第 1 页 / 共 5 页
字号:
            return (MIXED + ms);
        return (PUNCTUATION + ps);
    }
    
    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) {
                    dest[ptr++] = (mode & PUNCTUATION) != 0 ? PAL : PS;
                    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] += (int)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++] = (int)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);
        }

⌨️ 快捷键说明

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