2
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

PDFを見開きで快適に見るために

Last updated at Posted at 2025-07-21

25/07/21 15:30 コード・コマンドを修正しました。
25/07/22 02:50 ファイル名に記号や空白が入っていても動作するよう修正。

試験問題などPDFで見る事が多いと思います。
スマホでは1ページ表示が一般的ですが、
PCでは見開き表示にすることで、1度に2ページ分の情報を表示できるため、
より多くの情報を一度に確認できるというメリットがあります。

ただPDFビューワーの種類によっては
ページとページの間に境界線が入ったり、
左右ページを逆にしたいなど(好みですが)あったりすると思います。

こんな感じの境界線

image.png

image.png

出典:ITパスポート試験 令和7年度分

はじめは気にならなかったのですが、ある時、目についてから
ものすごく気になってしまったので
PDFを見開きで快適に見るためのあれやこれやをやっていけたらと思います。
環境はwindowsです。Macの方はごめんなさい。

SumatraPDFの設定

今回は無料のSumatraPDFというツールを使っていこうと思います。
色々なPDFビューワーを探しましたが、こちらがいろいろカスタマイズ出来て良さそうでした。

ダウンロード&インストールは割愛。

起動すると以下のような画面が表示されると思います。
image.png

ドキュメントを開くとこんな感じ。

image.png

見開きにするのは
ハンバーガーメニュー > 表示 > 見開き を選択。
image.png

image.png

ちなみにブックビューを選択すると、
表紙が1Pのみ表示になって、以降見開き表示になります。

まあ開くたびに都度やればいいのですが
今回はめんどくさいのでデフォルトで見開き表示になるように設定していきます。

境界線を消す

ではまず境界線を消していこうと思います。

インストール時など特に設定を変えていなければ
以下の場所にSumatraPDF-settings.txtという設定ファイルがあると思います。

path
C:\Users\[ユーザー名]\AppData\Local\SumatraPDF

これをメモ帳など何でもいいのでエディタで開きます。

image.png

FixedPageUI、ComicBookUI の項目にある
PageSpacingというのが垂直、水平方向の余白設定です。
これを0 0にします

SumatraPDF-settings.txt
FixedPageUI [
	TextColor = #000000
	BackgroundColor = #ffffff
	SelectionColor = #f5fc0c
	WindowMargin = 2 4 2 4
	PageSpacing = 0 0
	InvertColors = false
	HideScrollbars = false
]
ComicBookUI [
	WindowMargin = 0 0 0 0
	PageSpacing = 0 0
]

SumatraPDFを再起動すると、余白が消えているかと思います。

image.png

左右ページを逆にする

これは好みですが、左右ページを反転したいときもあるかと思います。
デフォルトの設定だとこの設定がないため、追加していきます。

image.png

L58行目付近のShortcutsに以下の設定を追加します。

SumatraPDF-settings.txt
Shortcuts [
	[
		Cmd = CmdToggleMangaMode
		Key = Shift + M
	]
]

Keyはショートカットを割り当てるキーなので、お好みで変えてみてください。

設定を保存してSumatraPDFでショートカットキーを押下すると

image.png

見事、左右逆になります!
押下するたびに逆転するので、戻したければもう一度押下でOK。

こちらは以下の記事を参考にさせていただきました。

CmdToggleMangaModeのようなコマンドの本来の使い方は
Ctrl + kでコマンドパレットを呼び出し、そこでコマンドを実行します。

image.png

ここから先はお好みで設定してください。
結構、長丁場になると思います。

起動時にデフォルトで見開き表示にする

これはお好み設定ですが、
私のように起動時に毎回ショートカットをたたくのが面倒な人は
こちらもやってみてもらえるといいんじゃないかと思います。
少しだけ複雑になります。

SumatraPDFでは「起動時」に限定した設定項目がないため、
VBScriptを作成して、スクリプトから先程の設定に使ったコマンドを投げていくことにします。

VBScriptの作成

名前は何でもいいので、エディタで新しく拡張子を.vbsとしたVBScriptファイルを作成します。
保存する際にエンコードをシフトJISに設定して下さい。

