Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  AutoCAD ObjectARX und .NET
  einfacher PDF-Export (vb.net)

Antwort erstellen  Neues Thema erstellen
CAD.de Login | Logout | Profil | Profil bearbeiten | Registrieren | Voreinstellungen | Hilfe | Suchen

Anzeige:

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen nächster neuer Beitrag | nächster älterer Beitrag
  
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) (1163 / mal gelesen)
tappenbeck
Mitglied
Vermessungsingenieur


Sehen Sie sich das Profil von tappenbeck an!   Senden Sie eine Private Message an tappenbeck  Schreiben Sie einen Gästebucheintrag für tappenbeck

Beiträge: 1213
Registriert: 30.05.2002

AutoCAD (Map)2019, Topobase, MapEdit, Lisp, .vb.net

erstellt am: 25. Mrz. 2020 15:12    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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


Sehen Sie sich das Profil von tappenbeck an!   Senden Sie eine Private Message an tappenbeck  Schreiben Sie einen Gästebucheintrag für tappenbeck

Beiträge: 1213
Registriert: 30.05.2002

AutoCAD (Map)2019, Topobase, MapEdit, Lisp, .vb.net

erstellt am: 26. Mrz. 2020 18:21    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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 hoch

Ansichtsfenster 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


Sehen Sie sich das Profil von tappenbeck an!   Senden Sie eine Private Message an tappenbeck  Schreiben Sie einen Gästebucheintrag für tappenbeck

Beiträge: 1213
Registriert: 30.05.2002

AutoCAD (Map)2019, Topobase, MapEdit, Lisp, .vb.net

erstellt am: 02. Apr. 2020 08:53    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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 >>)

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen

nächster neuerer Beitrag | nächster älterer Beitrag
Antwort erstellen


Diesen Beitrag mit Lesezeichen versehen ... | Nach anderen Beiträgen suchen | CAD.de-Newsletter

Administrative Optionen: Beitrag schliessen | Archivieren/Bewegen | Beitrag melden!

Fragen und Anregungen: Kritik-Forum | Neues aus der Community: Community-Forum

(c)2023 CAD.de | Impressum | Datenschutz