Как узнать размеры всех форматов во всех принтерах?

Автор Тема: Как узнать размеры всех форматов во всех принтерах?  (Прочитано 9346 раз)

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

Тема содержит сообщение с Решением. Нажмите здесь чтобы посмотреть его.

Оффлайн Пашин ЕвгенийАвтор темы

  • ADN PRO
  • *
  • Сообщений: 662
  • Карма: 12
  • Skype: pashin.evgeniy
Добрый день, коллеги.

Есть такая задача - получить размеры всех форматов во всех принтерах текущего чертежа.

Подскажите как это можно сделать?

Пока определяю лишь принтеры и их форматы:
Код - vb.net [Выбрать]
  1.     Public Sub Get_All_Formats_Of_All_Printers()
  2.         ' Подключаемся к приложению
  3.         Dim AcApp As Autodesk.AutoCAD.ApplicationServices.DocumentCollection = Autodesk.AutoCAD.ApplicationServices.Core.Application.DocumentManager
  4.         ' Подключаемся к активному документу
  5.         Dim AcDoc As Autodesk.AutoCAD.ApplicationServices.Document = AcApp.MdiActiveDocument
  6.         ' Подключаемся к базе данных чертежа
  7.         Dim AcDB As Database = AcDoc.Database
  8.         ' Получаем из устройств службы печати список настроек печати
  9.         Dim Devices As Autodesk.AutoCAD.PlottingServices.PlotConfigInfoCollection = Autodesk.AutoCAD.PlottingServices.PlotConfigManager.Devices
  10.         ' Перебираем каждый элемент списка настроек печати
  11.         For Each PlotterInfo As PlotConfigInfo In Devices
  12.             Dim NewPrinter As New PashinEugene.galPrinter
  13.             With NewPrinter
  14.                 .PrinterName = PlotterInfo.DeviceName
  15.                 .PrinterType = PlotterInfo.DeviceType.ToString
  16.             End With
  17.             ' Записываю в базу данных текущий принтер
  18.             GDB.Printers.Add(NewPrinter)
  19.             ' Новый PlotSettings
  20.             Using plSet As PlotSettings = New PlotSettings(True)
  21.                 Dim acPlSetVdr As PlotSettingsValidator = PlotSettingsValidator.Current
  22.                 ' Устанавливаем плоттер и формат, НО я решил попробовать ничего в формат не добавлять!!! Только имя принтера!!!
  23.                 acPlSetVdr.SetPlotConfigurationName(plSet, PlotterInfo.DeviceName, Nothing)
  24.                 Dim cnt As Integer = 0
  25.                 For Each mediaName As String In acPlSetVdr.GetCanonicalMediaNameList(plSet)
  26.                     ' Вывод имён по каноническому имени mediaName
  27.                     Dim NewPrinterFormat As New PashinEugene.galPrinterFormat
  28.                     With NewPrinterFormat
  29.                         .PrinterID = NewPrinter.PrinterID
  30.                         .PrinterFormatCanonicalName = mediaName
  31.                         .PrinterFormatLocaleName = acPlSetVdr.GetLocaleMediaName(plSet, cnt)
  32.                     End With
  33.                     cnt = cnt + 1
  34.                     ' Записываю в базу данных формат текущего принтера
  35.                     GDB.PrinterFormats.Add(NewPrinterFormat)
  36.                 Next
  37.             End Using
  38.         Next
  39.     End Sub

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

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

Оффлайн Пашин ЕвгенийАвтор темы

  • ADN PRO
  • *
  • Сообщений: 662
  • Карма: 12
  • Skype: pashin.evgeniy
Что такое все принтеры текущего чертежа?


Надеюсь про все форматы принтеров нет нужды картинку высылать :)

Оффлайн Александр Пекшев aka Modis

  • ADN Club
  • *****
  • Сообщений: 1658
  • Карма: 366
  • Отец modplus.org
    • ModPlus
получить размеры всех форматов во всех принтерах текущего чертежа
Нет такого понятия как "принтер текущего чертежа" =)) Есть конфигурации плоттеров, которые относятся не к чертежу, а к автокаду в целом.
Вот посмотрите ссылку для начала

