c# 将dwg文件转化为pdf

最近做一个项目,要求将dwg文件转化为pdf,开发工具VS2010 + AutoCad 2011,

在网上查了很多代码都有各种问题,解决重重的问题,终于实现了批量转化。

 

1.首先引入com组件

AutoCAD 2011 Type Library

AutoCAD/ObjectDBX Common18.0 Type Library

2.创建/获取CAD实例

 

C#代码   收藏代码
  1. private static AcadApplication _app = null;  
  2.   
  3.         private static void Initialization()  
  4.         {              
  5.             string programID = "AutoCAD.Application.18.1";  
  6.             try  
  7.             {  
  8.                 //如果CAD已经打开,就直接获取  
  9.                 _app = (AcadApplication)Marshal.GetActiveObject(programID);  
  10.             }  
  11.             catch  
  12.             {  
  13.                 try  
  14.                 {  
  15.                    //创建新的实例  
  16.                     _app = (AcadApplication)new AcadDocument().Application;                  
  17.                 }  
  18.                 catch  
  19.                 {  
  20.                     throw;  
  21.                 }  
  22.             }  
  23.         }  

 

 

关于AutoCAD2011对应的版本是AutoCAD.Application.18.1

关于创建CAD实例的方法,网上流传的版本是

app = new AcadApplication();

app = new AcadApplicationClass();

经过测试上述两种方法对于AutoCad 2011都报错。。

所以采取了_app = (AcadApplication)new AcadDocument().Application;

3.dwg批量转换成pdf

 

C#代码   收藏代码
  1. public static void Dwg2Pdf(IEnumerable files)  
  2. {  
  3.     Initialization();  
  4.       
  5.     AcadDocument doc = null;  
  6.     string destPath = string.Empty;  
  7.     try  
  8.     {  
  9.         foreach (var f in files)  
  10.         {  
  11.             doc = _app.Documents.Open(f.FullName,true);  
  12.             doc.SetVariable("sdi", 0);  
  13.             doc.SetVariable("Filedia", 0);  
  14.             doc.SetVariable("RASTERPREVIEW", 1);  
  15.             doc.SetVariable("BACKGROUNDPLOT", 0);  
  16.             doc.ActiveLayout.ConfigName = _cfg.AUTOCAD_PC3;  
  17.             doc.ActiveLayout.UseStandardScale = true;  
  18.             doc.ActiveLayout.StandardScale = AcPlotScale.acScaleToFit;  
  19.             doc.ActiveLayout.PlotType = AcPlotType.acExtents;  
  20.             doc.ActiveLayout.CenterPlot = true;  
  21.             doc.ActiveLayout.PlotRotation = AcPlotRotation.ac0degrees;  
  22.             doc.ActiveLayout.PlotType = Autodesk.AutoCAD.Interop.Common.AcPlotType.acExtents;  
  23.             doc.Plot.QuietErrorMode = true;  
  24.             destPath = Path.Combine(f.Directory.FullName, Path.GetFileNameWithoutExtension(f.Name) + ".pdf");  
  25.             doc.Plot.PlotToFile(destPath);                      
  26.             if (doc != null) doc.Close(false);  
  27.         }  
  28.     }  
  29.     catch (System.Exception e)  
  30.     {  
  31.         throw e;  
  32.     }  
  33.     finally  
  34.     {  
  35.         try  
  36.         {  
  37.             doc.Close(false);  
  38.             _app.Quit();  
  39.         }  
  40.         catch { }  
  41.     }  
  42. }  

 需要注意几点

1.doc.SetVariable("BACKGROUNDPLOT", 0);一定要设置为0,否则只能转换第一个文件,第二个文件就报错。

2.doc.ActiveLayout.ConfigName不同版本的CAD都不一样,有的是DWGtoPDF.pc3也有的是DWG to PDF.pc3

你可能感兴趣的:(c#)