Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  Lisp
  PDF´s bereinigen die nicht referenziert / gefunden oder entfernt sind

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:  PDF´s bereinigen die nicht referenziert / gefunden oder entfernt sind (1454 mal gelesen)
SCKM
Mitglied
Technischer Zeichner

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

Beiträge: 3
Registriert: 14.07.2017

Windows 7 Pro SP1
Intel Xeon E3-1240
16 GB Arbeitsspeicher
Nvidia Quadro K4000
AutoCAD 2016 SP1

erstellt am: 14. Jul. 2017 09:37    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

Hallo zusammen,

ich bastle an einem Lisp, das PDF-Dateien je nach Status ob „referenziert“, „nicht gefunden“ oder „entfernt“ automatisch lösen soll.
Das ganze habe ich schon mal grob für Raster Bilder gemacht und funktioniert dort auch schon mal einigermaßen.

Code:
(defun
    imglösen (IMGNAME /)
    (vl-catch-all-apply
        '(lambda ()
            (vla-delete
                (vla-item
                    (vla-item
                        (vla-get-dictionaries
                            (vla-get-activedocument (vlax-get-acad-object))
                        )
                        "ACAD_IMAGE_DICT"
                    )
                    IMGNAME
                )
            )
        )
    )
)

(defun
    imgbereinig (OPT
                  /
                  COUNT
                  IMGDICT
                  IMGENTFERNT
                  IMGGEFUNDEN
                  IMGNAME
                  IMGREFERENZIERT
                  OBJ
                  OBJDATA
                )
    (setq IMGDICT (dictsearch (namedobjdict) "ACAD_IMAGE_DICT"))
    (while (/= (setq OBJ (car IMGDICT)) nil)
        (if (= (car OBJ) 3)
            (progn
                (setq IMGNAME (cdr OBJ))
                (setq OBJDATA (entget (cdr (assoc 350 (cdr IMGDICT)))))
                (setq IMGGEFUNDEN
                        (if (/= (findfile (cdr (assoc 1 OBJDATA))) nil)
                            "gefunden"
                            "nicht gefunden"
                        )
                )
                (setq IMGENTFERNT
                        (if (/= (cdr (assoc 280 OBJDATA)) 1)
                            "entfernt"
                            "nicht entfernt"
                        )
                )
                (setq COUNT 0)
                (foreach
                    code OBJDATA
                    (if (= (car code) 330)
                        (setq COUNT (+ COUNT 1))
                    )
                )
                (setq IMGREFERENZIERT
                        (if (= COUNT 2)
                            "nicht referenziert"
                            "referenziert"
                        )
                )
                ;;                (print
                ;;                    (strcat
                ;;                        IMGNAME
                ;;                        ", "
                ;;                        IMGGEFUNDEN
                ;;                        ", "
                ;;                        IMGENTFERNT
                ;;                        ", "
                ;;                        IMGREFERENZIERT
                ;;                    )
                ;;                )
                (cond ((and (= OPT 0) (= IMGREFERENZIERT "nicht referenziert"))
                      (print (strcat IMGNAME ", " IMGREFERENZIERT ", gelöst"))
                      (imglösen IMGNAME)
                      )
                      ((and (= OPT 1)
                            (or (= IMGREFERENZIERT "nicht referenziert")
                                (= IMGGEFUNDEN "nicht gefunden")
                            )
                      )
                      (print
                          (strcat
                              IMGNAME
                              ", "
                              IMGGEFUNDEN
                              ", "
                              IMGREFERENZIERT
                              ", gelöst"
                          )
                      )
                      (imglösen IMGNAME)
                      )
                      ((and (= OPT 2)
                            (or (= IMGREFERENZIERT "nicht referenziert")
                                (= IMGGEFUNDEN "nicht gefunden")
                                (= IMGENTFERNT "entfernt")
                            )
                      )
                      (print
                          (strcat
                              IMGNAME
                              ", "
                              IMGGEFUNDEN
                              ", "
                              IMGREFERENZIERT
                              ", "
                              IMGENTFERNT
                              ", gelöst"
                          )
                      )
                      (imglösen IMGNAME)
                      )
                )
            )
        )
        (setq IMGDICT (cdr IMGDICT))
    )
    (princ)
)

