Ошибка печати при экспорте в Pdf

Автор Тема: Ошибка печати при экспорте в Pdf  (Прочитано 35645 раз)

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

Оффлайн НадеждаАвтор темы

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

У меня есть программа на C#, которая при запущенном AutoCAD с заданным интервалом проверяет указанный каталог на наличие в нем файлов *.dxf либо *.dwg, обрабатывает их (разносит примитивы по слоям, добавляет лист, настраивает его и оформляет, и проч.), затем сохраняет в формате *.dwg. Потребовалось теперь эти *.dwg-файлы сохранять в формате *.pdf.
Я пытаюсь это сделать с помощью команды EXPORT (перебираю в цикле каждый *.dwg-файл, открываю его, делаю активным нужный мне лист и в командную строку отправляю команду EXPORT). Команда отрабатывает, но AutoCAD выдает сообщение, что "обнаружены ошибки/предупреждения печати/публикации" (в отчете печати пусто), и pdf-файлы не формируются... не могу понять, в чем дело... Подскажите, пожалуйста, где моя ошибка (в C# я новичок).
Вот мой кусок кода, который должен сформировать pdf:

Код - C# [Выбрать]
  1. //Это процедура, в конце которой вызывается мой метод:
  2. private bool BakeIsoPipe(string file)
  3. {
  4.        .....
  5.        ....тут идет обработка и сохранение найденных *.dxf-файлов
  6.        ....
  7.         //а это вызов моего метода:
  8.             FileInfo[] dwgFiles = fi.Directory.GetFiles("*.dwg");
  9.                 //("*.dwg");
  10.             if (dwgFiles.Length != 0)
  11.                 foreach (FileInfo dwg in dwgFiles)
  12.                     dwgToPdf(dwg, layoutName);
  13.             return true;
  14. }
  15.  
  16.         public void dwgToPdf(FileInfo dwg, string layoutName)
  17.         {
  18.             //это мне нужно для синхронного запуска команды
  19.             Autodesk.AutoCAD.Interop.AcadApplication acadCOMApp;
  20.             acadCOMApp = (Autodesk.AutoCAD.Interop.AcadApplication)Autodesk.AutoCAD.ApplicationServices.Application.AcadApplication;
  21.                
  22.                string dwgN = dwg.FullName;
  23.                DocumentCollection acDocMgr = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager;
  24.                Document acDoc = acDocMgr.Open(dwgN, false);
  25.  
  26.                 acDoc.LockDocument();
  27.                 Database acdb = acDoc.Database;
  28.                 Editor ed = acDoc.Editor;
  29.                 using (Transaction acTrans = acdb.TransactionManager.StartTransaction())
  30.                 {
  31.  
  32.                     DBDictionary layoutDict = (DBDictionary)acTrans.GetObject(acdb.LayoutDictionaryId, OpenMode.ForWrite);
  33.                     //удаляю присутствующий в файле ненужный мне лист
  34.                     foreach (DBDictionaryEntry entry in layoutDict)
  35.                     {
  36.                         string layName = entry.Key;
  37.                         if (layName != "Model" && layName != layoutName)
  38.                         {
  39.                             LayoutManager.Current.DeleteLayout(layName);
  40.                         }
  41.                     }
  42.  
  43.                     layoutDict.Dispose();
  44.                     acTrans.Commit();
  45.                 }
  46.  
  47.                 ed.Regen();
  48.             //делаю текущим нужный мне лист
  49.                 LayoutManager.Current.CurrentLayout = layoutName;
  50.                 string pdfName = dwgN.Replace(dwg.Extension, ".pdf");
  51.                 string pdfNameNew = pdfName.Replace("\\", "/");
  52.                 //string acComm = "(command \"_-export\" \"_p\" \"_c\" \"_n\" \"" + pdfNameNew + "\")" + "\n";
  53.                 string acComm = "\"_-export\" \"_p\" \"_c\" \"_n\" \"" + pdfNameNew + "\" ";
  54.                 acDocMgr.MdiActiveDocument = acDoc;
  55.                 Autodesk.AutoCAD.Interop.AcadDocument acDoc1 = acadCOMApp.ActiveDocument;
  56.                 acDoc1.SendCommand(acComm);
  57.                 acDoc.CloseAndDiscard();
  58.         }
  59.  
  60.  

AutoCAD 2012, VS 2012, .NET Framework 4.0

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

  • Administrator
  • *****
  • Сообщений: 13830
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Ошибка печати при экспорте в Pdf
« Ответ #1 : 13-04-2016, 13:18:39 »
Надежда
Приветствую на форуме!
Попробуйте перед запуском команды однократно загрузить AcPublish.arx:
Код - C# [Выбрать]
  1. SystemObjects.DynamicLinker.LoadModule("AcPublish.arx", false, false);
Лучше всего этот код вставить в метод Initialize.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн НадеждаАвтор темы

  • ADN OPEN
  • Сообщений: 25
  • Карма: 0
Re: Ошибка печати при экспорте в Pdf
« Ответ #2 : 13-04-2016, 13:55:20 »
Здравствуйте, Александр!
Спасибо, что откликнулись!
AcPublish.arx загрузила, но это не помогло ((.
Выдает то же самое сообщение: "обнаружены ошибки/предупреждения..".
Причем если я вставлю эту команду в командную строку AutoCAD и нажму Enter - все превосходно печатается.
Отличия нашла только такие при выполнении команды программно и вручную:

Это то, что программно происходит

Команда: (command "_-export" "_p" "_c" "_n"
"D:/12.1/Projects/123-HP-77-TM_HPW_л1/123-HP-77-TM_HPW_л1002.pdf")
_-export Введите формат файла [Dwf/dwfX/Pdf] <Pdf>_p Введите область печати
[Текущий лист/Все листы]<Текущий лист>: _c Выполнить детальное задание
конфигурации? [Да/Нет] <Нет>: _n
Введите имя файла <123-HP-77-TM_HPW_л1002-123-HP-77-TM_HPW.pdf>:
D:/12.1/Projects/123-HP-77-TM_HPW_л1/123-HP-77-TM_HPW_л1002.pdf
Команда: nil

А это - если вручную запущу:

Команда: (command "_-export" "_p" "_c" "_n"
(_> "D:/12.1/Projects/123-HP-77-TM_HPW_л1/123-HP-77-TM_HPW_л1002.pdf")
_-export Введите формат файла [Dwf/dwfX/Pdf] <Pdf>_p Введите область печати
[Текущий лист/Все листы]<Текущий лист>: _c Выполнить детальное задание
конфигурации? [Да/Нет] <Нет>: _n
Введите имя файла <123-HP-77-TM_HPW_л1002-123-HP-77-TM_HPW.pdf>:
D:/12.1/Projects/123-HP-77-TM_HPW_л1/123-HP-77-TM_HPW_л1002.pdf
Введите имя файла <123-HP-77-TM_HPW_л1002-123-HP-77-TM_HPW.pdf>:
Введите имя файла <123-HP-77-TM_HPW_л1002-123-HP-77-TM_HPW.pdf>:
Команда: nil

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

  • Administrator
  • *****
  • Сообщений: 13830
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Ошибка печати при экспорте в Pdf
« Ответ #3 : 13-04-2016, 13:59:25 »
Еще нужно попробовать установить backgroundplot в 0 перед запуском команды.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн НадеждаАвтор темы

  • ADN OPEN
  • Сообщений: 25
  • Карма: 0
Re: Ошибка печати при экспорте в Pdf
« Ответ #4 : 14-04-2016, 05:56:56 »
нет, все равно не помогает (((
может быть, это из-за того, что я сначала открываю файл через DocumentManager (переменная acDoc), а потом, чтобы синхронно выполнить команду, использую для этого же открытого файла .Net COM Interop (переменная acDoc1)? Может быть, мне нужно как-то acDoc разблокировать?
я уже и паузу пыталась после команды вставить, предполагая, что ему просто времени не хватает на печать... но нет, видно, что после передачи имени файла pdf в командную строку ничего не происходит (если руками делать - то там мелькают сообщения, что вычерчивается видовой экран и что-то еще)

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

  • Administrator
  • *****
  • Сообщений: 13830
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Ошибка печати при экспорте в Pdf
« Ответ #5 : 14-04-2016, 08:14:49 »
Надежда
Давайте полный тестовый проект. Посмотрю.
Можно пойти другими путями без вызова команды _EXPORT:
Вариант 1. https://forums.autodesk.com/t5/net/batching-export-to-pdf-from-acad-problem-c/td-p/3562450
Вариант 2. http://adn-cis.org/forum/index.php?topic=4305.msg16139#msg16139
Оба варианта конечно придётся "допиливать".
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн НадеждаАвтор темы

  • ADN OPEN
  • Сообщений: 25
  • Карма: 0
Re: Ошибка печати при экспорте в Pdf
« Ответ #6 : 14-04-2016, 13:58:41 »
Хорошо, Александр, я подготовлю тестовый проект...
Второй вариант я уже пару дней тоже пытаюсь осуществить, пока не получается: он команду публикации получает, потом тут же открывает следующий файл, и только в последнем проходит публикация, т.к. он является активным, в остальных публикация заканчивается неудачей. Получается, что он может публиковать только лист из открытого активного файла?

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

  • Administrator
  • *****
  • Сообщений: 13830
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Ошибка печати при экспорте в Pdf
« Ответ #7 : 14-04-2016, 14:03:02 »
Второй вариант я уже пару дней тоже пытаюсь осуществить, пока не получается: он команду публикации получает, потом тут же открывает следующий файл, и только в последнем проходит публикация, т.к. он является активным, в остальных публикация заканчивается неудачей. Получается, что он может публиковать только лист из открытого активного файла?
В этом примере - да. Но в DSD-файл можно вписать и неоткрытый файл.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн НадеждаАвтор темы

  • ADN OPEN
  • Сообщений: 25
  • Карма: 0
Re: Ошибка печати при экспорте в Pdf
« Ответ #8 : 14-04-2016, 14:11:27 »
Я просто пробовала руками сделать следующее:
у меня сформировались 4 dsd-файла (по одному на каждый чертеж), все 4 были открыты в AutoCAD, и я запустила публикацию, например, находясь во 2-м файле, но указала dsd-файл 4-го чертежа, и при публикации возникла ошибка, что указанный в dsd-файле лист не обнаружен... потому я и решила, что они все обязательно должны быть открыты (даже если я создам 1 dsd-файл с указанием всех моих 4 листов из разных файлов, мне ведь все равно придется их все открыть, чтобы публикация была успешной, или я ошибаюсь?)

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

  • Administrator
  • *****
  • Сообщений: 13830
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Ошибка печати при экспорте в Pdf
« Ответ #9 : 14-04-2016, 15:15:05 »
даже если я создам 1 dsd-файл с указанием всех моих 4 листов из разных файлов, мне ведь все равно придется их все открыть, чтобы публикация была успешной, или я ошибаюсь?
Открывать файлы не нужно - AutoCAD их откроет сам, сам переключится на заданные листы и напечатает их:


Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN PRO
  • *
  • Сообщений: 662
  • Карма: 12
  • Skype: pashin.evgeniy
Re: Ошибка печати при экспорте в Pdf
« Ответ #10 : 19-04-2016, 09:19:25 »
Команда отрабатывает, но AutoCAD выдает сообщение, что "обнаружены ошибки/предупреждения печати/публикации" (в отчете печати пусто), и pdf-файлы не формируются... не могу понять, в чем дело...

Здравствуйте, Надежда! Ошибка, о которой идет речь, связана только с одним: у вас нет соответствующего формата принтера для печати одного из листов (или есть проблемы с одним из них). Если хоть один формат отсутствует в принтере, то ни один документ не будет напечатан. Проверьте форматы принтера и попробуйте повторить попытку.

DSD-файл - это лишь перечень того, что и откуда нужно напечатать (+ некоторые настройки), но если нет формата, то использование DSD-файла тоже не поможет.
Также настоятельно рекомендуется все листы настроить на принтер «DWG_To_PDF.pc3» или аналогичный!!! Если в «DWG_To_PDF.pc3» не будет хотя бы одного нужного формата, то попытки бесполезны, особенно если Вы пытаетесь, чтобы на выходе получился единый файл!!!

Насколько я помню, при выборе пакетной печати (то есть в один файл), вся печать протекает через «DWG_To_PDF.pc3» вне зависимости от того, какой принтер был настроен для каждого листа!!!

Желаю Вам удачи!

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

  • ADN PRO
  • *
  • Сообщений: 662
  • Карма: 12
  • Skype: pashin.evgeniy
Re: Ошибка печати при экспорте в Pdf
« Ответ #11 : 19-04-2016, 09:29:26 »
Я просто пробовала руками сделать следующее:
у меня сформировались 4 dsd-файла (по одному на каждый чертеж), все 4 были открыты в AutoCAD, и я запустила публикацию, например, находясь во 2-м файле, но указала dsd-файл 4-го чертежа, и при публикации возникла ошибка, что указанный в dsd-файле лист не обнаружен... потому я и решила, что они все обязательно должны быть открыты (даже если я создам 1 dsd-файл с указанием всех моих 4 листов из разных файлов, мне ведь все равно придется их все открыть, чтобы публикация была успешной, или я ошибаюсь?)

Попробуйте сгенерировать единый DSD-файл для всех 4-х чертежей. Поверьте, это совсем несложно.

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

  • ADN PRO
  • *
  • Сообщений: 662
  • Карма: 12
  • Skype: pashin.evgeniy
Re: Ошибка печати при экспорте в Pdf
« Ответ #12 : 19-04-2016, 09:31:03 »
мне ведь все равно придется их все открыть, чтобы публикация была успешной, или я ошибаюсь?

Нет, открывать их совершенно необязательно. Вы можете открыть любой другой чертеж, а запустить dsd-файл не открытого чертежа. Будьте уверены.

Оффлайн НадеждаАвтор темы

  • ADN OPEN
  • Сообщений: 25
  • Карма: 0
Re: Ошибка печати при экспорте в Pdf
« Ответ #13 : 19-04-2016, 10:39:01 »
Спасибо, Евгений! Проверю форматы... специально я их точно не настраивала...

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

  • ADN PRO
  • *
  • Сообщений: 662
  • Карма: 12
  • Skype: pashin.evgeniy
Re: Ошибка печати при экспорте в Pdf
« Ответ #14 : 19-04-2016, 10:49:48 »
Надежда, посмотрел Ваш код. Действительно он работает с открытым экземпляром чертежа и пытается напечатать только определённый лист, имя которого Вам заранее известно (как я понял из кода). Я мысленно бегу по-инерции и делаю предположение, что и другие чертежи имеют листы с таким же именем?! Если так, то настоятельно рекомендую использовать dsd-файл, как Вам советовал Александр Наумович.

1. Вам тогда не придётся что-то вообще открывать.
2. Весь код сократится до уровня запуска публикации с указанием пути к dsd-файлу.

Если ошибаюсь, поправьте меня :)

Оффлайн НадеждаАвтор темы

  • ADN OPEN
  • Сообщений: 25
  • Карма: 0
Re: Ошибка печати при экспорте в Pdf
« Ответ #15 : 19-04-2016, 11:15:51 »
...Если честно, я плохо себе представляю, как работает программа. Это не мой код, он мне достался "по наследству". Как я понимаю, файлы на самом деле не открываются физически, программа получает к ним доступ через какой-то поток, добирается до базы чертежа и вносит в нее нужные изменения.
 Я не знала, как таким же способом, не открывая файл, получить из него pdf, вот и стала их открывать, делать активным нужный мне лист и экспортировать либо публиковать...
Получается, я просто могу сформировать DSD-файл с именами листов и файлов и выполнить публикацию? Но предварительно нужно настроить каждый лист на принтер «DWG_To_PDF.pc3», забив в него нужные мне форматы?

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

  • ADN PRO
  • *
  • Сообщений: 662
  • Карма: 12
  • Skype: pashin.evgeniy
Re: Ошибка печати при экспорте в Pdf
« Ответ #16 : 19-04-2016, 12:56:07 »
Получается, я просто могу сформировать DSD-файл с именами листов и файлов и выполнить публикацию?

Да!

Но предварительно нужно настроить каждый лист на принтер «DWG_To_PDF.pc3», забив в него нужные мне форматы?

Да!


Только уточните,  а точно ли в каждом чертеже лист называется одинаково? :)
Иначе чертёж всё-таки придётся открывать, НО, правда лишь для того, чтобы получить список листов :), ну или для проверки того, какой принтер у листов настроен :)

Оффлайн НадеждаАвтор темы

  • ADN OPEN
  • Сообщений: 25
  • Карма: 0
Re: Ошибка печати при экспорте в Pdf
« Ответ #17 : 19-04-2016, 13:07:31 »
Спасибо!!! попробую... осталось только научиться настраивать параметры печати )))
Цитировать
Только уточните,  а точно ли в каждом чертеже лист называется одинаково?
- я сама даю имена листам, так что могу это имя передать в качестве переменной )))

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

  • ADN PRO
  • *
  • Сообщений: 662
  • Карма: 12
  • Skype: pashin.evgeniy
Re: Ошибка печати при экспорте в Pdf
« Ответ #18 : 19-04-2016, 15:33:23 »
осталось только научиться настраивать параметры печати

Вам как требуется настраивать параметры печати: через интерфейс или программно? Могу легкий каст записать, если потребуется :)

Оффлайн НадеждаАвтор темы

  • ADN OPEN
  • Сообщений: 25
  • Карма: 0
Re: Ошибка печати при экспорте в Pdf
« Ответ #19 : 20-04-2016, 05:19:43 »
мне бы программно, я вот так пробовала вчера, но AutoCad выдал ошибку:

Код - C# [Выбрать]
  1. //Этот код был в программе:                        
  2. using (Transaction trn = db.TransactionManager.StartTransaction())
  3. {
  4.      layoutName = sheetName;
  5.      foreach (char c in "<>/;\\:\"?*|`=,")
  6.      layoutName = layoutName.Replace(c, '_');
  7.    
  8.     BlockTable bt = (BlockTable)trn.GetObject(db.BlockTableId, OpenMode.ForWrite);
  9.  
  10.     DBDictionary layoutDict = (DBDictionary)trn.GetObject(db.LayoutDictionaryId, OpenMode.ForWrite);
  11.  
  12.     //Создать новый лист
  13.     Layout newLayout = new Layout();
  14.     BlockTableRecord newBTR = new BlockTableRecord();
  15.     newBTR.Name = BlockTableRecord.PaperSpace;
  16.     idBTRPaper = bt.Add(newBTR);
  17.     trn.AddNewlyCreatedDBObject(newBTR, true);
  18.     newLayout.LayoutName = layoutName;
  19.     newLayout.AddToLayoutDictionary(db, idBTRPaper);
  20.  
  21.    //Удалить остальные листы
  22.    ObjectIdCollection layoutColl = new ObjectIdCollection();
  23.    foreach (DBDictionaryEntry entry in layoutDict)
  24.    if (entry.Value != bt[BlockTableRecord.ModelSpace] && entry.Value != newLayout.ObjectId)
  25.       layoutColl.Add(entry.Value);
  26.       foreach (ObjectId id in layoutColl)
  27.       layoutDict.Remove(id);
  28.  
  29.     //Скопировать из шаблона
  30.         using (Database dbTmpt = new Database(false, true))
  31.         {
  32.            dbTmpt.ReadDwgFile(FILE_TMPT_SHEET, System.IO.FileShare.Read, false, String.Empty);
  33.                  using (Transaction trnTmpt = dbTmpt.TransactionManager.StartTransaction())
  34.                 {
  35.                           DBDictionary layoutDictTmpt = (DBDictionary)trnTmpt.GetObject(dbTmpt.LayoutDictionaryId, OpenMode.ForRead);
  36.                    ObjectId idLayoutSrc = ObjectId.Null;
  37.                    foreach (DBDictionaryEntry entry in layoutDictTmpt)
  38.                    if (entry.Key == tmptFormatName)
  39.                        idLayoutSrc = entry.Value;
  40.  
  41.                    if (idLayoutSrc != ObjectId.Null)
  42.                       {
  43.                         Layout layoutSrc = (Layout)trnTmpt.GetObject(idLayoutSrc, OpenMode.ForRead);
  44.                         BlockTableRecord btrSrc = (BlockTableRecord)trnTmpt.GetObject(layoutSrc.BlockTableRecordId, OpenMode.ForRead);
  45.                         ObjectIdCollection idsToClone = new ObjectIdCollection();
  46.                         foreach (ObjectId id in btrSrc)
  47.                         idsToClone.Add(id);
  48.                         IdMapping mapping = new IdMapping();
  49.                         db.WblockCloneObjects(idsToClone, idBTRPaper, mapping, DuplicateRecordCloning.Replace, false);
  50.  
  51.                         layoutSrc.Dispose();
  52.                         btrSrc.Dispose();
  53.                         idsToClone.Dispose();
  54.                         mapping.Dispose();
  55.                      }
  56.                   layoutDictTmpt.Dispose();
  57.                   trnTmpt.Commit();
  58.                 }
  59.            }
  60. //Этот я добавила:                    
  61.                   // Get a copy of the PlotSettings from the layout
  62.                     PlotSettings acPlSet = new PlotSettings(newLayout.ModelType);
  63.                     acPlSet.CopyFrom(newLayout);
  64.  
  65.                     // Update the PlotConfigurationName property of the PlotSettings object
  66.                     PlotSettingsValidator acPlSetVdr = PlotSettingsValidator.Current;
  67.                     acPlSetVdr.SetPlotType(acPlSet, Autodesk.AutoCAD.DatabaseServices.PlotType.Layout);
  68.                     acPlSetVdr.SetUseStandardScale(acPlSet, true);
  69.                     acPlSetVdr.SetStdScaleType(acPlSet, StdScaleType.StdScale1To1);
  70.                     acPlSetVdr.SetPlotCentered(acPlSet, true);
  71.  (1)               acPlSetVdr.SetPlotConfigurationName(acPlSet, "DWG To PDF.pc3",
  72.                                                         "A1");
  73.  
  74.                     // Update the layout
  75.                     newLayout.UpgradeOpen();
  76.                     newLayout.CopyFrom(acPlSet);
  77.  
  78.             layoutDict.Dispose();
  79.             layoutColl.Dispose();
  80.             newLayout.Dispose();
  81.             newBTR.Dispose();
  82.             bt.Dispose();
  83.             trn.Commit();
  84.         }

На строке (1) AutoCAD выдает ошибку:

Autodesk.AutoCAD.Runtime.Exception: eInvalidInput
   в Autodesk.AutoCAD.DatabaseServices.PlotSettingsValidator.SetPlotConfigurationName(PlotSettings plotSet, String plotDeviceName, String mediaName)

и аварийно завершает работу...
« Последнее редактирование: 20-04-2016, 07:14:06 от Надежда »

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

  • ADN PRO
  • *
  • Сообщений: 662
  • Карма: 12
  • Skype: pashin.evgeniy
Re: Ошибка печати при экспорте в Pdf
« Ответ #20 : 20-04-2016, 10:20:54 »
На строке (1) AutoCAD выдает ошибку:

Autodesk.AutoCAD.Runtime.Exception: eInvalidInput
   в Autodesk.AutoCAD.DatabaseServices.PlotSettingsValidator.SetPlotConfigurationName(PlotSettings plotSet, String plotDeviceName, String mediaName)

и аварийно завершает работу...

Да уж, для меня такая конструкция вложенных транзакций сложновата :)
НО, может всё-таки создание «Настройки печати» произвести в новой транзакции, а то старая trnTmpt.Commit(); была закрыта уже :)

Я себе это действие как-то так представлял:


Код - C# [Выбрать]
  1. using Autodesk.AutoCAD.Runtime;
  2. using Autodesk.AutoCAD.ApplicationServices;
  3. using Autodesk.AutoCAD.DatabaseServices;
  4. using Autodesk.AutoCAD.PlottingServices;
  5.  
  6. [CommandMethod("CreateOrEditPageSetup")]
  7. public static void CreateOrEditPageSetup()
  8. {
  9.  
  10.     Document acDoc = Application.DocumentManager.MdiActiveDocument;
  11.     Database acCurDb = acDoc.Database;
  12.  
  13.     using (Transaction acTrans = acCurDb.TransactionManager.StartTransaction())
  14.     {
  15.  
  16.         DBDictionary plSets = acTrans.GetObject(acCurDb.PlotSettingsDictionaryId,
  17.                                                 OpenMode.ForRead) as DBDictionary;
  18.         DBDictionary vStyles = acTrans.GetObject(acCurDb.VisualStyleDictionaryId,
  19.                                                  OpenMode.ForRead) as DBDictionary;
  20.  
  21.         PlotSettings acPlSet = default(PlotSettings);
  22.         bool createNew = false;
  23.  
  24.         LayoutManager acLayoutMgr = LayoutManager.Current;
  25.  
  26.         Layout acLayout = acTrans.GetObject(acLayoutMgr.GetLayoutId(acLayoutMgr.CurrentLayout),
  27.                                             OpenMode.ForRead) as Layout;
  28.  
  29.         if (plSets.Contains("MyPageSetup") == false)
  30.         {
  31.             createNew = true;
  32.  
  33.             acPlSet = new PlotSettings(acLayout.ModelType);
  34.             acPlSet.CopyFrom(acLayout);
  35.  
  36.             acPlSet.PlotSettingsName = "MyPageSetup";
  37.             acPlSet.AddToPlotSettingsDictionary(acCurDb);
  38.             acTrans.AddNewlyCreatedDBObject(acPlSet, true);
  39.         }
  40.         else
  41.         {
  42.             acPlSet = plSets.GetAt("MyPageSetup").GetObject(OpenMode.ForWrite) as PlotSettings;
  43.         }
  44.  
  45.         try
  46.         {
  47.             PlotSettingsValidator acPlSetVdr = PlotSettingsValidator.Current;
  48.  
  49.             acPlSetVdr.SetPlotConfigurationName(acPlSet, "DWG To PDF.pc3", "A1");
  50.  
  51.             if (acLayout.ModelType == false)
  52.             {
  53.                 acPlSetVdr.SetPlotType(acPlSet, Autodesk.AutoCAD.DatabaseServices.PlotType.Layout);
  54.             }
  55.             else
  56.             {
  57.                 acPlSetVdr.SetPlotType(acPlSet, Autodesk.AutoCAD.DatabaseServices.PlotType.Extents);
  58.  
  59.                 acPlSetVdr.SetPlotCentered(acPlSet, true);
  60.             }
  61.  
  62.  
  63.             acPlSetVdr.SetPlotOrigin(acPlSet, new Point2d(0, 0));
  64.  
  65.             acPlSetVdr.SetUseStandardScale(acPlSet, true);
  66.             acPlSetVdr.SetStdScaleType(acPlSet, StdScaleType.ScaleToFit);
  67.             acPlSetVdr.SetPlotPaperUnits(acPlSet, PlotPaperUnit.Inches);
  68.             acPlSet.ScaleLineweights = true;
  69.  
  70.             acPlSet.ShowPlotStyles = true;
  71.  
  72.             acPlSetVdr.RefreshLists(acPlSet);
  73.  
  74.             acPlSet.ShadePlot = PlotSettingsShadePlotType.AsDisplayed;
  75.  
  76.             acPlSet.ShadePlotResLevel = ShadePlotResLevel.Normal;
  77.  
  78.             acPlSet.PrintLineweights = true;
  79.             acPlSet.PlotTransparency = false;
  80.             acPlSet.PlotPlotStyles = true;
  81.             acPlSet.DrawViewportsFirst = true;
  82.             acPlSet.CurrentStyleSheet
  83.  
  84.  
  85.             acPlSetVdr.SetPlotRotation(acPlSet, PlotRotation.Degrees000);
  86.  
  87.             if (acCurDb.PlotStyleMode == true)
  88.             {
  89.                 acPlSetVdr.SetCurrentStyleSheet(acPlSet, "acad.ctb");
  90.             }
  91.             else
  92.             {
  93.                 acPlSetVdr.SetCurrentStyleSheet(acPlSet, "acad.stb");
  94.             }
  95.  
  96.             acPlSetVdr.SetZoomToPaperOnUpdate(acPlSet, true);
  97.         }
  98.         catch (Autodesk.AutoCAD.Runtime.Exception es)
  99.         {
  100.             System.Windows.Forms.MessageBox.Show(es.Message);
  101.         }
  102.  
  103.         acTrans.Commit();
  104.  
  105.         if (createNew == true)
  106.         {
  107.             acPlSet.Dispose();
  108.         }
  109.     }
  110. }

Оффлайн НадеждаАвтор темы

  • ADN OPEN
  • Сообщений: 25
  • Карма: 0
Re: Ошибка печати при экспорте в Pdf
« Ответ #21 : 20-04-2016, 10:32:32 »
Цитировать
старая trnTmpt.Commit();
- это транзакция для файла шаблона (с ее помощью из файла шаблона был взят нужный шаблон листа, и больше она не нужна, потому и закрыта).. а мой новый лист newLayout был создан в другой транзакции, trn, и она еще не закрыта...

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

  • ADN PRO
  • *
  • Сообщений: 662
  • Карма: 12
  • Skype: pashin.evgeniy
Re: Ошибка печати при экспорте в Pdf
« Ответ #22 : 20-04-2016, 10:38:57 »
- это транзакция для файла шаблона (с ее помощью из файла шаблона был взят нужный шаблон листа, и больше она не нужна, потому и закрыта).. а мой новый лист newLayout был создан в другой транзакции, trn, и она еще не закрыта...

Тогда проверьте правильно ли Вы назвали формат A1 (буква английская) или А1 (буква русская)!!! Это тоже может стать помехой. Они должны быть такими же как и в формате принтера :)

Оффлайн НадеждаАвтор темы

  • ADN OPEN
  • Сообщений: 25
  • Карма: 0
