トリミングした PDF を Automator で分割して jpeg 変換

はじめまして。

宜しくお願いいたします。


プレビューで複数ページのPDFをトリミングした後、AutomatorでPDFの分割をして、jpegに変換したいのですが、「PDFのページを画像としてレンダリング」をすると、トリミング前の元のPDFでjpegになってしまいます。


Automatorは以下のように設定しました。

1)指定されたFinder項目を取得

2)PDFを分割

3)PDFページを画像としてレンダリング

4)Finder項目を移動


プレビューの「書き出し」機能を使うと、トリミングした部分のみでjpegにできるのですが、Automatorには「書き出し」というアクションは見つかりませんでした。


トリミングしたPDFでjpegに変換する方法を教えてください。

Mac mini (M2, 2023)

投稿日 2024/03/10 07:46

返信
スレッドに付いたマーク ランキングトップの返信

投稿日 2024/03/10 12:38

プレビューでのトリミングはトリミングする時画像のように警告が出ると思いますが、

(他のアプリケーションでは表示される場合があります と)Automatorもそれに含まれるかと。

なので、Automatorでの処理は難しいと思います。

細かい設定はできませんが、プレビューからスクリプトを使って直接書き出すというのはどうでしょう?

マシンに合わせて、小休止(delay)の時間の調整が必要かもしれませんが、プレビューでPDFを開いてスクリプトを実行すると

デスクトップにUUID名でJPEG形式で書き出されると思います。多分。

多分というのはこちらの環境にApple Silicon機がないため動作確認ができないからです。

あまり面白味のないスクリプトコードですけど、試してみられます?



何かしら許可が求められたら許可してください。

おそらく、システム設定のプライバシーとセキュリティのアクセシビリティでスクリプトエディタを許可すると動作すると思います。

下記はコードです。標準搭載のスクリプトエディタにペーストしてください。

activate application "Preview"
tell application "System Events"
	tell process "Preview"
		if "ページ移動…" is in my getMenuItems() then
			tell menu bar 1
				tell menu "移動" of menu bar item "移動"
					click menu item "ページ移動…"
					delay 0.2
				end tell
			end tell
			tell window 1
				set value of text field 1 of sheet 1 to "1"
				delay 0.1
				click button 2 of sheet 1
				delay 0.1
			end tell
			saveAS() of me
			delay 0.5
			tell menu bar 1
				tell menu bar item "移動"
					repeat
						if "次の項目" is in my getMenuItems() then
							delay 0.5
							click menu item "次の項目" of menu 1
							delay 0.5
							saveAS() of me
						else
							exit repeat
						end if
					end repeat
				end tell
			end tell
		else
			saveAS() of me
			return
		end if
	end tell
end tell


on getMenuItems()
	tell application "System Events"
		tell process "Preview"
			tell menu bar 1
				tell menu bar item "移動"
					set menuItems to name of every UI element of menu 1 whose enabled is true
				end tell
			end tell
		end tell
	end tell
	return menuItems
end getMenuItems

on saveAS()
	set aPath to POSIX path of (path to desktop)
	tell application "Preview"
		tell front document
			save as {"public.jpeg"} in POSIX file (aPath & (do shell script "uuidgen") & ".jpg")
		end tell
	end tell
end saveAS


返信: 6
スレッドに付いたマーク ランキングトップの返信

2024/03/10 12:38 はぐき_1021 への返信

プレビューでのトリミングはトリミングする時画像のように警告が出ると思いますが、

(他のアプリケーションでは表示される場合があります と)Automatorもそれに含まれるかと。

なので、Automatorでの処理は難しいと思います。

細かい設定はできませんが、プレビューからスクリプトを使って直接書き出すというのはどうでしょう?

マシンに合わせて、小休止(delay)の時間の調整が必要かもしれませんが、プレビューでPDFを開いてスクリプトを実行すると

デスクトップにUUID名でJPEG形式で書き出されると思います。多分。

多分というのはこちらの環境にApple Silicon機がないため動作確認ができないからです。

あまり面白味のないスクリプトコードですけど、試してみられます?



何かしら許可が求められたら許可してください。

おそらく、システム設定のプライバシーとセキュリティのアクセシビリティでスクリプトエディタを許可すると動作すると思います。

下記はコードです。標準搭載のスクリプトエディタにペーストしてください。

activate application "Preview"
tell application "System Events"
	tell process "Preview"
		if "ページ移動…" is in my getMenuItems() then
			tell menu bar 1
				tell menu "移動" of menu bar item "移動"
					click menu item "ページ移動…"
					delay 0.2
				end tell
			end tell
			tell window 1
				set value of text field 1 of sheet 1 to "1"
				delay 0.1
				click button 2 of sheet 1
				delay 0.1
			end tell
			saveAS() of me
			delay 0.5
			tell menu bar 1
				tell menu bar item "移動"
					repeat
						if "次の項目" is in my getMenuItems() then
							delay 0.5
							click menu item "次の項目" of menu 1
							delay 0.5
							saveAS() of me
						else
							exit repeat
						end if
					end repeat
				end tell
			end tell
		else
			saveAS() of me
			return
		end if
	end tell
end tell


on getMenuItems()
	tell application "System Events"
		tell process "Preview"
			tell menu bar 1
				tell menu bar item "移動"
					set menuItems to name of every UI element of menu 1 whose enabled is true
				end tell
			end tell
		end tell
	end tell
	return menuItems
end getMenuItems

on saveAS()
	set aPath to POSIX path of (path to desktop)
	tell application "Preview"
		tell front document
			save as {"public.jpeg"} in POSIX file (aPath & (do shell script "uuidgen") & ".jpg")
		end tell
	end tell
