ADN Club > AutoCAD .NET API
Ошибка печати при экспорте в Pdf
Надежда:
Здравствуйте!
У меня есть программа на C#, которая при запущенном AutoCAD с заданным интервалом проверяет указанный каталог на наличие в нем файлов *.dxf либо *.dwg, обрабатывает их (разносит примитивы по слоям, добавляет лист, настраивает его и оформляет, и проч.), затем сохраняет в формате *.dwg. Потребовалось теперь эти *.dwg-файлы сохранять в формате *.pdf.
Я пытаюсь это сделать с помощью команды EXPORT (перебираю в цикле каждый *.dwg-файл, открываю его, делаю активным нужный мне лист и в командную строку отправляю команду EXPORT). Команда отрабатывает, но AutoCAD выдает сообщение, что "обнаружены ошибки/предупреждения печати/публикации" (в отчете печати пусто), и pdf-файлы не формируются... не могу понять, в чем дело... Подскажите, пожалуйста, где моя ошибка (в C# я новичок).
Вот мой кусок кода, который должен сформировать pdf:
--- Код - C# [Выбрать] ---//Это процедура, в конце которой вызывается мой метод:private bool BakeIsoPipe(string file){ ..... ....тут идет обработка и сохранение найденных *.dxf-файлов .... //а это вызов моего метода: FileInfo[] dwgFiles = fi.Directory.GetFiles("*.dwg"); //("*.dwg"); if (dwgFiles.Length != 0) foreach (FileInfo dwg in dwgFiles) dwgToPdf(dwg, layoutName); return true;} public void dwgToPdf(FileInfo dwg, string layoutName) { //это мне нужно для синхронного запуска команды Autodesk.AutoCAD.Interop.AcadApplication acadCOMApp; acadCOMApp = (Autodesk.AutoCAD.Interop.AcadApplication)Autodesk.AutoCAD.ApplicationServices.Application.AcadApplication; string dwgN = dwg.FullName; DocumentCollection acDocMgr = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager; Document acDoc = acDocMgr.Open(dwgN, false); acDoc.LockDocument(); Database acdb = acDoc.Database; Editor ed = acDoc.Editor; using (Transaction acTrans = acdb.TransactionManager.StartTransaction()) { DBDictionary layoutDict = (DBDictionary)acTrans.GetObject(acdb.LayoutDictionaryId, OpenMode.ForWrite); //удаляю присутствующий в файле ненужный мне лист foreach (DBDictionaryEntry entry in layoutDict) { string layName = entry.Key; if (layName != "Model" && layName != layoutName) { LayoutManager.Current.DeleteLayout(layName); } } layoutDict.Dispose(); acTrans.Commit(); } ed.Regen(); //делаю текущим нужный мне лист LayoutManager.Current.CurrentLayout = layoutName; string pdfName = dwgN.Replace(dwg.Extension, ".pdf"); string pdfNameNew = pdfName.Replace("\\", "/"); //string acComm = "(command \"_-export\" \"_p\" \"_c\" \"_n\" \"" + pdfNameNew + "\")" + "\n"; string acComm = "\"_-export\" \"_p\" \"_c\" \"_n\" \"" + pdfNameNew + "\" "; acDocMgr.MdiActiveDocument = acDoc; Autodesk.AutoCAD.Interop.AcadDocument acDoc1 = acadCOMApp.ActiveDocument; acDoc1.SendCommand(acComm); acDoc.CloseAndDiscard(); }
AutoCAD 2012, VS 2012, .NET Framework 4.0
Александр Ривилис:
Надежда
Приветствую на форуме!
Попробуйте перед запуском команды однократно загрузить AcPublish.arx:
--- Код - C# [Выбрать] ---SystemObjects.DynamicLinker.LoadModule("AcPublish.arx", false, false);Лучше всего этот код вставить в метод Initialize.
Надежда:
Здравствуйте, Александр!
Спасибо, что откликнулись!
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
Александр Ривилис:
Еще нужно попробовать установить backgroundplot в 0 перед запуском команды.
Надежда:
нет, все равно не помогает (((
может быть, это из-за того, что я сначала открываю файл через DocumentManager (переменная acDoc), а потом, чтобы синхронно выполнить команду, использую для этого же открытого файла .Net COM Interop (переменная acDoc1)? Может быть, мне нужно как-то acDoc разблокировать?
я уже и паузу пыталась после команды вставить, предполагая, что ему просто времени не хватает на печать... но нет, видно, что после передачи имени файла pdf в командную строку ничего не происходит (если руками делать - то там мелькают сообщения, что вычерчивается видовой экран и что-то еще)
Навигация
Перейти к полной версии