私はわかりやすいようにSumatraPDF(custom_start).vbsとしました。
作成する場所もどこでもいいですが、これまで同様、SumatraPDF本体のある
C:\Users\[ユーザー名]\AppData\Local\SumatraPDF\に作成しました。

保存する際にエンコードをシフトJISに設定していないと、
EXEファイルへ変換した後、pdfを開く際にエラーが発生します。

image.png

VBScriptファイルに以下を記述します。

SumatraPDF(custom_start).vbs
Set objShell = CreateObject("WScript.Shell")
Set objFSO = CreateObject("Scripting.FileSystemObject") ' FileSystemObjectを再度利用

Dim strPdfPath
strPdfPath = WScript.Arguments(0)

' 取得したパスがPDFファイルか確認
Dim fileExtension
If objFSO.FileExists(strPdfPath) Then
    fileExtension = LCase(objFSO.GetExtensionName(strPdfPath))
Else
    ' ファイルが存在しない場合(パスが不正など)、拡張子を空にする
    ' VBScriptが受け取るパスが不正だった場合の最終的なエラー処理
    MsgBox "指定されたPDFファイルが見つからないか、パスが正しくありません: " & strPdfPath, vbExclamation, "ファイルエラー"
    WScript.Quit
End If

If fileExtension <> "pdf" Then
    MsgBox "指定されたファイルはPDFではありません。PDFファイルをダブルクリックしてください。", vbExclamation, "不正なファイルタイプ"
    WScript.Quit
End If

' SumatraPDFの実行パスを定義
Const SUMATRAPDF_EXE = "C:\Users\[ユーザー名]\AppData\Local\SumatraPDF\SumatraPDF.exe"

' PDFファイルを開く
objShell.Run Chr(34) & SUMATRAPDF_EXE & Chr(34) & " " & Chr(34) & strPdfPath & Chr(34), 1, False

' SumatraPDFが完全に起動し、PDFが読み込まれるまで待機
WScript.Sleep 500

' 開いているSumatraPDFのインスタンスに対してDDEコマンドを送信
objShell.Run Chr(34) & SUMATRAPDF_EXE & Chr(34) & " -dde " & Chr(34) & "[CmdFacingView][CmdToggleMangaMode]" & Chr(34), 0, False

Set objShell = Nothing

少し解説をすると、SumatraPDFを起動した後、-ddeオプションを使って、
CmdFacingViewCmdToggleMangaModeのコマンドを実行しています。

起動と同時に-ddeを送るようにも試してみたのですが、
うまく反映されなかったため、sleepを設定しています。

VBScriptからEXEへの変換

SumatraPDFを実行したいときにこのVBSをダブルクリックで実行すればいいのですが
アイコンがVBSだと、ぱっと見で何だかわからないですし
VBSのままだとピン止めできない為、ここではもう一工夫してみようと思います。
VBSをEXEに変換して、ピン止めできるようにしつつ、アイコンをSumatraPDF(任意の物)にしようと思います。

アイコンの抽出(任意)

任意の場所に.ps1という拡張子でファイルを作成しましょう。
これまでと同様の場所にpick_icon.ps1という名前で作成することにします。

pick_icon.ps1
# System.Drawing アセンブリをロード
Add-Type -AssemblyName System.Drawing

$exePath = "C:\Users\[ユーザー名]\AppData\Local\SumatraPDF\SumatraPDF.exe"
$outputPath = "C:\Users\[ユーザー名]\AppData\Local\SumatraPDF\SumatraPDF.ico" # 保存したいパスを指定

# アイコンを抽出
$icon = [System.Drawing.Icon]::ExtractAssociatedIcon($exePath)

# アイコンが正常に抽出されたかを確認
if ($icon -eq $null) {
    Write-Host "エラー: 指定されたEXEファイルからアイコンを抽出できませんでした。パスが正しいか確認してください。" -ForegroundColor Red
    Write-Host "Enterキーを押して終了します。"
    Read-Host
    exit 
} else {
    # アイコンをファイルとして保存
    $stream = New-Object System.IO.FileStream($outputPath, [System.IO.FileMode]::Create)
    $icon.Save($stream)
    $stream.Close()
}