Оффлайн Александр Пекшев aka Modis

  • ADN Club
  • *****
  • Сообщений: 1658
  • Карма: 366
  • Отец modplus.org
    • ModPlus

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

  • Administrator
  • *****
  • Сообщений: 13830
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Пашин Евгений,
Александр правильно сказал по поводу того, что нет плоттеров чертежа. Собствено говоря у тебя в коде это и есть список плоттеров, которые AutoCAD может использовать: Autodesk.AutoCAD.PlottingServices.PlotConfigManager.Devices
Ну а тебе нужно будет еще проверить:
PlotSettings.PlotPaperSize
PlotSettings.PlotPaperMargins
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Пашин ЕвгенийАвтор темы

  • ADN PRO
  • *
  • Сообщений: 662
  • Карма: 12
  • Skype: pashin.evgeniy
Нет такого понятия как "принтер текущего чертежа" =)) Есть конфигурации плоттеров, которые относятся не к чертежу, а к автокаду в целом.
Александр правильно сказал по поводу того, что нет плоттеров чертежа.

Полностью согласен с этим. Название темы взял незамысловатое, простое, но если считаете, что его стоит поменять, то я не против.

Собствено говоря у тебя в коде это и есть список плоттеров, которые AutoCAD может использовать: Autodesk.AutoCAD.PlottingServices.PlotConfigManager.Devices
Ну а тебе нужно будет еще проверить:
PlotSettings.PlotPaperSize
PlotSettings.PlotPaperMargins

Я, как всегда, искал где угодно, но только не здесь :)

Однако меня смущает одна деталь:
Код - vb.net [Выбрать]
  1.     Public Sub Get_All_Formats_Of_All_Printers()
  2.         ' Подключаемся к приложению
  3.         Dim AcApp As Autodesk.AutoCAD.ApplicationServices.DocumentCollection = Autodesk.AutoCAD.ApplicationServices.Core.Application.DocumentManager
  4.         ' Подключаемся к активному документу
  5.         Dim AcDoc As Autodesk.AutoCAD.ApplicationServices.Document = AcApp.MdiActiveDocument
  6.         ' Подключаемся к базе данных чертежа
  7.         Dim AcDB As Database = AcDoc.Database
  8.         ' Получаем из устройств службы печати список настроек печати
  9.         Dim Devices As Autodesk.AutoCAD.PlottingServices.PlotConfigInfoCollection = Autodesk.AutoCAD.PlottingServices.PlotConfigManager.Devices
  10.         ' Перебираем каждый элемент списка настроек печати
  11.         For Each PlotterInfo As PlotConfigInfo In Devices
  12.             Dim NewPrinter As New PashinEugene.galPrinter
  13.             With NewPrinter
  14.                 .PrinterName = PlotterInfo.DeviceName
  15.                 .PrinterType = PlotterInfo.DeviceType.ToString
  16.             End With
  17.             ' Записываю в базу данных текущий принтер
  18.             GDB.Printers.Add(NewPrinter)
  19.             ' Новый PlotSettings
  20.             Using plSet As PlotSettings = New PlotSettings(True)
  21.                 Dim acPlSetVdr As PlotSettingsValidator = PlotSettingsValidator.Current
  22.  
  23.                 ' Устанавливаем плоттер и формат, НО я решил попробовать ничего в формат не добавлять!!! Только имя принтера!!!
  24.                 acPlSetVdr.SetPlotConfigurationName(plSet, PlotterInfo.DeviceName, Nothing)
  25.                 Dim cnt As Integer = 0
  26.                 For Each mediaName As String In acPlSetVdr.GetCanonicalMediaNameList(plSet)
  27.                     ' Вывод имён по каноническому имени mediaName
  28.                     Dim NewPrinterFormat As New PashinEugene.galPrinterFormat
  29.                     With NewPrinterFormat
  30.                         .PrinterID = NewPrinter.PrinterID
  31.                         .PrinterFormatCanonicalName = mediaName
  32.                         .PrinterFormatLocaleName = acPlSetVdr.GetLocaleMediaName(plSet, cnt)
  33.                         .PaperSizeWidht = plSet.PlotPaperSize.X
  34.                         .PaperSizeHeight = plSet.PlotPaperSize.Y
  35.                         .MarginLeft = plSet.PlotPaperMargins.MinPoint.X
  36.                         .MarginRight = plSet.PlotPaperMargins.MaxPoint.X
  37.                         .MarginTop = plSet.PlotPaperMargins.MaxPoint.Y
  38.                         .MarginBottom = plSet.PlotPaperMargins.MinPoint.Y
  39.                     End With
  40.                     cnt = cnt + 1
  41.                     ' Записываю в базу данных формат текущего принтера
  42.                     GDB.PrinterFormats.Add(NewPrinterFormat)
  43.                 Next
  44.             End Using
  45.         Next
  46.     End Sub

