Форум » [x]Harbour » печать штрих-кода » Ответить

печать штрих-кода

and3081: в поиске на эту тему- только совсем старые обсуждения. А как сейчас решаются такие задачи ? Нужно прицепить к печати квитанции штрих код. Это возможно не меняя свои исходники печати ?

Ответов - 30, стр: 1 2 All

Dima: раньше как печатал ? какую библу юзал ? PS я юзал PageScript , но полагаю можно и без него штрих код напечатать.

petr707: 1) Если все равно какой тип штрихкода, есть баркодные шрифты TruеType, инсталлируете их на комп. Далее пример можно создать в Word'e - наберите циферки и замените шрифт на баркодный. Если Ваш софт поддерживает выбор шрифта по месту документа - то все ок. 2) в \hb32\contrib\hbzebra\tests\ есть примеры

alex_II: Вот как я печатаю Ean13: ... DEFINE FONT 'ean13' NAME 'PF EAN P36' SIZE 28 ... @ rw,cl SAY f_StrToEan13('354995'+'12345') FONT 'ean13' TO PRINT * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Преобразует 11-разрядную строку в EAN-13 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 354 - код операции * 995 - код ЖЭУ (995 - отопление, 996 - гор.вода) * 05495 - лицевой * * 35499505495 * * 1. контрольный разрад Телекома: * (12*3)+(11*5)+(10*4)+(9*9)+(8*9)+(7*5)+(6*0)+(5*5)+(4*4)+(3*9)+(2*5) = Sum * mod(sum,11) - остаток от деления на 11 и есть контрольный разряд, получаем: 354995054951 * * 2. контрольный разрад EAN-13: * 354995054951 * 5+9+5+5+9+1 = 34 * 3+4+9+0+4+5 = 24 просуммируем: (34 * 3) + 25 = 127 * наибольшее кратное 10 для 127 это 130 * 130-127 = 3 - контрольный разряд EAN-13 * В итоге получаем: 3549950549513 * * 3. перекодируем * FUNCTION f_StrToEan13(cString) LOCAL tCod, cOut1, cIn12, cOut, i, lnAux, aCod, nPri LOCAL cMed := Chr(45) // центральный разделитель LOCAL cLat := Chr(33) // начальный и конечный ограничитель LOCAL nCheckSum := 0 LOCAL cIn := AllTrim(cString) // 11-символьная строка aCod := Array(10) IF Len(cIn) # 11 // если не 11 символов то выходим RETURN ENDIF FOR i := 1 TO 11 nCheckSum := nCheckSum + (13-i)*Val(Substr(cIn,i,1)) NEXT lnAux := Mod(nCheckSum,11) cIn := cIn + AllTrim(Str(lnAux,1)) // контрольный разряд Телекома nCheckSum := 0 FOR i = 1 TO 12 IF Mod(i,2) = 0 // сумма всех цифр на чётных позициях, умноженная на 3 nCheckSum := nCheckSum + Val(Substr(cIn,i,1)) * 3 ELSE // суммы всех цифр на нечётных позициях nCheckSum := nCheckSum + Val(Substr(cIn,i,1)) * 1 ENDIF NEXT lnAux := Mod(nCheckSum,10) cIn := cIn + AllTrim(Str(IF(lnAux = 0,0,10-lnAux),1)) // контрольный разряд EAN-13 nPri := Val(LEFT(cIn,1)) // значение крайнего левого(13) символа aCod[01] := 'AAAAAACCCCCC' && 0 aCod[02] := 'AABABBCCCCCC' && 1 aCod[03] := 'AABBABCCCCCC' && 2 aCod[04] := 'AABBBACCCCCC' && 3 aCod[05] := 'ABAABBCCCCCC' && 4 aCod[06] := 'ABBAABCCCCCC' && 5 aCod[07] := 'ABBBAACCCCCC' && 6 aCod[08] := 'ABABABCCCCCC' && 7 aCod[09] := 'ABABBACCCCCC' && 8 aCod[10] := 'ABBABACCCCCC' && 9 cOut1 := Chr(nPri + 35) // перекодированный крайний левый(13) символ cIn12 = Substr(cIn,2,12) // отбросим первый символ, останется еще 12 FOR i = 1 TO 12 tCod := Substr(aCod[nPri + 1],i,1) DO CASE CASE tCod = 'A' cIn12 := Stuff(cIn12,i,1,Chr(Val(Substr(cIn12,i,1)) + 48)) CASE tCod = 'B' cIn12 := Stuff(cIn12,i,1,Chr(Val(Substr(cIn12,i,1)) + 65)) CASE tCod = 'C' cIn12 := Stuff(cIn12,i,1,CHR(VAL(Substr(cIn12,i,1)) + 97)) ENDCASE NEXT * сформируем результирующую последовательность символов для печати штрих-кода cOut := cOut1 + cLat + Substr(cIn12,1,6) + cMed + Substr(cIn12,7,6) + cLat RETURN cOut Необходимо только установить в систему нужный шрифт, в интернете я нашел файл "PF_EAN_P36.ttf "


