明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2052|回复: 4

.NET 打印出了问题 导致CAD奔溃

[复制链接]
发表于 2010-9-4 12:23:00 | 显示全部楼层 |阅读模式
请大家帮我看看,百思不得其解!
.net3.5+cad2010
用于打印的代码如下:
  1. Autodesk.AutoCAD.ApplicationServices.Application.SetSystemVariable("BACKGROUNDPLOT", 0);
  2.             try
  3.             {
  4.                 using (DocumentLock docLock = TlsETM.acDoc.LockDocument())
  5.                 {
  6.                     Autodesk.AutoCAD.ApplicationServices.Application.SetSystemVariable("BACKGROUNDPLOT", 0);
  7.                     TlsETM tm = new TlsETM();
  8.                     PlotInfo pi = new PlotInfo();
  9.                     PlotInfoValidator piv = new PlotInfoValidator();
  10.                     piv.MediaMatchingPolicy = MatchingPolicy.MatchEnabled;
  11.                     ObjectIdCollection layoutsToPlot = new ObjectIdCollection();
  12.                     BlockTable bt = (BlockTable)tm.GetObject(TlsETM.CurrentDatabase.BlockTableId, OpenMode.ForRead);
  13.                     foreach (ObjectId btrId in bt)
  14.                     {
  15.                         BlockTableRecord btr = (BlockTableRecord)tm.GetObject(btrId, OpenMode.ForRead);
  16.                         if (btr.IsLayout && btr.Name.ToUpper() != BlockTableRecord.ModelSpace.ToUpper())
  17.                         {
  18.                             layoutsToPlot.Add(btrId);
  19.                         }
  20.                     }
  21.                     TlsETM.acDoc.LockDocument();
  22.                     foreach (ObjectId btrId in layoutsToPlot)
  23.                     {
  24.                         BlockTableRecord btr = (BlockTableRecord)tm.GetObject(btrId, OpenMode.ForRead);
  25.                         Layout lo = (Layout)tm.GetObject(btr.LayoutId, OpenMode.ForRead);
  26.                         PlotSettings ps = new PlotSettings(lo.ModelType);
  27.                         ps.CopyFrom(lo);
  28.                         PlotSettingsValidator psv = PlotSettingsValidator.Current;
  29.                         psv.SetPlotConfigurationName(ps, "Foxit Phantom Printer", "A3");
  30.                         psv.SetPlotType(ps, Autodesk.AutoCAD.DatabaseServices.PlotType.Layout);
  31.                         psv.SetUseStandardScale(ps, true);
  32.                         psv.SetStdScaleType(ps, StdScaleType.StdScale1To1);
  33.                         //psv.SetPlotCentered(ps, true);
  34.                         psv.SetPlotRotation(ps, PlotRotation.Degrees090);
  35.                         psv.SetPlotPaperUnits(ps, PlotPaperUnit.Millimeters);
  36.                         pi.Layout = btr.LayoutId;
  37.                         LayoutManager.Current.CurrentLayout = lo.LayoutName;
  38.                         pi.OverrideSettings = ps;
  39.                         piv.Validate(pi);
  40.                         while (PlotFactory.ProcessPlotState != ProcessPlotState.NotPlotting)
  41.                             Thread.Sleep(100);
  42.                         Thread.Sleep(2000);
  43.                         using (acPlEng = PlotFactory.CreatePublishEngine())
  44.                         {
  45.                             // Start to plot the layout
  46.                             acPlEng.BeginPlot(null, null);
  47.                             string PDFName = TlsETM.acDoc.Name.ToLower().Replace(".dwg", "-") + lo.LayoutName;
  48.                             acPlEng.BeginDocument(pi, TlsETM.acDoc.Name, null, 1, true, PDFName);
  49.                             TlsETM.Editor.WriteMessage("\r\n" + PDFName + "\r\n");
  50.                             // Plot the first sheet/layout
  51.                             PlotPageInfo acPlPageInfo = new PlotPageInfo();
  52.                             acPlEng.BeginPage(acPlPageInfo, pi, true, null);
  53.                             acPlEng.BeginGenerateGraphics(null);
  54.                             acPlEng.EndGenerateGraphics(null);
  55.                             // Finish plotting the sheet/layout
  56.                             acPlEng.EndPage(null);
  57.                             // Finish plotting the document
  58.                             acPlEng.EndDocument(null);
  59.                             // Finish the plot
  60.                             acPlEng.EndPlot(null);
  61.                         }
  62.                     }
  63.                 }
  64.             }
  65.             catch (System.Exception ex)
  66.             {
  67.             }
  68.             finally
  69.             {
  70.                 Autodesk.AutoCAD.ApplicationServices.Application.SetSystemVariable("BACKGROUNDPLOT", 2);
  71.             }


 楼主| 发表于 2010-9-4 12:25:00 | 显示全部楼层

打印完了之后,CAD就死机了!

 

实在找不出在什么地方会有问题

 楼主| 发表于 2010-9-4 12:28:00 | 显示全部楼层
Unhandled e4034f4dh exception at fd3baa7dh
发表于 2010-9-4 12:45:00 | 显示全部楼层

TlsETM tm = new TlsETM();

...

 

=>

using(TlsETM tm = new TlsETM())

{

...

}

 

TlsETM.acDoc.LockDocument();

...

=>

using(TlsETM.acDoc.LockDocument())

{

...

}

发表于 2010-9-4 23:21:00 | 显示全部楼层
  我试试咯
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-26 00:39 , Processed in 0.175511 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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