public static void SaveAsPDF(ResultBuffer rbArgs) { var editor = Acad.DocumentManager.MdiActiveDocument.Editor; editor.WriteMessage("Процесс экспорта чертежей в формат PDF начинается..."); // Получение директории и параметров поиска if (rbArgs != null) { string str = ""; bool subDirs = false; foreach (TypedValue rb in rbArgs) { if (rb.TypeCode == (int)Autodesk.AutoCAD.Runtime.LispDataType.Text) { if (rb.Value.ToString() == "true") { subDirs = true; } else if (rb.Value.ToString() == "false") { subDirs = false; } else { str += rb.Value.ToString(); } } } Acad.DocumentManager.MdiActiveDocument.Editor.WriteMessage("Путь к чертежам: " + str); // Получение списка файлов с учетом заданного пути и параметров поиска try { str = str.Replace('/', '\\'); System.IO.DirectoryInfo rootDir = new System.IO.DirectoryInfo(str); System.IO.FileInfo[] dirs = rootDir.GetFiles("*.dwg", subDirs ? SearchOption.AllDirectories : SearchOption.TopDirectoryOnly); //Список листов найденных чертежей foreach (FileInfo dir in dirs) { editor.WriteMessage(Environment.NewLine + dir); using (Database dwgDB = new Database(false, true)) { dwgDB.ReadDwgFile(dir.FullName, System.IO.FileShare.ReadWrite, false, ""); Acad.SetSystemVariable("BACKGROUNDPLOT", 1); //Далее манипуляции с базой данных чертежа using (Transaction acTrans = dwgDB.TransactionManager.StartTransaction()) { List <Layout> layouts = new List <Layout>(); DBDictionary layoutDict = (DBDictionary)acTrans.GetObject(dwgDB.LayoutDictionaryId, OpenMode.ForRead); editor.WriteMessage("Листы чертежа " + dir + ":"); foreach (DBDictionaryEntry id in layoutDict) { if (id.Key != "Model") { Layout ltr = (Layout)acTrans.GetObject((ObjectId)id.Value, OpenMode.ForRead); layouts.Add(ltr); editor.WriteMessage(Environment.NewLine + ltr.LayoutName); } } layouts.Sort((l1, l2) => l1.TabOrder.CompareTo(l2.TabOrder)); string filename = Path.ChangeExtension(dwgDB.Filename, "pdf"); MultiSheetsPdf plotter = new MultiSheetsPdf(filename, layouts); plotter.Publish(); editor.WriteMessage(Environment.NewLine + dwgDB.Filename + " успешно экспортирован"); acTrans.Commit(); } } } } catch (Autodesk.AutoCAD.Runtime.Exception e) { editor.WriteMessage("\nError: {0}\n{1}", e.Message, e.StackTrace); } } }
public static void SaveAsPDF(ResultBuffer rbArgs)//Основная функция плагина (Требуется корректировка и тестирование) { var editor = Acad.DocumentManager.MdiActiveDocument.Editor; editor.WriteMessage("Процесс экспорта чертежей в формат PDF начинается..."); // Получение директории и параметров поиска if (rbArgs != null) { string str = ""; bool subDirs = false; foreach (TypedValue rb in rbArgs) { if (rb.TypeCode == (int)LispDataType.Text) { if (rb.Value.ToString() == "true") { subDirs = true; } else if (rb.Value.ToString() == "false") { subDirs = false; } else { str += rb.Value.ToString(); } } } Acad.DocumentManager.MdiActiveDocument.Editor.WriteMessage("Путь к чертежам: " + str); // Получение списка файлов с учетом заданного пути и параметров поиска try { str = str.Replace('/', '\\'); DirectoryInfo rootDir = new DirectoryInfo(str); List <FileInfo> files = new List <FileInfo>(); short bgp = (short)Acad.GetSystemVariable("BACKGROUNDPLOT"); Acad.SetSystemVariable("BACKGROUNDPLOT", 0); GetFiles(rootDir, files, subDirs); //Список листов найденных чертежей foreach (FileInfo file in files) { editor.WriteMessage(Environment.NewLine + file); using (Database dwgDB = new Database(false, true)) { dwgDB.ReadDwgFile(file.FullName, FileShare.ReadWrite, false, ""); //Далее манипуляции с базой данных чертежа using (Transaction acTrans = dwgDB.TransactionManager.StartTransaction()) { List <Layout> layouts = new List <Layout>(); DBDictionary layoutDict = (DBDictionary)acTrans.GetObject(dwgDB.LayoutDictionaryId, OpenMode.ForRead); editor.WriteMessage("Листы чертежа " + file + ":"); foreach (DBDictionaryEntry id in layoutDict) { if (id.Key != "Model") { Layout ltr = (Layout)acTrans.GetObject((ObjectId)id.Value, OpenMode.ForRead); PlotConfig config = PlotConfigManager.SetCurrentConfig("AutoCAD PDF (High Quality Print).pc3"); PlotSettingsValidator psv = PlotSettingsValidator.Current; PlotSettings ps = new PlotSettings(ltr.ModelType); psv.SetPlotConfigurationName(ps, "AutoCAD PDF (High Quality Print).pc3", null); psv.RefreshLists(ps); layouts.Add(ltr); editor.WriteMessage(Environment.NewLine + ltr.LayoutName); editor.WriteMessage(Environment.NewLine + ltr.PlotPaperSize.ToString()); editor.WriteMessage(Environment.NewLine + ltr.PlotSettingsName); } } layouts.Sort((l1, l2) => l1.TabOrder.CompareTo(l2.TabOrder)); string filename = Path.ChangeExtension(dwgDB.Filename, "pdf"); MultiSheetsPdf plotter = new MultiSheetsPdf(filename, layouts); plotter.Publish(); editor.WriteMessage(Environment.NewLine + dwgDB.Filename + " успешно экспортирован"); acTrans.Commit(); } } } Acad.SetSystemVariable("BACKGROUNDPLOT", bgp); } catch (Autodesk.AutoCAD.Runtime.Exception e) { editor.WriteMessage("\nError: {0}\n{1}", e.Message, e.StackTrace); } } else { } }