LSP-Symbol

PDF mit PDFCreator

PDF mit PDFCreator



Nachfolgende LSP-Routine erlaubt Ihnen aus einer DWG ein PDF zu erzeugen, welche maßgenau - also ohne weisse Ränder - erzeugt wird.

Vorausetzungen

Funktionsumfang

All diese Schritte werden in einem LSP umgesetzt, welches den Dateinamen automatisch aus dem aktuellen Dateinamen generiert. Die Stifteinstellungen werden aus einer cfg-Datei im Rootordner des Projekts ausgelesen - sollte diese Datei fehlen, so wird der firmeninterne Standard herangezogen.

Die notwendigen Einstellungen für die Registry werden hierbei über AutoCAD zuerst ausgelesen, dann entsprechend den Anforderungen gesetzt und in weiterer Folge wieder auf den Ursprungswert gesetzt.

Eine geplante Erweiterungn wird der vollkommene Automatik-Modus sein, welcher Ihnen erlaubt aus einer DWG ohne der Angabe des zu plottenden Fenster ein passgenauses DWG zu erzeugen.

Bekannte Einschränkunngen

Download-Link: pdfcreator_plot.lsp

; +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
; Tool: Erzeugt ein exakt zugeschnittenes PDF aus AutoCAD - das PDF wird im Verzeichnis des dwgs abgelegt
; Tool: Creates a cropped pdf from AutoCAD - pdf is placed in same folder as dwg
; Requirements: AutoCAD, GhostScript, PDFCreator
; also possible with "DWG To PDF" and probably with other PDF-Writer - requires different settings (currently no documentation)
; 1 inch == 25.4 mm == 72 pt
; maxsize = 92" == 2336.8 mm == 6624 pt
; Author: Thomas Flandera
; Date: 2014-12-14
; +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

; PDF-Reset erlaubt es den PDFCreator-Task zu beenden - dies kann erforderlich sein, wenn der Task hängen bleibt
(defun c:pdf_reset	()
	(command "_shell" "taskkill /im pdfcreator.exe")
	(vl-registry-write "HKEY_CURRENT_USER\\Software\\PDFCreator\\Program" "UseAutosave" "0")
	(vl-registry-write "HKEY_CURRENT_USER\\Software\\PDFCreator\\Program" "UseAutosaveDirectory" "0")
)

