On-line: Haz, гостей 0. Всего: 1 [подробнее..]
АвторСообщение





Пост N: 56
Зарегистрирован: 05.11.05
ссылка на сообщение  Отправлено: 26.06.09 07:58. Заголовок: опять с печатью проблема


В xHarbour 0.99.61 все работало нормально. После перехода на 1.0.0 все стало распечатываться крякозябрами. Теперь надо где-то кодировку указывать?

Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 40 , стр: 1 2 All [только новые]


администратор




Пост N: 1268
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 26.06.09 08:02. Заголовок: rvu Хоть бы кусок к..


rvu
Хоть бы кусок кода показал , что бы ясно было :)

Спасибо: 0 
ПрофильЦитата Ответить





Пост 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

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 43
Зарегистрирован: 19.12.06
ссылка на сообщение  Отправлено: 26.06.09 09:30. Заголовок: не хватает oPrint..


не хватает oPrinter:Charset(255) после :SetFont



Спасибо: 0 
ПрофильЦитата Ответить





Пост N: 59
Зарегистрирован: 05.11.05
ссылка на сообщение  Отправлено: 26.06.09 09:45. Заголовок: Заработало! Спасибо!..


Заработало! Спасибо!

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 1333
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 18.12.09 14:42. Заголовок: rvu Проще использов..


rvu
Проще использовать h**p://www.abeelabs.com/pagescript32/index.php
Их есть у меня

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 24
Зарегистрирован: 03.01.10
ссылка на сообщение  Отправлено: 03.09.10 12:41. Заголовок: рулон?


Есть проблема. Матричный принтер подключен через USB-порт. Надо печатать на рулоне.
Проблема
1) приходится использовать графическую печать класс WIN_PRT. Иначе не работает
2) при печати oPrinter:TextOut() oPrinter:NewLine() делает прогон листа при печати на рулоне даже если не давать
oPrinter:NewPage() - а то и вовсе не все напечатает.
Можно не обращать на это внимание , но заказчик экономит бумагу.
Вопрос
Можно ли вообще печатать графической печатью на матричном принтере через порт USB на "простыне" и
без прогонов, как это делалkось в клиппере при обычной печати? Может кто сталкивался.
Заранее благодарен.






Спасибо: 0 
ПрофильЦитата Ответить





Пост N: 276
Зарегистрирован: 12.11.06
ссылка на сообщение  Отправлено: 20.03.13 16:43. Заголовок: Подскажите пожалуйст..


Подскажите пожалуйста... извините, что поднял столь древнюю тему!

Всё сделал, как описано выше с классом win32prn, но на принтере HP LJ P2055 печатает нормально, как ожидалось, но на остальных лазерниках (перепробывал Samsung, Brother, HP LJ 10xx) печатает как бы пропуская одну строку (вставляет между строка печать пустой строки)... Перепробовал кучу методов и свойств - всегда одно и тоже?

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 2819
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 20.03.13 18:08. Заголовок: AndreyZh Если мне н..


AndreyZh
Если мне не изменяет память , то такой глюк у кого то уже был и было даже решение.
Поиск надо юзать (я бегло юзанул и не нашел) , хорошо хоть он работает.

Спасибо: 0 
ПрофильЦитата Ответить





Пост N: 277
Зарегистрирован: 12.11.06
ссылка на сообщение  Отправлено: 20.03.13 18:17. Заголовок: Спасибо... но перед ..


Спасибо... но перед экспериментами с классом печати просмотрел все темы, где бы упоминались win32prn или основные методы класса, выбирая их поиском. Нашел способ масштабровать, как по вертикали, так и по горизонтали в проге; ставил разную ширину страниц в установках принтера и etc... то бишь перепробовал довольно много перед обращением к спецам в хХарборе.

Может быть будут советы, хотя бы "где копать"?

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 2820
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 20.03.13 18:23. Заголовок: Андрей покажи не бол..


Андрей покажи не большой но самодостаточный пример (как говорит твой тезка )
Я могу проверить у себя на железном принтере Samsung и на куче разных виртуальных принтеров.

Спасибо: 0 
ПрофильЦитата Ответить





Пост 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




Спасибо: 0 
ПрофильЦитата Ответить





Пост N: 279
Зарегистрирован: 12.11.06
ссылка на сообщение  Отправлено: 20.03.13 20:47. Заголовок: cFile - имя файла nB..


cFile - имя файла
nBeg - начальная страница
nEnd - конечная страница
nQty - количество экземпляров
nLen - 132 или 80
nW - 6 или 8

----
без разницы, но какие-то значения д.б. заданы... при вызове раннее определяются умолчания.

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 2825
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 20.03.13 21:35. Заголовок: AndreyZh я как бы и..


AndreyZh
я как бы и не ожидал от Вас маленького и самодостаточного примера на 5-10 строк , все как обычно ;)
когда у меня в коде что то начинает работать не так как ожидалось , делаю простые примерчики и тестю,
обычно виноват не (X)harbour а я но всякое бывает конечно.
сделайте простой пример: вывод на печать пары(тройки) строк , лишняя строка при этом будет
иметь место или нет ?

Спасибо: 0 
ПрофильЦитата Ответить





Пост 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



Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 2835
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 21.03.13 13:34. Заголовок: AndreyZh То что над..


AndreyZh
То что надо.
Пустил тест на виртуальный принтер PdfFactory , все нормально.
Копию документа выложить ?

Правда oPrinter:Charset(255) не сработал и вылезли крякозяблы. Собирал с GTWIN

Собирал так
c:\hb32\bin\hbmk2 test -lxhb -lhbwin

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост 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 // " " " " " "



Спасибо: 0 
ПрофильЦитата Ответить





Пост N: 281
Зарегистрирован: 12.11.06
ссылка на сообщение  Отправлено: 21.03.13 13:51. Заголовок: Сделал на doPdf - пе..


Сделал на doPdf - печать через строчку, на HPLJ P2055 нормально, на Brother через строчку... Как можно на форуме приложить скан?

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 2839
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 21.03.13 13:57. Заголовок: AndreyZh В форме от..


AndreyZh
В форме ответа вверху есть кнопочки. Вот там где чел нарисован туда и нажми (картинка с компьютера)
Или на обменник сложи

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 785
Зарегистрирован: 11.06.10
ссылка на сообщение  Отправлено: 21.03.13 13:59. Заголовок: Dima пишет: Правда ..


Dima пишет:

 цитата:
Правда oPrinter:Charset(255) не сработал и вылезли крякозяблы.


добавьте
REQUEST HB_CODEPAGE_UA1251
hb_cdpselect("UA1251")

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 2840
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 21.03.13 14:02. Заголовок: AlexMyr Точно ;) А ..


AlexMyr
Точно ;)
А что с кол-вом копий ? Ведь реально не работает.

Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 40 , стр: 1 2 All [только новые]
Ответ:
1 2 3 4 5 6 7 8 9
большой шрифт малый шрифт надстрочный подстрочный заголовок большой заголовок видео с youtube.com картинка из интернета картинка с компьютера ссылка файл с компьютера русская клавиатура транслитератор  цитата  кавычки моноширинный шрифт моноширинный шрифт горизонтальная линия отступ точка LI бегущая строка оффтопик свернутый текст

показывать это сообщение только модераторам
не делать ссылки активными
Имя, пароль:      зарегистрироваться    
Тему читают:
- участник сейчас на форуме
- участник вне форума
Все даты в формате GMT  3 час. Хитов сегодня: 184
Права: смайлы да, картинки да, шрифты да, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет