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

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

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

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

  • 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
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь 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
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь 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
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь 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
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь 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
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь 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-файлу.

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