(defun settings_crop ()
	(vl-load-com)

; +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
; Abfrage des zu plottenden Fensters
; Define the plot window
; +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
	(setq pt1 (getpoint "\nPick 1st corner / Ersten Eckpunkt angeben: "))
	(setq pt2 (getpoint "\nPick 2nd corner / Zweiten Eckpunkt angeben: "))

	(setq dwg_ll (list (min (car pt1) (car pt2)) (min (cadr pt1) (cadr pt2))))
	(setq dwg_ur (list (max (car pt1) (car pt2)) (max (cadr pt1) (cadr pt2))))

; +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
; Definition der ctb-Files - entweder mit der Datei "plot.cfg" oder festdefinierten Werten
; plot.cfg kann im Verzeichnis der dwg liegen oder zB bei Ablagestruktur in "LW:\\2015\\01\\plot.cfg"
; für andere Ablagestrukturen müssen die Werte "1" & "17" korrekt definiert werden.
; Definition of ctb-files - either by file "plot.cfg" or by default
; plot.cfg is placed either in folder of dwg or in a project root directory like: "DL:\\2015\\01\\plot.cfg"
; for anything else values "1" & "17" need to be changed accordingly
; +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
(if (findfile (setq plot_cfg (strcat (getvar "dwgprefix") "plot.cfg")))
	(progn
		(setq plot_cfg (open plot_cfg "r"))
		(setq 1to1 (read-line plot_cfg))
		(setq 1to2 (read-line plot_cfg))
		(close plot_cfg)
	)
	(if (findfile (setq plot_cfg (strcat (substr (getvar "dwgprefix") 1 17) "plot.cfg")))
		(progn
			(setq plot_cfg (open plot_cfg "r"))
			(setq 1to1 (read-line plot_cfg))
			(setq 1to2 (read-line plot_cfg))
			(close plot_cfg)
		)
		(setq 1to1 "Standard A1.ctb" 1to2 "Standard A3.ctb") ;für festdefinierte Werte hier definieren - define permanent ctb-files
	)
)

; +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
; Befinden sich Bilder mit einer großen Dateigröße in der Zeichnung muss der PDF-Crop-Vorgang länger auf die PDF-Datei warten
; For dwgs with large images attached it's required that the cropping Tool waits for a longer time to crop
; +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
(if (= images_yes 1)
	(setq delay 20000)
	(setq delay 5000)
)

; +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
; Dateien in Unterverzeichnis ablegen (Name in Anführungszeichen),
; wenn kein Unterverzeichnis gewünscht nur "" anführen
; +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
; places PDF-files to subdirectories (name in quotation marks),
; for no subdirectory leave the quotation marks empty
; +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
	(setq uvz "")
	(if (/= uvz "")
		(setq pdf_path (strcat (getvar "dwgprefix") uvz "\\" ))
		(setq pdf_path (getvar "dwgprefix"))
	)
	(vl-mkdir pdf_path)

; +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
; Dateinamen-Erweiterung
; Filename extensions - use prefix and suffix for it
; Vorangestellt:	prefix
; Angehängt:		suffix
; +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
	(setq prefix "")
	(setq suffix "")
	
; +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
; Definition des temporären Pfads und des temporären Dateinamens
; Definition of temporary path and filename
; +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
	(setq pdf_path_temp "c:\\temp\\")
	(setq pdf_file_temp "uncropped.pdf")

; +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
; Für Zeichnungen mit mehr als einem Layout - ab zwei Layouts wird der Layoutname Teil des PDF-Namen
; Drawings with more than one layout - if there are tow or more layouts the layoutname will be used for naming of PDF
; +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++	
	(if (= (length (layoutlist)) 1)
		(setq pdf_file_output (strcat prefix (substr (getvar "DWGNAME") 1 (- (strlen (getvar "DWGNAME")) 4)) suffix ".pdf"))
		(setq pdf_file_output (strcat prefix (substr (getvar "DWGNAME") 1 (- (strlen (getvar "DWGNAME")) 4)) "-" (getvar "CTAB") suffix ".pdf"))
	)

	(setq pdf_file (strcat "\"" pdf_path pdf_file_output "\""))
	(reg_reader)
	(vl-registry-write "HKEY_CURRENT_USER\\Software\\PDFCreator\\Program" "UseAutosave" "1")
	(vl-registry-write "HKEY_CURRENT_USER\\Software\\PDFCreator\\Program" "UseAutosaveDirectory" "1")
	(vl-registry-write "HKEY_CURRENT_USER\\Software\\PDFCreator\\Program" "AutosaveDirectory" pdf_path_temp)
	(vl-registry-write "HKEY_CURRENT_USER\\Software\\PDFCreator\\Program" "AutosaveFilename" pdf_file_temp)
	(vl-registry-write "HKEY_CURRENT_USER\\Software\\PDFCreator\\Program" "OpenOutputFile" "0")
	(vl-registry-write "HKEY_CURRENT_USER\\Software\\PDFCreator\\Program" "AutosaveStartStandardProgram" "0")
	(command "_.delay" 5000)
)

(defun reg_write_back ()
	(command "_.delay" delay)
	(vl-registry-write "HKEY_CURRENT_USER\\Software\\PDFCreator\\Program" "UseAutosave" AutoSave)
	(vl-registry-write "HKEY_CURRENT_USER\\Software\\PDFCreator\\Program" "UseAutosaveDirectory" UseAutosaveDirectory)
	(vl-registry-write "HKEY_CURRENT_USER\\Software\\PDFCreator\\Program" "AutosaveDirectory" AutosaveDirectory)
	(vl-registry-write "HKEY_CURRENT_USER\\Software\\PDFCreator\\Program" "AutosaveFilename" AutosaveFilename)
	(vl-registry-write "HKEY_CURRENT_USER\\Software\\PDFCreator\\Program" "OpenOutputFile" OpenOutputFile)
	(vl-registry-write "HKEY_CURRENT_USER\\Software\\PDFCreator\\Program" "AutosaveStartStandardProgram" AutosaveStartStandardProgram)
)

