Дело оказалось именно в самом кодировании, методом воспевания и курения трубки, а после танцев с бубном было выяснено что все шрифты отлично распознаются, только программа кодирует неверно.
Теперь вопрос к бывалым.... Что лучше, генерация кода и подставление шрифта под него или генерация явой картинки ????
Подскажите по кодированию...
Про стоп, старт и контрольные символы вроде понятно, но какие именно должны быть старт и стоп символы не могу въехать, да и сами символы кода???
Везде прекрасно описано как высчитать контрольную сумму, но как представить в текстовом виде весь код нигде не могу найти, онлайн кодировщики выдаю иероглифы, откуда они берутся понять не могу..... :KillMe:
Когда-то очень давно делал штрих-код вот так:
<div class="sp-wrap"><div class="sp-head-wrap"><div class="sp-head folded clickable">Код</div></div><div class="sp-body"><div class="sp-content"><!--shcode--><pre><code class='java'>public static String barcode(String instring, int ver) {
/** Функция формирования строки символов для штрихкода Code128 С
* In: instring - строка цифр любой длины; ver - версия лотуса
* 256 - Notes 7.0
* Out: строка в виде кодов для отображения штрихкода в HTML
* Алгоритм описан на: http://idautomation.com/code128faq.html
*/
final int constC = 105; // константа, признак того что используется тип С баркода Code128
String outstring = ""; // строка на выходе
String csum = ""; // символ контрольной суммы
int i;
int k;
int z = 1;
long sum = 0;
// System.out.println("Версия Notes: " + ver);
// определяем строку
for (i = 0; i < instring.length(); i=i+2 ) {
k = Integer.parseInt(instring.substring(i, i+2));
if (k <= 90) {
if (k == 0)
k = 174;
else
k = k + 32;
outstring = outstring + "&#" + k;
}
else {
if (ver < 256) { // версия нотес меньше 7.0 используем замену символов
switch (k) {
case 91: {k = 1038; break;}
case 92: {k = 1118; break;}
case 93: {k = 1032; break;}
case 95: {k = 1168; break;}
case 98: {k = 1025; break;}
default: k = k + 70;
}
}
else {
k = k + 70;
}
outstring = outstring + "&#" + k;
}
}
// определяем контрольную сумму
for (i = 0; i < instring.length()-1; i=i+2) {
k = Integer.parseInt(instring.substring(i, i+2));
// System.out.println("Порядок: " + z + " Число: " + k + " Умножение: " + k*z);
sum = sum + k*z;
z++;
}
sum = sum + constC;
// System.out.println("Контрольная сумма: " + sum % 103);
Long xx = null;
xx = new Long(sum % 103);
k = xx.intValue();
if (k <= 90){
if (k == 0)
k = 174;
else
k = k + 32;
csum = "&#" + k;
}
else {
if (ver < 256) { // версия нотес меньше 7.0 используем замену символов
switch (k) {
case 91: {k = 1038; break;}
case 92: {k = 1118; break;}
case 93: {k = 1032; break;}
case 95: {k = 1168; break;}
case 98: {k = 1025; break;}
default: k = k + 70;
}
}
else {
k = k + 70;
}
csum = "&#" + k;
}
// "}" - стартовый символ для Code128 С
// "~" - стоповый символ для Code128 С
outstring = "}" + outstring + csum + "~";
return outstring;
}[/CODE]
Но, не советовал бы работать со шрифтами. Лучше генерировать картинки.
Я использую ZXing (\"Zebra Crossing\")
Ссылка скрыта от гостей
.