Как сменить установленное имя принтера на "Нет" ?
| Правила | Регистрация | Пользователи | Сообщения за день |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Как сменить установленное имя принтера на "Нет" ?

Как сменить установленное имя принтера на "Нет" ?

Ответ
Поиск в этой теме
Непрочитано 23.06.2016, 10:03 #1
Как сменить установленное имя принтера на "Нет" ?
===AAA===
 
г. Норильск
Регистрация: 15.08.2005
Сообщений: 616

Всем добрый день!

Имеется такая задача: нужно программно (!!!) сделать действие,
которое легко выполняется через диалоговые окна, а именно:

а. Вызываем _pagesetup и в конфигурации плоттеров выбираем "Нет".
б. Нажимаем ОК.

Это нужно для того, чтобы можно было выбрать форматы листов бумаги
не от "использованного до этого принтера", например А3, А4 и прочую
"мелочевку", а А0 - А1 - А2 после передачи файла в другой отдел.

Запутано? Проще можно? Возможно, но тут такие вот орг. заморочки...

В общем - ещё раз:

1. Запускаем _plot , видим выбранный ранее принтер LaserJet.
Огорчаемся, закрываем окно.
2. Вызываем _pagesetup и в конфигурации плоттеров выбираем "Нет".
Нажимаем ОК.
3. Запускаем _plot , видим выбранный принтер "Нет"
Радуемся, выбираем тот принтер/плоттер, который нужно, переходим
к печати.

Пункты 1 и 3 делает один человек, а пункт 2 - другой.

Нужно сделать пункт 2 без диалоговых окон.

а) Может быть, эту "Нет" можно загнать в какую-нибудь системную переменную?

б) Вызов _-pagesetup (т.е. с "минусом") в данном случае не работает.

Счастливо,
Алексей
__________________
Счастливо, Алексей!
Просмотров: 4587
 
Непрочитано 23.06.2016, 11:10
#2
baksconstructor


 
Регистрация: 05.11.2014
Сообщений: 944


Может использовать программу которая перед печатью будет устанавливать нужный принтер ? Не ?
baksconstructor вне форума  
 
Автор темы   Непрочитано 23.06.2016, 11:48
#3
===AAA===


 
Регистрация: 15.08.2005
г. Норильск
Сообщений: 616


Наверное, самое главное я и не сформулировал. :-)))

Конечно, нужно использовать программу.

На LISP'е. Возможно - с использованием функций ВижуалЛисп.

Более того - программа "подготовки файла" есть и она делает
много всего нужного и специфического (сам писал). И работала
она много лет верой и правдой, облегчая людям жизнь.

Но поменялось одно из условий и я не знаю, как его реализовать.

Нужно буквально 2-3 строчки программного кода (какие функции
использовать, где это значение "Нет" в файле хранится-то?) остальное
сделаю сам.
__________________
Счастливо, Алексей!
===AAA=== вне форума  
 
Непрочитано 23.06.2016, 11:58
#4
baksconstructor


 
Регистрация: 05.11.2014
Сообщений: 944


Цитата:
Сообщение от ===AAA=== Посмотреть сообщение
Нужно буквально 2-3 строчки программного кода (какие функции использовать, где это значение "Нет" в файле хранится-то?) остальное сделаю сам.
Лечение по фотографии ? Выкладывайте код, люди и подскажут.
Цитата:
Сообщение от ===AAA=== Посмотреть сообщение
Конечно, нужно использовать программу.
Взгляните сюда, возможно найдёте в исходниках что Вам надо Пакетная печать множества рамок (форматов) из пространства модели.
baksconstructor вне форума  
 
Автор темы   Непрочитано 23.06.2016, 12:42
#5
===AAA===


 
Регистрация: 15.08.2005
г. Норильск
Сообщений: 616


Ну, при чем здесь лечение по фотографии?

Я бы и выложил код, если бы он был... А здесь что?

(command "_-pagesetup") - не работает, что делать?

Ну, давайте так вопрос сформулируем...

