前言
上期我們介紹了如何在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進入列印機選項界面
選擇我們安裝的pdffactory,點選旁邊的性質選項
再點選自訂性質選項,選中不要顯示對話方塊,下方全部取消勾選即可。
預設pdf的儲存路徑為C槽的檔案的pdf檔案的自動儲存中,檔案名預設
列印pdf效果如下(這裡沒顯示具體列印内容,總共列印了三次)
這期列印pdf功能的介紹就到這裡了,由于本項目會和python進行檔案傳輸,下期我會介紹如何通過socket與python進行檔案傳輸的功能。