Получаю следующую картину:
Код - XML [Выбрать]
  1. ...
  2.     <galPrinterFormat>
  3.       <PrinterID>99e38cac-a1c3-4262-9d81-c7b097fe790b</PrinterID>
  4.       <PrinterFormatID>d3837fe1-74d7-406c-bd00-d1a992bade6b</PrinterFormatID>
  5.       <PrinterFormatCanonicalName>UserDefinedMetric (420.00 x 1189.00мм)</PrinterFormatCanonicalName>
  6.       <PrinterFormatLocaleName>A3x4_ver (420 x 1189 mm)</PrinterFormatLocaleName>
  7.       <PaperSizeWidht>210</PaperSizeWidht> ?????
  8.       <PaperSizeHeight>297</PaperSizeHeight> ?????
  9.       <MarginLeft>0.793749988079071</MarginLeft> ?????
  10.       <MarginRight>0.7937469482421875</MarginRight> ?????
  11.       <MarginTop>0.79376220703125</MarginTop> ?????
  12.       <MarginBottom>0.793749988079071</MarginBottom> ?????
  13.     </galPrinterFormat>
  14. ...

Откуда появились поля, если у меня они равны 0? И размеры не те! Вот блин, а я то уже порадовался. Везде один и тот же размер указан 210х297 мм.



Я явно что-то не то определяю!

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

  • Administrator
  • *****
  • Сообщений: 13830
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Ты не вызвал PlotSettingsValidator.SetCanonicalMediaName для plSet. Поэтому ты получаешь значения по-умолчанию для листа и полей.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Пашин ЕвгенийАвтор темы

  • ADN PRO
  • *
  • Сообщений: 662
  • Карма: 12
  • Skype: pashin.evgeniy
Ты не вызвал PlotSettingsValidator.SetCanonicalMediaName для plSet. Поэтому ты получаешь значения по-умолчанию для листа и полей.

Ужас...

Код - vb.net [Выбрать]
  1.                 For Each mediaName As String In acPlSetVdr.GetCanonicalMediaNameList(plSet)
  2.  
  3.                     ' Устанавливаем плоттер и формат (AutoCAD ушёл в спячку и оооооочень долго из неё не возвращался!!!!!!!!!!!!!!!!!!!)
  4.                     acPlSetVdr.SetPlotConfigurationName(plSet, PlotterInfo.DeviceName, mediaName)
  5.  
  6.                     ' Вывод имён по каноническому имени mediaName
  7.                     Dim NewPrinterFormat As New PashinEugene.galPrinterFormat
  8.                     With NewPrinterFormat
  9.                         .PrinterID = NewPrinter.PrinterID
  10.                         .PrinterFormatCanonicalName = mediaName
  11.                         .PrinterFormatLocaleName = acPlSetVdr.GetLocaleMediaName(plSet, cnt)
  12.                         .PaperSizeWidht = plSet.PlotPaperSize.X
  13.                         .PaperSizeHeight = plSet.PlotPaperSize.Y
  14.                         .MarginLeft = plSet.PlotPaperMargins.MinPoint.X
  15.                         .MarginRight = plSet.PlotPaperMargins.MaxPoint.X
  16.                         .MarginTop = plSet.PlotPaperMargins.MaxPoint.Y
  17.                         .MarginBottom = plSet.PlotPaperMargins.MinPoint.Y
  18.                     End With
  19.                     cnt = cnt + 1
  20.                     ' Записываю в базу данных формат текущего принтера
  21.                     GDB.PrinterFormats.Add(NewPrinterFormat)
  22.                 Next