В принципе, как бы нет проблемы для реализации любой задачи
при условии, если известен набор принтеров на компьютере
получателя файла. Но он (в общем случае) неизвестен.

Поэтому нужно, чтобы получатель файла, нажав кнопку "Печать"
[команда _plot в чистом виде] увидел (своими глазами увидел !!!)
слово "Нет" в списке, где выбираются плоттеры/принтеры.

Ну вот такая своеобразная задача.

"Загнать" в это поле имеющийся на компьютере "отправилеля"
принтер - не вопрос. Хоть через диалоговое окно, хоть программно.

Но как загнать туда _программно_ значение "Нет" ?
__________________
Счастливо, Алексей!
===AAA=== вне форума  
 
Непрочитано 23.06.2016, 12:51
#6
baksconstructor


 
Регистрация: 05.11.2014
Сообщений: 944


Цитата:
Сообщение от ===AAA=== Посмотреть сообщение
(command "_-pagesetup") - не работает, что делать?
Пустое устройство не может использоваться для печати.
Только программным путём.
Другой путь знаю, но пока не скажу.
baksconstructor вне форума  
 
Непрочитано 23.06.2016, 12:56
#7
Нечаев Андрей

Начальник конструкторского отдела ОАО ТСМУ «Волгостальмонтаж»
 
Регистрация: 12.12.2007
Тамбов
Сообщений: 74
<phrase 1= Отправить сообщение для Нечаев Андрей с помощью Skype™


А чем здесь команда _etransmit (она же в меню AutoCAD - Публикация - Сформировать комплект) не подходит? Там для этих целей в параметрах есть «галка» «Без принтера по умолчанию»!
Нечаев Андрей вне форума  
 
Автор темы   Непрочитано 23.06.2016, 13:29
#8
===AAA===


 
Регистрация: 15.08.2005
г. Норильск
Сообщений: 616


Это всё оргвопросы некоей организации... Правила игры можно
устанавливать разные - здесь установили такие вот.

а) Не нужно делать "комплект" для передачи файла
б) Отправляющему пользователю не нужно печатать файл
в) Отправляющему пользователю нужно "настроить" передаваемый файл
г) В этих настройках (среди прочего) нужно установить имя принтера в "Нет"
и (- усложним задачу -) выбрать размер бумаги по своему чертежу А0 - А1 - А2

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

Почему сперва про одно говорил, а сейчас про два?
Просто хотел решить вопрос "шаг за шагом".
__________________
Счастливо, Алексей!
===AAA=== вне форума  
 
Непрочитано 23.06.2016, 13:42
#9
baksconstructor


 
Регистрация: 05.11.2014
Сообщений: 944


Цитата:
Сообщение от ===AAA=== Посмотреть сообщение
Почему сперва про одно говорил, а сейчас про два?
Просто хотел решить вопрос "шаг за шагом".
Следующий шаг будет - чтобы рамкой для печати был заранее выбран нужный формат ?
baksconstructor вне форума  
 
Автор темы   Непрочитано 23.06.2016, 14:01
#10
===AAA===


 
Регистрация: 15.08.2005
г. Норильск
Сообщений: 616


Ребята - здесь все такие ехидные?

Нет, это всё давно было реализовано. Но раз уж вопрос задан,
то сообщу, что от этого тоже придется отказаться, т.к. новые
правила запрещают пользователю "предустанавливать область
печати" рамкой - печатать можно будет только "Лист".

А жаль - там всё так красиво и тонко настраивалось... Но это-то
как раз не сложно переделать.
__________________
Счастливо, Алексей!
===AAA=== вне форума  
 
Непрочитано 23.06.2016, 14:11
#11
baksconstructor


 
Регистрация: 05.11.2014
Сообщений: 944