Re: Ошибка печати при экспорте в Pdf
« Ответ #23 : 20-04-2016, 11:04:39 »
Букву поменяла, не помогло, вот какую ошибку выдает AutoCAD перед аварийным завершением:

************** Текст исключения **************
System.AccessViolationException: Попытка чтения или записи в защищенную память. Это часто свидетельствует о том, что другая память повреждена.
   в Autodesk.AutoCAD.DatabaseServices.DBObject.DeleteUnmanagedObject()
   в Autodesk.AutoCAD.Runtime.DisposableWrapper.!DisposableWrapper()
   в Autodesk.AutoCAD.Runtime.DisposableWrapper.Dispose(Boolean )
   в Autodesk.AutoCAD.DatabaseServices.DBObject.Dispose(Boolean )

...в общем, надо сначала изучить C#, чтобы понимать все эти потоки... пойду учиться ))

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

  • Administrator
  • *****
  • Сообщений: 13830
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Ошибка печати при экспорте в Pdf
« Ответ #24 : 20-04-2016, 11:56:19 »
Надежда
Если используешь транзакцию,  то ни в коем случае не используй метод Dispose для объектов, вовлеченных в эту транзакцию. Последняя ошибка явно связана с вызовом Dispose.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн НадеждаАвтор темы

  • ADN OPEN
  • Сообщений: 25
  • Карма: 0
Re: Ошибка печати при экспорте в Pdf
« Ответ #25 : 20-04-2016, 12:48:09 »
спасибо, Александр! переместила свой код до команды Dispose() - фатальная ошибка исчезла, но AutoCAD по-прежнему ругается на строку:

Autodesk.AutoCAD.Runtime.Exception: eInvalidInput
   в Autodesk.AutoCAD.DatabaseServices.PlotSettingsValidator.SetPlotConfigurationName(PlotSettings plotSet, String plotDeviceName, String mediaName)
 
я уже и в DWG To PDF.pc3 создала свой формат листа (чтобы точно не было ошибки в имени) - все равно не помогает ((

Оффлайн Doublefish

  • ADN Club
  • ****
  • Сообщений: 288
  • Карма: 10
  • AutoCAD Civil 3D
Re: Ошибка печати при экспорте в Pdf
« Ответ #26 : 20-04-2016, 13:57:14 »
Что-то мне помнится что eInvalidInput при печати означает что не верно задан формат бумаги, т.е. именно такого нет в списке pmp файла именно того плоттера на который производится печать.

http://forums.autodesk.com/t5/net/einvalidinput-setplotconfigurationname/td-p/4577989

http://through-the-interface.typepad.com/through_the_interface/2007/10/allowing-select.html

т.е. должно быть написано, например, ISO_A1_(841.00_x_594.00_MM)

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

  • ADN PRO
  • *
  • Сообщений: 662
  • Карма: 12
  • Skype: pashin.evgeniy
Re: Ошибка печати при экспорте в Pdf
« Ответ #27 : 20-04-2016, 14:24:54 »
Да, мне тоже помнится, что передаваться должно каноническое имя формата принтера!!!

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

  • ADN PRO
  • *
  • Сообщений: 662
  • Карма: 12
  • Skype: pashin.evgeniy
Re: Ошибка печати при экспорте в Pdf
« Ответ #28 : 20-04-2016, 14:29:47 »
Надежда, есть вероятность, что Ваша проблема связана с тем, что Вы пытаетесь передать в настройку принтера LocaleMediaName, а, возможно, Вам требуется передавать её CanonicalMediaName.

Кстати, вот что я нашел в справке:

Код - C# [Выбрать]
  1. // Set the Plotter and page size
  2.             acPlSetVdr.SetPlotConfigurationName(acPlSet, "DWF6 ePlot.pc3", "ANSI_B_(17.00_x_11.00_Inches)");

Это означает, что у Вас формат имеет, например, значение «А3 (297х420 мм)», а его каноническое имя будет иметь вид «A3_(297.00_x_420.00_mm)»!!! Вы, конечно, не видите это в диалоговом окне печати, но программно можете вытащить это.

Код - C# [Выбрать]
  1.         Document acDoc = Application.DocumentManager.MdiActiveDocument;
  2.         PlotSettingsValidator acPlSetVdr = PlotSettingsValidator.Current;
  3.  
  4.         int cnt = 0;
  5.  
  6.         foreach (string mediaName in acPlSetVdr.GetCanonicalMediaNameList(plSet))
  7.         {
  8.             // Выводим имена форматов (Locale и Canonical) принтера текущей настройки принтера
  9.             acDoc.Editor.WriteMessage("\n  " + mediaName + " | " +
  10.                                       acPlSetVdr.GetLocaleMediaName(plSet, cnt));
  11.  
  12.             cnt = cnt + 1;
  13.         }

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

  • Administrator
  • *****
  • Сообщений: 13830
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Ошибка печати при экспорте в Pdf
« Ответ #29 : 20-04-2016, 15:48:42 »
Самое смешное, что при печати при помощи DSD в PDF/DWF(DWFx) не нужно вообще указывать устройство вывода.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Windcastle

  • ADN OPEN
  • **
  • Сообщений: 58
  • Карма: 0
Re: Ошибка печати при экспорте в Pdf
« Ответ #30 : 21-04-2016, 05:15:30 »
Самое смешное, что при печати при помощи DSD в PDF/DWF(DWFx) не нужно вообще указывать устройство вывода.

Да, и это прекрасно :)

Оффлайн НадеждаАвтор темы

  • ADN OPEN
  • Сообщений: 25
  • Карма: 0
Re: Ошибка печати при экспорте в Pdf
« Ответ #31 : 21-04-2016, 05:57:14 »
при печати при помощи DSD в PDF/DWF(DWFx) не нужно вообще указывать устройство вывода
...а разве листы, которые я указываю в DSD-файле, не должны быть заранее настроены на нужное устройство вывода и правильный формат листа?

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

  • ADN PRO
  • *
  • Сообщений: 662
  • Карма: 12
  • Skype: pashin.evgeniy
Re: Ошибка печати при экспорте в Pdf
« Ответ #32 : 21-04-2016, 06:42:22 »
а разве листы, которые я указываю в DSD-файле, не должны быть заранее настроены на нужное устройство вывода и правильный формат листа?

Должны :)

