powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / генерация штрихкод 2 of 5
19 сообщений из 19, страница 1 из 1
генерация штрихкод 2 of 5
    #39593593
Всем доброго вечера ! Скачала себе замечательный пакет для генерации 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
генерация штрихкод 2 of 5
    #39593602
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А почитать описание к шрифту не судьба?

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

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

Как я понял. Считывателя штрих кода нет, т.ч. помочь могу только теоретически ))) мне все равно не проверить.
...
Рейтинг: 0 / 0
генерация штрихкод 2 of 5
    #39594126
Функцию нашла которая это делает .... но зараза у меня все равно правильно не читает !
Код: 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
генерация штрихкод 2 of 5
    #39594127
может кодировка ? Хотя какая кодировка у меня только цифры ...
...
Рейтинг: 0 / 0
генерация штрихкод 2 of 5
    #39594128
Считыватель штрихкода просто на телефон поставила и чекаю =)
...
Рейтинг: 0 / 0
генерация штрихкод 2 of 5
    #39594168
сравнивала через сервис на сервисе читаеться и выдает такой закодированный текст 'ËO,#Lr4}>xaÌ' а
у меня с процедуры выходит такой . почему то теряеться 1 и последний символ
Код: plsql
1.
2.
3.
SELECT idautomation.I2of5('46110243811992298764') FROM dual
---------
O,#Lr4}>xa


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

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

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

PL/SQL из последнего сообщения у Вас работает и генерирует правильный PDF с корректным штрихкодом ?
...
Рейтинг: 0 / 0
генерация штрихкод 2 of 5
    #39594319
да но 128 шрифтом =) а мне ж надо чтобы он 25i генерил ....
...
Рейтинг: 0 / 0
генерация штрихкод 2 of 5
    #39594377
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: 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
генерация штрихкод 2 of 5
    #39594883
Доброе день ! правильный код гененрировтаь научилась .. вроде норм и он валидно читаеться этим шрифтом ...
http://www.idautomation.com/barcode-fonts/interleaved-2of5/download.html
Но там есть шрифт только демо версии и дописывает демо в сам шрифт .. Эх где бы взять мне теперь нормальный шрифт без демо=)
поискала на просторах не нашла....
...
Рейтинг: 0 / 0
генерация штрихкод 2 of 5
    #39595019
Была проблема в start и stop символах . Нашла исправила . Спасибо вам за помощь =) Сейчас все работает.
...
Рейтинг: 0 / 0
19 сообщений из 19, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / генерация штрихкод 2 of 5
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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