明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 3609|回复: 0

简单C#打印程序并注释

[复制链接]
发表于 2011-11-13 16:22:28 | 显示全部楼层 |阅读模式

private PlotInfo SetPlotInfo(Document doc, Extents2d exArea, string strPrinter, int iSize)
        {
            Database db = doc.Database;
            Editor ed = doc.Editor;
            using (Transaction tr = db.TransactionManager.StartTransaction())           //开启事务
            {
                //设置布局管理器为当前布局管理器
                LayoutManager layoutMan = LayoutManager.Current;
                //获取当前布局,用GetObject的方式
                Layout currentLayout = tr.GetObject(layoutMan.GetLayoutId(layoutMan.CurrentLayout), OpenMode.ForRead) as Layout;
                //创建一个PlotInfo类,从布局获取信息
                PlotInfo pi = new PlotInfo();
                pi.Layout = currentLayout.ObjectId;
                //从布局获取一个PlotSettings对象的附本
                PlotSettings ps = new PlotSettings(currentLayout.ModelType);
                ps.CopyFrom(currentLayout);
                //创建PlotSettingsValidator对象,通过它来改变PlotSettings.
                PlotSettingsValidator psv = PlotSettingsValidator.Current;
                //设置打印窗口范围
                psv.SetPlotWindowArea(ps, exArea);
                psv.SetPlotType(ps, Autodesk.AutoCAD.DatabaseServices.PlotType.Window);
                //设置打印比例为布满图纸
                psv.SetUseStandardScale(ps, true);
                psv.SetStdScaleType(ps, StdScaleType.ScaleToFit);
                //设置居中打印
                psv.SetPlotCentered(ps, true);
                //设置横向打印还是纵向打印
                if ((exArea.MaxPoint.X - exArea.MinPoint.X) > (exArea.MaxPoint.Y - exArea.MinPoint.Y))
                {
                    psv.SetPlotRotation(ps, PlotRotation.Degrees090);                   //横向
                }
                else
                {
                    psv.SetPlotRotation(ps, PlotRotation.Degrees000);                   //纵向  
                }
                //设置打印设备
               
                if (iSize == 3)
                {
                    psv.SetPlotConfigurationName(ps, strPrinter, null);                 //打印A3
                    StringCollection sMediasA3 = psv.GetCanonicalMediaNameList(ps);
                    bool isA3 = false;
                    int i = 0;
                    for(i=0;i<sMediasA3.Count;i++)
                    {
                        if (sMediasA3[i].ToLower().Contains("a3") == true)
                        {
                            isA3 = true;
                            break;
                        }
                    }
                    if (isA3 == true)
                    {
                        psv.SetPlotConfigurationName(ps, strPrinter, sMediasA3[i]);
                    }
                    else
                    {
                        MessageBox.Show("您选择的打印机不支持A3!请重新选择A3打印机");
                        return null;
                    }
                }
                else
                {
                    psv.SetPlotConfigurationName(ps, strPrinter, null);                 //打印A4
                    StringCollection sMediasA4 = psv.GetCanonicalMediaNameList(ps);
                    bool isA4 = false;
                    int j = 0;
                    for (j = 0; j < sMediasA4.Count; j++)
                    {
                        if (sMediasA4[j].ToLower().Contains("a4") == true)
                        {
                            isA4 = true;
                            break;
                        }
                    }
                    if (isA4 == true)
                    {
                        psv.SetPlotConfigurationName(ps, strPrinter, sMediasA4[j]);
                    }
                    else
                    {
                        MessageBox.Show("您选择的A4打印机不支持A4,请重新选择A4打印机!");
                    }
                }
                //重写打印信息
                pi.OverrideSettings = ps;
                //确认打印信息
                PlotInfoValidator piv = new PlotInfoValidator();
                piv.MediaMatchingPolicy = MatchingPolicy.MatchEnabled;
                piv.Validate(pi);
                return pi;
            }
        }
        private int Plot(Document doc,Extents2d exArea, string strPrinter, int iSize)  //打印单张图纸
        {
            PlotInfo pi = SetPlotInfo(doc,exArea,strPrinter,iSize);
            if (pi == null)
            {
               return 1;
            }
            //设置系统环境变量
            Autodesk.AutoCAD.ApplicationServices.Application.SetSystemVariable("BACKGROUNDPLOT", 0);
            try
            {
                //检查打印状态
                if (PlotFactory.ProcessPlotState == ProcessPlotState.NotPlotting)
                {
                    //开户引擎
                    using (PlotEngine pe = PlotFactory.CreatePublishEngine())
                    {
                        PlotProgressDialog ppDialog = new PlotProgressDialog(false, 1, true);
                        using (ppDialog)
                        {
                            //显示进程对话框
                            ppDialog.OnBeginPlot();
                            ppDialog.IsVisible = true;
                            //开始打印布局
                            pe.BeginPlot(ppDialog, null);
                            //sw.WriteLine(DateTime.Now + "       pe.BeginPlot()开始执行.");
                            //显示当前打印相关信息
                            pe.BeginDocument(pi, doc.Name, null, 1, false, null);
                            //打印第一个视口
                            PlotPageInfo ppInfo = new PlotPageInfo();
                            //sw.WriteLine(DateTime.Now + "       创建一个PlotPageInfo类");
                            pe.BeginPage(ppInfo, pi, true, null);    //此处第三个参数至为关键,如果设为false则会不能执行.
                            pe.BeginGenerateGraphics(null);
                            pe.EndGenerateGraphics(null);
                            //完成打印视口
                            pe.EndPage(null);
                          ppDialog.OnEndSheet();
                            //完成文档打印
                            pe.EndDocument(null);
                            //完成打印操作
                            ppDialog.OnEndPlot();
                            pe.EndPlot(null);
                             
                        }
                    }
                }
            }
            catch (Autodesk.AutoCAD.Runtime.Exception ex)
            {
                MessageBox.Show(ex.ToString());
            }
            Autodesk.AutoCAD.ApplicationServices.Application.SetSystemVariable("BACKGROUNDPLOT", 2);
            //sw.WriteLine(DateTime.Now + "       设置环境变量BACKGROUNDPLOT = 2.\n\n\n");
            //sw.Close();
            return 0;
        }
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-11-25 18:25 , Processed in 0.176800 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表