Оффлайн НадеждаАвтор темы

  • ADN OPEN
  • Сообщений: 25
  • Карма: 0
Re: Ошибка печати при экспорте в Pdf
« Ответ #33 : 21-04-2016, 06:49:11 »
Евгений, большое спасибо за подсказку про LocaleMediaName!!! С помощью Вашего примера узнала, как на самом деле называется мой лист, передала ему LocaleMediaName верный, и ошибка исчезла! теперь все листы настроены, можно приступать к созданию DSD-файла ))))

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

  • ADN PRO
  • *
  • Сообщений: 662
  • Карма: 12
  • Skype: pashin.evgeniy
Re: Ошибка печати при экспорте в Pdf
« Ответ #34 : 21-04-2016, 06:54:50 »
Евгений, большое спасибо за подсказку про LocaleMediaName!!! С помощью Вашего примера узнала, как на самом деле называется мой лист, передала ему LocaleMediaName верный, и ошибка исчезла! теперь все листы настроены, можно приступать к созданию DSD-файла ))))

Жду от Вас сообщения, что всё работает отлично!!! Удачи и фунт терпения :)

Оффлайн НадеждаАвтор темы

  • ADN OPEN
  • Сообщений: 25
  • Карма: 0
Re: Ошибка печати при экспорте в Pdf
« Ответ #35 : 21-04-2016, 07:03:15 »
спасибо!!!  :)

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

  • ADN PRO
  • *
  • Сообщений: 662
  • Карма: 12
  • Skype: pashin.evgeniy
Re: Ошибка печати при экспорте в Pdf
« Ответ #36 : 21-04-2016, 07:10:24 »
Не в праве Вам указывать, просто порекомендую попробовать три варианта dsd-файлов:

1. Один чертеж -> Каждый лист по отдельности в PDF.
2. Один чертеж -> Один PDF (все листы в одном файле).
3. Много чертежей -> Один PDF (все листы каждого чертежа в одном файле).

Будут вопросы - обращайтесь!

Оффлайн НадеждаАвтор темы

  • ADN OPEN
  • Сообщений: 25
  • Карма: 0
Re: Ошибка печати при экспорте в Pdf
« Ответ #37 : 21-04-2016, 07:15:55 »
да, попробую все, но мне заказали один файл DWG - один PDF (у меня в каждом dwg-файле по одному листу всегда).
а вопросы точно появятся )))

Оффлайн НадеждаАвтор темы

  • ADN OPEN
  • Сообщений: 25
  • Карма: 0
Re: Ошибка печати при экспорте в Pdf
« Ответ #38 : 21-04-2016, 10:28:17 »
Получился вариант, когда много файлов - один PDF (т.к. если несколько DSD-файлов я пытаюсь в цикле опубликовать, AutoCAD только 1 публикует (последний почему-то), остальные - нет, говорит, что были ошибки публикации, я так понимаю, что просто пока он первый печатает - уже циклом следующий обрабатывается (он у меня спрашивает имя DSD-файла), и он не успевает его обработать). Никак не получится осуществить вариант один чертеж - один PDF?

...и еще такой вопрос появился: у меня имена dwg-файлов содержат кириллицу, и когда я их передаю в файл DSD - кириллические символы там неверно отображаются, имя файла, соответственно, уже неверное, и AutoCAD не может этот файл найти... здесь тоже кроме как переимнованием файла не обойтись?

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

  • ADN PRO
  • *
  • Сообщений: 662
  • Карма: 12
  • Skype: pashin.evgeniy
Re: Ошибка печати при экспорте в Pdf
« Ответ #39 : 21-04-2016, 10:46:49 »
Никак не получится осуществить вариант один чертеж - один PDF?

Получится!!! Но есть одна загвоздка. Один файл чертежа = Один dsd-файл :) А вот в одном dsd-файле для каждого чертежа настроить свой pdf-файл???? Я посмотрю и отвечу!!!


у меня имена dwg-файлов содержат кириллицу, и когда я их передаю в файл DSD - кириллические символы там неверно отображаются, имя файла, соответственно, уже неверное, и AutoCAD не может этот файл найти... здесь тоже кроме как переименованием файла не обойтись?

Не надо никого переименовывать. Давайте лучше спросим себя, а в каком формате сохраняется dsd-файл?! Не помню точно, но если файл сохраняется в UTF-8, то проблем быть не должно. Если Ваш dsd-файл сохраняется в ANSI или Unicode, тогда русские буквы в названии чертежа действительно неверно отображаются!!! Это решается просто сохранением файла в UTF-кодировке.

Поправьте меня, если я не прав.

Оффлайн НадеждаАвтор темы

  • ADN OPEN
  • Сообщений: 25
  • Карма: 0
Re: Ошибка печати при экспорте в Pdf
« Ответ #40 : 21-04-2016, 10:57:20 »
у меня так и есть: один файл чертежа - один dsd-файл, но когда я выполняю команду Publish в AutoCAD в цикле для каждого dsd-файла, то публикуется только последний файл, а другие 3 - с ошибкой (они начинают публиковаться, когда еще 1-й не распечатался).

...кодировку файла задала UTF8, в нем все красиво отображается, но когда AutoCAD ее считывает командой PUBLISH - заменяет кириллицу чем попало ((
« Последнее редактирование: 21-04-2016, 11:27:40 от Надежда »

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

  • ADN PRO
  • *
  • Сообщений: 662
  • Карма: 12
  • Skype: pashin.evgeniy
Re: Ошибка печати при экспорте в Pdf
« Ответ #41 : 21-04-2016, 11:30:09 »
у меня так и есть: один файл чертежа - один dsd-файл, но когда я выполняю команду Publish в AutoCAD в цикле для каждого dsd-файла, то публикуется только последний файл, а другие 3 - с ошибкой (они начинают публиковаться, когда еще 1-й не распечатался).

Это понятно :)

Еще вопрос: в одном файле только один лист? Если да, то я Вам помогу!!! Если нет, то поработайте с проверкой состояния приложения AutoCAD, если он занят, то ждать пока он освободится.

...а про кодировку файла - как ее можно программно задать? я ведь файл dsd создаю программно


Код - C# [Выбрать]
  1. using System;
  2. using System.Collections.Generic;
  3. using System.ComponentModel;
  4. using System.Data;
  5. using System.Drawing;
  6. using System.Linq;
  7. using System.Text;
  8. using System.Threading.Tasks;
  9. using System.Windows.Forms;
  10. using System.Diagnostics;
  11.  
  12. namespace C_Sharp_Tuturials
  13. {
  14.     public partial class Form1 : Form
  15.     {
  16.         public Form1()
  17.         {
  18.             InitializeComponent();
  19.         }
  20.  
  21.         private void button1_Click(object sender, EventArgs e)
  22.         {
  23.             string MyContent = "";
  24.  
  25.             MyContent += "Привет, проверка сохранения" + (char) 13;
  26.             MyContent += "Если русские буквы будут отображаться неверно, то я что-то напутал" + (char) 13;
  27.             MyContent += "Если всё окей. то задача решена!!!" + (char)13;
  28.  
  29.             System.IO.File.WriteAllText("D:\\1.dsd", MyContent, System.Text.Encoding.ASCII); //Получаются ????? ??? ??? или типа того...
  30.             System.IO.File.WriteAllText("D:\\2.dsd", MyContent, System.Text.Encoding.UTF8); //Получается всё хорошо!!! Можно попробовать ещё UNICODE!!!
  31.  
  32.             Process.Start("C:\\Program Files (x86)\\Notepad++\\notepad++.exe", "D:\\1.dsd");
  33.             Process.Start("C:\\Program Files (x86)\\Notepad++\\notepad++.exe", "D:\\2.dsd");
  34.            
  35.         }
  36.     }
  37. }

В общем, тут нужно подобрать кодировку :) Может в ANSI или UNICODE будет хорошо, а в UTF-8 плохо! Точно не помню. Главное как сам AutoCAD отреагирует :)