Цитата:
Сообщение от ===AAA=== Посмотреть сообщение
Ребята - здесь все такие ехидные?
Вам пытаются помочь, но Вы не предоставляете что у Вас есть, задание расширяется/меняется, естественно приходится из Вас доставать всю нужную информацию.
Цитата:
Сообщение от ===AAA=== Посмотреть сообщение
Но раз уж вопрос задан,
На принтскрине то, как я сделал что требуется.

По остальным вопросам ждите гуру Лиспа или VBA (кстати это тоже не указали).
Миниатюры
Нажмите на изображение для увеличения
Название: Принтер НЕТ.png
Просмотров: 38
Размер:	106.7 Кб
ID:	172510  
baksconstructor вне форума  
 
Непрочитано 23.06.2016, 14:14
#12
Нечаев Андрей

Начальник конструкторского отдела ОАО ТСМУ «Волгостальмонтаж»
 
Регистрация: 12.12.2007
Тамбов
Сообщений: 74
<phrase 1= Отправить сообщение для Нечаев Андрей с помощью Skype™


Я и не писал «передавать комплект» (а по-хорошему именно так и надо делать, когда передаёшь DWG-файлы... Но ни одна известная мне сво... не делает...), я писал, что можно быстро этой командой поубирать принтеры с листов. В комплекте будет файл с принтером «Нет» везде, заменяете им исходный.

Цитата:
Сообщение от ===AAA=== Посмотреть сообщение
и (- усложним задачу -) выбрать размер бумаги по своему чертежу А0 - А1 - А2
А что, это при разработке чертежа не делается?
Нечаев Андрей вне форума  
 
Автор темы   Непрочитано 23.06.2016, 14:48
#13
===AAA===


 
Регистрация: 15.08.2005
г. Норильск
Сообщений: 616


>А что, это при разработке чертежа не делается?

Делается, конечно...

Возьмем для примера чертеж А1.

Чертеж в процессе подготовки многократно печатается в уменьшенном
виде на локальный принтер и следы этой деятельности как раз и
запоминаются в файле. Ну, типа "LaserJet на А3". Затем файл передается
в "отдел выпуска", где стоят плоттеры. Оператор его открывает и должен
увидеть определенные настройки. Корректнее всего ситуация будет, если
принтер там будет стоять, как "Нет", а в размерах бумаги - стандартный
для Автокада корректый формат (типа "ISO A1 ..........").

Особого смысла в этом нет, т.к. оператор тут же выберет драйвер
своего плоттера и размер бумаги - опять же из списка размеров
плоттера (типа "А1 но уже такой, как он называется у плоттера").

Если всё, как я описал - чертеж вычерчивается.

Иначе чертеж объявляется "неготовым" и не вычерчивается.
Хотя оператору нужно всего-навсего произвести ровно эти
же самые действия.

Как-то так.

Для пользователя же алгоритм работы программы должен быть
"однокнопочный" -> нажать кнопку "подготовить файл к выпуску".

Всё остальное программа сделает сама. И делала до недавнего
времени.
__________________
Счастливо, Алексей!
===AAA=== вне форума  
 
Непрочитано 23.06.2016, 14:58
#14
Нечаев Андрей

Начальник конструкторского отдела ОАО ТСМУ «Волгостальмонтаж»
 
Регистрация: 12.12.2007
Тамбов
Сообщений: 74
<phrase 1= Отправить сообщение для Нечаев Андрей с помощью Skype™


А
Цитата:
Сообщение от ===AAA=== Посмотреть сообщение
следы этой деятельности
строго необходимо запоминать???
Почему нельзя один раз настроить лист на его реальный формат и плоттер, а если нужно на А3 напечатать менять настройки в окне печати? Это же не трудно сделать..
Нечаев Андрей вне форума  
 
Автор темы   Непрочитано 23.06.2016, 15:12
#15
===AAA===


 
Регистрация: 15.08.2005
г. Норильск
Сообщений: 616


Так они сами запоминаются...

Как выведешь на печать промежуточную - так и запомнятся.
То струйник цветной, то лазерник ч/б. Ну и выбранный для
них размер бумаги тоже.

Последний "удачный вывод" запоминается.

