I have implemented the IPrintManager code example from the MSTNPlatformNET.chm for plotting using an existing PltCfgFileThe code for this is almost verbatim except that I load the PNG driver instead of the PDF driver, and that I've set publishingParams.UseSeparateJobs = true where in the example this is false (Png plot doesn't support batch jobs):
void IPrintManagerDocsExample() { IPrintManager printManager = PrintManagerProxy.GetLocalPrintManager(); IPrinter printer = printManager.CreatePrinter(); printer.InitializeFromPltcfgFile(new FileSpec(@"c:\png.pltcfg")); IPrinterForm printerFormAnsiA = printer.FindFormByName("ANSI A"); IPrintSet printSet = printManager.CreatePrintSet(); printSet.InitializeFromPrinter(printer); printSet.UseWorkerMicroStation = false; //The magic sauce that makes MicroStation not crash IPrintDefinition[] printDefinitions = printSet.CreatePrintDefinitions(new FileSpec(Session.Instance.GetActiveDgnFile().GetFileName()), null); foreach (IPrintDefinition printDefinition in printDefinitions) { ICadPrintDefinition cadPrintDefinition = printDefinition as ICadPrintDefinition; cadPrintDefinition.PrinterForm = printerFormAnsiA; cadPrintDefinition.Maximize(); } IFolder folder = printSet.CreateFolder(@"TempFolder"); printSet.Items.Add(folder); folder.Items.AddRange(printDefinitions); PublishingParams publishingParams = new PublishingParams(); publishingParams.UseSeparateJobs = true; publishingParams.OutputFspec = new FileSpec(@"C:\temp\TestMethod.png", true); printSet.Publish(publishingParams); printSet.Close(); printer.Release(); }
And the png.pltcfg (created using the Edit printer driver configurartion):
<PrinterConfiguration xmlns="PrinterConfiguration.01.04"> <DisplayLabel>SEED_PNG</DisplayLabel> <Visible>1</Visible> <BorderIncludeFileName>False</BorderIncludeFileName> <BorderOutlineIsOn>True</BorderOutlineIsOn> <LORIPJpegQuality>75</LORIPJpegQuality> <Programs /> <HonorRasterTransparency>2</HonorRasterTransparency> <ResolutionUnits>6</ResolutionUnits> <BorderIncludeDateTime>False</BorderIncludeDateTime> <ScaleAdjustmentFactor>1,1,0</ScaleAdjustmentFactor> <EnableOutputWidth>2</EnableOutputWidth> <DefaultLineCap>1</DefaultLineCap> <RasterParametersMonoAsIs>False</RasterParametersMonoAsIs> <MoveMode>2</MoveMode> <StartPlotAction>0</StartPlotAction> <DriverOutputMode>0</DriverOutputMode> <DefaultPrintFileExtension>png</DefaultPrintFileExtension> <BorderIncludeModelName>False</BorderIncludeModelName> <BorderPen>1</BorderPen> <RasterParametersQuality>100</RasterParametersQuality> <Commands /> <OleParametersRasterize>2</OleParametersRasterize> <RasterizeUsingBands>2</RasterizeUsingBands> <BorderTextHeightCM>0.254</BorderTextHeightCM> <FontMaps /> <FenceOutlineIsOn>False</FenceOutlineIsOn> <CropRasterTransparency>2</CropRasterTransparency> <EndPlotAction>0</EndPlotAction> <SymbolAssigns /> <EnableDriverClipping>2</EnableDriverClipping> <BorderTextOffsetCM>0,0,0</BorderTextOffsetCM> <Styles> <Style> <NoHardware>False</NoHardware> <RunLengths>0.35 1.05</RunLengths> <Units>4</Units> </Style> <Style> <NoHardware>False</NoHardware> <RunLengths>1.75 1.05</RunLengths> <Units>4</Units> </Style> <Style> <NoHardware>False</NoHardware> <RunLengths>4.2 1.4</RunLengths> <Units>4</Units> </Style> <Style> <NoHardware>False</NoHardware> <RunLengths>2.8 1.05 0.7 1.05</RunLengths> <Units>4</Units> </Style> <Style> <NoHardware>False</NoHardware> <RunLengths>1.4 1.4</RunLengths> <Units>4</Units> </Style> <Style> <NoHardware>False</NoHardware> <RunLengths>2.1 0.7 0.7 0.7 0.7 0.7</RunLengths> <Units>4</Units> </Style> <Style> <NoHardware>False</NoHardware> <RunLengths>2.8 0.7 1.4 0.7</RunLengths> <Units>4</Units> </Style> </Styles> <DefaultNumCopies>1</DefaultNumCopies> <LevelOfDetailMode>1</LevelOfDetailMode> <RasterParametersPrintRaster>True</RasterParametersPrintRaster> <ResolutionDotsPerUnit>100,100,0</ResolutionDotsPerUnit> <AutoOpenPlotFile>False</AutoOpenPlotFile> <DefaultColorMode>2</DefaultColorMode> <CustomProperties /> <ColorMaps> <ColorMap /> <ColorMap /> <ColorMap /> <ColorMap /> <ColorMap /> <ColorMap /> <ColorMap /> <ColorMap /> <ColorMap /> <ColorMap /> <ColorMap /> <ColorMap /> <ColorMap /> <ColorMap /> <ColorMap /> <ColorMap /> <ColorMap /> <ColorMap /> <ColorMap /> <ColorMap /> <ColorMap /> <ColorMap /> <ColorMap /> <ColorMap /> <ColorMap /> <ColorMap /> <ColorMap /> <ColorMap /> <ColorMap /> <ColorMap /> <ColorMap /> <ColorMap /> <ColorMap /> <ColorMap /> <ColorMap /> <ColorMap /> <ColorMap /> <ColorMap /> <ColorMap /> <ColorMap /> <ColorMap /> <ColorMap /> <ColorMap /> <ColorMap /> <ColorMap /> <ColorMap /> <ColorMap /> <ColorMap /> <ColorMap /> <ColorMap /> <ColorMap /> <ColorMap /> <ColorMap /> <ColorMap /> <ColorMap /> <ColorMap /> <ColorMap /> <ColorMap /> <ColorMap /> <ColorMap /> <ColorMap /> <ColorMap /> <ColorMap /> <ColorMap /> <ColorMap /> <ColorMap /> <ColorMap /> <ColorMap /> <ColorMap /> <ColorMap /> <ColorMap /> <ColorMap /> <ColorMap /> <ColorMap /> <ColorMap /> <ColorMap /> <ColorMap /> <ColorMap /> <ColorMap /> <ColorMap /> <ColorMap /> <ColorMap /> <ColorMap /> <ColorMap /> <ColorMap /> <ColorMap /> <ColorMap /> <ColorMap /> <ColorMap /> <ColorMap /> <ColorMap /> <ColorMap /> <ColorMap /> <ColorMap /> <ColorMap /> <ColorMap /> <ColorMap /> <ColorMap /> <ColorMap /> <ColorMap /> <ColorMap /> <ColorMap /> <ColorMap /> <ColorMap /> <ColorMap /> <ColorMap /> <ColorMap /> <ColorMap /> <ColorMap /> <ColorMap /> <ColorMap /> <ColorMap /> <ColorMap /> <ColorMap /> <ColorMap /> <ColorMap /> <ColorMap /> <ColorMap /> <ColorMap /> <ColorMap /> <ColorMap /> <ColorMap /> <ColorMap /> <ColorMap /> <ColorMap /> <ColorMap /> <ColorMap /> <ColorMap /> <ColorMap /> <ColorMap /> <ColorMap /> <ColorMap /> <ColorMap /> <ColorMap /> <ColorMap /> <ColorMap /> <ColorMap /> <ColorMap /> <ColorMap /> <ColorMap /> <ColorMap /> <ColorMap /> <ColorMap /> <ColorMap /> <ColorMap /> <ColorMap /> <ColorMap /> <ColorMap /> <ColorMap /> <ColorMap /> <ColorMap /> <ColorMap /> <ColorMap /> <ColorMap /> <ColorMap /> <ColorMap /> <ColorMap /> <ColorMap /> <ColorMap /> <ColorMap /> <ColorMap /> <ColorMap /> <ColorMap /> <ColorMap /> <ColorMap /> <ColorMap /> <ColorMap /> <ColorMap /> <ColorMap /> <ColorMap /> <ColorMap /> <ColorMap /> <ColorMap /> <ColorMap /> <ColorMap /> <ColorMap /> <ColorMap /> <ColorMap /> <ColorMap /> <ColorMap /> <ColorMap /> <ColorMap /> <ColorMap /> <ColorMap /> <ColorMap /> <ColorMap /> <ColorMap /> <ColorMap /> <ColorMap /> <ColorMap /> <ColorMap /> <ColorMap /> <ColorMap /> <ColorMap /> <ColorMap /> <ColorMap /> <ColorMap /> <ColorMap /> <ColorMap /> <ColorMap /> <ColorMap /> <ColorMap /> <ColorMap /> <ColorMap /> <ColorMap /> <ColorMap /> <ColorMap /> <ColorMap /> <ColorMap /> <ColorMap /> <ColorMap /> <ColorMap /> <ColorMap /> <ColorMap /> <ColorMap /> <ColorMap /> <ColorMap /> <ColorMap /> <ColorMap /> <ColorMap /> <ColorMap /> <ColorMap /> <ColorMap /> <ColorMap /> <ColorMap /> <ColorMap /> <ColorMap /> <ColorMap /> <ColorMap /> <ColorMap /> <ColorMap /> <ColorMap /> <ColorMap /> <ColorMap /> <ColorMap /> <ColorMap /> <ColorMap /> <ColorMap /> <ColorMap /> <ColorMap /> <ColorMap /> <ColorMap /> <ColorMap /> <ColorMap /> <ColorMap /> <ColorMap /> <ColorMap /> <ColorMap /> <ColorMap /> <ColorMap /> <ColorMap /> <ColorMap /> <ColorMap /> <ColorMap /> <ColorMap /> <ColorMap> <UseDesignBackgroundColor>True</UseDesignBackgroundColor> </ColorMap> </ColorMaps> <SupportsPaths>2</SupportsPaths> <BorderWidthCM>0.025</BorderWidthCM> <StrokeRaster>2</StrokeRaster> <RasterParametersContrast>0</RasterParametersContrast> <DefaultPrintFileAutoOverwrite>False</DefaultPrintFileAutoOverwrite> <FenceOutlinePen>1</FenceOutlinePen> <PlotterModel>loriprgb</PlotterModel> <AutoCenter>False</AutoCenter> <Forms> <Form> <DisplayName>ISO A0</DisplayName> <Size>1189,841,0</Size> <Units>4</Units> </Form> <Form> <DisplayName>ISO A1</DisplayName> <Size>841,594,0</Size> <Units>4</Units> </Form> <Form> <DisplayName>ISO A2</DisplayName> <Size>594,420,0</Size> <Units>4</Units> </Form> <Form> <DisplayName>ISO A3</DisplayName> <Size>420,297,0</Size> <Units>4</Units> </Form> <Form> <DisplayName>ISO A4</DisplayName> <Size>297,210,0</Size> <Units>4</Units> </Form> <Form> <DisplayName>Arch E1</DisplayName> <Size>42,30,0</Size> <Units>6</Units> </Form> <Form> <DisplayName>Arch E</DisplayName> <Size>48,36,0</Size> <Units>6</Units> </Form> <Form> <DisplayName>Arch D</DisplayName> <Size>36,24,0</Size> <Units>6</Units> </Form> <Form> <DisplayName>Arch C</DisplayName> <Size>24,18,0</Size> <Units>6</Units> </Form> <Form> <DisplayName>Arch B</DisplayName> <Size>18,12,0</Size> <Units>6</Units> </Form> <Form> <DisplayName>Arch A</DisplayName> <Size>12,9,0</Size> <Units>6</Units> </Form> <Form> <DisplayName>ANSI E</DisplayName> <Size>44,34,0</Size> <Units>6</Units> </Form> <Form> <DisplayName>ANSI D</DisplayName> <Size>34,22,0</Size> <Units>6</Units> </Form> <Form> <DisplayName>ANSI C</DisplayName> <Size>22,17,0</Size> <Units>6</Units> </Form> <Form> <DisplayName>ANSI B</DisplayName> <Size>17,11,0</Size> <Units>6</Units> </Form> <Form> <DisplayName>ANSI A</DisplayName> <Size>11,8.5,0</Size> <Units>6</Units> </Form> <Form> <DisplayName>1280X1024</DisplayName> <Size>12.8,10.24,0</Size> <Units>6</Units> </Form> <Form> <DisplayName>1024X768</DisplayName> <Size>10.24,7.68,0</Size> <Units>6</Units> </Form> <Form> <DisplayName>800X600</DisplayName> <Size>8,6,0</Size> <Units>6</Units> </Form> <Form> <DisplayName>640X480</DisplayName> <Size>6.4,4.8,0</Size> <Units>6</Units> </Form> <Form> <DisplayName>MAX</DisplayName> <Size>16,16,0</Size> <Units>6</Units> </Form> </Forms> <LORIPFormat>2</LORIPFormat> <RasterParametersGrayscale>False</RasterParametersGrayscale> <WeightMaps> <WeightMap> <Width>0.169</Width> <Units>4</Units> </WeightMap> <WeightMap> <Width>0.375</Width> <Units>4</Units> </WeightMap> <WeightMap> <Width>0.5</Width> <Units>4</Units> </WeightMap> <WeightMap> <Width>0.625</Width> <Units>4</Units> </WeightMap> <WeightMap> <Width>0.75</Width> <Units>4</Units> </WeightMap> <WeightMap> <Width>0.875</Width> <Units>4</Units> </WeightMap> <WeightMap> <Width>1</Width> <Units>4</Units> </WeightMap> <WeightMap> <Width>1.125</Width> <Units>4</Units> </WeightMap> <WeightMap> <Width>1.25</Width> <Units>4</Units> </WeightMap> <WeightMap> <Width>1.375</Width> <Units>4</Units> </WeightMap> <WeightMap> <Width>1.5</Width> <Units>4</Units> </WeightMap> <WeightMap> <Width>1.625</Width> <Units>4</Units> </WeightMap> <WeightMap> <Width>1.75</Width> <Units>4</Units> </WeightMap> <WeightMap> <Width>1.875</Width> <Units>4</Units> </WeightMap> <WeightMap> <Width>2</Width> <Units>4</Units> </WeightMap> <WeightMap> <Width>2.125</Width> <Units>4</Units> </WeightMap> <WeightMap> <Width>2.25</Width> <Units>4</Units> </WeightMap> <WeightMap> <Width>2.375</Width> <Units>4</Units> </WeightMap> <WeightMap> <Width>2.5</Width> <Units>4</Units> </WeightMap> <WeightMap> <Width>2.625</Width> <Units>4</Units> </WeightMap> <WeightMap> <Width>2.75</Width> <Units>4</Units> </WeightMap> <WeightMap> <Width>2.875</Width> <Units>4</Units> </WeightMap> <WeightMap> <Width>3</Width> <Units>4</Units> </WeightMap> <WeightMap> <Width>3.125</Width> <Units>4</Units> </WeightMap> <WeightMap> <Width>3.25</Width> <Units>4</Units> </WeightMap> <WeightMap> <Width>3.375</Width> <Units>4</Units> </WeightMap> <WeightMap> <Width>3.5</Width> <Units>4</Units> </WeightMap> <WeightMap> <Width>3.625</Width> <Units>4</Units> </WeightMap> <WeightMap> <Width>3.75</Width> <Units>4</Units> </WeightMap> <WeightMap> <Width>3.875</Width> <Units>4</Units> </WeightMap> <WeightMap> <Width>4</Width> <Units>4</Units> </WeightMap> <WeightMap> <Width>4.125</Width> <Units>4</Units> </WeightMap> </WeightMaps> <DefaultPrintFileExtensionAutoIncrement>False</DefaultPrintFileExtensionAutoIncrement> <ReplaceTransMaskWithTransColor>2</ReplaceTransMaskWithTransColor> <DefaultLineJoin>4</DefaultLineJoin> <CurveTolerance>1</CurveTolerance> <RasterParametersBrightness>0</RasterParametersBrightness> <DefaultPrintFileName>$(MS_PLTFILES)$(basename(_DGNFILE))-$(MS_PLTMODELNAME)<autoInc?prefix=-?digits=3?base=0></DefaultPrintFileName> <RollOrientation>0</RollOrientation> <PlotTo3D>False</PlotTo3D> <MinimumLevelOfDetail>3</MinimumLevelOfDetail> <BorderIsOn>False</BorderIsOn> <AutoRotateDir>1</AutoRotateDir> <MaximumMiterAngleDeg>90</MaximumMiterAngleDeg> <VersionMajor>1</VersionMajor> <OptimizeRasterColorDepth>2</OptimizeRasterColorDepth> <MergeBackgroundRasters>1</MergeBackgroundRasters> <PrintPoints>True</PrintPoints> <VersionMinor>4</VersionMinor> <Driver>LORIP</Driver> <Comments>SEED</Comments> <DefaultPenTableFileName xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true" /> <DefaultDesignScriptFileName xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true" /> <PrintStyleName xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true" /> <LORIPfullSheet xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true" /> <RequiredOrientation>0</RequiredOrientation> </PrinterConfiguration>
System.AccessViolationException: 'Attempted to read or write protected memory. This is often an indication that other memory is corrupt.' This exception was originally thrown at this call stack: Bentley.MstnPlatformNET.Print.PrintFoundation.OutputToMessageCenter(Bentley.MstnPlatformNET.Print.IUserMessage) Bentley.MstnPlatformNET.Print.PrintSet.InvokeUserMessageEvent(Bentley.MstnPlatformNET.Print.IUserMessage) Bentley.MstnPlatformNET.Print.MicroStationEngine.InvokeUserMessageEvent(Bentley.MstnPlatformNET.Print.IUserMessage) System.ServiceModel.Dispatcher.SyncMethodInvoker.Invoke(object, object[], out object[]) System.ServiceModel.Dispatcher.DispatchOperationRuntime.InvokeBegin(ref System.ServiceModel.Dispatcher.MessageRpc) System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage5(ref System.ServiceModel.Dispatcher.MessageRpc) System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage11(ref System.ServiceModel.Dispatcher.MessageRpc) System.ServiceModel.Dispatcher.MessageRpc.Process(bool) System.ServiceModel.Dispatcher.ChannelHandler.DispatchAndReleasePump(System.ServiceModel.Channels.RequestContext, bool, System.ServiceModel.OperationContext) System.ServiceModel.Dispatcher.ChannelHandler.HandleRequest(System.ServiceModel.Channels.RequestContext, System.ServiceModel.OperationContext) ... [Call Stack Truncated]
Looking at the running processes I can see that a MicroStation process is still running. If I don't interrupt this process and wait about a minute the plot will still be generated, despite the crash of the initial instance.When I use the Pdf driver this behavior doesn't happen.If I change the code creating the PrintSet to include the line printSet.UseWorkerMicroStation = false; after initialization of the PrintSet, MicroStation will not crash and create the plot using the current MicroStation instance.Is this a bug within the printing classes, or some weird incompatibility between my Png PltCfg and the plotter?Regards,RemyThis is a continuation of a previous question asked here: [CE 10.16.02.34] C# equivalent of PrintDescriptionRef - MicroStation Programming Forum - MicroStation Programming - Bentley Communities