ADN Club > AutoCAD .NET API

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

(1/13) > >>

Надежда:
Здравствуйте!

У меня есть программа на 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 в командную строку ничего не происходит (если руками делать - то там мелькают сообщения, что вычерчивается видовой экран и что-то еще)

Навигация

[0] Главная страница сообщений

[#] Следующая страница

Перейти к полной версии