Convert DWG or DFX file for AutoCAD to PDF in C#
用C#实现DWG to PDF 或 DXF to PDF并不是一件容易的事,我分别尝试了借助AutoCAD的DWGtoPDF.pc3和使用第三方软件Aspose.CAD for .NET来实现此功能,结果都不完美,这里记录下实现方式以及优缺点对比,给需要的同学参考。
DWGtoPDF.pc3
DWGtoPDF.pc3是autocad中的DWG图纸文件打印成pdf文件的打印配置文件,这种方案是网络上广为流传的方案,我主要参考了C#利用AutoCad将dwg批量转换为pdf。
优点:免费。
缺点:
1. 必须要安装AutoCAD,在实现将DWG to PDF时,需要开启AutoCAD打开相应的DWG文件。
2. 转换后的PDF丢失原图很多细节。
用DWGtoPDF.pc3实现DWG to PDF的实现步骤如下:
1. 安装任意一个版本的AutoCAD。我使用的版本是Visual Studio 2013 + AutoCAD2013。
2. 在相应的C#工程中引用COM组件,以下两个组件引入后,在“引用”列表中的名称分别为AutoCAD和AXDBLib。
AutoCAD 2013 Type Library
AutoCAD/ObjectDBX Common19.0 Type Library
3. 实现代码如下。与原参考文献相比,下面的代码删除了两句代码。
doc.SetVariable(“RASTERPREVIEW”, 1);
RASTERPREVIEW是一个系统变量,该变量的意义是控制BMP预览图像是否随图形一起保存,其初始值为:1, 保存预览图像;0,不保存预览图像。该语句加在VS2013的工程中编译会报错,因其默认值为1,删除此语句应该不影响整体效果。
doc.ActiveLayout.PlotType = Autodesk.AutoCAD.Interop.Common.AcPlotType.acExtents;
AutoCAD2013的COM组件中不包含Autodesk.AutoCAD.Interop的命名空间,理由请参考Autodesk.AutoCAD.Interop missing
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
public static void Dwg2Pdf(IEnumerable<FileInfo> files) { AcadApplication _app = (AcadApplication)new AcadDocument().Application; 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("BACKGROUNDPLOT", 0); doc.ActiveLayout.ConfigName = "DWG to PDF.pc3"; doc.ActiveLayout.UseStandardScale = true; doc.ActiveLayout.StandardScale = AutoCAD.AcPlotScale.acScaleToFit; doc.ActiveLayout.PlotType = AutoCAD.AcPlotType.acExtents; doc.ActiveLayout.CenterPlot = true; doc.ActiveLayout.PlotRotation = AutoCAD.AcPlotRotation.ac0degrees; 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 { } } } |
Apose.CAD for .NET
在NuGet上可以找到该组件的免费版本,该版本可以轻松并且完美的将DWG和DXF文件转换为PDF,而且不需要安装和开启AudoCAD。但是免费版本转换得到的PDF文件的左上角会有Aspose的版权LOGO,要想没有Logo,需要付费。Aspose官方网站上有大量的示例代码,这里就不搬运了。