zoukankan      html  css  js  c++  java
  • c# 将dwg文件转化为pdf

    https://blog.csdn.net/mywaster/article/details/50220379

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

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

     1.首先引入com组件

    AutoCAD 2011 Type Library

    AutoCAD/ObjectDBX Common18.0 Type Library

    2.创建/获取CAD实例

    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

    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

  • 相关阅读:
    【URL重写】IIS7配置URL重写
    【IIS7.5】Asp文件上传限制,加载页面大小限制
    msxml3.dll 错误 '800c0005' 系统错误: -2146697211。
    【转】修改3389远程端口的批处理文件.bat
    第一篇:无角牛MVC通用后台数据库设计
    无角牛MVC通用后台
    个人收集资料整理-WebForm
    个人收集资料整理-WinForm
    win7系统中桌面图标显示不正常问题
    ASP.NET MVC 第六回 过滤器Filter
  • 原文地址:https://www.cnblogs.com/belx/p/9256301.html
Copyright © 2011-2022 走看看