Тема: Печать файла DWG после прочтения его методом acDB.ReadDWGFile
Application.SetSystemVariable("BACKGROUNDPLOT", 0) Dim ed As Editor For Each ViewFiles In DataGridViewFiles.Rows If ViewFiles.cells(3).Value Then Dim FileName As String Dim acDocMgr As DocumentCollection = Application.DocumentManager Dim acDoc As Document Dim medias As StringCollection Dim acCurDb As Database FileName = ViewFiles.cells(4).Value.ToString acCurDb = New Database(False, True) acDoc = Application.DocumentManager.MdiActiveDocument ed = acDoc.Editor Using acCurDb Try acCurDb.ReadDwgFile(FileName, System.IO.FileShare.Read, False, "") Catch 'ex = System.Exception ed.WriteMessage("\nUnable to read drawing file.") Return End Try Dim Orient As PlotRotation Dim PlotBound As Extents2d If Not ViewFiles.cells(5).Value Then Orient = PlotRotation.Degrees090 Else Orient = PlotRotation.Degrees000 End If Using acLckDoc As DocumentLock = acDoc.LockDocument() Using acTrans As Transaction = acCurDb.TransactionManager.StartTransaction() Dim acLayoutMgr As LayoutManager Dim bt As DBDictionary LayoutManager.Create(acCurDb.UnmanagedObject, True) acLayoutMgr = LayoutManager.Current bt = acTrans.GetObject(acCurDb.LayoutDictionaryId, OpenMode.ForRead) Dim acLayout As Layout If Not ViewFiles.cells(6).Value Then For Each LayEnt As DBDictionaryEntry In bt If LayEnt.Key = "Model" Then acLayout = acTrans.GetObject(LayEnt.Value, OpenMode.ForRead) End If Next PlotBound = New Extents2d(acCurDb.Extmin.X, acCurDb.Extmin.Y, acCurDb.Extmax.X, acCurDb.Extmax.Y) Else For Each LayEnt As DBDictionaryEntry In bt If LayEnt.Key = "list" Then acLayout = acTrans.GetObject(LayEnt.Value, OpenMode.ForRead) PlotBound = New Extents2d(acLayout.Database.Pextmin.X, acLayout.Database.Pextmin.Y, acLayout.Database.Pextmax.X, acLayout.Database.Pextmax.Y) End If Next End If Dim acPlInfo As PlotInfo = New PlotInfo() acPlInfo.Layout = acLayout.ObjectId LayoutManager.Current.CurrentLayout = acLayout.LayoutName Dim acPlSet As PlotSettings = New PlotSettings(acLayout.ModelType) acPlSet.CopyFrom(acLayout) Dim acPlSetVdr As PlotSettingsValidator = PlotSettingsValidator.Current acPlSetVdr.SetPlotConfigurationName(acPlSet, ComboBoxPrinter.Text, Nothing) acPlSetVdr.SetUseStandardScale(acPlSet, True) acPlSetVdr.SetStdScaleType(acPlSet, StdScaleType.ScaleToFit) Nothing) acPlSetVdr.SetPlotWindowArea(acPlSet, PlotBound) acPlSetVdr.SetPlotType(acPlSet, Autodesk.AutoCAD.DatabaseServices.PlotType.Window) acPlSetVdr.SetPlotRotation(acPlSet, Orient) acPlSetVdr.SetPlotCentered(acPlSet, True) Try If acCurDb.PlotStyleMode = True Then acPlSetVdr.SetCurrentStyleSheet(acPlSet, Microsoft.VisualBasic.Left(ComboBoxStyle.Text, Len(ComboBoxStyle.Text) - 3) & "ctb") 'Left(ComboBoxStyle.Text, len(ComboBoxStyle.Text)-3) & "ctb"len(ComboBoxStyle.Text) Else acPlSetVdr.SetCurrentStyleSheet(acPlSet, Microsoft.VisualBasic.Left(ComboBoxStyle.Text, Len(ComboBoxStyle.Text) - 3) & "stb") End If Catch acPlSetVdr.SetCurrentStyleSheet(acPlSet, Nothing) End Try medias = acPlSetVdr.GetCanonicalMediaNameList(acPlSet) acPlSetVdr.SetCanonicalMediaName(acPlSet, medias.Item(ComboBoxFormat.SelectedIndex)) acPlInfo.OverrideSettings = acPlSet Dim acPlInfoVdr As PlotInfoValidator = New PlotInfoValidator() acPlInfoVdr.MediaMatchingPolicy = MatchingPolicy.MatchEnabled acPlInfoVdr.Validate(acPlInfo)' РУБИТЬСЯ ЗДЕСЬ СО словом "eLayoutNotCurrent" If PlotFactory.ProcessPlotState = Autodesk.AutoCAD.PlottingServices.ProcessPlotState.NotPlotting Then Using acPlEng As PlotEngine = PlotFactory.CreatePublishEngine() Dim acPlProgDlg As PlotProgressDialog = New PlotProgressDialog(False, 1, True) Using (acPlProgDlg) acPlProgDlg.PlotMsgString(PlotMessageIndex.DialogTitle) = "Plot Progress" acPlProgDlg.PlotMsgString(PlotMessageIndex.CancelJobButtonMessage) = "Cancel Job" acPlProgDlg.PlotMsgString(PlotMessageIndex.CancelSheetButtonMessage) = "Cancel Sheet" acPlProgDlg.PlotMsgString(PlotMessageIndex.SheetSetProgressCaption) = "Sheet Set Progress" acPlProgDlg.PlotMsgString(PlotMessageIndex.SheetProgressCaption) = "Sheet Progress" acPlProgDlg.LowerPlotProgressRange = 0 acPlProgDlg.UpperPlotProgressRange = 100 acPlProgDlg.PlotProgressPos = 0 acPlProgDlg.OnBeginPlot() acPlProgDlg.IsVisible = False acPlEng.BeginPlot(acPlProgDlg, Nothing) acPlEng.BeginDocument(acPlInfo, _ acDoc.Name, _ Nothing, _ NumberCopy.Value, _ PrinToFile, _ ViewFiles.cells(1).Value.ToString & "\" & ViewFiles.cells(0).Value.ToString & ".pdf") acPlProgDlg.PlotMsgString(PlotMessageIndex.Status) = _ "Plotting: " & acDoc.Name & _ " - " & acLayout.LayoutName acPlProgDlg.OnBeginSheet() acPlProgDlg.LowerSheetProgressRange = 0 acPlProgDlg.UpperSheetProgressRange = 100 acPlProgDlg.SheetProgressPos = 0 Dim acPlPageInfo As PlotPageInfo = New PlotPageInfo() acPlEng.BeginPage(acPlPageInfo, _ acPlInfo, _ True, _ Nothing) acPlEng.BeginGenerateGraphics(Nothing) acPlEng.EndGenerateGraphics(Nothing) acPlEng.EndPage(Nothing) acPlProgDlg.SheetProgressPos = 100 acPlProgDlg.OnEndSheet() acPlEng.EndDocument(Nothing) acPlProgDlg.PlotProgressPos = 100 acPlProgDlg.OnEndPlot() acPlEng.EndPlot(Nothing) End Using End Using End If End Using End Using End Using acCurDb.Dispose() End If Next
По коду добавил комментарий на какой стадии рубиться! Просьба помочь разобраться, возможна ли вообще печать при таком подходе к открытию файла?