end saveAS


2024/03/10 20:12 はぐき_1021 への返信

動きましたか。よかった!^^


わかりました。

重複ファイル名対策でフォルダの新規作成と、4桁の連番で順に書き出すように変更しました。

これでどうでしょうか。



use AppleScript version "2.4"
use scripting additions
use framework "Foundation"
use framework "AppKit"

activate application "Preview"
set aRes to getUniqueFolderName((path to desktop), "書き出されたファイル")
tell application "Finder"
	tell folder (path to desktop)
		if not (exists folder aRes) then
			make new folder at (path to desktop) with properties {name:aRes}
			set aPath to (POSIX path of (path to desktop)) & aRes & "/"
		end if
	end tell
end tell
tell application "System Events"
	tell process "Preview"
		if "ページ移動…" is in my getMenuItems() then
			tell menu bar 1
				tell menu "移動" of menu bar item "移動"
					click menu item "ページ移動…"
					delay 0.2
				end tell
			end tell
			tell window 1
				set value of text field 1 of sheet 1 to "1"
				delay 0.1
				click button 2 of sheet 1
				delay 0.1
			end tell
			saveAS(aPath, 1) of me
			delay 0.5
			tell menu bar 1
				tell menu bar item "移動"
					set o to 2
					repeat
						if "次の項目" is in my getMenuItems() then
							delay 0.5
							click menu item "次の項目" of menu 1
							delay 0.5
							saveAS(aPath, o) of me
							set o to o + 1
						else
							exit repeat
						end if
					end repeat
				end tell
			end tell
		else
			saveAS(aPath, 1) of me
			return
		end if
	end tell
end tell


on getMenuItems()
	tell application "System Events"
		tell process "Preview"
			tell menu bar 1
				tell menu bar item "移動"
					set menuItems to name of every UI element of menu 1 whose enabled is true
				end tell
			end tell
		end tell
	end tell
	return menuItems
end getMenuItems

on saveAS(aPath, aNum)
	set aStr to makeFN(aNum, 4) of me
	tell application "Preview"
		tell front document
			save as {"public.jpeg"} in POSIX file (aPath & aStr & ".jpg")
		end tell
	end tell
end saveAS

--ゼロパディングをするハンドラ。
on makeFN(aNum, aDigit)
	set aText to "00000000000" & (aNum as text)
	set aLen to length of aText
	set aRes to text (aLen - aDigit + 1) thru -1 of aText
	return aRes
end makeFN

on folderExists(aPath)
	return current application's NSFileManager's defaultManager()'s fileExistsAtPath:aPath isDirectory:true
end folderExists

on getUniqueFolderName(savePath, targName)
	set n to 2
	set posixPath to POSIX path of savePath
	if (folderExists(posixPath & targName)) then
		repeat until not (folderExists(posixPath & targName & " " & n))
			set n to n + 1
		end repeat
		set aName to targName & " " & n
	else
		set aName to targName
	end if
	
	return aName
end getUniqueFolderName


2024/03/10 18:18 vz.r への返信

vz.r様


ご親切に教えてくださってありがとうございます!!!

お陰様で、トリミングした部分だけをjpegにできましたーーー!すごい!!!

本当にありがとうございます。


AppleScriptのところは、わからないところばかりなので、ネットで検索しながら試しているのですが、

手も足も出ないので追加で相談にのっていただけませんでしょうか?


jpegで保存するファイル名のところをUUIDではなく、単純な連番でお願いいたします。

あとで、品番名でリネームしたいので、PDFと同じ順番でソートできたりするとありがたいです。


重ねての質問で恐縮ですが、引き続きご指導いただけますよう宜しくお願いいたします。

2024/03/12 07:14 vz.r への返信

vz.r様


お礼が遅くなり申し訳ございません。

工場のラインに入っていて、PCから離れていたためすっかり遅くなってしまいました。


vz.r様の書いてくださったコードは勉強不足の私にも読みやすく、ちゃんと理解できるように勉強しよう!と思えるぐらい配慮していただいており、本当に感謝でいっぱいです。

お陰様でAppleScriptへの苦手意識も薄れて、好きになれそうな勢いです。


本当にお世話になりましてありがとうございました!

いつの日か、vz.r様にしていただいたご親切を次の誰かにつなげられたら、と思います。

ありがとうございました。

2024/03/10 20:37 vz.r への返信

vz.r様


ありがとうございます!ありがとうございます!(涙)

14ページもあるPDFをjpegにできました!ファイル名の変更も楽々です!

2日間ウンウン悩んで、どうにもならなかったところをvz.r様に救っていただきまして

本当に心から感謝です!


vz.r様のお時間を割いてご指導いただきました貴重なスクリプトなので、なんとしても理解したいので頑張ります!


本当にありがとうございました!

2024/03/10 21:01 はぐき_1021 への返信

どういたしまして!

お役に立てたようで何よりです。


今回のスクリプト、ちょっと入り組んだところがあって理解しにくいかもしれませんが、

使う時動きをちょっと意識して動かせば理解できていくんじゃないかと思います。

私自身も、コードの見分けがしやすいようもうちょっとスマートに書けるように勉強していきますね。


このスレッドはシステム、またはAppleコミュニティチームによってロックされました。 問題解決の参考になる情報であれば、どの投稿にでも投票いただけます。またコミュニティで他の回答を検索することもできます。

トリミングした PDF を Automator で分割して jpeg 変換

Apple サポートコミュニティへようこそ
Apple ユーザ同士でお使いの製品について助け合うフォーラムです。Apple Account を使ってご参加ください。