(defun c:imgbereinig (/) (imgbereinig 0))
(defun c:imgbereinig+ (/) (imgbereinig 1))
(defun c:imgbereinig++ (/) (imgbereinig 2))


Ich scheitere aber im Moment daran abzufragen ob eine PDF-Datei entfernt ist oder nicht entfernt ist.
Den einzigen Anhaltspunkt den ich bis jetzt habe ist mit nachfolgender Funktion anhand von Height oder Width:

Code:
(ssget "X" (list (cons 0 "PDFUNDERLAY")))
(vlax-for
    o (setq s (vla-get-activeselectionset
                  (vla-get-activedocument (vlax-get-acad-object))
              )
      )
    (vlax-dump-object o)
)

Bei einem geladen PDF erhalte ich die Breite, bei einem nicht gefundenen die Fehlermeldung „AutoCAD.Application: Dateifehler“ bei einem entfernten die Fehlermeldung „Ausnahmefehler aufgetreten“ jedoch schaffe ich es leider nicht dies irgendwie weiter auszuwerten.

Hat jemand eine Idee dafür ?

LG Markus

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

CADwiesel
Moderator
CAD4FM UG




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

Beiträge: 1968
Registriert: 05.09.2000

AutoCAD, Bricscad
Wir machen das Mögliche unmöglich

erstellt am: 14. Jul. 2017 11:52    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 Nur für SCKM 10 Unities + Antwort hilfreich

Boa... viel code hasde da
Probier's mal so:
Code:
(setq aws(ssget "x" '((0 . "PDFUNDERLAY")))
      z 0)
(repeat(SSLENGTH aws)
 
(if(and
    (setq pdf(entget(ssname aws z)))
(setq xdatas(entget(cdr(assoc 340 pdf))(list "*")))
    )
(if(or(and(assoc -3 xdatas)
      (assoc 1000(cdadr(assoc -3 xdatas)))
      (eq(cdr(assoc 1000(cdadr(assoc -3 xdatas))))"NOLOAD")
      )
      (null(findfile(cdr(assoc 1 xdatas))))
      )
  (princ"\nEntladen oder Dateipfad stimmt nicht")
  (princ"\Geladen")
  )
  )
  (setq z (1+ z))
  )

------------------
Gruß
CADwiesel
Besucht uns im CHAT

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

SCKM
Mitglied
Technischer Zeichner

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

Beiträge: 3
Registriert: 14.07.2017

Windows 7 Pro SP1
Intel Xeon E3-1240
16 GB Arbeitsspeicher
Nvidia Quadro K4000
AutoCAD 2016 SP1

erstellt am: 17. Jul. 2017 07:03    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

Guten Morgen,

ja ist ein wenig lang, muss ich noch ausführlicher testen und bereinigen.
Dein Code ist genau das was ich gesucht habe, danke dir ich werde es mal einbauen und berichten wird aber Urlaubsbeding noch ein wenig dauern.

LG Markus

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

SCKM
Mitglied
Technischer Zeichner

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

Beiträge: 3
Registriert: 14.07.2017

Windows 7 Pro SP1
Intel Xeon E3-1240
16 GB Arbeitsspeicher
Nvidia Quadro K4000
AutoCAD 2016 SP1

erstellt am: 22. Aug. 2017 07:13    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

Hallo,

hat ein wenig länger gedauert aber dank CADwiesel macht es soweit ich es bis jetzt testen konnte das was es soll nachfolgend das Lisp zum bereinigen von Bild und PDF Referenzen:

Code:
(defun
    :CMX:reflösen (NAME DICT /)
    (vl-catch-all-apply
        '(lambda ()
            (vla-delete
                (vla-item
                    (vla-item
                        (vla-get-dictionaries (vla-get-activedocument (vlax-get-acad-object)))
                        DICT
                    )
                    NAME
                )
            )
        )
    )
)

