SSブログ

PDF書類の寸法が知りたい [AppleScript辞書はつくれるか?]

 PDF書類のドキュメントの寸法を取得するのに、以前はImage Eventsdimensionsを使えば得られていたのだが、

いつからか求められる数値が 無かったり、{0, 0} で返ってくるようになっていた。

image230825a.jpg

しかし、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\"

このデータの中から、幅と高さの部分を取得している。

  

image230825c.jpg

image230825b.jpg

書類がインチ法で、取得したい値がメートル法だという環境を前提にしているので、

他の地域では困ってしまうかもという余計な心配もしてしまっています。

 


nice!(0)  コメント(0) 
共通テーマ:パソコン・インターネット

nice! 0

コメント 0

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

入力モード切り替えをしてみる|- ブログトップ

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。