Операторы это видят и отказываются печатать. Криво, говорят,
лист у вас настроен...
__________________
Счастливо, Алексей!
===AAA=== вне форума  
 
Непрочитано 23.06.2016, 16:15
#16
Нечаев Андрей

Начальник конструкторского отдела ОАО ТСМУ «Волгостальмонтаж»
 
Регистрация: 12.12.2007
Тамбов
Сообщений: 74
<phrase 1= Отправить сообщение для Нечаев Андрей с помощью Skype™


Недопонял! Это как это
Цитата:
Сообщение от ===AAA=== Посмотреть сообщение
сами запоминаются...
Настройки сохраняются только в двух случаях:
1. При нажатии кнопки «Применить к листу», но это не сами, а Вы настройки листа своей рукой переписываете... Просто не делайте этого.
2. Настройки последней печати помнятся в текущем сеансе работы для пункта «Предыдущая печать» в списке выбора набора параметров... Это в файле не сохраняется - и к операторам соответственно не попадёт.

Кстати, если у вас там операторы такие ленивые, им же всё равно при убранном с настроек листа принтере нужно будет выбрать плоттер на котором печатать... Они не перетрудятся случаем?

Последний раз редактировалось Нечаев Андрей, 23.06.2016 в 16:21.
Нечаев Андрей вне форума  
 
Непрочитано 23.06.2016, 16:28
#17
mot32


 
Регистрация: 01.11.2012
Сообщений: 66


Передавать файлы dwg друг другу - не всегда добъёшься то что хочешь т.к.- у всех свои настройки ....
Не совсем понял... Скажу - одно - делайте все в pdf .. Тогда , если это все - разные исполнители - запросто можно собрать
все в один файл...
mot32 вне форума  
 
Непрочитано 23.06.2016, 16:34
#18
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,406


===AAA===, ты капитально ошибся с разделом, поздравляю.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 23.06.2016, 16:35
#19
===AAA===


 
Регистрация: 15.08.2005
г. Норильск
Сообщений: 616


Операторы не виноваты - для них такую инструкцию написали.
И строго-настрого повелели повиноваться ей до запятой.
Они и сами этой ситуацией недовольны.

Да сохраняются они, заразы... Сам ходил к операторам смотреть,
в каком виде у них файлы переданные открываются.

----- добавлено через ~4 мин. -----
Ошибся с разделом? Ну, может быть, давно я на этом форуме не был...
А разве програмирование на LISP не здесь обсуждают?
__________________
Счастливо, Алексей!
===AAA=== вне форума  
 
Непрочитано 23.06.2016, 16:48
#20
maratovich


 
Регистрация: 12.07.2009
г. Самара
Сообщений: 2,437
Отправить сообщение для maratovich с помощью Skype™


Цитата:
Сообщение от ===AAA=== Посмотреть сообщение
А разве програмирование на LISP не здесь обсуждают?
Обсуждают, если есть что обсудить...
Может Вам попробовать в разделе Поиск исполнителей полностью ТЗ поставить ?
maratovich вне форума  
 
Непрочитано 23.06.2016, 16:59
#21
Нечаев Андрей

Начальник конструкторского отдела ОАО ТСМУ «Волгостальмонтаж»
 
Регистрация: 12.12.2007
Тамбов
Сообщений: 74
<phrase 1= Отправить сообщение для Нечаев Андрей с помощью Skype™


А разговор идет о чистом AutoCAD? Или нет?

----- добавлено через ~17 мин. -----
Я что-то сразу не вспомнил (сейчас чертёж печатал и осенило), что в окне печати в разделе «Параметры печати» (правый столбец) есть «галка» «Сохранить параметры». Она у Вас случайно не поставлена?
Нечаев Андрей вне форума  
 
Непрочитано 23.06.2016, 18:34
#22
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,996