(defun
    refbereinig (OPT
                  DICT
                  /
                  COUNT
                  REFDICT
                  ENTFERNT
                  GEFUNDEN
                  NAME
                  REFERENZIERT
                  OBJ
                  OBJDATA
                  STATUS
                )
    (setq REFDICT (dictsearch (namedobjdict) DICT))
    (while (/= (setq OBJ (car REFDICT)) nil)
        (if (= (car OBJ) 3)
            (progn
                (setq NAME    (cdr OBJ)
                      OBJDATA  (entget (cdr (assoc 350 (cdr REFDICT))) (list "*"))
                      GEFUNDEN (if (/= (findfile (cdr (assoc 1 OBJDATA))) nil)
                                  "gefunden"
                                  "nicht gefunden"
                              )
                )
                (if (= DICT "ACAD_PDFDEFINITIONS")
                    (setq ENTFERNT
                            (if (and (assoc -3 OBJDATA)
                                      (assoc 1000 (cdadr (assoc -3 OBJDATA)))
                                      (eq (cdr (assoc 1000 (cdadr (assoc -3 OBJDATA)))) "NOLOAD")
                                )
                                "entfernt"
                                "nicht entfernt"
                            )
                    )
                )
                (if (= DICT "ACAD_IMAGE_DICT")
                    (setq ENTFERNT
                            (if (/= (cdr (assoc 280 OBJDATA)) 1)
                                "entfernt"
                                "nicht entfernt"
                            )
                    )
                )
                (setq COUNT 0)
                (foreach
                    code OBJDATA
                    (if (= (car code) 330)
                        (setq COUNT (+ COUNT 1))
                    )
                )
                (setq REFERENZIERT
                        (if (= COUNT 2)
                            "nicht referenziert"
                            "referenziert"
                        )
                )
                (cond ((= ENTFERNT "entfernt") (setq STATUS "entfernt"))
                      ((= REFERENZIERT "nicht referenziert") (setq STATUS "nicht referenziert"))
                      ((= GEFUNDEN "nicht gefunden") (setq STATUS "nicht gefunden"))
                      (T (setq STATUS "geladen"))
                )
                (cond ((and (= OPT 0) (= STATUS "nicht referenziert"))
                      (princ (strcat "\n" NAME ", " STATUS ", wurde gelöst"))
                      (:CMX:reflösen NAME DICT)
                      )
                      ((and (= OPT 1) (or (= STATUS "nicht referenziert") (= STATUS "nicht gefunden")))
                      (princ (strcat "\n" NAME ", " STATUS ", wurde gelöst"))
                      (:CMX:reflösen NAME DICT)
                      )
                      ((and (= OPT 2)
                            (or (= STATUS "nicht referenziert")
                                (= STATUS "nicht gefunden")
                                (= STATUS "entfernt")
                            )
                      )
                      (princ (strcat "\n" NAME ", " STATUS ", wurde gelöst"))
                      (:CMX:reflösen NAME DICT)
                      )
                )
            )
        )
        (setq REFDICT (cdr REFDICT))
    )
    (princ)
)

(defun
    c:refbereinig (/)
    (refbereinig 0 "ACAD_IMAGE_DICT") ; nicht referenzierte Bilder lösen
    (refbereinig 0 "ACAD_PDFDEFINITIONS") ; nicht referenzierte PDF´s lösen
)

(defun
    c:refbereinig+ (/)
    (refbereinig 1 "ACAD_IMAGE_DICT") ; nicht referenzierte / nicht gefundene Bilder lösen
    (refbereinig 1 "ACAD_PDFDEFINITIONS") ; nicht referenzierte / nicht gefundene PDF´s lösen
)

(defun
    c:refbereinig++ (/)
    (refbereinig 2 "ACAD_IMAGE_DICT") ; nicht referenzierte / nicht gefundene / entfernte Bilder lösen
    (refbereinig 2 "ACAD_PDFDEFINITIONS") ; nicht referenzierte / nicht gefundene / entfernte PDF´s lösen
)


LG Markus

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