C#实战之CAD二次开发005:打印pdf

前言
上期我们介绍了如何在CAD中插入尺寸标注功能,这期我们再讲一下如何实现在CAD中打印pdf功能。

打印pdf

要实现打印pdf功能,需要借助一个软件pdfFactory,这个是pdf虚拟打印机,可以实现CAD打印pdf功能,该软件的下载地址为:
链接:https://pan.baidu.com/s/1LFvNM4V8UIAOUi2bEPbPEQ 提取码:8wwj
当然也可以使用CAD自带的打印pdf功能,但是有时候打印出来的pdf文档中的某些希腊字符可能会出现乱码,故本次使用的是pdfFactory软件来实现。
代码贴上:

private static void plotPdf(AcadDocument Doc, double[] lowerLeft, double[] upperRight)
{
    AcadLayout layout2 = Doc.ActiveLayout;
    AcadPlotConfiguration plotConfiguration2 = Doc.PlotConfigurations.Add(Guid.NewGuid().ToString("N"), Doc.ActiveLayout.ModelType);
    plotConfiguration2.ConfigName = pdfFactory Pro.pc3; //打印机名,这里选择安装好的pdffactory
    plotConfiguration2.StyleSheet = "monochrome.ctb"; //样式表名
    plotConfiguration2.PlotWithLineweights = true; //线宽比例
    plotConfiguration2.PlotWithPlotStyles = true; //使用样式
    plotConfiguration2.CanonicalMediaName = "A4"; //图纸尺寸

    double[] LowerLeft2 = Doc.Utility.TranslateCoordinates(lowerLeft, AcCoordinateSystem.acWorld, AcCoordinateSystem.acDisplayDCS, 0, Type.Missing) as double[];
    double[] UpperRight2 = Doc.Utility.TranslateCoordinates(upperRight, AcCoordinateSystem.acWorld, AcCoordinateSystem.acDisplayDCS, 0, Type.Missing) as double[];
    plotConfiguration2.SetWindowToPlot(new double[] { LowerLeft2[0], LowerLeft2[1] }, new double[] { UpperRight2[0], UpperRight2[1] });
    plotConfiguration2.PlotType = AcPlotType.acWindow; //打印模式為窗口

    plotConfiguration2.UseStandardScale = true;
    plotConfiguration2.StandardScale = AcPlotScale.acScaleToFit; //标准比例,需要UseStandardScale = true;

    plotConfiguration2.CenterPlot = true; //居中打印
    plotConfiguration2.PaperUnits = AcPlotPaperUnits.acMillimeters; //单位毫米
    plotConfiguration2.PlotRotation = AcPlotRotation.ac0degrees;//横向纵向

    layout2.CopyFrom(plotConfiguration2);
    layout2.RefreshPlotDeviceInfo();//发送打印命令给pdf
    Doc.Plot.QuietErrorMode = true;

    Doc.Plot.PlotToDevice();

}

其中传入CAD Doc对象,就可以设置相应的打印选项。这里要注意的是,需要引用CAD两个东西:
using Autodesk.AutoCAD.Interop.Common;
using Autodesk.AutoCAD.Interop;
可以设置打印样式、选择打印机、图纸尺寸等等;
控制打印范围的方法主要是这个SetWindowToPlot,通过传入一个double数组double[]来控制选取的点(之前一直卡在这里,因为SetWindowToPlot方法里的参数为(object LowerLeft, object UpperRight),不知道object应该是什么)。
除了选取范围打印,也可以设置其他方式打印,具体读者可以通过设置AcPlotType来尝试一下,这里再介绍一下如何实现自动打开CAD文件,

public class OpreateCad
{
	public static AcadApplication App;
	public static AcadDocument Doc;
	private static void open_cad()
	{
	    //連接CAD
	    if (connect_autocad() == false)
	    {
	        return;
	    }
	    //關閉已打開文檔
	    App.Documents.Close();
	    Doc = App.Documents.Open(Application.StartupPath + "\\" + "source.dwg");
	    App.ZoomExtents();
	}
	private static bool connect_autocad()
	{
	    try
	    {   // if AUTOCAD alread open,then conenct it.
	        App = (AcadApplication)System.Runtime.InteropServices.Marshal.GetActiveObject("AutoCAD.Application");
	    }
	    catch
	    {   // if AUTOCAD don't open then open it. 
	        try
	        {
	             App = new AcadApplication();
	        }
	        catch (Exception e) { Console.WriteLine(e); return false; }
	    }
	    App.Visible = true;
	    return true;
}

通过调用open_cad这个方法就可以实现自动打开你所指定路径下的CAD文档,这样就不用每次都要自己手动去打开CAD。
同样的,我们把打印pdf的方法放到我们Command类中,在打开CAD之后,输入cad命令,即可实现打印pdf的功能,如果需要打印多张的话,可以多次调用这个方法,并设置成不同的坐标点即可。
默认情况下,每打印一张pdf会弹出一个预览框,会影响到下一个pdf的打印,我们需要把这一个预览的选项关闭。首先我们按CTRL+P进入打印机选项界面
C#实战之CAD二次开发005:打印pdf_第1张图片
选择我们安装的pdffactory,点击旁边的性质选项
C#实战之CAD二次开发005:打印pdf_第2张图片
再点击自订性质选项,选中不要显示对话方块,下方全部取消勾选即可。
默认pdf的保存路径为C盘的文件的pdf档案的自动保存中,文件名默认
C#实战之CAD二次开发005:打印pdf_第3张图片
打印pdf效果如下(这里没显示具体打印内容,总共打印了三次)
C#实战之CAD二次开发005:打印pdf_第4张图片
这期打印pdf功能的介绍就到这里了,由于本项目会和python进行文件传输,下期我会介绍如何通过socket与python进行文件传输的功能。

你可能感兴趣的:(CAD二次开发)