ここで一点注意があります

ファイルを保存する際に、エンコードを UTF-8(BOMつき) で保存してください。
BOM付きにしないと実行時エラーになってしまいます。

さて、ファイルが作成出来たら、PowerShellの設定を変更していきます。
まずは管理者権限でPowerShellを起動します。

image.png

PowerShellに以下を入力してEnterを押下します。

Powershell
Set-ExecutionPolicy RemoteSigned -Scope CurrentUser

すると対話で以下が返ってきます

Powershell
実行ポリシーの変更
実行ポリシーは、信頼されていないスクリプトからの保護に役立ちます。実行ポリシーを変更すると、about_Execution_Policies
のヘルプ トピック (https://go.microsoft.com/fwlink/?LinkID=135170)
で説明されているセキュリティ上の危険にさらされる可能性があります。実行ポリシーを変更しますか?
[Y] はい(Y)  [A] すべて続行(A)  [N] いいえ(N)  [L] すべて無視(L)  [S] 中断(S)  [?] ヘルプ (既定値は "N"):

Yキーを押下し、Enterで確定します。

...  [S] 中断(S)  [?] ヘルプ (既定値は "N"): Y

これでPowerShellの設定ができたので、pick_icon.ps1を実行していきます。
pick_icon.ps1 を右クリックし、PowerShell で実行を押下します。

image.png

アイコンファイルが抽出されていればOK!
image.png

AutoHotKeyの導入

以下のサイトからAutoHotKeyをダウンロード、インストールします。
AutoHotKey v2.0

すると以下のようなダッシュボードが表示されます。
image.png

変換用スクリプト(ahk)の作成

NewScript を選択して、フォルダと虫眼鏡のアイコンを押下し、
SumatraPDFのフォルダを参照します。
ahk.png

image.png

ファイル名にconvertなど名前を付けて保存します。(拡張子は自動で付くので不要。ファイル名は任意です。)
image.png

Editボタンを押下し、好きなエディタでファイルを開きます。
ahk2.png

convert.ahkに以下を記述し、保存します。

convert.ahk
; AutoHotkey Script (v2.x)

; VBScriptファイルのパス
vbsFile := "C:\Users\[ユーザー名]\AppData\Local\SumatraPDF\SumatraPDF(custom_start).vbs"

; SumatraPDFの実行パス
sumatraPdfExe := "C:\Users\[ユーザー名]\AppData\Local\SumatraPDF\SumatraPDF.exe"

; DDEコマンド文字列
ddeCommands := "[CmdFacingView][CmdToggleMangaMode]"

; コマンドライン引数を取得し、VBScript用に整形
argsString := ""
if (A_Args.Length > 0) {
    ; PDFファイルをダブルクリックした場合、A_Args[1]にフルパスが渡されます。
    ; このパスをそのままVBScriptに渡すことで、スペースなどが含まれていても正しく扱われます。
    argsString := A_Args[1]
}

; コマンドライン引数があれば(PDFがダブルクリックされた場合)
if (A_Args.Length > 0)
{
    ; VBScriptを実行し、PDFパスを引数として渡す
    vbsCommand := Chr(34) . "wscript.exe" . Chr(34) . " " . Chr(34) . vbsFile . Chr(34) . " " . Chr(34) . argsString . Chr(34)
    Run(vbsCommand, , "Hide")

    ; VBScriptの処理完了を待機
    Sleep 1500
}
else ; コマンドライン引数がなければ(EXEが直接起動された場合)
{
    ; SumatraPDFを通常起動(ファイル指定なし)
    Run(Chr(34) . sumatraPdfExe . Chr(34), , "Hide")

    ; 起動を待機
    Sleep 1000

    ; 起動したSumatraPDFに対してDDEコマンドを送信
    Run(Chr(34) . sumatraPdfExe . Chr(34) . " -dde " . Chr(34) . ddeCommands . Chr(34), , "Hide")
}

ExitApp

後述するCompile実行時に必要なモジュールが足りないというポップアップが出てくるかもしれません。
その場合はポップアップに従いインストールしてください。

VBSからEXEへの変換

ダッシュボードに戻り、Compile を押下します。
image.png

上記でInfoにも記載しましたが、
次のようなポップアップが出たらOKを押下してAhk2Exeをインストールしましょう。
image.png

すると、Ahk2Exeが立ち上がるので、こちらを使ってVBSからEXEにコンパイルしていきます。
image.png

Source (script file) に先程のahkファイルを選択します。
Destination (.exe file)は出力するexeファイルのパス&名前指定なので、これまで同様SumatraPDF本体のある場所にSumatraPDF(custom_start)などの名前で指定します。(こちらも拡張子不要。)

image.png

ahk3.png

任意のアイコンを設定する

OptionsCustom Icon(.ico file)Browse ボタンを押下します。

image.png

先程やった、アイコンの抽出で抽出したアイコンを指定して、開くボタンを押下。
すきなアイコンがあればそれを指定してももちろんOK。
image.png

指定出来たら、Convert ボタンを押下してコンパイルを実行しましょう。
image.png

Successfully のポップアップが表示され、exeファイルが生成されれば完了です!
お疲れ様でした!
image.png

もし、アイコンがうまく反映されていない時は?
windowsはアイコンもキャッシュしているので、キャッシュのせいでうまく反映されないケースがあります。
その場合は次の手順を試してみてください

  1. タスクマネージャーを開きます(Ctrl+Shift+Esc)

  2. 「プロセス」タブで「エクスプローラー」を探します

  3. 右クリックして「再起動」を選択します

これで再度エクスプローラーを開いて、exeのアイコンを確認してみてください。
もしこれでも反映されない場合は、アイコンのパスなどが間違っていないか確認してみてください。

pdfファイルを開いたときに呼び出す

見開きで表示したいpdfファイルを右クリック > プロパティ
プログラム の項目にある変更ボタンを押下します。

f835bbfd-723a-4c7f-a336-1642a156fa3b.png

.pdfファイルの既定のアプリを選択するというポップアップが出てくるので
一番下までスクロールし、PC でアプリを選択する を押下します。
image.png

先程作成したSumatraPDF(custom_start).exeを選択し、開くボタンを押下します。
image.png

追加された項目を選択し、規定値を設定するボタンを押下。
image.png

適用して、OKボタンを押下します。

これでPDFファイルを開いたときに自動的に見開きで表示されるようになりました!
長い旅でしたがお疲れ様でした!

おまけ

  • もし見開きで開きたくない場合は?

見開きで開きたくないファイルを
右クリック > プログラムから開く > SumatraPDF で通常起動ができます。
image.png

  • 前回開いていたファイルを見開きで開きたいんだけど?

作成したSumatraPDF(custom_start).exeをタスクバーにでもピン止めしておいて、
そいつを起動してください。

  • ブックビューで開きたいんだけど?

VBScriptの作成の項目で設定した

SumatraPDF(custom_start).vbs
' ~~ 略 ~~

' 開いているSumatraPDFのインスタンスに対してDDEコマンドを送信
objShell.Run Chr(34) & SUMATRAPDF_EXE & Chr(34) & " -dde " & Chr(34) & "[CmdFacingView][CmdToggleMangaMode]" & Chr(34), 0, False

こちらの部分を CmdFacingView から CmdBookViewに変更してください。
詳しくはこちらのドキュメントを参照。

  • 新しくSumatraPDFを開きなおしたときに、既に開いているファイルのページが左右逆にならないんだけど?

SumatraPDFの仕様で、最初に表示されるタブとそれ以外のタブが同じClass名となっているため、
最初に表示されるアクティブなpdf以外、自動で反転できなかったです。
おとなしくショートカットを使ってください。

まとめ

今回いろいろ触っていて、後からこうしたい、ああしたいが色々出てきてしまったため
あれやこれやと設定が長くなってしまいました。

SumatraPDF だったり、AutoHotKey は今回初めて触りましたが
まだまだ色々なことが出来そうで、とてもいい経験になりました。

2
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?