Автор | Сообщение |
|
| |
Пост N: 56
Зарегистрирован: 05.11.05
|
|
Отправлено: 26.06.09 07:58. Заголовок: опять с печатью проблема
В xHarbour 0.99.61 все работало нормально. После перехода на 1.0.0 все стало распечатываться крякозябрами. Теперь надо где-то кодировку указывать?
|
|
|
Ответов - 40
, стр:
1
2
All
[только новые]
|
|
|
| |
Пост N: 1268
Зарегистрирован: 17.05.05
|
|
Отправлено: 26.06.09 08:02. Заголовок: rvu Хоть бы кусок к..
rvu Хоть бы кусок кода показал , что бы ясно было :)
|
|
|
|
| |
Пост N: 58
Зарегистрирован: 05.11.05
|
|
Отправлено: 26.06.09 08:27. Заголовок: Файл в кодировке DOS..
Файл в кодировке DOS разбиваю на строчки и вывожу: oPrinter:TextOut(stroka) как-то так (выкинул все лишнее), принцип печати, думаю, понятен: #define FORM_A4 9 #define PS_SOLID 0 #define RGB( nR,nG,nB ) ( nR + ( nG * 256 ) + ( nB * 256 * 256 ) ) #define BLACK RGB( 0x0 ,0x0 ,0x0 ) cPrinter=GetDefaultPrinter() oPrinter:= Win32Prn():New(cPrinter) PRIVATE aFonts, x, nColFixed, nColTTF, nColCharSet oPrinter:Landscape:=.T. oPrinter:FormType := FORM_A4 oPrinter:Copies := 1 IF !oPrinter:Create() Alert("Cannot Create Printer") ELSE IF !oPrinter:startDoc('Win32Prn(Doc name in Printer Properties)') Alert("StartDoc() failed") ELSE oPrinter:SetPen(PS_SOLID, 1, BLACK) oPrinter:SetFont('Lucida Console',8,{3,-50}) oPrinter:NewPage() oPrinter:NewLine() oPrinter:SetPos(oPrinter:posX(),oPrinter:posY()) oPrinter:TextOut(stroka) oPrinter:EndDoc() ENDIF oPrinter:Destroy() ENDIF
|
|
|
|
| |
Пост N: 43
Зарегистрирован: 19.12.06
|
|
Отправлено: 26.06.09 09:30. Заголовок: не хватает oPrint..
не хватает oPrinter:Charset(255) после :SetFont
|
|
|
|
| |
Пост N: 59
Зарегистрирован: 05.11.05
|
|
Отправлено: 26.06.09 09:45. Заголовок: Заработало! Спасибо!..
Заработало! Спасибо!
|
|
|
|
| |
Пост N: 1333
Зарегистрирован: 17.05.05
|
|
Отправлено: 18.12.09 14:42. Заголовок: rvu Проще использов..
rvu Проще использовать h**p://www.abeelabs.com/pagescript32/index.php Их есть у меня
|
|
|
|
| |
Пост N: 24
Зарегистрирован: 03.01.10
|
|
Отправлено: 03.09.10 12:41. Заголовок: рулон?
Есть проблема. Матричный принтер подключен через USB-порт. Надо печатать на рулоне. Проблема 1) приходится использовать графическую печать класс WIN_PRT. Иначе не работает 2) при печати oPrinter:TextOut() oPrinter:NewLine() делает прогон листа при печати на рулоне даже если не давать oPrinter:NewPage() - а то и вовсе не все напечатает. Можно не обращать на это внимание , но заказчик экономит бумагу. Вопрос Можно ли вообще печатать графической печатью на матричном принтере через порт USB на "простыне" и без прогонов, как это делалkось в клиппере при обычной печати? Может кто сталкивался. Заранее благодарен.
|
|
|
|
| |
Пост N: 276
Зарегистрирован: 12.11.06
|
|
Отправлено: 20.03.13 16:43. Заголовок: Подскажите пожалуйст..
Подскажите пожалуйста... извините, что поднял столь древнюю тему! Всё сделал, как описано выше с классом win32prn, но на принтере HP LJ P2055 печатает нормально, как ожидалось, но на остальных лазерниках (перепробывал Samsung, Brother, HP LJ 10xx) печатает как бы пропуская одну строку (вставляет между строка печать пустой строки)... Перепробовал кучу методов и свойств - всегда одно и тоже?
|
|
|
|
| |
Пост N: 2819
Зарегистрирован: 17.05.05
|
|
Отправлено: 20.03.13 18:08. Заголовок: AndreyZh Если мне н..
AndreyZh Если мне не изменяет память , то такой глюк у кого то уже был и было даже решение. Поиск надо юзать (я бегло юзанул и не нашел) , хорошо хоть он работает.
|
|
|
|
| |
Пост N: 277
Зарегистрирован: 12.11.06
|
|
Отправлено: 20.03.13 18:17. Заголовок: Спасибо... но перед ..
Спасибо... но перед экспериментами с классом печати просмотрел все темы, где бы упоминались win32prn или основные методы класса, выбирая их поиском. Нашел способ масштабровать, как по вертикали, так и по горизонтали в проге; ставил разную ширину страниц в установках принтера и etc... то бишь перепробовал довольно много перед обращением к спецам в хХарборе. Может быть будут советы, хотя бы "где копать"?
|
|
|
|
| |
Пост N: 2820
Зарегистрирован: 17.05.05
|
|
Отправлено: 20.03.13 18:23. Заголовок: Андрей покажи не бол..
Андрей покажи не большой но самодостаточный пример (как говорит твой тезка ) Я могу проверить у себя на железном принтере Samsung и на куче разных виртуальных принтеров.
|
|
|
|
| |
Пост N: 278
Зарегистрирован: 12.11.06
|
|
Отправлено: 20.03.13 20:44. Заголовок: Dima пишет: Андрей ..
Dima пишет: цитата: | Андрей покажи не большой но самодостаточный пример (как говорит твой тезка ) Я могу проверить у себя на железном принтере Samsung и на куче разных виртуальных принтеров. |
| Как всегда у меня, что-то часть чего-то, но вроде бы функашку сделал независимой от мои прочих приблуд... Печать файла - достаточно только его имени (прошу прощения за комментарии - это для себя, т.к. изучаю тему): //*** На время включаю директивы препроцессора - затем отключаю #define FORM_A4 9 #define PS_SOLID 0 #define RGB( nR,nG,nB ) ( nR + ( nG * 256 ) + ( nB * 256 * 256 ) ) #define BLACK RGB( 0x0 ,0x0 ,0x0 ) #define TRUE .T. #define FALSE .F. #define CRLF (CHR(13)+CHR(10)) // Конец строки. * --------------------------------------------------------------------------- * Вывод текстового файла на принтер в соответствии с параметрами и при * этом проверяется статус принтера при отражении каждой строки и в начале. * 1304 При печати использую класс печати xHarbour... Проверка на существо- * вание файла и принтера уже поизведена. PROC pPrHarbClass( cFile, nBeg, nEnd, nQty, nLen, nW ) LOCA nPage:=0 // Текущая страница LOCA nH:=0 // handle LOCA nQ:=0 // копии LOCA cBuff:="" // буфер чтения LOCA cStr:="" // буфер печати LOCA nSize:=4096 // размер буфера чтения LOCA cCur:="" // текущая строка LOCA oPrint // Объект - принтер LOCA nI:=0, nJ:=0, lStr:=TRUE, cPrinter:="" // Определяю принтер, используемый по умолчанию в системе cPrinter := GetDefaultPrinter() //*** Проверки на возможность использования классов // Определяем имя объекта класса для принтера, установленного по умолчанию в системе oPrinter := Win32Prn():New( cPrinter ) // Создаем экземпляр класса и проверка успешности создания... после надо уничтожить его IF !oPrinter:Create() // Не создан экземпляр класса * ErrMess("Не создан виртуальный принтер! М/б их нет?",cError) RETU ENDI // В случае успешного создания определяю свойства класса. oPrinter:Landscape := .F. // портретная ориентация oPrinter:FormType := FORM_A4 // А4 oPrinter:Copies := 1 // число копий.. ХЗ - не работает // Обязательно-проверка успешности постановки в очередь с именем IF !oPrinter:startDoc("Printering USLand") * ErrMess("StartDoc не смог поставить в очередь печати. Смотрите свойства принтеров, например автономность - обрващайтесь к сист.админу!",cError) // Уничтожаем раннее созданный экземпляр объекта (класса). oPrinter:Destroy() RETU ENDI // Определяем перо для рисования линий (толщина шрифта) - форма линий (сплошная, тонкая, черная) oPrinter:SetPen(PS_SOLID, 1, BLACK) // Установка шрифта, в зависимости от сжатия текста. В массиве определяется толщина шрифта и высота... подбор эксперимент /* Массив {x,-Y} x-сжатие по горизонтали, чем меньше, тем сжатие (3-уже, чем 6) -Y так же сжатие, но может быть толщины линии */ DO CASE CASE (nLen = 80) .AND. (nW = 6) // Обычный, без сжатия по высоте OK oPrinter:SetFont("Courier New",10,{4,-41}) oPrinter:lineHeight := 164 // Чем меньше, тем плотнее сжатие ? Это определяет плотность по вертикали CASE (nLen = 80) .AND. (nW = 8) // Обычный - сжатие по высоте oPrinter:SetFont("Courier New",10,{4,-41}) oPrinter:lineHeight := 150 // Чем меньше, тем плотнее сжатие ? Это определяет плотность по вертикали CASE (nLen = 132).AND. (nW = 8) // Сжатый и сжатие по высоте oPrinter:SetFont("Lucida Console",8,{3,-50}) // oPrinter:SetFont('Courier New', 8,{3,-50}) oPrinter:lineHeight := 150 // ? Это определяет плотность по вертикали OTHE // Стандартный и сжатый OK oPrinter:SetFont("Lucida Console", 8,{3,-50}) oPrinter:lineHeight := 164 // ? Это определяет плотность по вертикали ENDC // ОБЯЗАТЕЛЬНО - кодировка OEM... иначе козебяки oPrinter:Charset(255) // Пробую по моему алгоритму, т.к. нужно выделять страницы FOR nQ := 1 TO nQty nH := Fopen( cFile, 0 ) // Открываем файл для чтения Fseek( nH, 0/*смещение*/, 0/*начало*/ ) // встаём на начало nPage := 1 // Начальная страница-счетчик. /* Делаем пока не доберемся до конца файла - считаем в буфер 0 байт Выводим на принтер текущую копию, анализируя попытки прервать печать документа */ WHIL Len( cBuff:=FreadStr(nH,nSize) ) <> 0 cStr += cBuff // Пополняемо-обрезаемая строка накопления // Выделяем строки и страницы из строки накопления WHIL TRUE // Не можем выделить полную подстроку из накапливаемой строки - выход. IF (nI:=At(CRLF,cStr)) == 0 THEN EXIT // Выделяем логически целую для печати строку. Пробел в начале для выделения пустых строк cCur := Subs( Token(" "+cStr,CRLF,1), 2 ) // Признак (nJ > 0) конца страницы в строке nJ := At( Chr(12), cCur ) // Признак окончания страницы, переводим текущий счетчик IF nJ <> 0 lStr := FALSE ENDI // Отрезаем от строки накопления всё после crlf cStr := Subs( cStr, nI+2 ) // Печатаем, если текущая страница попадает в интервал страниц IF nPage >= nBeg .AND. nPage <= nEnd oPrinter:NewLine() // перевод на следующую строку oPrinter:TextOut(cCur) // выводим текстовую строку IF !lStr .AND. (nPage < nEnd) // Делаем прогон страницы oPrinter:NewPage() ENDI ENDI // Увеличиваю счетчик страниц, если случилась смена страницы печати nPage += IF( lStr, 0, 1 ) lStr := TRUE // Обнуление признака конца страницы END END Fclose( nH ) // Закрываю текстовый файл NEXT nQ // Закрываю печать документа oPrinter:endDoc() // Уничтожаю объект принтера oPrinter:Destroy() RETU #undef FORM_A4 #undef PS_SOLID #undef RGB #undef BLACK #undef TRUE #undef FALSE #undef CRLF
|
|
|
|
|
| |
Пост N: 279
Зарегистрирован: 12.11.06
|
|
Отправлено: 20.03.13 20:47. Заголовок: cFile - имя файла nB..
cFile - имя файла nBeg - начальная страница nEnd - конечная страница nQty - количество экземпляров nLen - 132 или 80 nW - 6 или 8 ---- без разницы, но какие-то значения д.б. заданы... при вызове раннее определяются умолчания.
|
|
|
|
| |
Пост N: 2825
Зарегистрирован: 17.05.05
|
|
Отправлено: 20.03.13 21:35. Заголовок: AndreyZh я как бы и..
AndreyZh я как бы и не ожидал от Вас маленького и самодостаточного примера на 5-10 строк , все как обычно ;) когда у меня в коде что то начинает работать не так как ожидалось , делаю простые примерчики и тестю, обычно виноват не (X)harbour а я но всякое бывает конечно. сделайте простой пример: вывод на печать пары(тройки) строк , лишняя строка при этом будет иметь место или нет ?
|
|
|
|
| |
Пост N: 280
Зарегистрирован: 12.11.06
|
|
Отправлено: 21.03.13 13:23. Заголовок: Dima пишет: ...обыч..
Dima пишет: цитата: | ...обычно виноват не (X)harbour а я но всякое бывает конечно. сделайте простой пример: вывод на печать пары(тройки) строк , лишняя строка при этом будет иметь место или нет... |
| Спасибо за участие... только сейчас добрался до ПК, но те же коки... Правда, как ещё упросить пример НЕ ЗНАЮ!!! ПОМОГИТЕ люди добрые? #define FORM_A4 9 #define PS_SOLID 0 #define RGB( nR,nG,nB ) ( nR + ( nG * 256 ) + ( nB * 256 * 256 ) ) #define BLACK RGB( 0x0 ,0x0 ,0x0 ) * --------------------------------------------------------------------------- * Головной модуль программы PROC Main() LOCA oPrint, nI:=0 LOCA cPrinter:="" // Определяю принтер, используемый по умолчанию в системе cPrinter := GetDefaultPrinter() // Определяем имя объекта класса для принтера, установленного по умолчанию в системе oPrinter := Win32Prn():New( cPrinter ) oPrinter:Create() oPrinter:Landscape := .F. // портретная ориентация oPrinter:FormType := FORM_A4 // А4 oPrinter:Copies := 1 // число копий.. ХЗ - не работает oPrinter:startDoc("Printering USLand") // Определяем перо для рисования линий (толщина шрифта) - форма линий (сплошная, тонкая, черная) oPrinter:SetPen(PS_SOLID, 1, BLACK) // Шрифты и сжатие. oPrinter:SetFont("Lucida Console", 8,{3,-53}) oPrinter:lineHeight := 164 oPrinter:Charset(255) FOR nI := 1 TO 20 oPrinter:NewLine() oPrinter:TextOut("Установка шрифта, в зависимости от сжатия текста. В массиве определяется толщина шрифта и высота... подбор эксперимент") oPrinter:NewLine() oPrinter:TextOut("--------------------------------------------------------------------------------------------------------------------------") oPrinter:NewLine() oPrinter:TextOut("--------------------------------------------------------------------------------------------------------------------------") NEXT nI oPrinter:endDoc() // Закрываю печать документа oPrinter:Destroy() // Уничтожаю объект принтера RETU
|
|
|
|
| |
Пост N: 2835
Зарегистрирован: 17.05.05
|
|
Отправлено: 21.03.13 13:34. Заголовок: AndreyZh То что над..
AndreyZh То что надо. Пустил тест на виртуальный принтер PdfFactory , все нормально. Копию документа выложить ? Правда oPrinter:Charset(255) не сработал и вылезли крякозяблы. Собирал с GTWIN Собирал так c:\hb32\bin\hbmk2 test -lxhb -lhbwin
|
|
|
|
| |
Пост N: 2838
Зарегистрирован: 17.05.05
|
|
Отправлено: 21.03.13 13:49. Заголовок: AndreyZh пишет: oPr..
AndreyZh пишет: цитата: | oPrinter:Copies := 1 // число копий.. ХЗ - не работает |
| Действительно не пашет....... Ни до oPrinter:Create() ни после oPrinter:Create() Цитата из исходника // These next 6 variables must be set before calling ::Create() if // you wish to alter the defaults VAR FormType INIT 0 VAR BinNumber INIT 0 VAR Landscape INIT .F. VAR Copies INIT 1 VAR PaperLength INIT 0 // Value is * 1/10 of mm 1000 = 10cm VAR PaperWidth INIT 0 // " " " " " "
|
|
|
|
| |
Пост N: 281
Зарегистрирован: 12.11.06
|
|
Отправлено: 21.03.13 13:51. Заголовок: Сделал на doPdf - пе..
Сделал на doPdf - печать через строчку, на HPLJ P2055 нормально, на Brother через строчку... Как можно на форуме приложить скан?
|
|
|
|
| |
Пост N: 2839
Зарегистрирован: 17.05.05
|
|
Отправлено: 21.03.13 13:57. Заголовок: AndreyZh В форме от..
AndreyZh В форме ответа вверху есть кнопочки. Вот там где чел нарисован туда и нажми (картинка с компьютера) Или на обменник сложи
|
|
|
|
| |
Пост N: 785
Зарегистрирован: 11.06.10
|
|
Отправлено: 21.03.13 13:59. Заголовок: Dima пишет: Правда ..
Dima пишет: цитата: | Правда oPrinter:Charset(255) не сработал и вылезли крякозяблы. |
| добавьте REQUEST HB_CODEPAGE_UA1251 hb_cdpselect("UA1251")
|
|
|
|
| |
Пост N: 2840
Зарегистрирован: 17.05.05
|
|
Отправлено: 21.03.13 14:02. Заголовок: AlexMyr Точно ;) А ..
AlexMyr Точно ;) А что с кол-вом копий ? Ведь реально не работает.
|
|
|
Ответов - 40
, стр:
1
2
All
[только новые]
|
|