找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1650|回复: 0

[分享] dwg文件转化为pdf

[复制链接]

已领礼包: 6个

财富等级: 恭喜发财

发表于 2016-4-13 16:54:40 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
最近做一个项目,要求将dwg文件转化为pdf,开发工具VS2010 + AutoCad 2011,
在网上查了很多代码都有各种问题,解决重重的问题,终于实现了批量转化。

1.首先引入com组件
AutoCAD 2011 Type Library
AutoCAD/ObjectDBX Common18.0 Type Library
2.创建/获取CAD实例

C#代码  [url=] 0.jpg [/url]

  • private static AcadApplication _app = null;  
  •   
  •         private static void Initialization()  
  •         {              
  •             string programID = "AutoCAD.Application.18.1";  
  •             try  
  •             {  
  •                 //如果CAD已经打开,就直接获取  
  •                 _app = (AcadApplication)Marshal.GetActiveObject(programID);  
  •             }  
  •             catch  
  •             {  
  •                 try  
  •                 {  
  •                    //创建新的实例  
  •                     _app = (AcadApplication)new AcadDocument().Application;                  
  •                 }  
  •                 catch  
  •                 {  
  •                     throw;  
  •                 }  
  •             }  
  •         }  



关于AutoCAD2011对应的版本是AutoCAD.Application.18.1
关于创建CAD实例的方法,网上流传的版本是
app = new AcadApplication();
app = new AcadApplicationClass();
经过测试上述两种方法对于AutoCad 2011都报错。。
所以采取了_app = (AcadApplication)new AcadDocument().Application;
3.dwg批量转换成pdf

C#代码  [url=] 1.jpg [/url]

  • public static void Dwg2Pdf(IEnumerable<FileInfo> files)  
  • {  
  •     Initialization();  
  •       
  •     AcadDocument doc = null;  
  •     string destPath = string.Empty;  
  •     try  
  •     {  
  •         foreach (var f in files)  
  •         {  
  •             doc = _app.Documents.Open(f.FullName,true);  
  •             doc.SetVariable("sdi", 0);  
  •             doc.SetVariable("Filedia", 0);  
  •             doc.SetVariable("RASTERPREVIEW", 1);  
  •             doc.SetVariable("BACKGROUNDPLOT", 0);  
  •             doc.ActiveLayout.ConfigName = _cfg.AUTOCAD_PC3;  
  •             doc.ActiveLayout.UseStandardScale = true;  
  •             doc.ActiveLayout.StandardScale = AcPlotScale.acScaleToFit;  
  •             doc.ActiveLayout.PlotType = AcPlotType.acExtents;  
  •             doc.ActiveLayout.CenterPlot = true;  
  •             doc.ActiveLayout.PlotRotation = AcPlotRotation.ac0degrees;  
  •             doc.ActiveLayout.PlotType = Autodesk.AutoCAD.Interop.Common.AcPlotType.acExtents;  
  •             doc.Plot.QuietErrorMode = true;  
  •             destPath = Path.Combine(f.Directory.FullName, Path.GetFileNameWithoutExtension(f.Name) + ".pdf");  
  •             doc.Plot.PlotToFile(destPath);                     
  •             if (doc != null) doc.Close(false);  
  •         }  
  •     }  
  •     catch (System.Exception e)  
  •     {  
  •         throw e;  
  •     }  
  •     finally  
  •     {  
  •         try  
  •         {  
  •             doc.Close(false);  
  •             _app.Quit();  
  •         }  
  •         catch { }  
  •     }  
  • }  

需要注意几点
1.doc.SetVariable("BACKGROUNDPLOT", 0);一定要设置为0,否则只能转换第一个文件,第二个文件就报错。
2.doc.ActiveLayout.ConfigName不同版本的CAD都不一样,有的是DWGtoPDF.pc3也有的是DWG to PDF.pc3

论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-4-26 19:25 , Processed in 0.358266 second(s), 34 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表