【MSCE C#】自定义打印

请问C#开放接口中有与自定义打印相关的吗?有没有例子?想实现自动打印文件中所有图纸,并可以设置打印的纸张大小、颜色线型这些。

只在SDK中找到了C:\Program Files\Bentley\MicroStationCONNECTSDK\examples\Printing,但是里面的例子都是C++的。想问有C#的例子可参考吗?

Parents
  • 请问一下,那现在是没有办法通过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,其他两类模型是供中间设计用的,不是供打印用的。



Reply Children
No Data