Оффлайн НадеждаАвтор темы

  • ADN OPEN
  • Сообщений: 25
  • Карма: 0
Re: Ошибка печати при экспорте в Pdf
« Ответ #42 : 21-04-2016, 11:45:57 »
в одном файле только один лист?
в dwg-файле 2 листа (один, который был по умолчанию при создании файла и второй - мой, с которым я работаю), в dsd-файл я пишу имя только моего листа...
...а кодировка в dsd-файле = UTF8 (она по умолчанию там была такая, и руками специально я ее тоже выставляла) - в блокноте все отлично и красиво, но когда AutoCAD считывает - то перевирает кириллицу.

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

  • Administrator
  • *****
  • Сообщений: 13830
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Ошибка печати при экспорте в Pdf
« Ответ #43 : 21-04-2016, 11:48:00 »
у меня так и есть: один файл чертежа - один dsd-файл, но когда я выполняю команду Publish в AutoCAD в цикле для каждого dsd-файла, то публикуется только последний файл, а другие 3 - с ошибкой (они начинают публиковаться, когда еще 1-й не распечатался).
Какую команду PUBLISH??? Начинаем все с начала: http://adn-cis.org/forum/index.php?topic=7028.msg19746#msg19746
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн НадеждаАвтор темы

  • ADN OPEN
  • Сообщений: 25
  • Карма: 0
Re: Ошибка печати при экспорте в Pdf
« Ответ #44 : 22-04-2016, 08:53:43 »
...добрый день всем!  :)
...начала заново по варианту 1 :)

настроила параметры печати для листа, но распечатать не могу, AutoCAD выдает ошибку при проверке параметров печати (строка 1 кода), выдает сообщение "Autodesk.AutoCAD.Runtime.Exception: eWasOpenForWrite    в Autodesk.AutoCAD.PlottingServices.PlotInfoValidator.Validate(PlotInfo info)" .
Если же я закомментирую эту строку с проверкой, тогда все ломается на следующей строке (2) с такой ошибкой: "Autodesk.AutoCAD.Runtime.Exception: eInvalidPlotInfo    в Autodesk.AutoCAD.PlottingServices.PlotEngine.BeginDocument(PlotInfo plotInfo, String documentName, Object parameters, Int32 copies, Boolean plotToFile, String fileName)"
вот код:
Код - C# [Выбрать]
  1.                                 // Get the PlotInfo from the layout
  2.                                 PlotInfo acPlInfo = new PlotInfo();
  3.                                 acPlInfo.Layout = newLayout.ObjectId;
  4.  
  5.                                 // Get a copy of the PlotSettings from the layout
  6.                                 PlotSettings acPlSet = new PlotSettings(newLayout.ModelType);
  7.                                 acPlSet.CopyFrom(newLayout);
  8.  
  9.                                 // Update the PlotConfigurationName property of the PlotSettings object
  10.                                 PlotSettingsValidator acPlSetVdr = PlotSettingsValidator.Current;
  11.  
  12.                                 acPlSetVdr.SetPlotType(acPlSet, Autodesk.AutoCAD.DatabaseServices.PlotType.Layout);
  13.                                 acPlSetVdr.SetUseStandardScale(acPlSet, true);
  14.                                 acPlSetVdr.SetStdScaleType(acPlSet, StdScaleType.StdScale1To1);
  15.                                 acPlSetVdr.SetPlotConfigurationName(acPlSet, "DWG To PDF.pc3",
  16.                                                                     "UserDefinedMetric (594.00 x 841.00мм)_1");
  17.  
  18.                                 // Update the layout
  19.                                 newLayout.CopyFrom(acPlSet);
  20.                                 acPlInfo.OverrideSettings = acPlSet;
  21.  
  22. //ТЕПЕРЬ ПЫТАЮСЬ ЭТОТ ЛИСТ СРАЗУ РАСПЕЧАТАТЬ
  23.  
  24.                 String OutPath = dxf.FullName.Replace(dxf.Extension, ".pdf");
  25.                 Autodesk.AutoCAD.ApplicationServices.Application.SetSystemVariable("BACKGROUNDPLOT", 0);
  26.                 if (PlotFactory.ProcessPlotState == ProcessPlotState.NotPlotting)
  27.                 {
  28.                     PlotEngine pe = PlotFactory.CreatePublishEngine();
  29.                     using (pe)
  30.                     {
  31.                         PlotProgressDialog ppd = new PlotProgressDialog(false, 1, true);
  32.                         using (ppd)
  33.                         {
  34.                              // Setting up the PlotProgress dialog
  35.                             ppd.set_PlotMsgString(PlotMessageIndex.DialogTitle, "Custom Plot Progress");
  36.                             ppd.set_PlotMsgString(PlotMessageIndex.CancelJobButtonMessage, "Cancel Job");
  37.                             ppd.set_PlotMsgString(PlotMessageIndex.CancelSheetButtonMessage, "Cancel Sheet");
  38.                             ppd.set_PlotMsgString(PlotMessageIndex.SheetSetProgressCaption, "Sheet Set Progress");
  39.                             ppd.set_PlotMsgString(PlotMessageIndex.SheetProgressCaption, "Sheet Progress");
  40.                             ppd.LowerPlotProgressRange = 0;
  41.                             ppd.UpperPlotProgressRange = 100;
  42.                             ppd.PlotProgressPos = 0;
  43.                             ppd.OnBeginPlot();
  44.                             ppd.IsVisible = true;
  45.  
  46.                             pe.BeginPlot(ppd, null);
  47.  
  48.                              // Starting new page
  49.                                 ppd.StatusMsgString = "Plotting layout";
  50.                                 ppd.OnBeginSheet();
  51.                                 ppd.LowerSheetProgressRange = 0;
  52.                                 ppd.UpperSheetProgressRange = 100;
  53.                                 ppd.SheetProgressPos = 0;
  54.  
  55.                                 PlotInfoValidator piv = new PlotInfoValidator();
  56.                                 piv.MediaMatchingPolicy = MatchingPolicy.MatchEnabled;
  57.                                 PlotPageInfo ppi = new PlotPageInfo();
  58.                            
  59.  (1)                           piv.Validate(acPlInfo);
  60.  
  61.  (2)                           pe.BeginDocument(acPlInfo, dxf.Name, null, 1, true, OutPath); // Create document for the first page
  62.  
  63.                             // Finish the document and finish the plot
  64.                             pe.EndDocument(null);
  65.                             ppd.PlotProgressPos = 100;
  66.                             ppd.OnEndPlot();
  67.                             pe.EndPlot(null);
  68.                         }
  69.                     }
  70.                 }

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

  • Administrator
  • *****
  • Сообщений: 13830
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Ошибка печати при экспорте в Pdf
« Ответ #45 : 22-04-2016, 11:27:08 »
AutoCAD выдает ошибку при проверке параметров печати (строка 1 кода), выдает сообщение "Autodesk.AutoCAD.Runtime.Exception: eWasOpenForWrite    в Autodesk.AutoCAD.PlottingServices.PlotInfoValidator.Validate(PlotInfo info)" .
Посмотри, что у тебя открыто ForWrite и или закрой его или открой ForRead или выполни DowngradeOpen()
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн НадеждаАвтор темы

  • ADN OPEN
  • Сообщений: 25
  • Карма: 0