and3081: сейчас печатаю через утилку rec3p, т.е. страница формируется в файле обычными @...say, но с Esc-кодами, и запускается "rec3p имя_файла". А там ограничен выбор шрифтов. А переделывать работающую систему с rec3p не хотелось бы. По крайней мере это не сделать одномоментно. Или проще печать конкретно квитанции сделать без rec3p ? На харб перешел только-только, какие там возможности с печатью, даже еще не смотрел. Есть у кого-нибудь простенький пример печати с : выбором шрифтов, ориентации листа, рамочки и линии, выбором принтера из установленных, можно ли все это пихать в файл, а потом страницу/файл выдавать на заданный принтер ? Т.е. чтобы принцип печати оставить как есть (постранично в файл с последующей печатью). Тогда можно будет новые документы постепенно перетаскивать на новую печать, а старые оставить на rec3p.

Dima: and3081 Поиск по слову печать тебе поможет ! and3081 пишет: Т.е. чтобы принцип печати оставить как есть (постранично в файл с последующей печатью) Можно.

and3081: супер ! изучил класс win_prn(), все мои задачи решает, и перетащить с клиппера постепенно реально. Попутно сделал доку. В подарок получил штрихкод. Вопрос- EAN-13 для меня короток. А какие еще есть стандартные, чтобы знаков 19 было+ 1 контрольный и банковские терминалы понимали ? Опять в поиск ? Там такая их куча, а какой сейчас стандарт на всяких квитанциях ЖКХ ? Если кто знает.

nick_mi: CODE128 - по длине: я напечатал для пробы 30 символов, контрольную сумму автоматом не строит, а вот возбмут ли банковские терминалы - не знаю

and3081: Подскажите, а чем удобнее сделать предпросмотр ? Т.е. до этого документ скидывался в файл для последующей печати утилкой rec3p. Этот же файл можно было посмотреть как обычный текстовый файл. Если переходить на класс win_prn()- то как теперь? Файлов-то уже не будет для простого просмотра. Лично для себя для отладки пользуюсь OneNote из комплекта винды, оч удобно. Но что использовать для клиентов, они удалены и их много, бегать им что-то устанавливать не возможно, своих програмеров у них нет (детсады, школы и т.п.). OneNote может не быть на их компах. Нужно что-то, что не требует особой инсталяции и можно было выслать по электронке. Типа тупо скачать с письма на флешку и выполнить exe-шник, с такой установкой они справятся, не более. Т.е.какой-то вирт.принтер с выводом на экран. Что посоветуете ?

Andrey: and3081 пишет: Т.е.какой-то вирт.принтер с выводом на экран. В состави MS офиса идет виртуальный принтер с пред.просмотром Microsoft Office Document Image Writer или бери другие: Microsoft XPS Document Writer и т.д.

petr707: Можно двигаться уже в сторону стандартных форматов файла и вьюера, например PDF или RTF и отказаться от rec3p либо сделать подобное свое. Что мешает просматривать и печатать прямо из своего основного ПО ? Зачем уже rec3p ?

nick_mi: Можно установить, например, принтер DoPdf, который будет формировать файл формата PDF в указанное пользователем имя файла, или вообще в самой программе на HARBOUR формировать файл PDF.

