日頃からPDFを扱っていると,「PDFのN-up処理(例えば2ページずつ並べて見開きにするなど)をしたい」というのはよく出くわす状況です。
以前,その目的に pdfTeX が大活躍することを紹介しました。
最近もそういう話題がありました。
VivliostyleのDiscordで、「PDFの見開き」PDF出力の話題があった。
— Munehiro Yamamoto (@munepixyz) 2024年4月23日
えっと、LaTeXでその後処理をば…(本末転倒 #テフライブ!
%#!pdflatex
— Munehiro Yamamoto (@munepixyz) 2024年4月23日
\pdfinclusioncopyfonts=1
\pdfminorversion=6
\documentclass{article}
\usepackage[paper=a4paper]{geometry}%
\usepackage{pdfpages}
\begin{document}
\includepdf[pages=-,openright,nup=1x2,landscape]{foo.pdf}%
\end{document}#テフライブ!
もし裁ち落としありで、左右ページのノドを合わせて見開きにして、さらにトンボをつけてーとかだったら、graphicxでノドを削る処理を入れて、左右にページを貼っていく処理を書けば良い。#テフライブ!
— Munehiro Yamamoto (@munepixyz) 2024年4月23日
このように,PDF加工ツールとしてTeX(特にpdfTeX)は強力な威力を発揮します。一方,macOSの場合,OSのAPIでPDF操作が可能なため,TeXを用いることなく,OSの機能だけでN-up処理が可能です。
サンプルコード
1ファイルだけで完結するシンプルなSwiftコードで,サンプルを用意しました。単に見開き2ページ(つまり1×2行列の形)にするだけでなく,任意のM×N行列の形に ,様々な方向からPDFのページ割り付けが可能なSwiftコードです。
大がかりな Xcode Project ではなく,1ファイルのみのSwiftソースコードファイルのみからなるので,コンパイルも楽々です。 12GB以上もあるXcode本体を用意しなくても,700MB 程度のサブセットである Xcode Command Line Tools さえあれば,次の手順でコンパイルできます。
コンパイル法
1. (準備)Command Line Tools for Xcode のインストール
Command Line Tools for Xcode をインストールしていなければ,次のコマンドでインストールしてください。
xcode-select --install
2. ソースコードのダウンロード
ソースは1ファイルのみからなるので,それだけダウンロードすれば事足ります。
curl https://raw.githubusercontent.com/doraTeX/Nup/main/Nup.swift > Nup.swift
3. コンパイル
swiftc
コマンドでコンパイルします。
swiftc Nup.swift
すると,Nup
というバイナリが生成されます。
使用法
./Nup [OPTIONS] <INPUT_PDF_PATH> <OUTPUT_PDF_PATH>
引数
<INPUT_PDF_PATH>
: 入力PDFのパス<OUTPUT_PDF_PATH>
: 出力PDFのパス
オプション
--rows <ROWS>
: 行数 (default:1
)--columns <COLUMNS>
: 列数 (default:2
)--direction <DIRECTION>
: 割り付け方向 (default:horizontalL2R
)<DIRECTION>
の値:horizontalL2R
: 左→右,上→下horizontalR2L
: 右→左,上→下verticalL2R
: 上→下,左→右verticalR2L
: 上→下,右→左
-v
,--version
: バージョン表示-h
,--help
: ヘルプメッセージ表示
挙動のサンプル