Ошибка в примере ViewPrinter из SDK

Автор Тема: Ошибка в примере ViewPrinter из SDK  (Прочитано 8499 раз)

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

Оффлайн ЯрославАвтор темы

  • ADN OPEN
  • **
  • Сообщений: 82
  • Карма: 1
Здравствуйте!
Подскажите пожалуйста, при тестировании надстройки ViewPrinter из SDK 2014(соответствует печати в Ревит), при попытке напечатать два и больше экземпляров печатается только один. Причем в локальных переменных значение свойства CopyNumber  равняется тому значению что задали в форме???
« Последнее редактирование: 27-02-2015, 08:48:52 от Виктор Чекалин »

Оффлайн Виктор Чекалин

  • Administrator
  • *****
  • Сообщений: 694
  • Карма: 111
  • Skype: chekalin-v
Re: Ошибка в примере ViewPrinter из SDK
« Ответ #1 : 27-02-2015, 08:51:51 »
Ярослав,
Ошибку воспроизвести не удалось, так как задать значение копий можно только для физических принтеров, а у меня только виртуальные. Попробую позже, когда будет принтер под рукой.

Тем не менее, два вопроса к Вам:
  • При печати не через надстройку, а стандартными средствами Revit, получается ли напечатать несколько копий?
  • Пробовали ли в 2015 версии? Если нет, то нужно попробовать.

Оффлайн ЯрославАвтор темы

  • ADN OPEN
  • **
  • Сообщений: 82
  • Карма: 1
Re: Ошибка в примере ViewPrinter из SDK
« Ответ #2 : 27-02-2015, 10:02:02 »
Здравствуйте!
При печати стандартными средствами всё печатается!
В 2015 я запускал тот же пример (с 2014, так как похоже что примеры уже в 2012 версии VS) и такая же ошибка!

Оффлайн Виктор Чекалин

  • Administrator
  • *****
  • Сообщений: 694
  • Карма: 111
  • Skype: chekalin-v
Re: Ошибка в примере ViewPrinter из SDK
« Ответ #3 : 27-02-2015, 10:07:28 »
ОК, проверю видимо уже только завтра. Если ошибка повторится - скорее всего это баг. Отправлю запрос в поддержку.

Оффлайн ЯрославАвтор темы

  • ADN OPEN
  • **
  • Сообщений: 82
  • Карма: 1
Re: Ошибка в примере ViewPrinter из SDK
« Ответ #4 : 27-02-2015, 12:35:23 »
Спасибо!
А у Вас нет примера реализующего печать?
С заданием количества копий?

Оффлайн Виктор Чекалин

  • Administrator
  • *****
  • Сообщений: 694
  • Карма: 111
  • Skype: chekalin-v
Re: Ошибка в примере ViewPrinter из SDK
« Ответ #5 : 27-02-2015, 12:48:36 »
Нет, примера нет.
Что Вам мешает создать такой пример? Он очень простой. Там использование всего лишь одного класса PrintManager
Или вот пример из файла справки:
Код - C# [Выбрать]
  1. private void CreateAndPrintViewSet(Document document, ViewSet viewSet)
  2. {
  3.     PrintManager printManager = document.PrintManager;
  4.     printManager.PrintRange = PrintRange.Select;
  5.     ViewSheetSetting viewSheetSetting = printManager.ViewSheetSetting;
  6.     viewSheetSetting.CurrentViewSheetSet.Views = viewSet;
  7.     viewSheetSetting.SaveAs("MyViewSet");
  8.     printManager.CombinedFile = true;
  9.     printManager.SubmitPrint();
  10. }
  11.  
Добавьте туда установку количества копий и тестируйте.

Оффлайн ЯрославАвтор темы

  • ADN OPEN
  • **
  • Сообщений: 82
  • Карма: 1
Re: Ошибка в примере ViewPrinter из SDK
« Ответ #6 : 27-02-2015, 15:47:11 »
Беда!!!
Создал простенькую надстройку с:
Код - C# [Выбрать]
  1. private void CreateAndPrintViewSet(Document document, ViewSet viewSet)
  2.  
  3. {
  4.  
  5.     PrintManager printManager = document.PrintManager;
  6.  
  7.     printManager.PrintRange = PrintRange.Curent;
  8.  
  9.     printManager.CopyNumber = 2;
  10.  
  11.     printManager.SubmitPrint();
  12.  
  13. }
  14.  
  15.  
