Форум » [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 решит все Ваши проблемы с отчетностью ( не реклама!)

Andrey: petr707 пишет: А вообще - FastReport решит все Ваши проблемы с отчетностью ( не реклама!) И не париться....

Vlad04: and3081 "Можно делать в RTF" - так как именно ? Писать свой движок с нуля, fwrite() и т.п.? Не вариант. Все написано Минимальные доработки программы. Штрих код так же печатается Примерно так SET PRINTER to 'C:\TEMP\Pic.txt' ; SET DEVICE TO PRINTER ; SET PRINTER ON Select TalonR //(nSele) //УЧРЕЖДЕНИЕ ?'|0:NAMEORG:'+HB_OEMTOANSI(Rtrim(k[1]) ) ?'|0:OGRN:'+HB_OEMTOANSI(Rtrim(k[4]) ) ?'|0:ADRES:'+HB_OEMTOANSI(Rtrim(k[19]) ) ... //Дата рождения ?'|0:BIRTH_D:'+dTOC(Klient->Birth_Date) ... sCmd:="start "+Par1+"REPORTF.EXE C:\TEMP\Pic.txt " + Par1+"Pic\"+Name_Pic+" C:\TEMP\TEMP.RTF " Run(sCmd) Готовишь шаблон, заполняешь его метками. Потом программа меняет метки на содержание

and3081: столько вариантов, глаза разбежались. Попробуем начать с вариантов без привлечения сторонних программ, не хотелось бы увеличивать зависимость. Например PDF библа hbhpdf. Это единственный вариант PDF в харбе ? Будет ли он работать с штрихкодовыми шрифтами ? Краткого описания функций нет ? Не хотелось бы потратить кучу времени, а потом выяснится, что чего то нужного не хватает. Как выяснилось с win_prn() классом.

nick_mi: and3081 пишет: Будет ли он работать с штрихкодовыми шрифтами ? petr707 пишет: ..\contrib\hbzebra\tests\ есть примеры там пример вывод штрихкодов(разных) в PDF

nick_mi: Как то было замаячила потребность вывода данных в PDF, накрапал на базе стандартных примеров отладочную программу вывода в PDF c некоторыми коментариями. [pre]/* * $Id: testhpdf.prg 15824 2010-11-13 18:57:30Z vszakats $ */ /* * Harbour Project source code: * * Copyright 2010 Viktor Szakats (harbour.01 syenar.hu) * www - http://harbour-project.org * */ #include "Common.ch" #include "Inkey.ch" #include "Setcurs.ch" #include "Error.ch" #include "Ads.ch" #include "wvtwin.ch" #include "hbgtinfo.ch" #include "hbgtwvg.ch" #include "wvgparts.ch" #include "hbzebra.ch" #include "harupdf.ch" PROCEDURE Main( FONT ) LOCAL pdf LOCAL page LOCAL TTName LOCAL embed := .t. LOCAL hfsize:= 12 LOCAL lportrait := .T. LOCAL def_font3 := "" LOCAL detail_font_name local detail_fnt_name := NIL cls REQUEST HB_CODEPAGE_RU866 // Установка REQUEST HB_CODEPAGE_RU1251 // языковых hb_CodePage_RU866() // кодовых hb_cdpselect ('RU866' ) // страниц // request HB_GT_WVT // request HB_GT_WVG_DEFAULT // ANNOUNCE HB_GTSYS If pcount() < 1 @ 1,1 say hb_translate (" Нет параметра Имя фонта По умолчанию Helvetica","RU866","RU1251") inkey (0) EndIf TTname := FONT pdf := HPDF_New() // Создать объект PDF // Для всех элементов адресация начинается // с левого нижнего угла (0,0) - максимальные // координаты - верхний правый угол // Возможные форматы : // HPDF_PAGE_SIZE_LETTER 1 8 x 11 (Дюймы) -> 612 x 792 // HPDF_PAGE_SIZE_LEGAL 2 8 x 14 (Дюймы) -> 612 x 1008 // HPDF_PAGE_SIZE_A3 3 297 x 420 (mm) -> 842 x 1200 // HPDF_PAGE_SIZE_A4 4 210 x 297 (mm) -> 596 x 842 // HPDF_PAGE_SIZE_A5 5 148 x 210 (mm) -> 420 x 596 // HPDF_PAGE_SIZE_B4 6 250 x 353 (mm) -> 709 x 1001 // HPDF_PAGE_SIZE_B5 7 176 x 250 (mm) -> 499 x 709 // HPDF_PAGE_SIZE_EXECUTIVE 8 7 x 10 (Дюймы) -> 522 x 756 // HPDF_PAGE_SIZE_US4x6 9 4 x 6 (Дюймы) -> 288 x 432 // HPDF_PAGE_SIZE_US4x8 10 4 x 8 (Дюймы) -> 288 x 576 // HPDF_PAGE_SIZE_US5x7 11 5 x 7 (Дюймы) -> 360 x 504 // HPDF_PAGE_SIZE_COMM10 12 4.125 x 9.5 (Дюймы) -> 297 x 684 if !empty(TTname) detail_fnt_name := HPDF_LoadTTFontFromFile(pdf, TTName,; // Загрузить фонт из файла embed) // pdf - объект PDF // TTName - имя файла с фонтом // embed - вложение (фонтав файл PDF) // .T. - да // .F. - нет // detail_fnt_name Возвращает имя фонта // содержащегося в файле else detail_fnt_name := HPDF_LoadTTFontFromFile(pdf, ; getenv("SystemRoot")+"\fonts\arial.ttf",; embed) TTname :="NIL" endif HPDF_SetCompressionMode( pdf, HPDF_COMP_ALL ) // Сжатие данных // pdf - объект PDF // HPDF_COMP_NONE 1 Ничего не сжимать // HPDF_COMP_TEXT 2 Сжимать текстовые данные. // HPDF_COMP_IMAGE 3 Сжимать графические объекты. // HPDF_COMP_METADATA 4 Сжимать прочие данные (fonts, cmaps и др.) // HPDF_COMP_ALL 5 Сжимать все // if lportrait // HPDF_Page_SetSize( pdf, HPDF_PAGE_SIZE_A4, HPDF_PAGE_PORTRAIT) // Размер и ориентация объекта PDF // pdf - объект PDF // HPDF_PAGE_SIZE_A4 - размер страницы // см описание HPDF_New() // HPDF_PAGE_PORTRAIT - ориентация портрет // HPDF_PAGE_LANDSCAPE - ориентация ландшафт // else // HPDF_Page_SetSize( pdf, HPDF_PAGE_SIZE_A4, HPDF_PAGE_LANDSCAPE) // Размер и ориентация объекта PDF // endif HPDF_SetPageMode( pdf, HPDF_PAGE_MODE_USE_OUTLINE ) // режимы выода страницы // pdf - объект PDF // HPDF_PAGE_MODE_USE_NONE 0 Display the document with neither outline nor thumbnail. // HPDF_PAGE_MODE_USE_OUTLINE 1 Display the document with outline pane. // HPDF_PAGE_MODE_USE_THUMBS 2 Display the document with thumbnail pane. // HPDF_PAGE_MODE_FULL_SCREEN 3 Display the document with full screen mode. // HPDF_PAGE_MODE_EOF 4 If empty(detail_fnt_name) detail_font_name := "Arial" // "Helvetica" detail_fnt_name := "NIL" Else detail_font_name := detail_fnt_name endif @ 3,1 say " До того " + TTname + " " + detail_fnt_name @ 4,1 say " После того " +detail_font_name + " " + str(len (detail_font_name)) inkey(0) cdpage := "CP1251" def_font3 := HPDF_GetFont (pdf, detail_font_name ,; // Получить указатель на фонт cdpage) // pdf - объект PDF // detail_font_name - имя фонта // cdpage - кодовая страница for i :=1 to 2 page := HPDF_AddPage( pdf ) // Добавить страницу HPDF_Page_SetFontAndSize( page, def_font3, hfsize ) // Установить фонт для страницы и размер фонта // page - указатель на объект страница // def_font3 - указательна на фонт, полученый из HPDF_GetFont () // hfsize - размер фонта HPDF_Page_SetSize( page, HPDF_PAGE_SIZE_A4,; // Размер и ориентация объекта листа HPDF_PAGE_PORTRAIT ) // page - объект page, полученный HPDF_AddPage() // HPDF_PAGE_SIZE_A4 - размер листа // HPDF_Page_PORTRAIT - ориентация листа HPDF_SetCurrentEncoder(pdf, cdpage) // Установить кодовую страницу объекта PDF // pdf - объект PDF // cdpage - кодовая страница DrawBarcode( page, 640, 1, "CODE128", "123456789012345678901234567890" ) DrawBarcode( page, 680, 1, "PDF417", "Hello, World of Harbour!!! It's 2D barcode PDF417 :)" ) DrawBarcode( page, 760, 1, "DATAMATRIX", "Hello, World of Harbour!!! It's 2D barcode DataMatrix :)") height := HPDF_Page_GetHeight(page) // получить высоту страницы // page - объект листа width := HPDF_Page_GetWidth(page) // получить ширину страницы // page - объект листа @ 6,1 say "height " + str (height,5) @ 7,1 say "width " + str (width ,5) inkey (0) nameimg := "D:\HOME\CLIP_UTK\PortalPDF\sample1.jpg" hndl_img := HPDF_LOADJPEGIMAGEFROMFILE (pdf, nameimg) // Загрузить jpg из файла * HPdf_LoadPngImageFromFile // Загрузить PNG из файла * HPdf_LoadRawImageFromFile // Загрузить RAW из файла // pdf - объект PDF // nameimg - имя файла // hndl_img - указатель на объект image c_beg := 10 l_beg := 280 a_size := HPDF_IMAGE_GETSIZE (hndl_img) // Получить размер изображения // hndl_img - указатель на объект image // a_size - массив размеров // a_size[1] - ширина // a_size[2] - высота nWidth := a_size[1] nHeight := a_size[2] HPDF_PAGE_DRAWIMAGE (page, hndl_img, c_beg,; // Нарисовать изображение на листе l_beg, nWidth, nHeight) // page - объект листа // hndl_img - указатель на объект image // Координаты левый нижний угол: // c_beg - Колонка начала // l_beg - строка начала // nWidth - ширина // nHeight - высота // // *****замечание********* // все, что будет выведено после изображения // будет перекрывать изображение, и также изображение // бедет перекрывать все, что было выведено ранее npen := 3 HPDF_Page_SetLineWidth( page, npen ) // Установка ширины линии для рисования линий, // линий, прямоугольников, окружностей и т.д. // page - объект листа // npen - толщина линии HPDF_Page_BeginText( page ) // Начало процесса ввода текста // page - объект листа text := "<Standard Type1 fonts samples> " + "╤ЄрэфрЁЄэ√щ ъюф " +; hb_translate ("Наша-маша-лучше-всех Наша-маша-лучше-всех Наша-маша-лучше-всех Наша маша лучше всех " + ; "Наша маша лучше всехНаша маша лучше всехНаша маша лучше всехНаша маша лучше всех" + ; "Наша маша лучше всехНаша маша лучше всехНаша маша лучше всехНаша маша лучше всех","RU866","RU1251") HPDF_Page_TextOut( page, 2, 800, text ) // Напечатать текст // page - объект листа // 2 - колонка начало // 800 - строка нкачало // text - выводимый текст // // ******замечание************ // Если текст больше ширины листа - // то символы, выходящие за ширину листа теряются HPDF_Page_EndText( page ) // Окончание процесса вывода текста на лист // page - объект листа c_beg := 10 l_beg := 300 nWidth := 400 nHeight := 300 @ 10,1 say " c_beg " + str (c_beg,5) @ 11,1 say " l_beg " + str (l_beg,5) @ 12,1 say " c_end " + str (nWidth,5) @ 13,1 say " l_end " + str (nWidth,5) HPDF_Page_Rectangle( page, c_beg, l_beg, ; // Отрисовка прямоугольника. nWidth, nHeight) // page - объект листа // Координаты левый нижний угол: // c_beg - Колонка начала // l_beg - строка начала // nWidth - ширина // nHeight - высота HPDF_Page_Stroke( page ) // Закончить прорисовку графических объекта // page - объект листа HPDF_Page_BeginText( page ) // Начало ввода текста // page - объект листа c_beg := 10 l_beg := 600 c_end := 400 l_end := 300 nalign := 3 HPDF_Page_TextRect (page ,; // вписать текст в прямоугольник c_beg ,; // page - объект листа l_beg,; // координаты верхний левый угол: c_end ,; // c_beg - колонка l_end,; // l_beg - строка text, nalign ) // координаты правый нижний угол // c_end - колонка // l_end - строка // nalign - выравнивание // HPDF_TALIGN_LEFT 0 по левому краю // HPDF_TALIGN_RIGHT 1 по правому краю // HPDF_TALIGN_CENTER 2 по центру // HPDF_TALIGN_JUSTIFY 3 заполняет строку // // ****Замечание**** // Если встречается слово больше длины строки // то слово ивесь оставшийся текст не печатается HPDF_Page_EndText( page ) c_beg := 150 l_beg := 600 rad := 100 HPDF_PAGE_CIRCLE (page, c_beg,l_beg, rad) // Нарисовать Окружность // page - объект листа // координаты центра окружности: // c_beg - колонка // l_beg - строка // rad - радиус окружности в пикселях c_beg := 150 l_beg := 600 radx := 100 rady := 200 HPDF_PAGE_ELLIPSE (page, c_beg,l_beg, radx,rady) // Нарисовать элипс // page - объект листа // координаты центра элипса: // c_beg - колонка // l_beg - строка // radx - радиус элипса по горизонтали в пикселях // rady - радиус элипса по вертикали в пикселях c_beg := 150 l_beg := 200 radx := 100 rady := 200 HPDF_PAGE_ARC (page, c_beg,l_beg, rad, radx,rady) // Нарисовать дугу окружности // page - объект листа // координаты центра окружности: // c_beg - колонка // l_beg - строка // rad - радиус // radx - угол начала // rady - угол окончания HPDF_Page_Stroke( page ) // Закончить прорисовку графических объектов /* nameimg := "D:\HOME\CLIP_UTK\PortalPDF\sample1.jpg" hndlimg := HPDF_LOADJPEGIMAGEFROMFILE (pdf, nameimg) c_beg := 10 l_beg := 340 nWidth := 500 nHeight := 300 HPDF_PAGE_DRAWIMAGE (page, hndlimg, c_beg, l_beg, nWidth, nHeight ) */ hfsize := hfsize + 4 next namefile := "testhpdf.pdf" FErase( namefile ) ? HPDF_SaveToFile( pdf, namefile ) // Записывает сформированный PDF в файл // pdf - объект PDF // namefile - имя файла PDF417 // // *****Замечание******** // Если файл открыт другой программой, // функция завершится с кодом 0, но файл не // перезапишет inkey(0) RETURN PROCEDURE DrawBarcode( page, nY, nLineWidth, cType, cCode, nFlags ) LOCAL hZebra, nLineHeight nY := HPDF_Page_GetHeight( page ) - nY SWITCH cType CASE "EAN13" ; hZebra := hb_zebra_create_ean13( cCode, nFlags ) ; EXIT CASE "EAN8" ; hZebra := hb_zebra_create_ean8( cCode, nFlags ) ; EXIT CASE "UPCA" ; hZebra := hb_zebra_create_upca( cCode, nFlags ) ; EXIT CASE "UPCE" ; hZebra := hb_zebra_create_upce( cCode, nFlags ) ; EXIT CASE "CODE39" ; hZebra := hb_zebra_create_code39( cCode, nFlags ) ; EXIT CASE "ITF" ; hZebra := hb_zebra_create_itf( cCode, nFlags ) ; EXIT CASE "MSI" ; hZebra := hb_zebra_create_msi( cCode, nFlags ) ; EXIT CASE "CODABAR" ; hZebra := hb_zebra_create_codabar( cCode, nFlags ) ; EXIT CASE "CODE93" ; hZebra := hb_zebra_create_code93( cCode, nFlags ) ; EXIT CASE "CODE11" ; hZebra := hb_zebra_create_code11( cCode, nFlags ) ; EXIT CASE "CODE128" ; hZebra := hb_zebra_create_code128( cCode, nFlags ) ; EXIT CASE "PDF417" ; hZebra := hb_zebra_create_pdf417( cCode, nFlags ); nLineHeight := nLineWidth * 3 ; EXIT CASE "DATAMATRIX" ; hZebra := hb_zebra_create_datamatrix( cCode, nFlags ); nLineHeight := nLineWidth ; EXIT ENDSWITCH IF hZebra != NIL IF hb_zebra_geterror( hZebra ) == 0 IF EMPTY( nLineHeight ) nLineHeight := 16 ENDIF HPDF_Page_BeginText( page ) HPDF_Page_TextOut( page, 40, nY - 13, cType ) HPDF_Page_TextOut( page, 150, nY - 13, hb_zebra_getcode( hZebra ) ) HPDF_Page_EndText( page ) hb_zebra_draw_hpdf( hZebra, page, 300, nY, nLineWidth, -nLineHeight ) ELSE ? "Type", cType, "Code", cCode, "Error", hb_zebra_geterror( hZebra ) ENDIF hb_zebra_destroy( hZebra ) ELSE ? "Invalid barcode type", cType ENDIF RETURN STATIC FUNCTION hb_zebra_draw_hpdf( hZebra, page, ... ) IF hb_zebra_GetError( hZebra ) != 0 RETURN HB_ZEBRA_ERROR_INVALIDZEBRA ENDIF hb_zebra_draw( hZebra, {| x, y, w, h | HPDF_Page_Rectangle( page, x, y, w, h ) }, ... ) HPDF_Page_Fill( page ) RETURN 0 [/pre] и для него HBP # # $Id: hbvpdf.hbp 16868 2011-06-07 22:29:10Z vszakats $ # #-hblib -inc -lhbHpdf.lib -llibhpdf.lib -lhbzebra #-gtwvt #-gtwvg -lhwgdebug -lhbwin -lpng #-b -oportalpdf.exe #-w3 -es2 -instfile=inc:hbvpdf.ch portalpdf.prg #testhpdf.prg

and3081: Внимательно смотрим вопрос :) Будет ли он работать с ШТРИХКОДОВЫМИ шрифтами . А зебра их рисует сама, если я правильно понял. Зачем лишняя либа, если обычно работает, например (условно) setfont("EanGnivc",...) textout('1234567890') - и сразу получаем результат. Вот я и спросил, поддерживает ли hbhpdf такой способ. По идее обязан. Но вдруг нет ?

and3081: to nick_mi за пример спасибо, будем курить

nick_mi: Может и обязан, не проверял, но такого встроеного шрифта в PDF точно нет. Придется его подгружать из внешнего файла. И что будет лучше - тягать этот файл шрифта с программой по всем весям, или подлинковать библиотеку в EXE - дело каждого

Dima: Как мне так проще штрих код рисовать линиями той или иной толщины , алгоритмы есть на форуме и не один , это проще чем тягать с собой шрифт. Так и делаю.

and3081: to nick_mi Согласен. Пример заработал. Пока глубоко не копал, сразу вопрос по позиционированию при выводе текста. 1.позиционирование только в пикселях ? 2.размер формата А4 и А3 в пикселях строго фиксированный (как в комментах), т.е.не зависит от каких-нибудь разрешений и качества ? 3.встроенных функций указателя для вывода текста нет ? Т.е. для цикличного вывода строк, типа ведомости нужно самому написать функционал ? Буду вникать, наверное опять придется себе обзорчик по функциям писать. Никто не делал ?



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