[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

(DTPtechNote:1265) [AS_Indesign CS] savePackage



下版まぎわのゆとりのないときに、いちいちパッケージ&PDFなんかやってられっか。
という人むき。ドラッグ&ドロップで。
下のソースは文字化けするかもしれないので、下はアプリケーション。
<http://www.seuzo.jp/test/savePackage_0.1.app.zip>
なにかおかしなところがあれば、なんなりと教えてください。



on open of theFiles
	set {save_folder, pdf_export_presets} to my preparation() --前準備
	
	--ファイルのフィルタリング
	set my_files to my file_kind({"ind", "indd"}, {"IDd3"}, theFiles)
	
	--ファイルを開いて、コントロールルーチンへ
	repeat with i in my_files
		tell application "InDesign CS_J"
			set user interaction level to never interact --ユーザー操作を禁止します
			try
				open i
			on error errMsg number errNum
				set user interaction level to interact with all --ユーザー操作の再開
				my my_error("誤りが起きました;" & i & return & "処理を中断しますか?" & return & errMsg & return & errNum, false)
			end try
			set user interaction level to interact with all --ユーザー操作の再開
			set doc_name to (name of document 1) as Unicode text
			set doc_name to do shell script "echo '" & doc_name & "' | sed -e 's/??.indd$//;'"
			--set doc_name to my as_replace(doc_name, ".indd", "")
			my control_routin(save_folder, doc_name, pdf_export_presets)
			close document 1 saving no
		end tell
	end repeat
	
	----終了の合図
	say "Work was finished. " & (length of my_files) & " files were processed."
end open

on run
	set {save_folder, pdf_export_presets} to my preparation() --前準備
	my doc_exists()
	tell application "InDesign CS_J"
		set doc_name to (name of document 1) as Unicode text
		set doc_name to do shell script "echo '" & doc_name & "' | sed -e 's/??.indd$//;'"
	end tell
	my control_routin(save_folder, doc_name, pdf_export_presets)
	--終了の合図
	say "Work was finished. "
end run

--------------------------------------------------------○準備
to preparation()
	my ver()
	
	set save_folder to my choose_folder()
	set pdf_f to button returned of (display dialog ("パッケージフォルダにPDFを作成しますか?" as Unicode text) buttons {"キャンセル", "パッケージのみ", "作成"} default button 3 with icon 1)
	if pdf_f = "作成" then
		--書き出しPDFスタイルを選択する
		set pdf_export_presets to my pdf_style()
	else
		set pdf_export_presets to false --PDFを作らないときはpdf_export_presetsがfalse
	end if
	return {save_folder, pdf_export_presets}
end preparation

--------------------------------------------------------●コントロールルーチン
to control_routin(save_folder, doc_name, pdf_export_presets)
	
	set save_PDF_path to save_folder & doc_name & ":" & doc_name & ".pdf"
	
	tell application "Finder"
		try
			set save_folder to make new folder at save_folder with properties {name:doc_name}
		on error errMsg number errNum
			my my_error("誤りが起きました(make new Folder);" & save_PDF_path & return & "処理を中断しますか?" & return & errMsg & return & errNum, false)
			return
		end try
	end tell
	try
		my save_Package(save_folder as Unicode text, false)
		if pdf_export_presets is not false then my save_PDF(save_PDF_path, pdf_export_presets)
	on error errMsg number errNum
		my my_error("誤りが起きました(Package or PDF);" & save_PDF_path & return & "処理を中断しますか?" & return & errMsg & return & errNum, false)
	end try
end control_routin


--------------------------------------------------------●InDesignバージョン確認ルーチン
to ver()
	tell application "InDesign CS_J"
		set my_version to version
		if my_version < 3 or my_version > 3.9 then
			activate
			my my_error("このプログラムはInDesign CS以外では動作しません", true)
		end if
	end tell
end ver

--------------------------------------------------------●パッケージのフォルダを保存するフォルダを選択
to choose_folder()
	set save_folder to choose folder with prompt ("パッケージのフォルダを保存するフォルダを選択してください" as Unicode text)
	return (save_folder as Unicode text)
end choose_folder

--------------------------------------------------------●書き出しPDFスタイルを選択する
to pdf_style()
	tell application "InDesign CS_J"
		set pdf_export_presets to name of PDF export presets
		set pdf_export_presets to choose from list pdf_export_presets with prompt ("PDF書き出しプリセットを選んでください") as Unicode text
	end tell
	if pdf_export_presets = false then my my_error("処理を中止します", true)
	return pdf_export_presets as Unicode text
end pdf_style


--------------------------------------------------------●ドキュメントが開かれているかどうか
to doc_exists()
	tell application "InDesign CS_J"
		if not (exists document 1) then
			activate
			my my_error("ドキュメントが開かれていません", true)
		end if
	end tell
end doc_exists



----------------------------------------------●必要なファイルだけをフィルタして返します
to file_kind(extention_list, type_list, theFiles)
	set my_files to {}
	set extention_list to my conv_unicode(extention_list)
	set type_list to my conv_unicode(type_list)
	
	ignoring case
		tell application "Finder"
			repeat with i in theFiles
				if extention_list contains ((name extension of i) as Unicode text) then
					set end of my_files to contents of i
				else if (kind of i) is "フォルダ" as Unicode text then
					activate
					display dialog "フォルダ「" & (name of i) & "」の中の全ファイルを処理します" buttons {"キャンセル", "OK"} default button 2 with icon 0
					set my_files to my_files & my file_kind(extention_list, type_list, every file in folder i)
				else if type_list contains ((file type of i) as Unicode text) then
					set end of my_files to contents of i
				else
					activate
					display dialog "ファイル「" & (name of i) & "」は処理ファイルとして不適当です" buttons {"キャンセル", "OK"} default button 2 with icon 0
				end if
			end repeat
		end tell
	end ignoring
	return my_files
end file_kind


--------------------------------------------------------●パッケージをsaveする
to save_Package(save_folder, preflight_errors)
	set save_folder to save_folder as string --濁音、半濁音のための苦肉な処理
	set save_folder to save_folder as Unicode text
	tell application "InDesign CS_J"
		set succeeded to package document 1 to save_folder ignore preflight errors preflight_errors with copying fonts, copying linked graphics, copying profiles, updating graphics and creating report
		if succeeded is false then
			set ANS to button returned of (display dialog (save_folder & "はプリフライトエラーです。続行しますか?" as Unicode text) buttons {"キャンセル", "パスする", "パッケージ"} with icon 0)
			if ANS is "パッケージ" then my save_Package(save_folder, true)
		end if
	end tell
end save_Package


--------------------------------------------------------●PDFをsaveする
to save_PDF(save_PDF_path, pdf_export_presets)
	tell application "InDesign CS_J"
		set page range of PDF export preferences to all pages --すべてのページを書き出す
		with timeout of 3600 seconds
			export document 1 format PDF type to save_PDF_path using PDF export preset pdf_export_presets
		end timeout
	end tell
end save_PDF




----------------------------------●置換
to as_replace(theText, orgStr, newStr)
	set oldDelim to AppleScript's text item delimiters
	set AppleScript's text item delimiters to orgStr
	set tmpList to every text item of theText
	set AppleScript's text item delimiters to newStr
	set tmpStr to tmpList as text
	set AppleScript's text item delimiters to oldDelim
	return tmpStr
end as_replace

----------------------------------●リストの項目をunicode textにする
to conv_unicode(tmp_list)
	repeat with i in tmp_list
		set contents of i to (contents of i) as Unicode text
	end repeat
	return tmp_list
end conv_unicode

----------------------------------●エラー処理
on my_error(err_str, my_stop)
	set err_str to err_str as Unicode text
	if my_stop then
		set my_stop to {"中止"}
	else
		set my_stop to {"中止", "続行"}
	end if
	tell application "InDesign CS_J"
		activate
		beep
		set ANS to button returned of (display dialog err_str buttons my_stop with icon 0) --警告ダイアログ出してストップ
		if ANS is "中止" then error number -128
	end tell
end my_error