请问C#开放接口中有与自定义打印相关的吗?有没有例子?想实现自动打印文件中所有图纸,并可以设置打印的纸张大小、颜色线型这些。
只在SDK中找到了C:\Program Files\Bentley\MicroStationCONNECTSDK\examples\Printing,但是里面的例子都是C++的。想问有C#的例子可参考吗?
抱歉,目前只有C++的例子。
请问一下,那现在是没有办法通过C#来进行打印吗?必须通过C++来实现?
我看C# 中有Bentley.MstnPlatformNET.Print命名空间,这个下面的类和方法应该是对C++打印功能的封装。您可以先读懂C++代码然后尝试用C# 重写它们。
MS中所有底层功能都是先用C++写出来而后才封装成.NET的,在此封装过程中也会存在一些Bug。所以在使用C# 编程时一定要注意这一点。当C# 不能正确工作时不一定是您代码写得不对,而可能是这个封装有问题。目前在国外英文论坛有多个帖子在反馈.NET API无法修改单元中的子元素等等。
查看这个命名空间以后,发现它好像和C++差异有点大,没找到C++例子中对应的方法,比如PrintDescriptionPtr就没找到对应的封装类。不过,查看的时候,发现了一段C#的例子,进行了一些修改以后,能实现default模型空间中元素的打印。但是不知道要怎么修改,能打印Default以外的图纸,比如其他的Drawing或者Sheet。
public void test2() { IPrintManager printManager = PrintManagerProxy.GetLocalPrintManager(); IPrinter printer = printManager.CreatePrinter(); printer.InitializeFromPltcfgFile(new FileSpec("pdf.pltcfg")); IPrinterForm printerFormAnsiA = printer.FindFormByName("ANSI A"); IPrintSet printSet = printManager.CreatePrintSet(); printSet.InitializeFromPrinter(printer); IPrintDefinition[] printDefinitions = printSet.CreatePrintDefinitions(new FileSpec(@"D:\test.dgn"), null); foreach (IPrintDefinition printDefinition in printDefinitions) { ICadPrintDefinition cadPrintDefinition = printDefinition as ICadPrintDefinition; cadPrintDefinition.PrinterForm = printerFormAnsiA; cadPrintDefinition.Maximize(); cadPrintDefinition.ColorMode = ColorMode.Monochrome; cadPrintDefinition.ViewIndex = 0; cadPrintDefinition.SetFenceFromFitRange(true); } IFolder folder = printSet.CreateFolder("My Folder"); printSet.Items.Add(folder); folder.Items.AddRange(printDefinitions); PublishingParams publishingParams = new PublishingParams(); publishingParams.UseSeparateJobs = false; publishingParams.OutputFspec = new FileSpec(@"D:\testpdf.pdf", true); printSet.Publish(publishingParams); printSet.Close(); printer.Release(); }
现在这个代码只能打印Default中的模型,多个视图可以切换,但是我想要打印的是下面的D-ZUO这种图纸,需要怎么设置呢?
你调用函数切换一下模型应该就可以了吧?这些都是模型,DGN中的模型有三类:设计模型(Design)、绘图模型(Drawing)和图纸模型(Sheet)。不过一般来说,我们仅打印Sheet Model,其他两类模型是供中间设计用的,不是供打印用的。