А более быстрого варианта нет? Это ужасно долгая процедура, причем на мощном компьютере.

Код - XML [Выбрать]
  1.     <galPrinterFormat>
  2.       <PrinterID>e3734e97-2d58-4196-9901-99c8652686a7</PrinterID>
  3.       <PrinterFormatID>06de77c4-0e12-418b-8029-0e9c79e6b2dd</PrinterFormatID>
  4.       <PrinterFormatCanonicalName>UserDefinedMetric (420.00 x 891.00мм)</PrinterFormatCanonicalName>
  5.       <PrinterFormatLocaleName>A3x3_ver (420 x 891 mm)</PrinterFormatLocaleName>
  6.       <PaperSizeWidht>420</PaperSizeWidht>
  7.       <PaperSizeHeight>891</PaperSizeHeight>
  8.       <MarginLeft>0</MarginLeft>
  9.       <MarginRight>0</MarginRight>
  10.       <MarginTop>0</MarginTop>
  11.       <MarginBottom>0</MarginBottom>
  12.     </galPrinterFormat>

Результат хороший, но за время ожидания меня пользователи побьют!

Оффлайн Пашин ЕвгенийАвтор темы

  • ADN PRO
  • *
  • Сообщений: 662
  • Карма: 12
  • Skype: pashin.evgeniy
Проверил два варианта:
Код - vb.net [Выбрать]
  1.                     acPlSetVdr.SetPlotConfigurationName(plSet, PlotterInfo.DeviceName, mediaName) ' 1 вариант - работает медленно
  2.                     acPlSetVdr.SetCanonicalMediaName(plSet, mediaName) ' 2 вариант - работает медленно

Работает ужасно медленно, попытался выполнить этот модуль с помощью AcCoreConsole.exe - работает также медленно.

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

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

Оффлайн Пашин ЕвгенийАвтор темы

  • ADN PRO
  • *
  • Сообщений: 662
  • Карма: 12
  • Skype: pashin.evgeniy
Не думаю, что этот процесс можно ускорить.

Жаль.


Я пока ещё поищу решения.

Оффлайн Пашин ЕвгенийАвтор темы

  • ADN PRO
  • *
  • Сообщений: 662
  • Карма: 12
  • Skype: pashin.evgeniy
Это связано с опросом драйверов плоттеров, которые должны вернуть все их характеристики.

Когда я делаю это вручную, AutoCAD же не чудит по 5-10 минут. Поскольку за то время, которое занимает выполнение модуля, я смогу пробежаться вручную по всем принтерам и всех их форматам.



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

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

Оффлайн Пашин ЕвгенийАвтор темы

  • ADN PRO
  • *
  • Сообщений: 662
  • Карма: 12
  • Skype: pashin.evgeniy
Ты это делаешь для одного плоттера.

Ну, Александр Наумович, Вы же понимаете, что нет. Для всех принтеров. Но при выборе каждого из них, нет длительной задержки подключения. Меня это и настораживает, а выполнение модуля (для 25 принтеров) занимает от 6 до 9 минут (всегда по-разному). Причем, если пройтись по каждому вручную, то для некоторых принтеров подключение срабатывает мгновенно, а нескольких других до 5 секунд (максимум). В остальных случаях по 1 секунде. Это вручную.


