Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / PowerBuilder Новый топик    Ответить
 проблема с печатью bmp  [new]
John1234
Member

Откуда:
Сообщений: 9
Добрый день

PB 11.1 build 8542

нужно напечатать много этикеток с картинками
использую очевидный вариант

long Job,i

printsetup()
Job = PrintOpen( )

for i=1 to 12000
printbitmap(Job, "c:\test.bmp", 2000,2000,0,0)
next
printclose(Job)

и обнаруживаю, что печатает только около 10000.
Печатал в PDFCreator

Программа TaskInfo показала, что каждый printbitmap занимает один GDI Object
и их счетчик у моей программы больше 10000 не поднимался

сам test.bmp черно-белый 1.7 Кб

Можно ли с этим бороться и как?
19 авг 08, 11:24    [6082212]     Ответить | Цитировать Сообщить модератору
 Re: проблема с печатью bmp  [new]
andy753
Member

Откуда: Moscow
Сообщений: 368
Я бы попробовал тогда сделать в цикле, блоками, например, по тысяче. По идее должно сработать.
19 авг 08, 11:26    [6082224]     Ответить | Цитировать Сообщить модератору
 Re: проблема с печатью bmp  [new]
John1234
Member

Откуда:
Сообщений: 9
К сожалению нет

printclose эти объекты не освобождает, равно как и выбор другого принтера в printsetup

два блока от printsetup до printclose по 6000 штук показали в первом 6000,
во втором продолжение до 9999 и так ждет кнопки "выход"
19 авг 08, 11:37    [6082307]     Ответить | Цитировать Сообщить модератору
 Re: проблема с печатью bmp  [new]
Локшин Марк
Member

Откуда: Воронеж
Сообщений: 3154
А если попробовать через DataWindow печатать?
19 авг 08, 11:55    [6082447]     Ответить | Цитировать Сообщить модератору
 Re: проблема с печатью bmp  [new]
John1234
Member

Откуда:
Сообщений: 9
я пробовал через window - picture - print, но там, насколько я понимаю, врожденный порок - картинка на момент печати должна быть видна, то есть в другое приложение не ходи, окна не двигай, мышью не езди.
для промышленного приложения это не годится.

не говоря уже о том, что эта картинка на экране совсем не нужна

где-то на форуме мелькало ваше предложение делать через datastore - не хватает грамотности - не подскажете место в документации, где посмотреть
19 авг 08, 12:05    [6082530]     Ответить | Цитировать Сообщить модератору
 Re: проблема с печатью bmp  [new]
Локшин Марк
Member

Откуда: Воронеж
Сообщений: 3154
John1234
я пробовал через window - picture - print, но там, насколько я понимаю, врожденный порок - картинка на момент печати должна быть видна, то есть в другое приложение не ходи, окна не двигай, мышью не езди.
для промышленного приложения это не годится.

не говоря уже о том, что эта картинка на экране совсем не нужна

где-то на форуме мелькало ваше предложение делать через datastore - не хватает грамотности - не подскажете место в документации, где посмотреть

Посмотрите насчет функции bitmap(...) для DataWindow/DataStore.
19 авг 08, 12:10    [6082575]     Ответить | Цитировать Сообщить модератору
 Re: проблема с печатью bmp  [new]
John1234
Member

Откуда:
Сообщений: 9
спасибо, посмотрю
19 авг 08, 12:11    [6082588]     Ответить | Цитировать Сообщить модератору
 Re: проблема с печатью bmp  [new]
John1234
Member

Откуда:
Сообщений: 9
Поигрался с datastore:

long Job,i
datastore xxx

xxx = create datastore
xxx.dataobject="test3" // в этом DW есть две картинки: picture p_1 и computed field computed_1

xxx.print(true,true) // печать DW целиком проходит успешно, обе картинки напечатались

// имя и начинка обеих картинок доступны
messagebox(xxx.object.compute_1.name,string(xxx.object.compute_1.expression))
messagebox(xxx.object.p_1.name,string(xxx.object.p_1.filename))

printsetup()
Job = PrintOpen( )

// но попытка печати приводит к ошибке
xxx.object.compute_1.print(Job, 1000,1000,1000,1000)

printclose(Job)

я явно допускаю элементарную ошибку, но не пойму где
19 авг 08, 13:22    [6083166]     Ответить | Цитировать Сообщить модератору
 Re: проблема с печатью bmp  [new]
Локшин Марк
Member

Откуда: Воронеж
Сообщений: 3154
John1234
// но попытка печати приводит к ошибке
xxx.object.compute_1.print(Job, 1000,1000,1000,1000)

printclose(Job)

я явно допускаю элементарную ошибку, но не пойму где

Потому, что compute object не имеет метода print и вообще никаих методов не имеет. Печатать нужно само DataWindow как Вы делали выше.
19 авг 08, 13:27    [6083204]     Ответить | Цитировать Сообщить модератору
 Re: проблема с печатью bmp  [new]
John1234
Member

