PDF書類の寸法が知りたい [AppleScript辞書はつくれるか?]
PDF書類のドキュメントの寸法を取得するのに、以前はImage Eventsのdimensionsを使えば得られていたのだが、
いつからか求められる数値が 無かったり、{0, 0} で返ってくるようになっていた。
しかし、dimensions は読めなくなったが、resolutionは問題なく読めているところが不思議なところ。
イメージイベントで取得できないなら、書類のメタデータから取得する方法をとってみた。
on run set locationUrl to choose file with prompt "PDF書類を選んでください" of type "PDF" set _result to my getPDFSize1(locationUrl) if _result = false then set _result to my getPDFSize2(locationUrl) return _result end run
on getPDFSize1(locationUrl) # Image Events から 取得を試みる set locationUrl to locationUrl as string if locationUrl contains ":" then set locationUrl to POSIX path of locationUrl try tell application "Image Events" set this_image to open locationUrl set {w, h} to dimensions of this_image set {resolution_x, resolution_y} to resolution of this_image end tell on error return false end try if {w, h} = {0, 0} then return false set {size_w, size_h} to ¬ {my inchToMillimeter(w, resolution_x), my inchToMillimeter(h, resolution_y)} return {size_w, size_h} end getPDFSize1
on getPDFSize2(locationUrl) # メタデータ から 取得を試みる set locationUrl to locationUrl as string if locationUrl contains ":" then set locationUrl to POSIX path of locationUrl try set {dot_w, dot_h} to words of (do shell script "w=`mdls '" & locationUrl & "' | grep -e PageWidth | cut -d '=' -f2` ; h=`mdls '" & locationUrl & "' | grep -e PageHeight | cut -d '=' -f2` ; echo $w','$h ;") on error return false end try set {w, h} to {dot_w as real, dot_h as real} tell application "Image Events" set this_image to open locationUrl set {resolution_x, resolution_y} to resolution of this_image end tell set {size_w, size_h} to ¬ {my inchToMillimeter(w, resolution_x), my inchToMillimeter(h, resolution_y)} return {size_w, size_h} end getPDFSize2
on inchToMillimeter(_inch, _resolution) # インチからミリメートルに変換 set _meter to (((_inch / _resolution) as inches) as meters) as real --解像度を計算したインチ表記の数字をメートル表記に計算 set _millimeter to (round (_meter * 10000) rounding as taught in school) / 10.0 -- メートル単位からミリメートル単位に計算し直してから、小数点1桁未満は四捨五入 return _millimeter end inchToMillimeter |
最初にとりあえずgetPDFSize1ハンドラで普通にイメージイベントで取得を試みる。
それで取得できなかった場合に、getPDFSize2ハンドラでメタデータを取得する方法をしてみる。
イメージイベントでもメタデータから取得した方法でも寸法がインチ法になってるので、
inchToMillimeterハンドラで、メートル法のミリ単位にに変換している。
今回取得したメタデータがこちら
|
_kMDItemDisplayNameWithExtensions = \"試験用.pdf\" kMDItemAuthors = ( \"OutlinePDF-Advance 2.10\" ) : : kMDItemFSName = \"試験用.pdf\" kMDItemFSNodeCount = (null) kMDItemFSOwnerGroupID = 20 kMDItemFSOwnerUserID = 501 kMDItemFSSize = 4746763 kMDItemFSTypeCode = \"TEXT\" kMDItemInterestingDate_Ranking = 2023-08-25 00:00:00 +0000 kMDItemKind = \"PDF書類\" kMDItemLastUsedDate = 2023-08-25 00:52:51 +0000 kMDItemLastUsedDate_Ranking = 2023-08-25 00:00:00 +0000 kMDItemLogicalSize = 4746763 kMDItemNumberOfPages = 1 kMDItemPageHeight = 463.464 kMDItemPageWidth = 654.802001953125 kMDItemPhysicalSize = 4747264 kMDItemSecurityMethod = \"None\" kMDItemUseCount = 2 kMDItemUsedDates = ( \"2023-08-24 15:00:00 +0000\" ) kMDItemVersion = \"1.6\" |
このデータの中から、幅と高さの部分を取得している。
書類がインチ法で、取得したい値がメートル法だという環境を前提にしているので、
他の地域では困ってしまうかもという余計な心配もしてしまっています。
コメント 0