(defun reg_reader ()
	(command "_.delay" delay)
	(setq AutoSave (vl-registry-read "HKEY_CURRENT_USER\\Software\\PDFCreator\\Program" "UseAutosave"))
	(setq UseAutosaveDirectory (vl-registry-read "HKEY_CURRENT_USER\\Software\\PDFCreator\\Program" "UseAutosaveDirectory"))
	(setq AutosaveDirectory (vl-registry-read "HKEY_CURRENT_USER\\Software\\PDFCreator\\Program" "AutosaveDirectory"))
	(setq AutosaveFilename (vl-registry-read "HKEY_CURRENT_USER\\Software\\PDFCreator\\Program" "AutosaveFilename"))
	(setq OpenOutputFile (vl-registry-read "HKEY_CURRENT_USER\\Software\\PDFCreator\\Program" "OpenOutputFile"))
	(setq AutosaveStartStandardProgram (vl-registry-read "HKEY_CURRENT_USER\\Software\\PDFCreator\\Program" "AutosaveStartStandardProgram"))
)

(defun run_pdfCrop ()
	(setq dwg_llx (car dwg_ll))
	;(setq pdf_llx (rtos (- 6624 9))) Wenn Papierformat Querformat / if paper format is landscape
	(setq pdf_llx (rtos 9.0))
	
	(setq dwg_lly (cadr dwg_ll))
	(setq pdf_lly (rtos 9.0))
	
	(setq dwg_urx (car dwg_ur))
	;(setq pdf_urx (rtos (- (- 6624 9) (* (/ (- dwg_urx dwg_llx) 25.4) 72 plot_factor)))) Wenn Papierformat Querformat / if paper format is landscape
	(setq pdf_ury (rtos (+ (* (/ (- dwg_urx dwg_llx) 25.4) 72 plot_factor) 9)))

	(setq dwg_ury (cadr dwg_ur))
	;(setq pdf_ury (rtos (+ (* (/ (- dwg_ury dwg_lly) 25.4) 72 plot_factor) 9))) Wenn Papierformat Querformat / if paper format is landscape
	(setq pdf_urx (rtos (+ (* (/ (- dwg_ury dwg_lly) 25.4) 72 plot_factor) 9)))
	
	(setq pdf_ll (strcat pdf_lly " " pdf_urx))
	(setq pdf_ur (strcat pdf_ury " " pdf_llx))

	(if (= images_yes 1)
		(progn
			(setq delay 30000)
			(setq delay 15000)
		)
		(command "_.delay" 30000)
	)

	(setq pdf_command	(strcat "\"\"C:\\Program Files\\gs\\gs9.15\\bin\\gswin64c.exe\" ^
							-o " pdf_file " ^ -sDEVICE=pdfwrite ^
							-c \"[/CropBox [" pdf_ll " " pdf_ur "] /PAGES pdfmark\" ^
							-f " (strcat "\"" pdf_path_temp pdf_file_temp) "\"\""
				)
	)
	(command "_shell" pdf_command)
)

(defun c:pdf_max1to1 ()
	(settings_crop)
	
	(command "_-plot" "_Y" "" "PDFCreator.pc3" "92x92" "_M" "_P" "_N" "_W" dwg_ll dwg_ur "1:1" "0,0" "_Y" 1to1 "_Y" "_N" "_N" "_N" "_N" "_N" "_y" )
	(setq plot_factor 1.0)
	
	(reg_write_back)
	(run_pdfCrop)
)

(defun c:pdf_max1to2 ()
	(settings_crop)
	
	(command "_-plot" "_Y" "" "PDFCreator.pc3" "92x92" "_M" "_P" "_N" "_W" dwg_ll dwg_ur "1:2" "0,0" "_Y" 1to1 "_Y" "_N" "_N" "_N" "_N" "_N" "_y" )
	(setq plot_factor 0.5)
	
	(reg_write_back)
	(run_pdfCrop)
)		

Bereits erschienene Bücher: