| | | Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
Autor
|
Thema: einfacher PDF-Export (vb.net) (1164 / mal gelesen)
|
tappenbeck Mitglied Vermessungsingenieur
Beiträge: 1213 Registriert: 30.05.2002 AutoCAD (Map)2019, Topobase, MapEdit, Lisp, .vb.net
|
erstellt am: 25. Mrz. 2020 15:12 <-- editieren / zitieren --> Unities abgeben:
Moin! zum lösen meiner Aufgabe muss ich das aktuelle Layout noch als PDF speichern. Wenn ich das manuell machen würde, dann würde sich EXPORTPDF anbieten. Nur den Namen würde ich noch anpassen. Im Netz gibt es einige sehr umfangreiche Beispiele mit x-Parametern die man einstellen muss. Leider die meisten auch mit englischer Beschreibung. Notfalls würde ich auch den voreingestellten Namen erstellen lassen und dann im Anschluss umbenennen. Wichtig ist für mich nur, dass ich weiß, wann der Export abgeschlossen ist. Weiß einer von Euch einen Weg der zum Ziel führen würde? Gruß Jan Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
tappenbeck Mitglied Vermessungsingenieur
Beiträge: 1213 Registriert: 30.05.2002 AutoCAD (Map)2019, Topobase, MapEdit, Lisp, .vb.net
|
erstellt am: 26. Mrz. 2020 18:21 <-- editieren / zitieren --> Unities abgeben:
So wieder ist ein Tag verstrichen und meine Aufgabe scheitert derzeit noch an vermutlich einer Zeile. Derzeit verfolge ich folgenden Weg. Erstellen des LISP-Ausdrucks und absetzen aus vb.net heraus. Den letzten Stand hatte ich schon in der internationalen Gruppe https://forums.autodesk.com/t5/net/simple-pdf-plot-by-vb-net/m-p/9402102#M65204 gepostet und der letzte Lösungsvorschlag hat auch nicht zum Ziel geführt. Deshalb "streue" ich mein Problem jetzt nochmal im deutschsprachigen Raum. So ist die Verständigung vielleicht auch besser.
Stand ist folgender:
Code:
_Log.Write("CommandString:= " & CommandString) acDocument.Editor.Command(CommandString)
und dann ist die Ausgabe: Zitat: CommandString:= "_-PLOT" "_No" "PdfRaster1000x1000" "" "_DWG To PDF_NoPreview.pc3" "P:\\KARTEN\\Sielkataster_1000_PDF\\Neu\\2575_2020-03-26.pdf" "_No" "_Yes"OutputFile4PDF:= P:\\KARTEN\\Sielkataster_1000_PDF\\Neu\\2575_2020-03-26.pdf **** Fehler **** unerwarteter Fehler in EBL_MapService > Export_PdfRaster > Generate Autodesk.AutoCAD.Runtime.Exception: eInvalidInput bei Autodesk.AutoCAD.EditorInput.Editor.Command(Object[] parameter) bei EBL.MapService.Export_PdfRaster.Generate(OutputDefinition AusgabeFormat) in C:\VSProjects\2019\EBL.MapService\EBL.MapService\cls_Export_PdfRaster.vb:Zeile 287. --> ,2020-03-26 15:55:42
Sende ich den generierten Ausdruck über das Befehlszeilenfenster ab, dann wird der Plot erstellt, wie erwartet: Zitat: Befehl: (command "_-PLOT" "_No" "PdfRaster1000x1000" "" "_DWG To PDF_NoPreview.pc3" "P:\\KARTEN\\Sielkataster_1000_PDF\\Neu\\2575_2020-03-26.pdf" "_No" "_Yes") _-PLOT Detaillierte Plotkonfiguration? [Ja/Nein] <Nein>: _No Layoutnamen eingeben oder [?] <PdfRaster1000x1000>: PdfRaster1000x1000 Namen für Seiteneinrichtung eingeben <>: Ausgabegerätname eingeben oder [?] <_DWG To PDF.pc3>: _DWG To PDF_NoPreview.pc3 Dateiname angeben <Zeichnung2-PdfRaster1000x1000.pdf>: P:\KARTEN\Sielkataster_1000_PDF\Neu\2575_2020-03-26.pdf Änderungen an der Seiteneinrichtung speichern [Ja/Nein]? <N> _No Plotten fortsetzen [Ja/Nein] <J>: _Yes Tatsächlicher Plotbereich: 1040.00 breit und 1040.00 hoch Tatsächlicher Plotbereich: 999.91 breit und 999.91 hochAnsichtsfenster 2 wird geplottet. Ansichtsfenster 1 wird geplottet.
Hat irgendjemand eine Idee? Ich bin am verzweifen.
Gruß Jan
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
tappenbeck Mitglied Vermessungsingenieur
Beiträge: 1213 Registriert: 30.05.2002 AutoCAD (Map)2019, Topobase, MapEdit, Lisp, .vb.net
|
erstellt am: 02. Apr. 2020 08:53 <-- editieren / zitieren --> Unities abgeben:
Moin! ich wollte noch eine Rückmeldung geben. Irgendwann habe ich dann dieses Beispiel gefunden: https://www.keanw.com/2007/09/driving-a-basic.html Mein etwas modifizierter Code ist dann:
Code:
Public Sub RasterPlot(PlotFullName As String) ' ------ Quelle: https://www.keanw.com/2007/09/driving-a-basic.html _Log.WriteFuncName((New StackTrace).GetFrame(0).GetMethod.Name) _Log.WriteParameter("PlotFullName", PlotFullName) Dim doc As Autodesk.AutoCAD.ApplicationServices.Document = Autodesk.AutoCAD.ApplicationServices.Core.Application.DocumentManager.MdiActiveDocument Dim ed As Editor = doc.Editor Dim db As Database = doc.Database Dim tr As Transaction = db.TransactionManager.StartTransaction() Using tr Try Dim btr As BlockTableRecord = CType(tr.GetObject(db.CurrentSpaceId, Autodesk.AutoCAD.DatabaseServices.OpenMode.ForRead), BlockTableRecord) Dim lo As Layout = CType(tr.GetObject(btr.LayoutId, Autodesk.AutoCAD.DatabaseServices.OpenMode.ForRead), Layout) Dim pi As PlotInfo = New PlotInfo() pi.Layout = btr.LayoutId Dim ps As PlotSettings = New PlotSettings(lo.ModelType) ps.CopyFrom(lo) Dim psv As PlotSettingsValidator = PlotSettingsValidator.Current 'psv.SetPlotType(ps, Autodesk.AutoCAD.DatabaseServices.PlotType.Extents) psv.SetPlotType(ps, Autodesk.AutoCAD.DatabaseServices.PlotType.Window) 'angepasst psv.SetUseStandardScale(ps, True) psv.SetStdScaleType(ps, StdScaleType.StdScale1To1) 'angepasst psv.SetPlotCentered(ps, True) ' HINWEIS: hier den internen Namen des Papierformates ermitteln ' Dim fPlot As New EBL.Acad.Plotten() ' Dim ListPossibleDeviceMedium As String = fPlot.GetPossibleMedia("_DWG To PDF_NoPreview.pc3") psv.SetPlotConfigurationName(ps, "_DWG To PDF_NoPreview.pc3", "UserDefinedMetric (1040.00 x 1040.00mm)") pi.OverrideSettings = ps Dim piv As PlotInfoValidator = New PlotInfoValidator() piv.MediaMatchingPolicy = MatchingPolicy.MatchEnabled piv.Validate(pi) If PlotFactory.ProcessPlotState = ProcessPlotState.NotPlotting Then Dim pe As PlotEngine = PlotFactory.CreatePublishEngine()
Using pe Dim ppd As PlotProgressDialog = New PlotProgressDialog(False, 1, True) Using ppd ' -- mit den nachfolgenden ppd-Parametern bin ich nicht klargekommen ''ppd.PlotMsgString(PlotMessageIndex.DialogTitle = "Custom Plot Progress") ''ppd.PlotMsgString(PlotMessageIndex.CancelJobButtonMessage, "Cancel Job") ''ppd.PlotMsgString(PlotMessageIndex.CancelSheetButtonMessage, "Cancel Sheet") ''ppd.PlotMsgString(PlotMessageIndex.SheetSetProgressCaption, "Sheet Set Progress") ''ppd.PlotMsgString(PlotMessageIndex.SheetProgressCaption, "Sheet Progress") ppd.LowerPlotProgressRange = 0 ppd.UpperPlotProgressRange = 100 ppd.PlotProgressPos = 0 ppd.OnBeginPlot() ppd.IsVisible = True pe.BeginPlot(ppd, Nothing) pe.BeginDocument(pi, doc.Name, Nothing, 1, True, PlotFullName) ppd.OnBeginSheet() ppd.LowerSheetProgressRange = 0 ppd.UpperSheetProgressRange = 100 ppd.SheetProgressPos = 0 Dim ppi As PlotPageInfo = New PlotPageInfo() pe.BeginPage(ppi, pi, True, Nothing) pe.BeginGenerateGraphics(Nothing) pe.EndGenerateGraphics(Nothing) pe.EndPage(Nothing) ppd.SheetProgressPos = 100 ppd.OnEndSheet() pe.EndDocument(Nothing) ppd.PlotProgressPos = 100 ppd.OnEndPlot() pe.EndPlot(Nothing) End Using 'ppd End Using 'pe Else ed.WriteMessage(vbLf & "Another plot is in progress.") _Log.WriteAsError("Another plot is in progress!") End If Catch ex As System.Exception _Log.WriteAsError("Fehler bei der Plotausgabe!" & Environment.NewLine & ex.ToString) End Try End Using End Sub
Was sich als schwierig gestalten kann ist dann die Ermittlung des richtigen Namen für das Blattformat (hier: UserDefinedMetric (1040.00 x 1040.00mm)) Hier könnte dann (http://through-the-interface.typepad.com/through_the_interface/2007/10/allowing-select.html) Code:
Public Function GetPossibleMedia(Device As String) As String _AcLog?.WriteFuncName((New StackTrace).GetFrame(0).GetMethod.Name) ' Quelle: http://through-the-interface.typepad.com/through_the_interface/2007/10/allowing-select.html Dim ListOfPossibleMedia As String = "" Dim doc As Document = Autodesk.AutoCAD.ApplicationServices.Core.Application.DocumentManager.MdiActiveDocument Dim ed As Editor = doc.Editor Dim CurrentDeviceId As Integer = 0 ' Assign default return values Dim devname As String = "", medname As String = "" Dim psv As PlotSettingsValidator = PlotSettingsValidator.Current ' Let's first select the device Dim devlist As StringCollection = psv.GetPlotDeviceList() For i As Integer = 0 To devlist.Count - 1 If devlist(i).ToUpper = Device.ToUpper Then CurrentDeviceId = i Next devname = devlist(CurrentDeviceId) ' Now let's select the media Dim ps As New PlotSettings(True) Using ps ' We should refresh the lists, ' in case setting the device impacts ' the available media psv.SetPlotConfigurationName(ps, devname, Nothing) psv.RefreshLists(ps) Dim medlist As StringCollection = psv.GetCanonicalMediaNameList(ps) For i As Integer = 0 To medlist.Count - 1 If ListOfPossibleMedia.Length > 0 Then ListOfPossibleMedia += Environment.NewLine ListOfPossibleMedia += medlist(i) Next End Using Return ListOfPossibleMedia End Function
weiterhelfen wobei Device der Name der PC3-Datei incl. Suffix ist. Die Verwendung dieser Werte ...
Code: ''ppd.PlotMsgString(PlotMessageIndex.DialogTitle = "Custom Plot Progress") ''ppd.PlotMsgString(PlotMessageIndex.CancelJobButtonMessage, "Cancel Job") ''ppd.PlotMsgString(PlotMessageIndex.CancelSheetButtonMessage, "Cancel Sheet") ''ppd.PlotMsgString(PlotMessageIndex.SheetSetProgressCaption, "Sheet Set Progress") ''ppd.PlotMsgString(PlotMessageIndex.SheetProgressCaption, "Sheet Progress")
... habe ich auskommentiert, weil ich da irgendwie nicht drauf zugreifen konnte - waren aber aber für die Lösung nicht von Bedeutung. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
|