И при печати печатается только один экземпляр.
Неужели разработчики Ревита пользуются другими библиотеками???
Причем печатал на разных принтерах!
« Последнее редактирование: 27-02-2015, 15:58:20 от Виктор Чекалин »

Оффлайн Виктор Чекалин

  • Administrator
  • *****
  • Сообщений: 694
  • Карма: 111
  • Skype: chekalin-v
Re: Ошибка в примере ViewPrinter из SDK
« Ответ #7 : 27-02-2015, 16:02:05 »
Ярослав,
В справке пометоду CopyNumberговорится следующее: Returns 0 if current printer does not support CopyNumber property.
The value of this property represents the global print setting property used for print operations on any document.
In order to make a change to this property, after setting it call the Apply() method, or one of the SubmitPrint() methods,
which save the local changes as modifications to the global print settings.
Т.е. принтер может не поддерживать печать нескольких копий (хотя лично мне кажется это странным). В этом случае, свойство CopyNumber возвращает 0. Посмотрите, чему равно значение этого свойства до присваивания значения и после.
Второе, на что нужно обратить внимание. После изменения свойства нужно выполнить метод Apply(). Добавьте его и проверьте реузльтат.

Оффлайн ЯрославАвтор темы

  • ADN OPEN
  • **
  • Сообщений: 82
  • Карма: 1
Re: Ошибка в примере ViewPrinter из SDK
« Ответ #8 : 27-02-2015, 18:06:48 »
Добавил Apply() и ничего не получилось?!
Причем на трех разных принтерах.
Значение CopyNumber до операции Apply() 1 после 2.

Если через стандартную форму печати вбить 2 то это значение сохраняется и потом печатает 2.
Вот каким способом менять в стандартной форме значение???
Я так понимаю что это долен быть тот же PrintManager ?!?

Оффлайн Виктор Чекалин

  • Administrator
  • *****
  • Сообщений: 694
  • Карма: 111
  • Skype: chekalin-v
Re: Ошибка в примере ViewPrinter из SDK
« Ответ #9 : 28-02-2015, 15:26:21 »
Ярослав, попробовал. Действительно, свойство CopyNumber просто игнорируется.
Отправил запрос в поддержку Autodesk. Но думаю это действительно баг, причем не критичный, поэтому ожидать быстрого решения не стоит.
Пока можно применить альтернативный вариант и вызывать метод SubmitPrint несколько раз. Столько раз, сколько вам необходимо коий.
Например, вот так:
Код - C# [Выбрать]
  1.             printManager.CopyNumber = 2;
  2.             printManager.Apply();
  3.  
  4.             for (int i = 0; i < printManager.CopyNumber; i++)
  5.             {
  6.                 printManager.SubmitPrint();                
  7.             }

Оффлайн ЯрославАвтор темы

  • ADN OPEN
  • **
  • Сообщений: 82
  • Карма: 1
Re: Ошибка в примере ViewPrinter из SDK
« Ответ #10 : 28-02-2015, 18:59:44 »
Спасибо за оперативность! Я пока так и решил эту проблему!
Только вот скорость печати на большом количестве листов в разы падает((((!!

Это что получается что разработчики пользуются другими библиотеками при создании Ревита???

Оффлайн Виктор Чекалин

  • Administrator
  • *****
  • Сообщений: 694
  • Карма: 111
  • Skype: chekalin-v
Re: Ошибка в примере ViewPrinter из SDK
« Ответ #11 : 02-03-2015, 10:08:35 »
Это что получается что разработчики пользуются другими библиотеками при создании Ревита???
И да и нет. Revit API является публичным API, с помощью которого стороние разработчики могут писать свои надстрройки. Публичный API является оберткой над тем кодом, что пишут и используют разработчики Revit. Но напрямую они вряд ли используют публичный API.

По теме. Запрос в поддержку передал. Проблема уже известна. А вот когда она будет исправлена - нет. Как я уже говорил, не думаю, что эта проблема будет стоять в приоритете. Баг не очень серьезный, и, прямо скажем, очень немногим нужен этот метод.

Оффлайн ЯрославАвтор темы

  • ADN OPEN
  • **
  • Сообщений: 82
  • Карма: 1
Re: Ошибка в примере ViewPrinter из SDK
« Ответ #12 : 02-03-2015, 14:52:10 »
Спасибо!
Будем ждать!