📄 barcodepdf417.java
字号:
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 + -