Re: Ошибка печати при экспорте в Pdf
« Ответ #46 : 26-04-2016, 12:40:17 »
И снова здравствуйте!  :)
Сегодня так попробовала распечатать мои листы: http://adn-cis.org/forum/index.php?topic=1692.msg6253#msg6253
И опять AutoCAD выдал ошибку:

Autodesk.AutoCAD.Runtime.Exception: eLayoutNotCurrent
   в Autodesk.AutoCAD.PlottingServices.PlotInfoValidator.Validate(PlotInfo info)

Я не знаю, как сделать лист текущим без открытия файла в AutoCAD  ???
Сколько примеров просмотрела здесь, на форуме, и в AutoCAD .NET Developer's Guide - везде используется
 doc = Application.DocumentManager.MdiActiveDocument;
у меня же активный документ - пустой файл, который открылся при запуске AutoCAD, а файлы чертежей у меня читаются и изменяются потоком, без физического их открытия... Получается, мне все-таки нужно их открывать, чтобы активировать нужный лист и распечатать его?

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

  • Administrator
  • *****
  • Сообщений: 13830
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Ошибка печати при экспорте в Pdf
« Ответ #47 : 26-04-2016, 12:44:42 »
Я не знаю, как сделать лист текущим без открытия файла в AutoCAD 
Никак. Само понятие текущий для листа имеет смысл только в открытом в редакторе файле. Мы может еще пару месяцев ходить вокруг да около. Предлагаю свести задачу к одной из уже решенных. А именно работать с файлами, а не "потоками".
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн НадеждаАвтор темы

  • ADN OPEN
  • Сообщений: 25
  • Карма: 0
Re: Ошибка печати при экспорте в Pdf
« Ответ #48 : 26-04-2016, 12:50:30 »
Значит, придется их открывать... Но тогда у меня другая проблема появляется: т.к. файлов несколько, я их в цикле открываю-печатаю-закрываю, и они не успевают печататься (пока AutoCAD печатает один, моя программа уже обрабатывает другой). Это можно каким-то образом решить?

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

  • Administrator
  • *****
  • Сообщений: 13830
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Ошибка печати при экспорте в Pdf
« Ответ #49 : 26-04-2016, 13:00:23 »
1. Так быть не должно если печать идёт не через запущенную через SendCommand команду _PLOT. Следи за состоянием переменной BACKGROUNDPLOT (должно быть 0).
2. Если у тебя есть готовые файлы, то как я уже предлагал сделай так: http://adn-cis.org/forum/index.php?topic=7028.msg19773#msg19773
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн НадеждаАвтор темы

  • ADN OPEN
  • Сообщений: 25
  • Карма: 0
Re: Ошибка печати при экспорте в Pdf
« Ответ #50 : 26-04-2016, 14:31:34 »
Наконец-то получилось!!!!  :D
Огромное спасибо, Александр Ривилис и Пашин Евгений, за помощь и поддержку!!!! Столько нового узнала!  :)
Сделала в итоге так: открывала по очереди в цикле dwg-файлы и печатала таким образом: http://adn-cis.org/forum/index.php?topic=1692.msg6253#msg6253, а
не через запущенную через SendCommand команду _PLOT
Еще раз спасибо!!!

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

  • ADN PRO
  • *
  • Сообщений: 662
  • Карма: 12
  • Skype: pashin.evgeniy
Re: Ошибка печати при экспорте в Pdf
« Ответ #51 : 26-04-2016, 14:46:26 »
Огромное спасибо, Александр Ривилис и Пашин Евгений, за помощь и поддержку!!!! Столько нового узнала! 

Это больше Александру Наумовичу спасибо :)

Оффлайн НадеждаАвтор темы

  • ADN OPEN
  • Сообщений: 25
  • Карма: 0
Re: Ошибка печати при экспорте в Pdf
« Ответ #52 : 26-04-2016, 16:01:47 »
да, безусловно, Александр Наумович мне очень помог, но если б не Ваша поддержка, Евгений, я б давно уже забросила эти pdf  :)
и без канонического имени формата бумаги тоже бы ничего не вышло )))
« Последнее редактирование: 27-04-2016, 06:05:17 от Надежда »

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

  • ADN PRO
  • *
  • Сообщений: 662
  • Карма: 12
  • Skype: pashin.evgeniy
Re: Ошибка печати при экспорте в Pdf
« Ответ #53 : 27-04-2016, 06:41:43 »
Надежда, я за Вас очень рад! Вы - молодец.

Оффлайн НадеждаАвтор темы

  • ADN OPEN
  • Сообщений: 25
  • Карма: 0
Re: Ошибка печати при экспорте в Pdf
« Ответ #54 : 27-04-2016, 06:42:45 »
спасибо, Евгений!  :)

Оффлайн Bassreflex

  • ADN OPEN
  • Сообщений: 1
  • Карма: 0
Re: Ошибка печати при экспорте в Pdf
« Ответ #55 : 24-06-2019, 09:03:56 »
Добрый день!
Я понимаю, что тема старая, ну а вдруг.

Пишу программку для пакетной печати на основе этого:
Можно пойти другими путями без вызова команды _EXPORT:
Вариант 1. https://forums.autodesk.com/t5/net/batching-export-to-pdf-from-acad-problem-c/td-p/3562450

Допилил под свои нужды, проштудировал эту тему и схожие с ней, казалось всё учел, но при определенных условиях программа аварийно завершает работу с ошибкой "eInvalidPlotInfo"
Суть программы в том, что она печатает из пространства модели (или листа) несколько "чертежей" по рамкам основной надписи - "форматкам".
Если все "форматки" одинаковые по размеру и ориентации, то печать проходит без проблем. Однако, если следующая по очереди на печать "форматка" отличается (по размеру и/или ориентации) от первой отправленной в печать, то кирдык-капут через "eInvalidPlotInfo".

Подскажите, куда копать?

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

  • Administrator
  • *****
  • Сообщений: 13830
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Ошибка печати при экспорте в Pdf
« Ответ #56 : 24-06-2019, 11:10:24 »
Подскажите, куда копать?
Приветствую на форуме!
Ну как минимум нужен пример кода и тестовый чертеж.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение