В принципе ничего сложного. Код сам приводить не буду, только опишу смысл.
Заранее в DWGtoPDF.pc3 (это в AutoCad2007 конвертирование в pdf сделано)
пробиваю использующиеся у нас форматы NxM и сохраняю каждый с именем типа pdf_NxM
(например, pdf_420x594, pdf_841x1189 и т.д.)
Хотелось бы конечно их программно создавать, но не нашла как.....
1.У пользователя запрашиваю выбор каталога с dwg-файлами, после чего поочередно начинают открываться и закрываться чертежи
2.В каждом из них у пользователя запрашиваю выбор рамкой области печати (больше ничего от него не требуется, остальные настройки печати всегда одни и теже, поэтому просто сразу прописаны в коде при использовании команды _Plot)
3.По координатам рамки вычисляю длину и ширину области печати, определяю альбомная или книжная ориентация (смотря какая сторона больше)
4.Потом вытаскиваю список форматов и пошел разбор строк по сути.Ищется подходящий формат. Если нет такого формата, то ищется подходящий, куда вписывается.
5.Ну и все это с помощью _plot Отправляется на печать в pdf
Надо сказать что расчитано на наши особенности, а именно что проектировщики чертят у нас в модели и оформляют там же, причем сразу в масштабе.
Но думаю можно немного додумать и сделать пакетную печать листов, которые уже оформлены должным образом в самом чертеже.
ПРимер, показывающий как достать форматы вы привели.
Я использовала те функциии + использовала GetLocaleMediaName для получения адекватного имени формата (т.е. того, что человек задает при создании)
Пример поочередного открытия и закрытия чертежей см.http://www.cad.dp.ua/stats/a_vba/acservice.php#OpenAndProcessAllDrawings
там вообще много полезных примеров
Вот собственно так оно и выглядит. Пользователь не тратит время на открытие и закрытие чертежей, только рамочкой выделяет области печати... убыстряет работу намного.
Также как второй вариант в меню предлагается такой способ:
1. Пользователь выбирает католог с чертежами
2. и все..... ждет результата.
В этом случае не спрашивается рамка
point1 = ThisDrawing.Utility.GetPoint(, vbCr & "Выберите рамкой печатаемую область:")
point2 = ThisDrawing.Utility.GetCorner(point1)
а используется информация о границах
point1 = ThisDrawing.GetVariable("extmin")
point2 = ThisDrawing.GetVariable("extmax")