ADN Open CIS
Сообщество программистов Autodesk в СНГ

21/11/2015

Публикация листов в PDF с помощью COM API

У нас нет специального API, которое бы позволило публиковать несколько листов в один PDF-документ, так что придётся это сделать другим способом.

В этой статье я покажу как создать простой DSD-файл и использовать его для выполнения команды _PUBLISH (ПУБЛ).

Код - C#: [Выделить]
  1. class DSDObject
  2. {
  3.                 public DSDObject()
  4.                 {
  5.  
  6.                 }
  7.                
  8.                 public string DWG { get; set; }
  9.                 public string Layout { get; set; }
  10.                 public string Setup { get; set; }
  11.                 public string dwgName { get; set; }
  12.                 public String createDSDEntry()
  13.                 {
  14.                
  15.                                StringBuilder sb = new StringBuilder();
  16.                                sb.Append("[DWF6Sheet:" + this.dwgName + "-" + Layout + "]");
  17.                                sb.AppendLine();
  18.                                sb.Append("DWG=" + DWG);
  19.                                sb.AppendLine();
  20.                                 sb.Append("Layout=" + Layout);
  21.                                sb.AppendLine();
  22.                                sb.Append("Setup=");
  23.                                return sb.ToString();
  24.                 }
  25.  
  26. }
  27.  
  28. public static void TP()
  29. {
  30.                 Autodesk.AutoCAD.Interop.AcadApplication acadCOMApp;
  31.                 acadCOMApp = (Autodesk.AutoCAD.Interop.AcadApplication)Application.AcadApplication;
  32.                 AcadDocument acadDoc = acadCOMApp.ActiveDocument;
  33.                 string drawingName = acadDoc.Name;
  34.                 string drawingPath = acadDoc.FullName;
  35.                 List entries = new List();
  36.  
  37.                 foreach(AcadLayout alayout in acadDoc.Layouts)
  38.                 {
  39.                                DSDObject dsdObj = new DSDObject();
  40.                                                               
  41.                                dsdObj.DWG = drawingPath;
  42.                                dsdObj.dwgName = drawingName;
  43.                                dsdObj.Layout = alayout.Name;
  44.                                dsdObj.Setup = "";
  45.  
  46.                                entries.Add(dsdObj.createDSDEntry());
  47.                 }
  48.  
  49.                 StreamWriter writer = new StreamWriter("c:\\trash\\testDSD.dsd");
  50.                 writer.WriteLine("[DWF6Version]");
  51.                 writer.WriteLine("Ver=1");
  52.                 foreach(string entry in entries)
  53.                 {
  54.                    writer.WriteLine(entry);
  55.                 }
  56.  
  57.                 writer.WriteLine("[Target]");
  58.                 writer.WriteLine("Type=6");
  59.  
  60.                 writer.WriteLine("DWF=C:\\Users\\moogalm\\Desktop\\Kitchens.pdf");
  61.                 writer.WriteLine("OUT=C:\\Users\\moogalm\\Desktop\\");
  62.                 writer.WriteLine("PWD=");
  63.                 writer.Close();
  64.                 FileInfo fi = new FileInfo("C:\\Trash\\testDSD.dsd");
  65.  
  66.                 if (fi.Length > 0)
  67.                 {
  68.                                acadDoc.SetVariable("FILEDIA", 0);
  69.                                acadDoc.SendCommand("_-PUBLISH " + fi.FullName +"\n");
  70.                                acadDoc.SetVariable("FILEDIA", 1);
  71.                 }
  72.                
  73. }

 

Источник: http://adndevblog.typepad.com/autocad/2015/11/publish-layouts-to-pdf-using-com.html

Автор перевода: Александр Ривилис

Обсуждение: http://adn-cis.org/forum/index.php?topic=3224

Опубликовано 21.11.2015
Отредактировано 22.11.2015 в 14:20:02