Я бы ещё понял, если бы это было 1-2 минуты, но 6-9 минут - это уже ни в какие ворота: не уровень автоматизации.

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

  • Administrator
  • *****
  • Сообщений: 13830
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Как вариант - чтение и анализ PC3/PCP-файлов. Где-то у нас на форуме был для этого алгоритм.
На скорость влияет тот факт, что мы присваиваем новые установки PlotSetting и AutoCAD должен проанализировать допустимость такой операции.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Пашин ЕвгенийАвтор темы

  • ADN PRO
  • *
  • Сообщений: 662
  • Карма: 12
  • Skype: pashin.evgeniy
На скорость влияет тот факт, что мы присваиваем новые установки PlotSetting и AutoCAD должен проанализировать допустимость такой операции.

Это понятно.

Как вариант - чтение и анализ PC3/PCP-файлов. Где-то у нас на форуме был для этого алгоритм.

Бегло пробежал по поиску, может опять не так ищу :)



Попробовал по одному принтеру - работает довольно шустро, но правда для типов принтеров PC3File (и то не все). Некоторые принтеры типа SystemPrinter работают медленно. Особенно сетевые.

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

  • Administrator
  • *****
  • Сообщений: 13830
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Можешь попробовать на скорость такой способ:
1. Сохраняешь текущий PlotConfig
Код - C# [Выбрать]
  1. PlotConfig pCfg = Autodesk.AutoCAD.PlottingServices.PlotConfigManager.CurrentConfig;
2. Устанавливаешь для PlotConfig новый принтер:
Код - C# [Выбрать]
  1. pCfg = Autodesk.AutoCAD.PlottingServices.PlotConfigManager.SetCurrentConfig("имя устройства плотера или pc3-файл");
3. Пробуешь pCfg.GetMediaBounds() для каждой из canonicalMediaName
Может быть это будет работать (не проверял) и будет работать быстрее, чем тот способ, о котором шла речь выше.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Пашин ЕвгенийАвтор темы

  • ADN PRO
  • *
  • Сообщений: 662
  • Карма: 12
  • Skype: pashin.evgeniy
Попробую обязательно, только уже завтра.

Но от себя добавлю, что подключение к сетевому принтеру и получение размеров его форматов через AcCoreConsole.exe прошло быстрее (не так сильно конечно). Буду тестировать дальше, если что ещё и этот вариант буду рассматривать. В общем протестирую.

Оффлайн Дмитрий Загорулькин

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 735
Цитата: Александр Ривилис от 18-05-2017, 14:15:28
Как вариант - чтение и анализ PC3/PCP-файлов. Где-то у нас на форуме был для этого алгоритм.

Бегло пробежал по поиску, может опять не так ищу
http://adn-cis.org/forum/index.php?topic=3248.0
PiaNO

Оффлайн Пашин ЕвгенийАвтор темы

  • ADN PRO
  • *
  • Сообщений: 662
  • Карма: 12
  • Skype: pashin.evgeniy
Можешь попробовать на скорость такой способ:
1. Сохраняешь текущий PlotConfig
Код - C# [Выбрать]
PlotConfig pCfg = Autodesk.AutoCAD.PlottingServices.PlotConfigManager.CurrentConfig;
2. Устанавливаешь для PlotConfig новый принтер:
Код - C# [Выбрать]
pCfg = Autodesk.AutoCAD.PlottingServices.PlotConfigManager.SetCurrentConfig("имя устройства плоттера или pc3-файл");
3. Пробуешь pCfg.GetMediaBounds() для каждой из canonicalMediaName
Может быть это будет работать (не проверял) и будет работать быстрее, чем тот способ, о котором шла речь выше.

Проверил. Работает в 33 раза быстрее. Вместо 366 секунд всего 11 секунд. Это уже ход конём. Однако для некоторых физических принтеров значения размеров определяет некорректно (надо уточнить у пользователей, нужны ли им всякие факсы и т.п. шелуха). Заодно ещё потестирую. Вдруг что-то упустил.

Оффлайн Пашин ЕвгенийАвтор темы

  • ADN PRO
  • *
  • Сообщений: 662
  • Карма: 12
  • Skype: pashin.evgeniy
http://adn-cis.org/forum/index.php?topic=3248.0
PiaNO

