asptt9 Posté(e) le 20 mars 2013 Partager Posté(e) le 20 mars 2013 Bonjour, J'ai dans mon espace objet des carnets de plusieurs feuille au format A4 espacées chacune de 17.77 mm en X et de 16.09 mm en Y. Ce carnet comporte 10 colonnes de feuilles A4 sur un nombre de lignes qui peut être infini...Je vous envoi un modèle en pièce jointe.J'ai créé un petit programme qui me permet d'automatiser l'impression du nombre de feuilles souhaité en ne sélectionnant que la première.Cette impression se fait au format PDF.Le soucis, c'est que je n'ai pas trouvé comment imprimer toutes les feuilles dans un seul fichier PDF. Actuellement ce programme créé autant de fichier PDF qu'il y a de feuille à imprimer.Auriez vous une idée pour que le programme regroupe automatiquement toutes les feuilles dans un seul fichier PDF ?Bien sur il y a des logiciels comme PDF Blender qui peuvent regrouper plusieurs PDF en un seul mais si je peux éviter... Voici mon programme : (defun c:tracercarnetpdf (/ ptFA ptFB nbcop compt1 Numpage chemin n) (commune_syndicat) (setq nbcop (getint "nombre de feuilles dans le carnet de repérage (y compris le cartouche) ?")) (setq ptFA (getpoint "point inferieur gauche de la feuille du cartouche")) (setq XptFA (car ptFA)) (setq YptFA (car(cdr ptFA))) (setq ptFB (getpoint "point superieur droit de la feuille du cartouche")) (setq XptFB (car ptFB)) (setq YptFB (car(cdr ptFB))) (setq compt1 1) (setq Numpage (itoa compt1)) (setq chemin (strcat "C:\\PDF\\" commune "_page " Numpage ".pdf")) (setq n 1) (setq a (itoa nbcop)) (while (and (<= compt1 nbcop)(<= compt1 (* 10 n))) (command "traceur" (princ "oui") (princ "Objet") (princ "DWG To PDF") (princ "A4 (210.00 x 297.00 mm)") (princ "Millimètres") (princ "Portrait") (princ "non") (princ "Fenêtre") (princ ptFA) (princ ptFB) (princ "1:1") (princ "centre") (princ "oui") (princ "") (princ "oui") (princ "") (princ chemin) (princ "N") (princ "O") ) (setq XptFA (+ 227.77 XptFA)) (setq YptFA YptFA) (setq ptFA (list XptFA YptFA)) (setq XptFB (+ 227.77 XptFB)) (setq YptFB YptFB) (setq ptFB (list XptFB YptFB)) (setq compt1 (1+ compt1)) (setq Numpage (itoa compt1)) (setq chemin (strcat "C:\\PDF\\" commune "_page " Numpage ".pdf")) (if (> compt1 (* 10 n)) (progn (setq XptFA (- XptFA 2277.7)) (setq YptFA (- YptFA 313.09)) (setq XptFB (- XptFB 2277.7)) (setq YptFB (- YptFB 313.09)) (setq ptFA (list XptFA YptFA)) (setq ptFB (list XptFB YptFB)) (setq n (1+ n)) ) ) (if (> compt1 nbcop) (alert (strcat "Le programme a imprimé " a " feuille(s) au format PDF")) ) ) (princ) ) Merci d'avance pour votre contribution.demo.zip Lien vers le commentaire Partager sur d’autres sites More sharing options...
Patrick_35 Posté(e) le 20 mars 2013 Partager Posté(e) le 20 mars 2013 Salut Je me suis amusé à te faire quelque choseIl fonctionne avec pdfCreator.Le premier folio est en bas à gauche, le suivant à sa droite puis au dernier sur la même ligne, on remonte d'un cran et on recommence.Tu peux avoir des "trous" dans tes lignes. (defun c:imp(/ bck bg doc ent hd lay lst pdf plt sel tot kill mon_impression) (defun kill(qui / item meth1 meth2 obj WMI) (setq WMI (vlax-create-object "WbemScripting.SWbemLocator") meth1 (vlax-invoke WMI 'ConnectServer nil nil nil nil nil nil nil nil) meth2 (vlax-invoke meth1 'ExecQuery "Select * from Win32_Process") ) (vlax-for item meth2 (and (setq obj (vlax-get item 'CommandLine)) (vl-string-search (strcase qui) (strcase obj)) (vlax-invoke item 'Terminate) ) ) (foreach item (list WMI meth1 meth2) (vlax-release-object item) ) ) (defun mon_impression(dim) (vlax-invoke lay 'setwindowtoplot (list (caar dim)(cadar dim)) (list (caadr dim)(cadadr dim)) ) (vl-catch-all-apply 'vlax-invoke (list plt 'plottodevice)) ) (setq doc (vla-get-activedocument (vlax-get-acad-object))) (and (ssget "x" (list (cons 0 "insert") (cons 2 "feuilledereperage3"))) (progn (vlax-for ent (setq sel (vla-get-activeselectionset doc)) (vla-getboundingbox ent 'bg 'hd) (setq lst (cons (list (vlax-safearray->list bg) (vlax-safearray->list hd)) lst)) ) (vla-delete sel) (setq lst (vl-sort lst '(lambda(a B) (if (eq (cadar a) (cadar B)) (< (caar a) (caar B)) (< (cadar a) (cadar B)) ) ) ) ) (kill "PDFCreator.exe") (setq pdf (vlax-create-object "PDFCreator.clsPDFCreator")) (vlax-invoke pdf 'cstart "/NoProcessingAtStartup") (vlax-put pdf 'cPrinterStop :vlax-true) (vlax-put pdf 'cWindowState 0) (vlax-invoke pdf 'cClearCache) (setq lay (vla-get-activelayout doc) plt (vla-get-plot doc) tot 0 ) (vla-put-configname lay "PDFCreator") (vla-refreshplotdeviceinfo lay) (vla-put-canonicalmedianame lay "A4") (vla-put-centerplot lay :vlax-true) (vla-put-paperunits lay acMillimeters) (vla-put-plothidden lay :vlax-false) (vla-put-plotrotation lay ac0degrees) (vla-put-plottype lay acWindow) (vla-put-plotviewportborders lay :vlax-false) (vla-put-plotviewportsfirst lay :vlax-true) (vla-put-plotwithlineweights lay :vlax-true) (vla-put-plotwithplotstyles lay :vlax-true) (vla-put-scalelineweights lay :vlax-false) (vla-put-standardscale lay acVpScaleToFit) (vla-put-stylesheet lay "") (vla-put-usestandardscale lay :vlax-true) (if (vl-catch-all-error-p (setq bck (vl-catch-all-apply 'getvar (list "backgroundplot")))) (setq bck nil) ) (if bck (setvar "backgroundplot" 0) ) (foreach ent lst (mon_impression ent) (while (/= (vlax-get pdf 'cCountOfPrintjobs) (1+ tot))) (setq tot (1+ tot)) ) (vlax-invoke pdf 'cCombineAll) (vlax-release-object pdf) (if bck (setvar "backgroundplot" bck) ) ) ) (princ) ) @+ 1 Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824 Lien vers le commentaire Partager sur d’autres sites More sharing options...
asptt9 Posté(e) le 20 mars 2013 Auteur Partager Posté(e) le 20 mars 2013 Bonjour Patrick_35, Merci beaucoup pour ton aide.Ça a l'air de bien fonctionner...Par contre, est-ce que c'est possible de commencer en haut à gauche et de passer à la ligne du dessous en bout de ligne car l'ordre de mes pages est dans le sens de lecture.Je vais essayer d'utiliser l'aide pour comprendre le fonctionnement de ton programme car je t'avoue que là j'ai un peu de mal à tout comprendre...En tout cas une nouvelle fois un grand merci et un grand respect pour tes connaissances en programmation!!! Lien vers le commentaire Partager sur d’autres sites More sharing options...
Patrick_35 Posté(e) le 22 mars 2013 Partager Posté(e) le 22 mars 2013 Salut Par contre, est-ce que c'est possible de commencer en haut à gauche et de passer à la ligne du dessous en bout de ligne car l'ordre de mes pages est dans le sens de lecture.Tu remplaces(< (cadar a) (cadar B))par(> (cadar a) (cadar B)) Je vais essayer d'utiliser l'aide pour comprendre le fonctionnement de ton programme car je t'avoue que là j'ai un peu de mal à tout comprendre...Pose des questions et on se fera un plaisir d'y répondre.Le but du lisp est aussi de montrer ce qui est possible de faire, et d'essayer de le comprendre.C'est grâce à ce type de lisp trouvé sur le net que j'ai progressé. @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824 Lien vers le commentaire Partager sur d’autres sites More sharing options...
tacad2704 Posté(e) le 2 novembre 2013 Partager Posté(e) le 2 novembre 2013 Bonjour à tous et merci pour tous vos précieux renseignements.J'ai le même problème,J'ai plusieurs Blocs de cadres A3et A4 à l'echelle 1/25ème, 1/20ème ... espacés de 100cm chacun sur l'espace objet.J'aimerai les imprimer tous en même temps sans passer par l'espace papier.Un lisp me permettant de sélectionner tous les cadres et les envoyer sur pdf creator me sera d'une grande utilité.Alors si qqn peut m'aider,D'avance Merci. Lien vers le commentaire Partager sur d’autres sites More sharing options...
-Olivier- Posté(e) le 18 août 2014 Partager Posté(e) le 18 août 2014 Bonjour à tous,J'ai essayé le programme de Patrick et j'ai un arrêt à la ligne (vla-put-plottype lay acWindow) avec l'erreur suivante :; erreur: Erreur Automation Entrée incorrecte Je ne comprend pas pourquoi.Si quelqu'un peut m'éclairer car cela dépasse mes maigres compétences en lisp. Merci par avance...Olivier Lien vers le commentaire Partager sur d’autres sites More sharing options...
Patrick_35 Posté(e) le 19 août 2014 Partager Posté(e) le 19 août 2014 Salut Et si tu remplaces acWindow par 4 ? @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824 Lien vers le commentaire Partager sur d’autres sites More sharing options...
-Olivier- Posté(e) le 19 août 2014 Partager Posté(e) le 19 août 2014 Bonjour Patrick,Je te remercie, mais j'ai toujours la même réponse et le même arrêt. J'ai bien le moniteur d'impression qui s'ouvre mais rien dedans. A quoi correspond la ligne où je bloque ? OlivierPS : J'ai peut-être raté une étape dans le fonctionnement.J'ai créé un bloc cadre avec le nom donné dans le programme pour chacune des fenêtres dans l'espace objet puis lancer le lisp. Lien vers le commentaire Partager sur d’autres sites More sharing options...
Patrick_35 Posté(e) le 19 août 2014 Partager Posté(e) le 19 août 2014 Alors l'erreur est ailleurs.Pour info, si on interroge la variable acWindow sur Autocad, on a la réponse 4.La ligne est là pour indiquer que l'on choisit une fenêtre comme zone de tracé. Le lisp recherche un bloc nommé "feuilledereperage3" et fait autant d'impression via une fenêtre (d'où la ligne avec acWindow) Si ça continue de bloquer, donne-moi un exemple @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824 Lien vers le commentaire Partager sur d’autres sites More sharing options...
-Olivier- Posté(e) le 19 août 2014 Partager Posté(e) le 19 août 2014 Maintenant cela marche (je n'avais pas bien préparé la 1ère fenêtre) en revanche les pages sont rangées dans le désordre (les lignes sont ok les colonnes non). Par exemple j'obtiens l'ordre suivant :07-05-03-10-06-01-04-09-02-08-17-15-13-20-16-11-14-19,etc... J'ai remis les blocs pour être sûr de l'alignement et de l'ordre de création. Olivier Lien vers le commentaire Partager sur d’autres sites More sharing options...
-Olivier- Posté(e) le 19 août 2014 Partager Posté(e) le 19 août 2014 Le problème venait d'un défaut d'alignement que j'avais pourtant vérifié. En faisant une copie réseau des blocs "feuilledereperage3" j'obtiens un résultat correct. Le fichier est récupéré de l'extérieur et contenait des imperfections. Petit résumé au prochain utilisateurs :- Charger le lisp (réponse #2) dans le dessin.- Créer un bloc servant de cadre avec pour nom "feuilledereperage3"- Créer un réseau avec ce cadre pour que toutes les pages souhaitées soient prisent en compte.- Créer une mise en page dans l'espace objet avec l'imprimant pdf créator, format A4, aire de tracé par fenêtre, centré, mise à l'échelle.- lancer la commande IMP En très grand merci à Patrick35 et désolé pour le dérangement. Olivier Lien vers le commentaire Partager sur d’autres sites More sharing options...
Patrick_35 Posté(e) le 19 août 2014 Partager Posté(e) le 19 août 2014 Si tu as trouvé, et bien c'est parfait :D ps : la mise en page est automatique, c'est ce qu'indique tous les (vla-put-... lay ...) après vla-refreshplotdeviceinfo @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824 Lien vers le commentaire Partager sur d’autres sites More sharing options...
-Olivier- Posté(e) le 19 août 2014 Partager Posté(e) le 19 août 2014 C'est ce que j'avais compris au départ mais si je le laisse faire il ne me créé pas les pages. Si j'ai le temps j'essayerais de voir à quel moment précis il bloque.Merci encore. :D Olivier Lien vers le commentaire Partager sur d’autres sites More sharing options...
Patrick_35 Posté(e) le 19 août 2014 Partager Posté(e) le 19 août 2014 Le problème venait d'un défaut d'alignement que j'avais pourtant vérifiéOn peut intégrer une tolérance par exemple(equal (cadar a) (cadar B) 0.0001)à la place de (eq (cadar a) (cadar B)) (equal 0.00011 0.00012 0.00001) --> T(equal 0.00011 0.00012 0.000001) --> Nil @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824 Lien vers le commentaire Partager sur d’autres sites More sharing options...
asptt9 Posté(e) le 21 septembre 2015 Auteur Partager Posté(e) le 21 septembre 2015 Bonjour, Je viens d'installer la dernière version de PDF Creator (2.1) sur un PC tout neuf et le Lisp de Patrick_35 ne fonctionne plus...Il renvoie l'erreur erreur: type d'argument incorrect: VLA-OBJECT nil apparemment à la ligne (vlax-invoke pdf 'cstart "/NoProcessingAtStartup") Savez vous de quoi ça peut venir ? Au pire je peux essayer de retrouver une version plus ancienne de PDF Creator. Merci par avance. Lien vers le commentaire Partager sur d’autres sites More sharing options...
Patrick_35 Posté(e) le 22 septembre 2015 Partager Posté(e) le 22 septembre 2015 Salut C'est complétement différent depuis la version 2Les modifs à adapter selon les besoins. Initialisation de PdfCreator (kill "PDFCreator.exe") (if (setq pdf (vlax-get-or-create-object "PDFCreator.clsPDFCreator")) (progn (vlax-invoke pdf 'cstart "/NoProcessingAtStartup") (vlax-put pdf 'cPrinterStop :vlax-false) (vlax-put pdf 'cPrinterStop :vlax-true) (vlax-put pdf 'cWindowState 0) (vlax-invoke pdf 'cClearCache) (vlax-put-property pdf 'cOption "savefilename" (vlax-make-variant (vl-filename-base (getvar "dwgname")))) (setq tot 0) ) (progn (setq pdf2 (vlax-get-or-create-object "PDFCreatorBeta.JobQueue")) (if (vl-catch-all-error-p (vl-catch-all-apply 'vlax-invoke (list pdf2 'initialize))) (progn (vlax-invoke pdf2 'releasecom) (vlax-invoke pdf2 'initialize) ) ) (setq tot 0) ) La suite de vos lisps pour imprimer. Attendre la fin de l'impression et éviter ainsi un mélange (cond (pdf (while (/= (vlax-get pdf 'cCountOfPrintjobs) (1+ tot))) (setq tot (1+ tot)) ) (pdf2 (vlax-invoke-method pdf2 'waitforjobs (setq tot (1+ tot)) 10) ) ) Impressions terminées --> Regrouper les pdf et sauvegarde (cond (pdf (vlax-invoke pdf 'cCombineAll) (vlax-release-object pdf) ) (pdf2 (vlax-invoke pdf2 'mergealljobs) (and (setq fic (getfiled "Nom du PDF" (strcat (getvar "dwgprefix") (vl-filename-base (getvar "dwgname")) ".pdf") "PDF" 1)) (vlax-invoke (vlax-get pdf2 'nextjob) 'convertto fic) ) (vlax-invoke pdf2 'releasecom) (vlax-release-object pdf2) ) ) @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824 Lien vers le commentaire Partager sur d’autres sites More sharing options...
x_all Posté(e) le 22 septembre 2015 Partager Posté(e) le 22 septembre 2015 on à le même besoin pour les carnets de ferraillage, j'ai fini par pondre ce truc qui aide aussi à renuméroter avec des blocs "cartouche" A3 ou A4 que tu peux modifier du moment que tu ne change pas le nom des attributs... les bétonneux en sont satisfait. je ne gère pas dpf créator, il faut faire "ajouter à la fille d'attente" puis tout fusionner à la main, mais avec les indications de Patrick_35, ce serai un bon exercice à ajouter car de mémoire pour l'instant, il n'y à pas de vba. attention à la configuration d’impression au nom de l'imprimante et de la feuille de plume sinon il te jette voir les lignes après (defun Imprimec'est làhttp://joch04.free.fr/achtml/howto-mosaique.htm quelques trucs sur autocad Lien vers le commentaire Partager sur d’autres sites More sharing options...
Patrick_35 Posté(e) le 23 septembre 2015 Partager Posté(e) le 23 septembre 2015 car de mémoire pour l'instant, il n'y à pas de vba.Salut C'est du vlisp appelant une appli externe en api, donc faisable en vba. @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824 Lien vers le commentaire Partager sur d’autres sites More sharing options...
asptt9 Posté(e) le 7 octobre 2015 Auteur Partager Posté(e) le 7 octobre 2015 Super !!! Merci beaucoup Patrick_35. Ton programme marche super bien et en plus, en passant par la version 2.1 de pdf creator, c'est beaucoup plus rapide car on enregistre directement le fichier sans passer par l'interface de pdf creator. Encore merci. Lien vers le commentaire Partager sur d’autres sites More sharing options...
Messages recommandés
Créer un compte ou se connecter pour commenter
Vous devez être membre afin de pouvoir déposer un commentaire
Créer un compte
Créez un compte sur notre communauté. C’est facile !
Créer un nouveau compteSe connecter
Vous avez déjà un compte ? Connectez-vous ici.
Connectez-vous maintenant