Цитата:
Сообщение от ===AAA=== Посмотреть сообщение
Нужно буквально 2-3 строчки программного кода (какие функции
использовать, где это значение "Нет" в файле хранится-то?) остальное
сделаю сам.
Сбрасывает принтер текущего листа. Применимо для русского и английского Автокада
Нюанс, что в русском Автокаде имя конфигурации "нет", в английском "none"
Код:
[Выделить все]
(vla-RefreshPlotDeviceInfo
	(setq lay
		(vla-item
			(vla-get-Layouts
				(vla-get-activedocument (vlax-get-acad-object))
			)
			(getvar "CTAB")
		)
	)
)
(vla-put-configname
  (vla-item
    (vla-get-Layouts
      (vla-get-activedocument (vlax-get-acad-object))
      )
      (getvar "CTAB")
      )
  (if (vl-string-search "(ru)" (ver))   "нет"  "none" )
)
Источник
Неплохой набор функций Plot Device functions for AutoLISP
__________________
Как использовать код на Лиспе читаем здесь

Последний раз редактировалось VVA, 24.06.2016 в 17:14. Причина: см #25
VVA вне форума  
 
Непрочитано 24.06.2016, 08:59
#23
P_S


 
Регистрация: 09.10.2006
Санкт-Петербург
Сообщений: 99


Из Help: "Do not assign the ConfigName property a value of "None." Attempting to do so results in unexpected behavior."
P_S вне форума  
 
Автор темы   Непрочитано 24.06.2016, 13:34
#24
===AAA===


 
Регистрация: 15.08.2005
г. Норильск
Сообщений: 616


Всем привет!

VVA - большое спасибо, а то я уже действительно начал сомневаться,
что задаю вопрос в правильном месте. Однако, как уже отметил P_S,
метод этот дает нестабильный результат.

Проявляется (по крайней мере у меня) это следующим образом (для наглядности
чуть изменил предложенный код на вот такой вот):

(vl-load-com)
(setq a1 (vlax-get-acad-object))
(print a1)
(setq a2 (vla-get-activedocument a1))
(print a2)
(setq a3 (vla-get-Layouts a2))
(print a3)
(setq a4 (vla-item a3 (getvar "CTAB")))
(print a4)
(setq a5 (vla-put-configname a4 "Нет"))
(print a5)
(princ)

Что получается.

1. Открываем файл в Автокаде выполняем вышеприведенный код

Получаем:

#<VLA-OBJECT IAcadApplication 00a88728>
#<VLA-OBJECT IAcadDocument 00f27cec>
#<VLA-OBJECT IAcadLayouts 00f72964>
#<VLA-OBJECT IAcadLayout 00f713a4> Ошибка Automation. Invalid input

Вместо "Нет" можно ставить имя существующего принтера - не важно.
Не работает.

Но!

2. Стоит только вызвать _pagesetup и не делая в появившемся окне ничего (!)
закрыть его через кнопку "ОК", как всё начинает работать.

Тот же код дает прекрасный результат

#<VLA-OBJECT IAcadApplication 00a88728>
#<VLA-OBJECT IAcadDocument 00f27cec>
#<VLA-OBJECT IAcadLayouts 00f72964>
#<VLA-OBJECT IAcadLayout 00f713a4>
nil

Спокойно меняя принтеры как на любой из списка, так и на "Нет".

Видимо, действие _pagesetup -> "ОК" то ли меняет какой-то указатель
на/в таблице принтеров, то ли дает какой-то другой "внутренний пинок"
структурам файла в памяти. Ну типа того, как в ранних версиях Автокада
приходилось иногда для корректности работы ssget, вызываемой где-то
посреди программы, рисовать и тут же стирать (программно, конечно)
ма-а-а-ленький такой отрезок где-нибудь ближе к точке (0,0).

Вот интересно, какой (vla .... ) дает этит "пинок" ?!
__________________
Счастливо, Алексей!
===AAA=== вне форума  
 
Непрочитано 24.06.2016, 15:15
#25
frostmourn


 
Регистрация: 23.04.2015
Сообщений: 163


