pdfnup (Windowsバッチファイル)

psnupとghostscriptを繋げただけ。

「pdfnup.bat」

@echo off
@setlocal enabledelayedexpansion
if {%1}=={} goto USAGE
if {%1}=={/?} goto USAGE
if {%1}=={-h} goto USAGE
if {%1}=={--help} goto USAGE

set o=%*
set count=1
set in_pdf=%1%
set out_pdf=%2%

:LOOP
set in_ext=!in_pdf:~-4,4!
set out_ext=!out_pdf:~-4,4!
if ""%2%""=="""" (
  if /i "%in_ext%"==".pdf" (
    goto NEXT
  ) else (
    if /i "%out_ext%"==".pdf" (
      set in_pdf=%out_pdf%
rem      set out_pdf=nup-!in_pdf!
      set out_pdf=
      set str_inout= !in_pdf!
      goto NEXT
    ) else (
      goto USAGE
    )
  )
)
set in_pdf=%1%
set out_pdf=%2%
set str_inout= %in_pdf% %out_pdf%
set /a count+=1
shift
goto LOOP
:NEXT

echo Input PDF: %in_pdf% 1>&2
if ""%out_pdf%""=="""" (
  echo Output PDF: 標準出力 1>&2
) else (
  echo Output PDF: %out_pdf% 1>&2
)

set strlen=0
if "%str_inout%"=="" goto USAGE
:LEN_LOOP
call set ch=%%str_inout:~%strlen%,1%%
if "%ch%" == "" goto LEN_END
set /a strlen+=1
goto LEN_LOOP
:LEN_END

set options= !o:~0,-%strlen%! 
set options=%options: .=.%
rem 「-W19.19cm」のようなオプションが「-W19 .19cm」とされないようにする
rem 「-W .19cm」は「-W.19cm」となってもよい
echo Options (for psnup): %options% 1>&2

set psfile=%temp%\%RANDOM%.ps

if not ""%out_pdf%""=="""" set out_pdf=^>!out_pdf!
cd /d %~dp0
rungs.exe -q -dSAFER -dBATCH -dNOPAUSE -sDEVICE=ps2write -sOutputFile=%psfile% %in_pdf%
psnup %options% %psfile%|rungs.exe -dEPSCrop -q -dSAFER -dBATCH -dNOPAUSE -sDEVICE="pdfwrite" -sOutputFile=- -c save pop -%out_pdf%
del %psfile% 

goto :EOF

:USAGE
echo Usage: 
echo pdfnup [-W -H/-P] [-w -h/-p] [-l/-r/-f/-c] [-mmargin] [-bborder] [-dlwidth] [-sscale] [-nup] [-q] [infile [outfile]]
echo.
echo 例: pdfnup -4 infile.pdf outfile.pdf (1ページに4面割付)
echo 例: pdfnup -4 infile.pdf >outfile.pdf (1ページに4面割付)
echo.
echo infileは拡張子「.pdf」を持つ必要があり、outfileの指定が省略された場合は出力は標準出力。オプションはほぼpsnupのオプションと同様:
echo.
echo -nup : 1枚当たりnupページ出力。in/outともA4縦長と見て適切に配置される。
echo.
echo 並べ方
echo     -l : 入力ファイルをA4横長と見て適切に配置。
echo     -r : ページ順序を逆転して通常配置。
echo     -c : 「転置行列」
echo     -f : 各ページの縦横サイズを逆にする。
echo.
echo ページ間
echo     -bborder : 各ページ間に距離borderをとる。
echo     -dlwidth : 各ページ間に太さlwidthの区切り線をいれる。
echo.
echo 用紙サイズ
echo     -P/-p : 入力/出力ファイルの用紙サイズ (a3/a4/a5/b5/letter/legal/tabloid/statement/executive/folio/quarto/10x14)
echo     -H/-h : 入力/出力ファイルの高さ (cm,in)
echo     -W/-w : 入力/出力ファイルの幅 (cm,in)
echo.
echo -s : スケールを(自動スケールでなく)scaleにする。
echo -q : ページ番号を振り直さない。
echo.

使い方

pdfnup [-W -H/-P] [-w -h/-p] [-l/-r/-f/-c] [-mmargin] [-bborder] [-dlwidth] [-sscale] [-nup] [-q] [infile [outfile]]

例: pdfnup -4 infile.pdf outfile.pdf (1ページに4面割付)

infileは拡張子「.pdf」を持つ必要があり、outfileの指定が省略された場合は出力は標準出力。オプションはほぼpsnupのオプションと同様:

-nup : 1枚当たりnupページ出力。in/outともA4縦長と見て適切に配置される。

並べ方
    -l : 入力ファイルをA4横長と見て適切に配置。
    -r : ページ順序を逆転して通常配置。
    -c : 「転置行列」
    -f : 各ページの縦横サイズを逆にする。

ページ間
    -bborder : 各ページ間に距離borderをとる。
    -dlwidth : 各ページ間に太さlwidthの区切り線をいれる。

用紙サイズ
    -P/-p : 入力/出力ファイルの用紙サイズ (a3/a4/a5/b5/letter/legal/tabloid/statement/executive/folio/quarto/10x14)
    -H/-h : 入力/出力ファイルの高さ (cm,in)
    -W/-w : 入力/出力ファイルの幅 (cm,in)

-s : スケールを(自動スケールでなく)scaleにする。
-q : ページ番号を振り直さない。