Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Oracle [игнор отключен] [закрыт для гостей] / генерация штрихкод 2 of 5 / 19 сообщений из 19, страница 1 из 1
30.01.2018, 21:05
    #39593593
генерация штрихкод 2 of 5
Всем доброго вечера ! Скачала себе замечательный пакет для генерации pdf файлов .Мне нужно вывести штрихкод в формате https://en.wikipedia.org/wiki/Interleaved_2_of_5. такие данные 65839038475758432327 . Если я просто беру '
Код: plsql
1.
2.
as_pdf3.set_font( as_pdf3.load_ttf_font( 'TEMP_DIR', 'code25I.ttf', 'CID',false ), 40 );
as_pdf3.write('65839038475758432327 ', -1, -1 );

то штрихкод получаеться не валидный и не читаеться сканером. Как поняла мне еще нужно преобразовать его .... Подскажите нету ли функции делающий это ? или может кто то уже писал такое . Куда мне копать?
...
Рейтинг: 0 / 0
30.01.2018, 21:18
    #39593602
Leonid Kudryavtsev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
генерация штрихкод 2 of 5
А почитать описание к шрифту не судьба?

Как я понял, один символ шрифта одновременно кодирует 2 цифры. Поскольку никогда с ним не работал, просто тынц на документацию из И-нет

http://grandzebu.net/informatique/codbar-en/code25I.htm
...
Рейтинг: 0 / 0
31.01.2018, 02:04
    #39593666
генерация штрихкод 2 of 5
я просто думала есть уже функция кем то написанная под эти задачи . Ну ладно тут вроде есть пример какоято функции на VBA попробую ее заюзать.....
...
Рейтинг: 0 / 0
31.01.2018, 12:57
    #39593880
Leonid Kudryavtsev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
генерация штрихкод 2 of 5
Там алгоритм простейший.
Просто склеить 2-а символа и отобразить их на один. Единственная "сложность", что там в районе пары 94 в шрифте разрыв. Нужно проверять на < 94 и >= 94. Но это вроде элементарно, один IF.
Поскольку у Вас четное кол-во символов, то никакого checksum не нужно
Скорее всего нужно добавить стар и стоп символ в начало и конец строки (у Вас в исходном посте этого тоже нет)

Как я понял. Считывателя штрих кода нет, т.ч. помочь могу только теоретически ))) мне все равно не проверить.
...
Рейтинг: 0 / 0
31.01.2018, 16:06
    #39594126
генерация штрихкод 2 of 5
Функцию нашла которая это делает .... но зараза у меня все равно правильно не читает !
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
function I2of5(p_data_to_encode    varchar2) return varchar2
/***************************************************************************
** I2of5 will return the properly formatted string for a Interleaved 2of5 **
** barcode.                                                               **
** specification string.                                                  **
** Parameters : p_data_to_encode : Data to be encoded                     **
****************************************************************************/
is

startCode                    varchar2(1)  := chr(203);
endCode                      varchar2(1)  := chr(204);

onlyCorrectData              varchar2(4000);  -- Make it big enough to handle any string
weightedTotal                number := 0;     -- Used for calculating Check Digit
check_digit                  number;          -- Check digit variable
currentCharNum               number;          -- Temp character variable
printableString              varchar2(4000);  -- Variable to hold encoded string

begin

-- Only keep numbers; Leading and Trailing spaces will be removed as well
for i in 1..length(p_data_to_encode)
loop
  if is_number(substr(p_data_to_encode,i,1)) then
    onlyCorrectData := onlyCorrectData || substr(p_data_to_encode,i,1);
  end if;
end loop;

-- Check to make sure there is an even number of characters
-- If not then prepend a "0"
if mod(length(onlyCorrectData),2) = 1 then
  onlyCorrectData := '0'||onlyCorrectData;
end if;

for i in 1..length(onlyCorrectData)
loop
  -- Only execute this loop every second time eg. when i = 1,3,5,7, etc...
  if mod(i,2) = 1 then
    currentCharNum := to_number(substr(onlyCorrectData,i,2));
  -- Get the ASCII Value of the current char according to chart
  if currentCharNum < 94  then printableString := printableString || chr(currentCharNum + 33); end if;
  if currentCharNum >= 94 then printableString := printableString || chr(currentCharNum + 103); end if;
  end if; -- mod(i,2)
