味も素っ気もない記事名ですね。
/Library/Scripts/printing Scripts の中に Finder で選択している項目を PDF に変換するスクリプトがあります。これが動かない。
なんでかな、と試行錯誤してやっと分かりました。変換対象のファイルへのパスに日本語が含まれていると変換に失敗するんですね。もちろん、ファイル名に日本語を使っていてもだめ。ファイルの中身が日本語かどうかやエンコーディングが何かといったことは関係ないっぽい。
パスに日本語が入っているとだめということなら、それなりの対処をすればいいだけでなんとか使えるようになりました。
しかし、この変換を行っているコマンドって RTF かテキストファイル(他にもいくつかの画像タイプに対応しているようですが、書類関連ではということです)しか変換できないのですね。画像が入っている RTFD ファイルなんかは変換できないし、Safari で保存した Web アーカイブなんかも変換できない。せめて、RTFD だけでも PDF に変換してほしいものです。
property typeList : {"TEXT"}
property extensionList : {"rtf", "txt"}
property tmpFolder : path to temporary items folder from user domain
(*
Usage: /System/Library/Printers/Libraries/convert
[-f <input filename>]
[-o <output filename>]
[-i <input mimetype>]
[-j <output mimetype>]
[-P <PPD filename>]
[-u]
[-a <attribute string>]
[-U <username>]
[-J <jobname>]
[-c <copies>]
[-D]
*)
tell application "Finder"
set curSelection to selection
set processFiles to {}
repeat with thisItem in curSelection
if not (class of thisItem is folder) then
if (name extension of thisItem is in extensionList or file type of thisItem is in typeList) then
set end of processFiles to thisItem as alias
end if
end if
end repeat
if processFiles is {} then return
repeat with thisItem in processFiles
set inFile to my duplicateFile(thisItem)
set outFile to (tmpFolder as Unicode text) & "out.pdf"
my convertPDF(POSIX path of inFile, POSIX path of outFile)
set fileName to (my trimExtension(thisItem) & ".pdf") as Unicode text
set name of (outFile as alias) to fileName
set parentFolder to my dirName(thisItem)
move (((tmpFolder as Unicode text) & fileName) as alias) to parentFolder replacing yes
end repeat
end tell
on duplicateFile(theFile)
set tmpFile to "process_file"
tell application "Finder"
if (file tmpFile of tmpFolder exists) then
move file tmpFile of tmpFolder to trash
end if
set copiedFile to duplicate theFile to tmpFolder replacing yes
set name of copiedFile to tmpFile
return (file tmpFile of tmpFolder) as alias
end tell
end duplicateFile
on convertPDF(inFile, outFile)
set converter to "/System/Library/Printers/Libraries/convert "
set mime to "'application/pdf'"
set theCommand to converter & "-f " & (quoted form of inFile) & " -o " & (quoted form of outFile) & " -j " & mime
try
do shell script theCommand
on error eMessage number enumber
return {enumber, eMessage}
end try
end convertPDF
on trimExtension(theFile)
set {name:fileName, name extension:theExtension} to info for theFile
if theExtension is missing value then set theExtension to ""
set fileCharNum to count fileName
set exCharNum to count theExtension
if exCharNum is not 0 then
return text 1 thru (fileCharNum - exCharNum - 1) of fileName
end if
return fileName
end trimExtension
on dirName(theFile)
tell application "Finder" to ((container of file theFile) as alias) as Unicode text
end dirName