Дмитрий, спасибо, уже скачал, но посмотрю уже только на следующей неделе.

Отмечено как Решение Пашин Евгений 31-05-2017, 12:23:00

Оффлайн Пашин ЕвгенийАвтор темы

  • ADN PRO
  • *
  • Сообщений: 662
  • Карма: 12
  • Skype: pashin.evgeniy
Решение оставил в таком виде:
Код - vb.net [Выбрать]
  1.     Public Shared Sub Get_List_Of_Device_And_Media()
  2.         ' Для проверки общего времени выполнения создаём параметр времени начала выполнения
  3.         Dim t1 As DateTime = Now()
  4.         ' Сюда буду писать все сообщения
  5.         Dim Text As New List(Of String)
  6.         ' Текущий документ
  7.         Dim doc As Document = Application.DocumentManager.MdiActiveDocument
  8.         ' Параметры для вывода сообщений: имя устройства, формат
  9.         Dim devname As String = "", medname As String = ""
  10.         ' Параметр проверки настройки печати
  11.         Dim psv As PlotSettingsValidator = PlotSettingsValidator.Current
  12.         ' Получаем список устройств печати
  13.         Dim devlist As Specialized.StringCollection = psv.GetPlotDeviceList()
  14.         ' Сначала выведем весь список принтеров
  15.         For i As Integer = 0 To devlist.Count - 1
  16.             Text.Add(i + 1 & " " & devlist(i))
  17.         Next
  18.         ' Создаём настройки печати
  19.         Using ps As New PlotSettings(True)
  20.             ' Перебираем все принтеры
  21.             For i As Integer = 0 To devlist.Count - 1
  22.                 ' Имя текущего принтера
  23.                 devname = devlist(i)
  24.                 ' Выводим имя текущего принтера в сообщение
  25.                 Text.Add("Текущий/Selected: " & devname)
  26.                 ' Настройка печати для текущего принтера
  27.                 Dim plotConfig As PlotConfig = PlotConfigManager.SetCurrentConfig(devname)
  28.                 ' Устанавливаем текущий принтер
  29.                 psv.SetPlotConfigurationName(ps, devname, Nothing)
  30.                 ' Обновление параметров настройки печати
  31.                 psv.RefreshLists(ps)
  32.                 ' Получаем все форматы принтера в каноническом виде
  33.                 Dim medlist As Specialized.StringCollection = psv.GetCanonicalMediaNameList(ps)
  34.                 ' Перебираем их
  35.                 For j As Integer = 0 To medlist.Count - 1
  36.                     ' Выводим имя текущего формата принтера в сообщение
  37.                     Text.Add("Формат/Media name " & j + 1 & " " & medlist(j))
  38.                     ' Получаем границы формата
  39.                     Dim mb As MediaBounds = plotConfig.GetMediaBounds(medlist(j))
  40.                     ' Выводим размеры и поля формата в сообщение
  41.                     Text.Add(Math.Round(mb.PageSize.X).ToString())
  42.                     Text.Add(Math.Round(mb.PageSize.Y).ToString())
  43.                     Text.Add(Math.Round(mb.LowerLeftPrintableArea.X).ToString())
  44.                     Text.Add(Math.Round(mb.UpperRightPrintableArea.Y).ToString())
  45.                     Text.Add(Math.Round(mb.UpperRightPrintableArea.X).ToString())
  46.                     Text.Add(Math.Round(mb.LowerLeftPrintableArea.Y).ToString())
  47.                 Next
  48.             Next
  49.         End Using
  50.         ' Для проверки общего времени выполнения создаём параметр времени завершения выполнения
  51.         Dim t2 As DateTime = Now()
  52.         ' Показываем время выполнения в секундах
  53.         MsgBox("Check delay: " & DateDiff(DateInterval.Second, t1, t2).ToString)
  54.         ' Сохраняем сообщение в файл и открываем его
  55.         IO.File.WriteAllLines("D:\info.txt", Text)
  56.         Process.Start("D:\info.txt")
  57.     End Sub

Время обработки 9-14 секунд.