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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM