Ownsight

?找回密码
?立即注册
搜索
热搜: 活动 交友 discuz
查看: 932|回复: 0
打印 上一主题 下一主题

c# autocad dwg 转换 pdf

[复制链接]

803

主题

903

帖子

3201

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
3201
跳转到指定楼层
楼主
发表于 2017-11-9 18:31:54 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
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 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


您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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