【MacOS10.13以前対応】Kindle等電子書籍を自動スクショでPDF化

eyechatch電子書籍OldOS
SBMJOB

今回の記事はMac OS10.13 High Sierra以前のOSでKindle等の電子書籍のスクリーンショット自動化についてのです。前回の記事では「スクリーンショット.app」をApple Scriptで起動させていましたが古いOSだとそのアプリが実装されていないので対応させてみました。

目次

スポンサーリンク

動画デモ

デモは5ページ分のスクショになっていますが。100ページ分でもそれ以上でも時間があればMacが自動でスクショをとってくれます。

著作物の取り扱い

この記事は購入した電子書籍を私的利用の範囲内で利用したい時のやり方です。著作権等を侵害する行為に記述者は一切関与いたしません。

私的利用の範囲内であればこの記事での操作で法に触れることはありません。しかし作成したデータをインターネット上にアップロードしたり自分以外の人に何らかの方法で渡す行為はNGなのでやめましょう。

この記事ではご自分だけで利用する場合の手間を省く方法を記述しています。

改良版 手順概要

  • スクリプトエディターの起動とスクリプトの貼り付け
  • スクショ保管用フォルダの作成
  • 電子書籍の準備
  • 自動スクショ実行
  • 一括PDF化

前回の記事からトリム一括処理がなくなった方法となります。

Macでスクリーンショット自動化

1 スクリプトエディターの起動

自動スクショ_findscripteditor

デスクトップ右上の虫眼鏡マークでスクリプトエディターを検索して起動しましょう。Script editorと入力して候補の.appがでてきたらエンターキーで起動します。

自動スクショ_newScript

新規書類をクリックする。

2 スクリーンショット自動化文書作成(Mojaveより古いOS対応版)

use scripting additions
use framework "Foundation"
global aRawimg, desktopHeight, hoseiX, hoseiY

display dialog "スクショする回数を入力してください。" default answer "5" with title "xxxxxx Version"
set screenShotNumber to text returned of result

display dialog "右開き?左開き?" buttons {"左", "右"} default button 2 with title "xxxxxx Version"
set temp to result
set btn to button returned of temp


--左上のポジション取得
display dialog "スクショ範囲 左上" & return & "次の秒数後までにマウスを移動させてください。" default answer "5" with title "?秒後に位置計測"
set screenShotSeconds to text returned of result

delay screenShotSeconds --|開始まで5秒間待ちます、この間に測定したい位置にマウスポインタを移動してください|
(* (1) マウスポインターの位置を取得します *)
set {x, y} to my mousePosition()
do shell script "afplay /System/Library/Sounds/Purr.aiff"


--右下のポジション取得
display dialog "スクショ範囲 右下" & return & "次の秒数後までにマウスを移動させてください。" default answer "5" with title "?秒後に位置計測"
set screenShotSeconds to text returned of result
delay screenShotSeconds --|開始まで5秒間待ちます、この間に測定したい位置にマウスポインタを移動してください|
set {x2, y2} to my mousePosition()
do shell script "afplay /System/Library/Sounds/Purr.aiff"


display dialog "スクショ範囲" & return & "左上座標 X" & return & return & "↓上書きで補正できます" default answer x with title "左上 X位置の補正ができます"
set x to text returned of result
display dialog "スクショ範囲" & return & "左上座標 Y" & return & return & "↓上書きで補正できます" default answer y with title "左上 Y位置の補正ができます"
set y to text returned of result
display dialog "スクショ範囲" & return & "右下座標 X" & return & return & "↓上書きで補正できます" default answer x2 with title "右下 X位置の補正ができます"
set x2 to text returned of result
display dialog "スクショ範囲" & return & "右下座標 Y" & return & return & "↓上書きで補正できます" default answer y2 with title "右下 Y位置の補正ができます"
set y2 to text returned of result


display dialog "左上Position (" & x & "," & y & ")" & return & "右下Position (" & x2 & "," & y2 & ")" with title "スクショ範囲 最終確認"

--始点のセット(x,y)始点からの距離の計算(x2-x,y2-y)
set screenX to x
set screenY to y
set screenWidth to x2 - x
set screenHeight to y2 - y

set dFolder to "~/Desktop/screencapture/"

repeat with p from 1 to screenShotNumber
	
	tell application "Kindle" --ここにはアプリケーション名を記述してください。SafariとかKindxとか
		
		activate
		
		tell application "System Events"
			
			
			if p = 1 then
				delay 1
				
				do shell script ("screencapture -R " & screenX & "," & screenY & "," & screenWidth & "," & screenHeight & " " & dFolder & "0.png")
			end if
			
			--key code 123
			if btn = "右" then
				keystroke (ASCII character 29) -- ページ右送り (カーソルキー)
			else --左
				keystroke (ASCII character 28) -- ページ左送り (カーソルキー)
			end if
			
			delay 1
			do shell script ("screencapture -R " & screenX & "," & screenY & "," & screenWidth & "," & screenHeight & " " & dFolder & p & ".png")
			delay 1
			
		end tell
		
	end tell
	
end repeat

tell me
	activate
	display alert "処理が終了しました。"
end tell

on mousePosition()
	set mouseLocate to current application's class "NSEvent"'s mouseLocation() --|現在のマウス位置を記録|
	
	try --|デスクトップの高さの変数desktopHeightに数値が設定されていなければ、再設定をする |
		desktopHeight as integer
	on error
		set desktopHeight to (word 4 of (do shell script "/usr/sbin/system_profiler SPDisplaysDataType | grep Resolution | tail -n 1")) as integer
	end try
	
	try --|マウス位置の数値上のズレを記録した変数が設定されていなければ、再設定する|		
		{hoseiX as integer, hoseiY as integer}
	on error
		(* ポインタを測定原点位置に移動してから、位置を測定しズレを確認。補正変数に記録します *)
		set pt to {x:100, y:100}
		tell current application to CGPostMouseEvent(pt, 1, 1, 0)
		set mouseLoc to current application's class "NSEvent"'s mouseLocation()
		set x1 to (x of mouseLoc) as integer
		set y1 to desktopHeight - ((y of mouseLoc) as integer)
		set pt to {x:x1, y:y1}
		tell current application to CGPostMouseEvent(pt, 1, 1, 0)
		set mouseLoc to current application's class "NSEvent"'s mouseLocation()
		set x2 to (x of mouseLoc) as integer
		set y2 to desktopHeight - ((y of mouseLoc) as integer)
		set {hoseiX, hoseiY} to {(x2 - x1), (y2 - y1)}
	end try
	
	(* マウスポインターの位置を補正を反映して元の位置に戻します *)
	set mouseX to ((x of mouseLocate) as integer) - hoseiX
	set mouseY to desktopHeight - ((y of mouseLocate) as integer) - hoseiY
	set pt to {x:mouseX, y:mouseY}
	tell current application to CGPostMouseEvent(pt, 1, 1, 0)
	return {mouseX, mouseY}
	
end mousePosition

上のコードを全てコピーしスクリプトエディターの新規文書にペーストします。終わったらデスクトップに好きな名前で保存して下さい。ここでは「自動スクショ改1」と名前をつけて保存しておきます。

3 スクショファイル保管用フォルダ作成

自動スクショ_screencapture

デスクトップに「screencapture」という名前でフォルダを作りましょう。ここにスクリーンショットが保管されます。すでにこのフォルダが作成済みの場合は作業不要です。

4 Kindleの場合準備

  • スクショを取りたい電子書籍をあらかじめ開いておく
  • スクショするページ数を調べておく。(正確でなくても大体多めでOK)
  • screencaptureフォルダにファイルがなにも無い事を確認する。
  • KindleとScript Editorを下の画像の様に横に並べる。
自動スクショ_rei

5 自動スクショ実行

  • 下の画像の再生ボタンを押す。
自動スクショ改1再生ボタン
  • ページ数を入力する。
自動スクショ_kaisuu
  • ページの開き方(右開き・左開き)なのか選択する。するとスクリーンショットを指定枚数分自動で取得する処理が音を出しながら開始します。
自動スクショ_hiraki
  • OKボタンを押して5秒以内にスクショしたい場所の左上にマウスでカーソルを移動させる。注意:クリックはしない!5秒タイマーで位置をスクリプトが特定します。5秒では短すぎる場合は数字を上書きしてOKボタンを押す。
自動スクショ範囲指定左上

例)Kindleだとマウスでカーソルを表示範囲ギリギリに移動させる。

左上指定方法例
  • OKボタンを押して5秒以内にスクショしたい場所の右下にマウスでカーソルを移動させる。注意:クリックはしない!
自動スクショ範囲指定右下

例)Kindleだとマウスでカーソルを表示範囲ギリギリに移動させる。

右下指定方法例
  • 右下位置の特定が完了すると以下の四つのメッセージが順に表示されます。位置を変える場合はここで手入力が可能です。*この機能を使って微調整してください。少ないスクショ回数で行うのをおすすめします。
選択範囲確認と微調整画面4つ
  • スクショ範囲最終確認メッセージ OKボタンを押すと自動スクショが開始されます。
スクショ範囲最終確認
  • 以下の画面が表示されて終了です
自動スクショ_endProcess

一括PDF化

  • デスクトップに作成したscreencaptureフォルダを開いて、中に出来上がったスクショファイルを全選択してから右クリックしプレビューアプリで開く。
  • 開いたらファイル→プリントで印刷する
自動スクショ_print
  • ウィンドウ下部のPDFボタンから「PDFとして保存を選択」
自動スクショ_saveasPDF

Kindle以外の場合はどうするの?

スクリプトの48行目に以下の箇所があるのでそこを他のアプリケーション名に変更すればOKです。

tell application "Kindle" --ここにはアプリケーション名を記述してください。SafariとかKindxとか

例 safari

tell application "safari" --ここにはアプリケーション名を記述してください。SafariとかKindxとか

例 honto

tell application "honto" --ここにはアプリケーション名を記述してください。SafariとかKindxとか

アプリケーション名がわからない場合はこちらを参考にしてください。↓

おわりに

いかがだったでしょか?範囲指定でスクショを自動化するのでトリミングの手間はかかりません。少し最初の範囲指定位置を決めるのに時間がかかるかもしれませんが、自動化枚数を少なくしてから何度か挑戦・調整するとうまくできるかと思います。今後はPDF化の手作業部分を自動化していきますね。

参考書籍等(広告アフィリエイト)

参考書籍をアフィリエイト広告から貼り付けております。問題がある場合は検索エンジンでタイトルを検索してからご購入ください。





スポンサーリンク

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

システム開発SE・アプリ開発・デバッガー等々なんでもやる猫の下僕です。現在は凶暴猫にカタカタ動く手を狙われながらキーボードを打っています。かなりゆるい性格なのでコメントやメッセージお気軽に〜お仕事のご依頼もお気軽にぃ〜

スポンサーリンク

コメント

コメント一覧 (2件)

コメントする

CAPTCHA


目次