Здравствуйте, Дамир!
Могу дать Вам рекомендации на базе своего опыта работы:
1. Если Вы пытаетесь пакетно распечатать все рамки из пространства листа, то у Вас нет иного выхода кроме как перенести все Ваши рамки в пространство листа, с помощью команды LAYOUTMERGE.
1.1. Сразу предупрежу, что в пространстве листа появятся три новых объекта: Видовой экран, Полилиния и Текст. Их нужно будет обнаружить и "убить" с помощью команды VBA Object.Delete()
1.2. Затем пропарсив все Ваши объекты в пространстве листа Вы сможете определить:
- габаритные размеры каждой из рамок и сравнить с текущими форматами принтера "DWG To PDF.pc3" (в VBA есть такая команда GetBoundingBox - она возвращает Вам размеры Ваших рамок, вернее координаты начала рамки и ее конца)
- Заранее предупреждаю, что если в Ваши рамки будут блоками, а внутри блоков будут невидимые объекты, то такой блок несомненно будет иметь размеры с вместе взятыми невидимыми объектами.
- Таким образом рекомендую создавать новый объект - копию блока, но предварительно взорванного (с помощью команды Object.Explode). Когда Вы его пропарсите - переберете все объекты и узнаете у них размеры (GetBoundingBox вам в помощь), тогда Вы сможете уже менять или создавать новые конфигурации принтера "DWG To PDF.pc3"!
1.3. Теперь копируйте Ваш лист столько раз, сколько рамок Вы обнаружите внутри листа.
- В каждом листе настраиваете под каждую рамку настройки принтера.
То есть допустим у Вас чертеж с тремя рамками А2 Горизонтально, А3 Вертикально и А4 Горизонтально в пространстве модели. Переносите объекты в лист. Определяйте рамки. Копируйте два раза лист и для каждого листа настройте принтер: для 1-го листа под А2 Горизонтально, для 2-го листа под А3 Вертикально, для 3-го под А4 Горизонтально. А теперь спокойно пакетно печатайте эти листы.
Рекомендация по настройке принтера:
With acDocComObj.Layouts.Item(i)
.ConfigName = "DWG To PDF.pc3"
.CanonicalMediaName = glCanonicalMediaName ' Имеет вид "UserDefineMetric (Длина х Ширина ММ)"
.PaperUnits = 1 ' Единицы измерения ММ
.PlotHidden = False ' Печать не скрытая
.PlotOrigin = {0, 0} ' Точка начала рамки
.PlotRotation = 0 ' Поворот рамки
LowerLeft = {xMin, yMin} ' Точка начала рамки
UpperRight = {xMax, yMax} ' Точка конца рамки
.SetWindowToPlot(LowerLeft, UpperRight) ' Установить рамку
.UseStandardScale = True ' Масштаб стандартный
.SetCustomScale(1, 1) ' Масштаб 1:1
.PlotType = 4 ' Тип печати РАМКОЙ, параметры которой Вы уже выше описали.
.CenterPlot = True ' Центрировать = ДА!
.PlotViewportBorders = True
.PlotViewportsFirst = True
.PlotWithLineweights = True
.PlotWithPlotStyles = True
.StyleSheet = IIf(glColored = True, "acad.ctb", "monochrome.ctb") ' Цветная или черно-белая печать!
End With
1.4. Печать с помощью публикации. Команда _-publish. Она потребует некий файл DSD ))) DSD файл - инструкция для пакетной печати! Из чего она состоит можете посмотреть через вкладку ВЫВОД (OUTPUT) -> Пакетная печать (BATCH PLOT ) -> Сохранить DSD файл (Save Sheet List)! Только предварительно сохраните чертеж!
Когда Вы поковыряетесь в DSD файле, Вы сможете его без труда сгенерировать перед самой пакетной печатью. Мало того, что распечатается на УРА! ТАК это еще может получиться в фоновом режиме )))
Мне лично нужно было нужно, чтобы никаких окно не высвечивалось при печати и вообще, чтобы AutoCAD не было видно! У меня получилось.
2. Если рамки оформлены в листах, тогда определяем их размеры (GetBoundingBox) настраиваем печать и снова печатаем с помощью _-PUBLISH, предварительно сгенерировав DSD файл.
Я уже так делал, потому знаю о чем говорю.