| 
|  |  |  |  | Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |  |  |  |  |  | PNY wird von NVIDIA zum Händler des Jahres gewählt - zum dritten Mal in Folge, eine Pressemitteilung 
 |  
| Autor | Thema:  PDF´s bereinigen die nicht referenziert / gefunden oder entfernt sind (1833 /  mal gelesen) |  | SCKM Mitglied
 Technischer Zeichner
 
 
      Beiträge: 3Registriert: 14.07.2017
 Windows 7 Pro SP1Intel Xeon E3-1240
 16 GB Arbeitsspeicher
 Nvidia Quadro K4000
 AutoCAD 2016 SP1
 |    erstellt am: 14. Jul. 2017 09:37  <-- editieren / zitieren -->    Unities abgeben:            
  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
 )
 )
 )
 )
 )
 (defunimgbereinig (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
 
      
 
  
 
      Beiträge: 1999Registriert: 05.09.2000
 AutoCAD, BricscadWir machen das Mögliche unmöglich
 |    erstellt am: 14. Jul. 2017 11:52  <-- editieren / zitieren -->    Unities abgeben:           Nur für SCKM   
  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
 
 
      Beiträge: 3Registriert: 14.07.2017
 Windows 7 Pro SP1Intel Xeon E3-1240
 16 GB Arbeitsspeicher
 Nvidia Quadro K4000
 AutoCAD 2016 SP1
 |    erstellt am: 17. Jul. 2017 07:03  <-- editieren / zitieren -->    Unities abgeben:            
  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
 
 
      Beiträge: 3Registriert: 14.07.2017
 Windows 7 Pro SP1Intel Xeon E3-1240
 16 GB Arbeitsspeicher
 Nvidia Quadro K4000
 AutoCAD 2016 SP1
 |    erstellt am: 22. Aug. 2017 07:13  <-- editieren / zitieren -->    Unities abgeben:            
  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
 )
 )
 )
 )
 )
 (defunrefbereinig (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)
 )
 (defunc:refbereinig (/)
 (refbereinig 0 "ACAD_IMAGE_DICT") ; nicht referenzierte Bilder lösen
 (refbereinig 0 "ACAD_PDFDEFINITIONS") ; nicht referenzierte PDF´s lösen
 )
 (defunc: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
 )
 (defunc: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 >>)
  |