Откуда:
Сообщений: 9
но мне-то нужно картинку напечатать в нужное место и нужного размера
19 авг 08, 13:29    [6083225]     Ответить | Цитировать Сообщить модератору
 Re: проблема с печатью bmp  [new]
Локшин Марк
Member

Откуда: Воронеж
Сообщений: 3154
John1234
но мне-то нужно картинку напечатать в нужное место и нужного размера

Разместите этот объект (с картинкой) в Detail части DataWindow и выставляйте Detail Height для каждой строки позиции (SetDetailHeight(...)) и выражений на x и y позицию объекта. тогда будет на нужное иесто и нужного размера (выражения на width и height).
19 авг 08, 13:47    [6083376]     Ответить | Цитировать Сообщить модератору
 Re: проблема с печатью bmp  [new]
John1234
Member

Откуда:
Сообщений: 9
то есть, формировать буфер страницы в datawindow, а потом целиком скидывать на принтер

в принципе возможно. но ,учитывая конкретную ситуацию, я в качестве временной меры вставлю счетчик Printbmp, а искать буду в сторону высвобождения GDI или в сторону устойчивой печати элемента window

спасибо
19 авг 08, 13:57    [6083458]     Ответить | Цитировать Сообщить модератору
 Re: проблема с печатью bmp  [new]
Локшин Марк
Member

Откуда: Воронеж
Сообщений: 3154
John1234
но ,учитывая конкретную ситуацию, я в качестве временной меры вставлю счетчик Printbmp, а искать буду в сторону высвобождения GDI

Но ведь ресурсы похоже не освобождает какой-то код внутри PB, как Вы на это повлиять сможете?
19 авг 08, 14:10    [6083574]     Ответить | Цитировать Сообщить модератору
 Re: проблема с печатью bmp  [new]
Локшин Марк
Member

Откуда: Воронеж
Сообщений: 3154
Только если попробовать сменить build/написать bug report.
19 авг 08, 14:11    [6083583]     Ответить | Цитировать Сообщить модератору
 Re: проблема с печатью bmp  [new]
John1234
Member

Откуда:
Сообщений: 9
конечно

просто у меня выдача не только на windows-принтеры, но и на специальные (zebra, datamax), поэтому логика "сформировал этикетку - сразу напечатал" для меня более удобна.

идеальный вариант - объединить невидимость datastore с возможностью поэлементной печати в window, но это я от малограмотности :)
19 авг 08, 14:22    [6083693]     Ответить | Цитировать Сообщить модератору
 Re: проблема с печатью bmp  [new]
Anatoly Moskovsky
Member

Откуда: Odessa
Сообщений: 6610
John1234
просто у меня выдача не только на windows-принтеры, но и на специальные (zebra, datamax), поэтому логика "сформировал этикетку - сразу напечатал" для меня более удобна.

Печатайте не прямо из PB, а например из DLL на C в которой полностью контролируйте весь процесс с созданием и освобождением ресурсов.
19 авг 08, 19:09    [6085560]     Ответить | Цитировать Сообщить модератору
 Re: проблема с печатью bmp  [new]
John1234
Member

Откуда:
Сообщений: 9
Таким образом, резюмирую

Проблема: Printbmp в рамках одного запуска .exe занимает и не отдает GDI Object, что ограничивает объем выдачи в 10000 картинок

Ожидавшиеся (хотя бы формально) или описанные выше пути решения:
1. указать команду или режим, которая освобождает этот ресурс - увы :(
2. написать bug report - попробую
3. частично перейти на другой язык/инструмент (DLL на C) - возможно, но не хочется
4. перестроить идеологию печати, формировать буфер страницы в datastore и потом его печатать - возможно, но идеологию трогать не хочется
5. попробовать найти надежно работающий вариант с печатью элемента окна - надо еще поискать, хотя надежды мало
6. вставить счетчик обращений к printbmp - самый простецкий вариант, которого вполне хватит в 90% случаев (цена вопроса 20 строк кода)
7. оформить печать в виде отдельного .exe и запускать его по мере надобности. по минимуму оформить как "одна накладная - один запуск", по максимуму "одна накладная - сколько надо запусков". Конечно, появятся вопросы передачи параметров, но зато проблема будет решена в общем. Причем функция частичной печати длинной накладной есть и сейчас, так что кардинальной перестройки не потребуется. цена вопроса 200 строк кода.

Так что я быстренько вставлю счетчик, а дальше буду думать
20 авг 08, 12:21    [6087593]     Ответить | Цитировать Сообщить модератору
 Re: проблема с печатью bmp  [new]
ChV
Member

Откуда: Москва
Сообщений: 271
Возможно мой ответ "не в кассу", но я вообще-то подобные проблемы очень удобно решал в Word-е, используя режим слияния.
Очень понравилось. Но... к PB это отношения не имеет.
Картинка с другого сайта.
Good Luck !
25 авг 08, 10:55    [6104147]     Ответить | Цитировать Сообщить модератору
Все форумы / PowerBuilder Ответить