| | | Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte | | | | PNY präsentiert die neue NVIDIA RTX A400 und die A1000 Grafikkarte, eine Pressemitteilung
|
Autor
|
Thema: PDF´s bereinigen die nicht referenziert / gefunden oder entfernt sind (1564 / mal gelesen)
|
SCKM Mitglied Technischer Zeichner
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 / 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 ) ) ) ) )(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
Beiträge: 1989 Registriert: 05.09.2000 AutoCAD, Bricscad Wir 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: 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 / 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: 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 / 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 ) ) ) ) )(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 >>)
|