Может, так? Хотя у меня не получилось эту ошибку вызвать...
Код:
[Выделить все]
(vla-RefreshPlotDeviceInfo
	(setq lay
		(vla-item
			(vla-get-Layouts
				(vla-get-activedocument (vlax-get-acad-object))
			)
			(getvar "CTAB")
		)
	)
)
(vla-put-configname
	lay
	(if (vl-string-search "(ru)" (ver))   "нет"  "none" )
)
frostmourn вне форума  
 
Автор темы   Непрочитано 24.06.2016, 16:25
#26
===AAA===


 
Регистрация: 15.08.2005
г. Норильск
Сообщений: 616


Да, предложенный frostmourn код работает более стабильно,
пока никаких нештатых действий не проявилось.

И - уж для полного счастья (!) - подскажите, плиз:

а) как получить список доступных для выбора вариантов бумаги
(уже после того, как принтер установлен в "Нет" - встроенных,
"автокадовских") - удобнее всего получить их в виде списка.

б) как назначить один из этих размеров бумаги.

Выбор из списка и подбор бумаги по форматке пользователя
(размер и ориентацию) сделаю сам функциями обычного LISP'a.
__________________
Счастливо, Алексей!
===AAA=== вне форума  
 
Непрочитано 24.06.2016, 17:05
#27
frostmourn


 
Регистрация: 23.04.2015
Сообщений: 163


Наверное, так -
а)
Код:
[Выделить все]
(vlax-safearray->list(vlax-variant-value(vla-getCanonicalMediaNames lay)))
б)
Код:
[Выделить все]
(vla-put-CanonicalMediaName lay <тут строка-имя формата>)
(vla-regen (vla-get-activedocument (vlax-get-acad-object)) acAllViewports)
frostmourn вне форума  
 
Автор темы   Непрочитано 24.06.2016, 17:12
#28
===AAA===


 
Регистрация: 15.08.2005
г. Норильск
Сообщений: 616


Спасибо, обязательно попробую.
Но уже только в понедельник.

Удачных выходных!

:-)
__________________
Счастливо, Алексей!
===AAA=== вне форума  
 
Автор темы   Непрочитано 27.06.2016, 08:57
#29
===AAA===


 
Регистрация: 15.08.2005
г. Норильск
Сообщений: 616


Всем добрый день.

Попробовал.

Работает стабильно и делает ровно то, что требовалось.

Спасибо большое всем откликнувшимся и отдельное -
приславшим строчки кода.

А есть где-нибудь описание всех этих vla- vlax- функций
на русском языке?

А то я как в своё время отошел от активного программирования
(ещё во времена 2000-го Автокада), так только описание функций
"классического" АвтоЛиспа и имею...
__________________
Счастливо, Алексей!
===AAA=== вне форума  
 
Непрочитано 27.06.2016, 20:22
#30
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,996


цитата отсюда
Цитата:
Что касается программирования, то наилучшая книга - "AutoLisp и VisualLisp в среде AutoCAD" - П.Лоскутов и Н.Полещук. И Петр Витальевич, и Николай Николаевич чрезвычайно добросовестные люди. Если что-то написали, то так и есть. К сожалению, эта книга почему-то плохо замечена. Но скоро станет библиографической редкостью.

"AutoCAD: разработка приложений, настройка и адаптация" - не продолжение, а наоборот -"введение". Написана и хронологически и по смыслу раньше. Тоже очень нужна, но там иной пласт разрабатывается.
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Как сменить установленное имя принтера на "Нет" ?



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Autocad 2012 x64 sp2 как решить проблему не выбирающегося принтера? Z_Felix AutoCAD 5 17.03.2015 15:44
Вызвать окно «Замена принтера в PC3-файле» AlphaGeo AutoCAD 16 21.01.2014 14:46
В Autocad 2006 не отображаются сетевые принтера vova_king AutoCAD 8 19.04.2013 21:32
Как создать нестандартный формат листа для принтера с помощью Lisp'а Shraybicus LISP 15 27.01.2011 13:02