TeX Alchemist Online

TeX のこと,フォントのこと,Mac のこと

macOSのAPIを用いてPDFのN-up処理を行う

日頃からPDFを扱っていると,「PDFのN-up処理(例えば2ページずつ並べて見開きにするなど)をしたい」というのはよく出くわす状況です。

以前,その目的に pdfTeX が大活躍することを紹介しました。

doratex.hatenablog.jp

最近もそういう話題がありました。

このように,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: ヘルプメッセージ表示

挙動のサンプル