我做过一个,不一定适合你,最好自己写一个,给你一个思路:
1. 在当前图纸中找到要打印的图框。这一步可以用两个方法做,一个是用for each entity in thisdrawing.modelspace的方法,查询每个对象,如果对象是块,那么取得名称,如果是需要的图框块名称,就取得了要打印的块,这个方法写程序较麻烦,速度也不快;第二种方法是使用select方法,设置过滤器的组码类型为2,也就是名称,组码的值就是图框块的名称了,十分迅速就可以找到图框。
2. 找到图框块以后,用getboundingbox方法取得图框的最外边大小。如果找到的图框不止一个,就需要设置一个数组临时存放范围坐标。
3. 全部OK了,使用下列代码来打印:
PlotLowLeft(0) = 范围左下角X坐标
PlotLowLeft(1) = 范围左下角Y坐标
PlotUpRight(0) = 范围右上角X坐标
PlotUpRight(1) = 范围右上角Y坐标
' 设置打印范围
ThisDrawing.ModelSpace.Layout.SetWindowToPlot PlotLowLeft, PlotUpRight
'设置打印方式是窗口
ThisDrawing.ModelSpace.Layout.PlotType = acWindow
'设置打印比例为缩放到图纸大小,并中心对正 ThisDrawing.ModelSpace.Layout.StandardScale = acScaleToFit ThisDrawing.ModelSpace.Layout.CenterPlot = True
'设置笔为单色 ThisDrawing.ModelSpace.Layout.StyleSheet = "monochrome.ctb" '选择打印机和纸张 ThisDrawing.ModelSpace.Layout.ConfigName = "打印机名称" ThisDrawing.ModelSpace.Layout.CanonicalMediaName = "A4" ' 设置打印份数为1 ThisDrawing.Plot.NumberOfCopies = 1 ' 设置安静打印
ThisDrawing.Plot.QuietErrorMode = True '旋转设置 If PlotUpRight(0) - PlotLowLeft(0) > PlotUpRight(1) - PlotLowLeft(1) Then ThisDrawing.ModelSpace.Layout.PlotRotation = ac90degrees Else ThisDrawing.ModelSpace.Layout.PlotRotation = ac0degrees End If
'打印 ThisDrawing.Plot.PlotToDevice
4. 如果需要选择打印机,可以做一个对话框,用GetPlotDeviceNames方法取得所有打印机名称,放到一个combobox中,就可以让用户选择打印机。如果要打印多个文件中的图框,可以同时打开多个dwg,用for each doc in application.documents的方法在每个dwg中循环。 |