and3081: непонятно Я и веду речь о том, что перехожу с rec3p на новое. Но это новое надо правильно выбрать, много вариантов. Проблема с предпросмотром в том, что нужно сделать единое формирование и для печати и для предпросмотра. Не писать же 2 программы. rec3p привел в пример- как есть сейчас. Документ формировался в файле set ptinter to файл. Далее этот файл мог отправить в rec3p для печати или смотреть текстовым вьювером. Немного криво в просмотре из-за неработающих Esc-кодов, но просто ознакомиться, то собираюсь печатать или не то- клиенту хватало. Изучил класс win_prn(). Для печати есть все. Перевести прогу на него реально по затратам времени. Но не вижу средств для перенаправления в файл ! Можно с него записать в файл в каком-то стандартном формате ? Т.е. задавая это в программе, а не в свойствах принтера. Для предпросмотра вижу 2 варианта. 1.Ставить вирт принтер и при печати через win_prn() выбирать- на реал.принтер или вирт. для просмотра. Неудобно (лишний выбор). Неудобно (кто установит у клиента вирт.принтер?). Стратегически не выгодно, т.к.не будет файла в принципе, а он иногда полезен для экспорта в exel. Редко, но сам факт. 2.Поэтому предпочтительнее изначально делать вывод печати в файл распространенного формата, а потом распоряжаться им как угодно. Значит win_prn() не подходит ??! А я так на него расчитываю. Как получить с win_prn() RTF, например ?

Dima: and3081 посмотри harbour\contrib\hbmisc\tests\rtfclass.prg

and3081: посмотрел. А что это дает ? Показано ручное формирование RTF файла. Нужен то инструментарий- шрифты, позиционирование, вывод и т.д. А так можно любой формат изучить, например ZIP, и вместо пользования функциями архивирования создавать ZIP самому через fwrite(). Речь же не о том.

Vlad04: Использую AkelPad. Управление шрифтами нет ( т.е. одна строка одного шрифта, другая - другого не получится). Но, можно - предпросмотр - развернуть лист - уменьшить , увеличить масштаб

petr707: а все таки - удалось посмотреть hb32\contrib\hbzebra\tests\ ?

Vlad04: Но можно вывод делать в rtf , а потом предпросмотр и печать через любой редактор

and3081: блиин, ну подскажите, как цитирование включать, или у меня IE глючный ? zebra- не смог собрать библу, ругается непонятно на что. Но после изучения win_prn() вопрос отпал, штрихкод одной командой в одном флаконе с остальной печатью, что еще нужно для щастя ? akelpad для текста я тоже пользую. Вопрос-то встал, что при переходе на win_prn() получу кучу плюшек, но теряется возможность вывода в файл. Или я чего-то не знаю. "Можно делать в RTF" - так как именно ? Писать свой движок с нуля, fwrite() и т.п.? Не вариант. Еще раз поясняю, делается переход с клиппера, а не пишется новая программа. Бухгалтерия. Документов и отчетов море. Время уходит на текущее сопровождение (всевозможные нормативные изменения). На переход время по остаточному принципу. Знакомая картина ? :) простой пример: pr_12() - установка шрифта 12 cpi Esc-кодом devpos(...) - нужная позиция devout(...) - вывод текста pr_cr8() - перевод на 1 строку из расчета 8 lpi Esc-кодами и т.д. в win_prn() получится: o:setFont(...) - один раз подобрать подходящие размеры o:setPos(...) - только учесть пересчет col/row в пиксели, элементарно o:textOut(...) o:newLine(8,1) Обвязка Create(), StartDoc(), EndDoc() элементарна, один раз поставил в программе и забыл. Т.е. чем win_prn() меня привлек, переход заключается в "тупой" замене одних команд другими. А свои функции типа pr_12() и pr_cr8()- вообще разовая работа поменять внутри. Пара часов, и один документ готов.

Dima: and3081 пишет: у меня IE глючный так и есть

petr707: Из серии Что лучше - три дня идти, или научиться летать..и за час долететь В аналогичной ситуации - оставил файлы отчетов без изменений, но добавил фунционал преобразования любого текстового файла отчета в файл PDF на основе включенной библиотеки Harupdf Ваши ESC-тэги в отчете - видимо смогут преобразоваться в тэги Pdf А вообще - FastReport решит все Ваши проблемы с отчетностью ( не реклама!)



полная версия страницы