Вызов команд с помощью SendCommand из приложения VB 6.0

Автор Тема: Вызов команд с помощью SendCommand из приложения VB 6.0  (Прочитано 7072 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Сергей МанохинАвтор темы

  • ADN OPEN
  • Сообщений: 2
  • Карма: 0
Здравствуйте.

Пытаюсь выполнить экспорт активного листа в PDF из приложения, написанного на VB 6.0

Отправляю активному документу в автокаде команду:
document.SendCommand "(command ""-ЭКСПОРТ"" ""P"" ""Т"" ""Д"" ""ISO A4 (210.00 x 297.00 мм)"" ""М"" ""А"" ""В"" ""Д"" ""."" ""Д"" ""\""D:\\test.pdf\"""")" & Chr(13)
Получаю следующее:
Цитировать
Команда: (command "-ЭКСПОРТ" "P" "Т" "Д" "ISO A4 (210.00 x 297.00 мм)" "М" "А" "В" "Д" "." "Д" "\"D:\\test.pdf\"")
Введите имя файла <C:\Users\Admin\documents\DwgToPDF-Architectural Title Block.pdf>: "D:\test.pdf"
Команда: nil
В результате документ не создается. Хотя автокад ни на что не ругается.
Копирую туже самую команду и выполняю из среды автокада. В результате получаю следующее:
Цитировать
Команда: (command "-ЭКСПОРТ" "P" "Т" "Д" "ISO A4 (210.00 x 297.00 мм)" "М" "А" "В" "Д" "." "Д" "\"D:\\test.pdf\"")
Введите имя файла <C:\Users\Admin\documents\DwgToPDF-Architectural Title Block.pdf>: "D:\test.pdf"
Введите имя файла <C:\Users\Admin\documents\DwgToPDF-Architectural Title Block.pdf>:
Введите имя файла <C:\Users\Admin\documents\DwgToPDF-Architectural Title Block.pdf>:
Команда: nil
В результате документ создан.
Вызывал простенькую команду из приложения, она отработала без проблем:
document.SendCommand "(command ""_ZOOM"" ""В"")" & Chr(13)
Подразумеваю, что автокад блокирует некоторые команды, полученные от внешних приложений.
Отсюда вопрос: как автокаду разрешить выполнение всех команд от внешних приложений?

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Приветствую на форуме! Подозреваю:
1) Что имя файла нужно ввести без дополнительных двойных кавычек, заменив обратный слэш на прямой.
2) Вроде бы чего-то в командной строке не хватает. Для проверки перед посылкой команды печати пошли:
Код - Auto/Visual Lisp [Выбрать]
  1. (setvar "CMDECHO" 1)
3) Замени русские команды и опции на английские с подчеркиванием.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Сергей МанохинАвтор темы

  • ADN OPEN
  • Сообщений: 2
  • Карма: 0
1. С прямым слэшем не получается. Сделал без него, т.к. в данном случае пробелов в имени нет.
2. Получилось следующее:
Цитировать
Команда: (setvar "CMDECHO" 1)
1
Команда: (command "-ЭКСПОРТ" "P" "Т" "Д" "ISO A4 (210.00 x 297.00 мм)" "М" "А" "В" "Д" "." "Д" "D:\\test.pdf")
-ЭКСПОРТ Введите формат файла [Dwf/dwfX/Pdf] <Pdf>P Введите область печати [Текущий лист/Все листы]<Текущий лист>: Т Выполнить детальное задание конфигурации? [Да/Нет] <Нет>: Д Формат листа бумаги или [?] <ISO A4 (210.00 x 297.00 мм)>: ISO A4 (210.00 x 297.00 мм) Единицы измерения размеров листа [Дюймы/Миллиметры] <дюйм>: М Ориентация чертежа [Книжная/Альбомная] <Альбомная>: А Масштаб печати (Миллиметры чертежа=Единицы чертежа) или [Вписать] <Вписать>: В Учитывать стили печати? [Да/Нет] <Нет>: Д Имя таблицы стилей печати или [?] (. если нет) <>: . Учитывать веса линий? [Да/Нет] <Да>: Д
Введите имя файла <C:\Users\Admin\documents\DwgToPDF-Architectural Title Block.pdf>: D:\test.pdf
Команда: nil
Команда: (command "-ЭКСПОРТ" "P" "Т" "Д" "ISO A4 (210.00 x 297.00 мм)" "М" "А" "В" "Д" "." "Д" "D:\\test.pdf")
-ЭКСПОРТ Введите формат файла [Dwf/dwfX/Pdf] <Pdf>P Введите область печати [Текущий лист/Все листы]<Текущий лист>: Т Выполнить детальное задание конфигурации? [Да/Нет] <Нет>: Д Формат листа бумаги или [?] <ISO A4 (210.00 x 297.00 мм)>: ISO A4 (210.00 x 297.00 мм) Единицы измерения размеров листа [Дюймы/Миллиметры] <дюйм>: М Ориентация чертежа [Книжная/Альбомная] <Альбомная>: А Масштаб печати (Миллиметры чертежа=Единицы чертежа) или [Вписать] <Вписать>: В Учитывать стили печати? [Да/Нет] <Нет>: Д Имя таблицы стилей печати или [?] (. если нет) <>: . Учитывать веса линий? [Да/Нет] <Да>: Д
Введите имя файла <C:\Users\Admin\documents\DwgToPDF-Architectural Title Block.pdf>: D:\test.pdf
Введите имя файла <C:\Users\Admin\documents\DwgToPDF-Architectural Title Block.pdf>:
Введите имя файла <C:\Users\Admin\documents\DwgToPDF-Architectural Title Block.pdf>:
Команда: nil
Но результат тот же. Команда из внешней программы не отработала. При запуске из автокада все отработало правильно.
3. С удовольствием заменю на английские эквиваленты, когда найду их. Но пока это не критично, ведь копия комманды выполняется как надо (проверено на команде зуммирования, у меня передавалась русская буква "В").

4. Разница в коммандах на этапе ввода имени файла. При выполнении из автокада ни каких диалоговых окон не появляется (в таком режиме выполнения комманды). Я пытался продублировать во внешней программе имя файла, но автокад ругался на неизвестную команду на первом же дубле имени файла.

P.S. Все таки мне кажется дело в защите автокада от внешних программ. Например в Excel-е есть галочка "Доверять доступ к объектной модели проектов VBA", которая расширяет возможности внешних программ.

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
P.S. Все таки мне кажется дело в защите автокада от внешних программ.
Нет. В этом никакой защиты нет. Нужно искать другую причину. Что-то подобное наблюдалось здесь: http://adn-cis.org/forum/index.php?topic=878.0
Решение так найдено и небыло, но не проверен вариант с предварительной загрузкой файла AcPublish.arx (это делается через Application.LoadArx)
Ну и системную переменную backgroundplot нужно установить в 0 перед экспортом.
« Последнее редактирование: 19-12-2014, 01:45:10 от Александр Ривилис »
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Windcastle

  • ADN OPEN
  • **
  • Сообщений: 58
  • Карма: 0
Здравствуйте, Сергей Манохин!

Я Вам могу порекомендовать экспортировать чертежи в формат PDF c помощью DSD - файлов. И поверьте, Вам не придется писать, не всегда удобные, команды в командной строке. Врать не хочу, когда то я и сам такую же штуку писал ))) Для этого Вам сначала нужно понять из чего состоят DSD - файлы, а затем, когда Вы поймете, что они из себя представляют и как они применяются, то помяните мое слово: Вам захочется сказать "Эврика!" )))

DSD-файлы - это некая инструкция о последовательности печати с необходимыми настройками для каждого листа!!! Там же есть и еще куча очень интересных параметров! Особенно важный параметр - МЕСТО СОХРАНЕНИЯ PDF файла! И уйма дополнительных параметров.

1. Как узнать из чего DSD файлы состоят:
    - Сохраните чертеж, с оформленными одним-двумя листами. Оформленными, то есть параметры печати выставите на принтер DWG To PDF.pc3
    - Зайдите на вкладку ВЫВОД -> Пакетная печать -> Уберите из списка "Модель" -> Сохранить DSD файл!
    - Найдите его и выпотрошите его и изучите его досконально (он кстати небольшой обычно!)
2. Теперь, когда Вы его изучили можно его теперь самостоятельно генерировать!
3. Вместо "ЭКСПОРТ" используйте "ПУБЛИКАЦИЯ", а еще лучше его англоязычный аналог "_-publish"
4. Затем AutoCAD спросит у Вас путь к Вашему DSD-файлу. И то, что Вы увидите, Вам понравится! Гарантирую )))

5. Чтобы Вас не беспокоило диалоговое окно, его можно загасить предварительно командой "_FILEDIA" & vbCr & 0 & vbCr

Удачи!


P.S. Забыл сказать, что программно вызванная команда печати "ЭКПОРТ", "АВТОПУБЛИКАЦИЯ", "ПЕЧАТЬ" и т.д. НЕ РАБОТАЮТ из VB, а также VBA (даже если Вы напишете это в Visual Studio используя COM объект), причем даже если захотите использовать SetLayoutsToPlot - ничего не выйдет! AutoCAD сделает вид, что он что-то сделал, а на само деле никакого результата не увидите!!!!!!!! Это просто нужно ЗАПОМНИТЬ! Еще раз удачи!

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
P.S. Забыл сказать, что программно вызванная команда печати "ЭКПОРТ", "АВТОПУБЛИКАЦИЯ", "ПЕЧАТЬ" и т.д. НЕ РАБОТАЮТ из VB, а также VBA (даже если Вы напишете это в Visual Studio используя COM объект), причем даже если захотите использовать SetLayoutsToPlot - ничего не выйдет! AutoCAD сделает вид, что он что-то сделал, а на само деле никакого результата не увидите!!!!!!!! Это просто нужно ЗАПОМНИТЬ! Еще раз удачи!
1. Предварительно загрузить acPublish.arx и acPublish.crx при помощи Application.LoadArx
2. Отключить фоновую печать (системную переменную BACKGROUNDPLOT установить в 0)
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Пашин Евгений

  • ADN PRO
  • *
  • Сообщений: 662
  • Карма: 12
  • Skype: pashin.evgeniy
А этот acPublish.arx и acPublish.crx позволяют следующие вещи:

1. Один DWG перевести в несколько PDF (каждый лист в отдельный файл) ?
2. Один DWG перевести в один PDF (все листы в едином файле) ?
3. Много DWG перевести в один PDF (все листы из большого количества чертежей в одном файле) ?


Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение