天天看點

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

選擇我們安裝的pdffactory,點選旁邊的性質選項

C#實戰之CAD二次開發005:列印pdf

再點選自訂性質選項,選中不要顯示對話方塊,下方全部取消勾選即可。

預設pdf的儲存路徑為C槽的檔案的pdf檔案的自動儲存中,檔案名預設

C#實戰之CAD二次開發005:列印pdf

列印pdf效果如下(這裡沒顯示具體列印内容,總共列印了三次)

C#實戰之CAD二次開發005:列印pdf

這期列印pdf功能的介紹就到這裡了,由于本項目會和python進行檔案傳輸,下期我會介紹如何通過socket與python進行檔案傳輸的功能。