Adobe Acrobatで、見開きPDFを単ページPDFに変換
テレワーク用に1つの画面で、
効率良くPDF(指定紙)とInDesignが見れるように作成したスクリプトです。
概要としては、
PDFの一番大きいページを基準に、
他のページが、片ページか見開きかを判定していますが、
本当は、縦横比を基準にした方が良さそうです。
また、座標もInDesignとは異なるため、
計算方法が間違っているかも知れませんので予めご了承ください。
あくまでサンプルとしてご利用ください。
予想した結果が得られない場合、
●長期保管用PDF(PDF/A)
●プリプレスデータ交換用PDF(PDF/X)
●PDF/E
などで再保存すると、
レイアウトを維持したまま回転の情報が破棄されるので、
スクリプトが上手く動作するようになると思います。
ほか、
プリフライト > PDFフィックスアップ > 注釈とフォームフィールドの統合
でも同様に回転の情報が破棄されるようです。
▼AppleScript
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 |
tell application "Adobe Acrobat" activate if (count of documents) ≠ 0 then activate display dialog "PDFを閉じてから、" & return & "実行してください。" buttons {"OK"} default button 1 giving up after 120 with icon 0 return end if end tell activate set pdfList to choose file of type {"pdf"} with prompt "PDFファイルを選択(複数選択可)" with multiple selections allowed activate set menuRes to button returned of (display dialog "●綴じ方を選択してください。" & return & "" buttons {"キャンセル", "左綴じ用", "右綴じ用"} giving up after 120) --default button 1 with icon 1 repeat with pdfFile in pdfList tell application "Finder" set parentPath to (parent of pdfFile) as string set FileName to (name of pdfFile) as string set FileExt to (name extension of pdfFile) as string set FileNameR to my repChar(FileName, "." & FileExt, "") & "_Right page.pdf" --右ページ set FileNameL to my repChar(FileName, "." & FileExt, "") & "_Left page.pdf" --左ページ if menuRes = "右綴じ用" then set FileNameS to my repChar(FileName, "." & FileExt, "") & "→単ページ(右綴じ).pdf" else if menuRes = "左綴じ用" then set FileNameS to my repChar(FileName, "." & FileExt, "") & "→単ページ(左綴じ).pdf" end if set New_File_PathR to parentPath & FileNameR set New_File_PathL to parentPath & FileNameL set New_File_PathS to parentPath & FileNameS end tell ignoring application responses tell application "Finder" activate display dialog "作業中です。" & return & "少々お待ちください。" & return & return & "この表示は、5秒後に自動的に消えます。" buttons {"OK"} default button 1 giving up after 5 with icon 2 end tell end ignoring --////////////////////////////// 右ページ処理 tell application "Adobe Acrobat" open pdfFile set PDFSizeList to my PDFSizeCheck() tell document 1 set pageCount1 to count of page repeat with i from 1 to pageCount1 if item i of PDFSizeList = true then tell page i if rotation = 270 or rotation = 90 then set {x1, y1, x2, y2} to crop box --rotation: 90,270の時 set media box to {x1, y1 + (y2 - y1), x2, y1 + (y2 - y1) / 2} else set {x1, y1, x2, y2} to crop box --{x1, y1, x2, y2} (left, top, right, bottom)(左、上、右、下)。左下が基準点 --{x1, y2, x2, y1}の方がいいかも? set media box to {x1 + (x2 - x1) / 2, y1, x1 + (x2 - x1), y2} end if end tell end if end repeat end tell save document 1 to file New_File_PathR end tell --////////////////////////////// 左ページ処理 tell application "Adobe Acrobat" open pdfFile tell document 2 set pageCount2 to count of page repeat with i from 1 to pageCount2 if item i of PDFSizeList = true then tell page i if rotation = 270 or rotation = 90 then set {x1, y1, x2, y2} to crop box --rotation: 90,270の時 set media box to {x1, y1, x2, y1 / 2} else set {x1, y1, x2, y2} to crop box --{x1, y1, x2, y2} (left, top, right, bottom)(左、上、右、下)。左下が基準点 set media box to {x1, y1, x1 + (x2 - x1) / 2, y2} end if end tell end if end repeat end tell save document 2 to file New_File_PathL --////////////////////////////// PDF左右結合 repeat with i from pageCount1 to 1 by -1 ------ ページ最後尾から結合 if item i of PDFSizeList = true then if menuRes = "右綴じ用" then insert pages document 1 after i from document 2 starting with i number of pages 1 else if menuRes = "左綴じ用" then insert pages document 2 after i from document 1 starting with i number of pages 1 end if end if end repeat if menuRes = "右綴じ用" then save document 1 to file New_File_PathS close documents saving no else if menuRes = "左綴じ用" then save document 2 to file New_File_PathS close documents saving no end if end tell tell application "Finder" delete New_File_PathR -- 右PDF削除 delay 0.1 delete New_File_PathL -- 左PDF削除 delay 0.1 reveal New_File_PathS -- 単ページPDFを表示 end tell end repeat try tell application "Finder" to set visible of (application process "AdobeAcrobat" of application "Finder") to false --Acrobatを隠す。 end try tell application "Finder" activate display dialog "終了しました。" & return & "" buttons {"OK"} default button 1 giving up after 55 with icon 1 end tell --判型チェック on PDFSizeCheck() tell application "Adobe Acrobat" tell document 1 set pageCount to count of page --/////////////////////////////// maxSizeとそのページを取得 set maxSize to 0 repeat with i from 1 to pageCount tell page i if rotation = 270 or rotation = 90 then set {x1, x2, y1, y2} to crop box --rotation: 90,270の時 set {x1, x2, y1, y2} to {x1 * 0.35278, x2 * 0.35278, y1 * 0.35278, y2 * 0.35278} --ポイントからmmに変換 set {x1, x2, y1, y2} to {x1 * 1 / 2, x2 * 1 / 2, y1 * 1 / 2, y2 * 1 / 2} --回転がかかっている場合、面積が1/2になっていると想定する else set {x1, y1, x2, y2} to crop box --仕上がりサイズ --単位はpoint --1mm=約2.8346ポイント --1pt ≒ 0.35278mm --左下が基準点 set {x1, y1, x2, y2} to {x1 * 0.35278, y1 * 0.35278, x2 * 0.35278, y2 * 0.35278} --ポイントからmmに変換 end if set x to x2 - x1 set y to y1 - y2 if maxSize < x * y then -- 一番大きいPDFをページを取得 set maxSize to x * y set maxPage to i set xMax to x set yMax to y end if end tell end repeat --/////////////////////////////// maxSizeを基準にその他のページを比較 set PDFSizeList to {} repeat with i from 1 to pageCount tell page i if rotation = 270 or rotation = 90 then set {x1, x2, y1, y2} to crop box --rotation: 90,270の時 set {x1, x2, y1, y2} to {x1 * 0.35278, x2 * 0.35278, y1 * 0.35278, y2 * 0.35278} --ポイントからmmに変換 set {x1, x2, y1, y2} to {x1 * 1 / 2, x2 * 1 / 2, y1 * 1 / 2, y2 * 1 / 2} --回転がかかっている場合、面積が1/2になっていると想定する else set {x1, y1, x2, y2} to crop box --仕上がりサイズ --単位はpoint --1mm=約2.8346ポイント --1pt ≒ 0.35278mm --左下が基準点 set {x1, y1, x2, y2} to {x1 * 0.35278, y1 * 0.35278, x2 * 0.35278, y2 * 0.35278} --ポイントからmmに変換 end if set x to x2 - x1 set y to y1 - y2 if ((x + (xMax / 4) ≥ xMax and x - (xMax / 4) ≤ xMax) and (y + (yMax / 4) ≥ yMax and y - (yMax / 4) ≤ yMax)) then ----見開き(±1/4xMax,±1/4yMaxの許容範囲) if rotation = 270 or rotation = 90 then set the end of PDFSizeList to true else set the end of PDFSizeList to true end if else ------------単ページ set the end of PDFSizeList to false end if end tell end repeat end tell end tell return PDFSizeList end PDFSizeCheck --文字置換ルーチン on repChar(origText, targStr, repStr) set {txdl, AppleScript's text item delimiters} to {AppleScript's text item delimiters, targStr} set temp to text items of origText set AppleScript's text item delimiters to repStr set res to temp as text set AppleScript's text item delimiters to txdl return res end repChar |