На старом принтере печатает, на новом не хочет.

Простейшие вопросы в области инженерной разработки
Ответить
PAG
junior
junior
Сообщения: 58
Зарегистрирован: 27 ноя 2020, 15:51
Версия LabVIEW: 19
Благодарил (а): 10 раз
Поблагодарили: 3 раза
Контактная информация:

На старом принтере печатает, на новом не хочет.

Сообщение PAG »

Всем привет!
Имею на LV2021 х64 тестовую программу проверки комплектности сложного изделия на производстве, которая печатает лист с картинкой мест несоответствий на проверяемом изделии. Картинка отрисовывается на окне через компонент Image, образ которого сливается в монохромный bmp-файл. Использовать NI_Report для печати отказался: так и не поборол его ошибку вывода на указываемый принтер. Предлагаемые здесь на форуме решения оказались нестабильными. Поэтому пришлось написать маленькую DLL-х64 на CPP и сделать вывод на печать стандартными методами через Windows GDI.
У меня два таких стенда. На одном работает старенький принтер от HP, которому не меньше 10 лет. Все работает штатно, как задумано.
На втором старенький принтер дал дуба, пришлось закупить новый HP LaserJet M211. Проверил его у себя на компе - все штатно печатает.
Когда его отправили и установили на заводе, оказалось, что он нормально печатает пробную страницу, а при печати из LV в буфере печати принтера почему-то пусто, хотя файл картинки создается!
Притащили старенький принтер со второго стенда: печатает штатно. Подключаем новый принтер - облом.
В системном журнале Windows никаких ошибок не появляется.
Что может быть причиной такого поведения?
На всякий случай прицепляю файл исходника DLL печати (выжимка). Он на полторы странички всего.
Там все по классике.
Вложения
Exctracted.cpp
(4.56 КБ) 14 скачиваний
Аватара пользователя
dadreamer

Activity Professionalism Автор
professor
professor
Сообщения: 3939
Зарегистрирован: 17 фев 2013, 16:33
Награды: 4
Версия LabVIEW: 2.5 — 2022
Благодарил (а): 12 раз
Поблагодарили: 133 раза
Контактная информация:

Re: На старом принтере печатает, на новом не хочет.

Сообщение dadreamer »

PAG писал(а): 10 июн 2024, 09:17Что может быть причиной такого поведения?
Много чего может быть: драйвер, прошивка, DLL. Первые две остаётся только обновлять, обычно эти вещи не open source. Библиотеку можно отладить. В смежной теме я писал следующее:
dadreamer писал(а): 30 ноя 2023, 11:12- закомментил dm->dmDriverExtra = 0; (не всем принтерам нравится, когда dmDriverExtra заигнорен; например, Adobe PDF выдавал ошибку при StartDoc).
- прописал изменённые поля в dm->dmFields (не все поля структуры учитывались при печати).
Можно ещё по желанию прописать dmScale, dmPaperSize и dmOrientation.
Попробуйте внести эти изменения. Я ориентировался также на примеры в сети. Вы пробовали :vi: из того же сообщения? Я там учёл эти нюансы. Я вообще уже много лет не выношу код в отдельные DLL'ки. WinAPI несложно вызвать с диаграммы, настройка CLFN - это не rocket science. Зато становится проще отладка (можно поставить пробники в любом месте) и проще изменить что-то, без необходимости перекомпилирования в сторонней среде.
PAG
junior
junior
Сообщения: 58
Зарегистрирован: 27 ноя 2020, 15:51
Версия LabVIEW: 19
Благодарил (а): 10 раз
Поблагодарили: 3 раза
Контактная информация:

Re: На старом принтере печатает, на новом не хочет.

Сообщение PAG »

Спасибо! Очень ценный опыт.
Буду пробовать.
Ответить
  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Для чайников»