end loop;

return startCode || printableString || endCode|| ' ';

end I2of5;
...
Рейтинг: 0 / 0
31.01.2018, 16:07
    #39594127
генерация штрихкод 2 of 5
может кодировка ? Хотя какая кодировка у меня только цифры ...
...
Рейтинг: 0 / 0
31.01.2018, 16:09
    #39594128
генерация штрихкод 2 of 5
Считыватель штрихкода просто на телефон поставила и чекаю =)
...
Рейтинг: 0 / 0
31.01.2018, 16:53
    #39594168
генерация штрихкод 2 of 5
сравнивала через сервис на сервисе читаеться и выдает такой закодированный текст 'ËO,#Lr4}>xaÌ' а
у меня с процедуры выходит такой . почему то теряеться 1 и последний символ
Код: plsql
1.
2.
3.
SELECT idautomation.I2of5('46110243811992298764') FROM dual
---------
O,#Lr4}>xa


куда деваються символы =(( 1 и последний..
...
Рейтинг: 0 / 0
31.01.2018, 17:19
    #39594202
Leonid Kudryavtsev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
генерация штрихкод 2 of 5
Евгения Зайцеваможет кодировка ? Хотя какая кодировка у меня только цифры ...
Это у Вас только цифры, а в закодированных символах за код > 127 уже перебрались (((

Что выдает запрос:

select * from sys.database_properties where property_name in ('NLS_CHARACTERSET', 'NLS_NCHAR_CHARACTERSET')
...
Рейтинг: 0 / 0
31.01.2018, 17:41
    #39594233
Leonid Kudryavtsev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
генерация штрихкод 2 of 5
Запустил на свой базе ( Charset = MSWIN1251, NCHAR = URF8 ), тоже какая-то лажа (но другая)
...
Рейтинг: 0 / 0
31.01.2018, 17:47
    #39594239
генерация штрихкод 2 of 5
NLS_NCHAR_CHARACTERSET AL16UTF16
NLS_CHARACTERSET AL32UTF8
вот мои настройки ...
...
Рейтинг: 0 / 0
31.01.2018, 18:28
    #39594284
Leonid Kudryavtsev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
генерация штрихкод 2 of 5
Евгения ЗайцеваNLS_CHARACTERSET AL32UTF8

Поэтому начало и отрезало. Как минимум start и stop символы имеют код > 127

На моей БД chr нормально отрабатывает (я тоже про start и stop символы забыл и удивился. откуда русские буквы полезли)

AFAIK Должна была получится строчка

Код: sql
1.
select utl_raw.cast_to_varchar2( hextoraw('CB4F2C234C72347D3E7861CC20') ) from dual;



В 1251 она выглядит как:
Код: sql
1.
&#203;O,#Lr4}>xa&#204; 



Но тут другой вопрос возникает, как ее корректно (и через что) скормить not-unicode TTF шрифту (((


генерация в HEX виде (вместо строки):
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
declare
s varchar2(1000);

  function I2of5(p_data_to_encode    varchar2) return varchar2
/***************************************************************************
** I2of5 will return the properly formatted string for a Interleaved 2of5 **
** barcode.                                                               **
** specification string.                                                  **
** Parameters : p_data_to_encode : Data to be encoded                     **
****************************************************************************/
is

startCode                    varchar2(1)  := chr(203);
endCode                      varchar2(1)  := chr(204);

onlyCorrectData              varchar2(4000);  -- Make it big enough to handle any string
weightedTotal                number := 0;     -- Used for calculating Check Digit
check_digit                  number;          -- Check digit variable
currentCharNum               number;          -- Temp character variable
printableString              varchar2(4000);  -- Variable to hold encoded string
printableStringAsHex varchar2(4000) := '';
begin

-- Only keep numbers; Leading and Trailing spaces will be removed as well
onlyCorrectData := p_data_to_encode;
/*
for i in 1..length(p_data_to_encode)
loop
  if is_number(substr(p_data_to_encode,i,1)) then
    onlyCorrectData := onlyCorrectData || substr(p_data_to_encode,i,1);
  end if;
end loop;
*/

-- Check to make sure there is an even number of characters
-- If not then prepend a "0"
if mod(length(onlyCorrectData),2) = 1 then
  onlyCorrectData := '0'||onlyCorrectData;
end if;

printableString := '';
for i in 1..length(onlyCorrectData)
loop
  -- Only execute this loop every second time eg. when i = 1,3,5,7, etc...
  if mod(i,2) = 1 then
    currentCharNum := to_number(substr(onlyCorrectData,i,2));
  -- Get the ASCII Value of the current char according to chart
  if currentCharNum < 94  then
     printableString := printableString || chr(currentCharNum + 33); 
     printableStringAsHex := printableStringAsHex || to_char(currentCharNum + 33, 'FMXX' ); 
     end if;
  if currentCharNum >= 94 then 
    printableString := printableString || chr(currentCharNum + 103); 
    printableStringAsHex := printableStringAsHex || to_char(currentCharNum + 103, 'FMXX' ); 
    end if;
  end if; -- mod(i,2)
end loop;

-- return startCode || printableString || endCode|| ' ';
return to_char(203,'FMXX') || printableStringAsHex || to_char(204,'FMXX') || '20';
end I2of5;

begin
  s := I2of5(p_data_to_encode=>'46110243811992298764' ); 
  dbms_output.put_line( '=======' );
  dbms_output.put_line( s );
  dbms_output.put_line( utl_raw.cast_to_varchar2( hextoraw(s) ) );
end;



...
Рейтинг: 0 / 0
31.01.2018, 18:33
    #39594288
Leonid Kudryavtsev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
генерация штрихкод 2 of 5
Сайт тоже строчку покромсал )))
...
Рейтинг: 0 / 0
31.01.2018, 18:40
    #39594297
генерация штрихкод 2 of 5
128 код еще проверила читаеться только тогда когдя я добавляю эти 2 символа .....
Код: plsql
1.
2.
as_pdf3.set_font( as_pdf3.load_ttf_font( 'TEMP_DIR', 'code128.ttf', 'CID',false ), 40 );
as_pdf3.write('&#205;'||idautomation.Code128c('46110243811192298764')||'&#206;', -1, -1 );
...
Рейтинг: 0 / 0
31.01.2018, 18:53
    #39594317
Leonid Kudryavtsev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
генерация штрихкод 2 of 5
Евгения Зайцева,

PL/SQL из последнего сообщения у Вас работает и генерирует правильный PDF с корректным штрихкодом ?
...
Рейтинг: 0 / 0
31.01.2018, 18:55
    #39594319
генерация штрихкод 2 of 5
да но 128 шрифтом =) а мне ж надо чтобы он 25i генерил ....
...
Рейтинг: 0 / 0
31.01.2018, 19:55
    #39594377
Leonid Kudryavtsev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
генерация штрихкод 2 of 5
Код: sql
1.
2.
as_pdf3.set_font( as_pdf3.load_ttf_font( 'TEMP_DIR', 'code25I.ttf', 'CID',false ), 40 );
as_pdf3.write('&#203;O,#Lr4}>xa&#204; ', -1, -1 );



Код: sql
1.
2.
as_pdf3.set_font( as_pdf3.load_ttf_font( 'TEMP_DIR', 'code25I.ttf', 'CID',false ), 40 );
as_pdf3.write('&#203;&#79;&#44;&#35;&#76;&#114;&#52;&#125;&#62;&#120;&#97;&#204; ', -1, -1 );



пытались проверить? Если последовательности ... pdf генератор обрабатывает корректно, так данные и передавать. IMHO
...
Рейтинг: 0 / 0
01.02.2018, 13:39
    #39594883
генерация штрихкод 2 of 5
Доброе день ! правильный код гененрировтаь научилась .. вроде норм и он валидно читаеться этим шрифтом ...
http://www.idautomation.com/barcode-fonts/interleaved-2of5/download.html
Но там есть шрифт только демо версии и дописывает демо в сам шрифт .. Эх где бы взять мне теперь нормальный шрифт без демо=)
поискала на просторах не нашла....
...
Рейтинг: 0 / 0
01.02.2018, 15:53
    #39595019
генерация штрихкод 2 of 5
Была проблема в start и stop символах . Нашла исправила . Спасибо вам за помощь =) Сейчас все работает.
...
Рейтинг: 0 / 0
Форумы / Oracle [игнор отключен] [закрыт для гостей] / генерация штрихкод 2 of 5 / 19 сообщений из 19, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]