GNU/Linux >> Linux の 問題 >  >> Linux

PDF のページを複数のページに分割する

これは、Ghostscript を使用して解決できます。 pdftk それだけではできません(私の知る限り)。これを手動で行うためのコマンドライン手順を示します。これを手順としてスクリプト化するのは簡単で、ページ サイズとページ番号のパラメーターも異なります。しかし、あなたはそれを自分でできると言った;-)

Ghostscript を使用してこれを解決するには...

...そして、それを楽しむために、私は最近それをしました ない 「ダブルアップ」ページを特徴とする入力ファイルを使用しますが、「トレブルアップ」を備えた入力ファイルを使用します。このケースの回答はこちらでご覧いただけます .

あなたのケースはさらに簡単です。あなたはこれに似たものを持っているようです:

+------------+------------+   ^
|            |            |   |
|      1     |      2     |   |
|            |            | 595 pt
|            |            |   |
|            |            |   |
|            |            |   |
+------------+------------+   v
             ^
            fold
             v
+------------+------------+   ^
|            |            |   |
|      3     |      4     |   |
|            |            | 595 pt
|            |            |   |
|            |            |   |
|            |            |   |
+------------+------------+   v
<---------- 842 pt -------->

それぞれのサイズが 421 pt x 595 pt の 4 ページからなる 1 つの PDF を作成したいと考えています。

最初のステップ

まず、各入力ページから左側のセクションを抽出しましょう:

gs \
    -o left-sections.pdf \
    -sDEVICE=pdfwrite \
    -g4210x5950 \
    -c "<</PageOffset [0 0]>> setpagedevice" \
    -f double-page-input.pdf

これらのパラメータは何をしましたか?

まず、PDF では 1 インチ ==72 ポイント .残りは次のとおりです。

  • -o ...............: 名前の出力ファイル。暗黙的に -dBATCH -dNOPAUSE -dSAFER も使用します .
  • -sDEVICE=pdfwrite : 出力形式として PDF が必要です。
  • -g................: 出力メディア サイズをピクセル単位で設定します。 pdfwrite のデフォルトの解像度は 720 dpi です。したがって、PageOffset と一致するように 10 を掛けます。
  • -c "..............: メイン入力ファイルの直前に指定された PostScript コード スニペットを処理するように Ghostscript に要求します (-f を続ける必要があります)。 ).
  • <</PageOffset ....: 媒体上のページ画像のシフトを設定します。 (もちろん、左ページのシフトは [0 0] 実際の効果はありません)
  • -f ...............: この入力ファイルを処理します。

最後のコマンドが達成した結果は?

これ:

Output file: left-sections.pdf, page 1
+------------+  ^
|            |  |
|     1      |  |
|            |595 pt
|            |  |
|            |  |
|            |  |
+------------+  v

Output file: left-sections.pdf, page 2
+------------+  ^
|            |  |
|     3      |  |
|            |595 pt
|            |  |
|            |  |
|            |  |
+------------+  v
<-- 421 pt -->

第 2 ステップ

次に、右側のセクション:

gs \
    -o right-sections.pdf \
    -sDEVICE=pdfwrite \
    -g4210x5950 \
    -c "<</PageOffset [-421 0]>> setpagedevice" \
    -f double-page-input.pdf

表示領域を固定したままページを左にシフトしているため、負のオフセットに注意してください。

結果:

Output file: right-sections.pdf, page 1
+------------+  ^
|            |  |
|     2      |  |
|            |595 pt
|            |  |
|            |  |
|            |  |
+------------+  v

Output file: right-sections.pdf, page 2
+------------+  ^
|            |  |
|     4      |  |
|            |595 pt
|            |  |
|            |  |
|            |  |
+------------+  v
<-- 421 pt -->

最後のステップ

次に、ページを 1 つのファイルに結合します。 Ghostscript でも同じことができますが、pdftk を使用します。 代わりに、このジョブの方が高速であるため:

pdftk \
  A=right-sections.pdf \
  B=left-sections.pdf \
  shuffle \
  output single-pages-output.pdf
  verbose

終わり。これが望ましい結果です。 4 つの異なるページ、サイズ 421x595 pt.

結果:

+------------+ +------------+ +------------+ +------------+   ^
|            | |            | |            | |            |   |
|     1      | |     2      | |     3      | |     4      |   |
|            | |            | |            | |            |5595 pt
|            | |            | |            | |            |   |
|            | |            | |            | |            |   |
|            | |            | |            | |            |   |
+------------+ +------------+ +------------+ +------------+   v
<-- 421 pt --> <-- 421 pt --> <-- 421 pt --> <-- 421 pt -->

1 つの入力ページに対して複数のページを含む PDF を作成するために使用できるツール pdfposter があります (ページのタイリングまたはチョッピング)。ツール poster に似ています 、これは PostScript ファイルに対して同じことを行います。


そこで、さらに多くの検索を行った後 (「PDF カット ページ」がはるかに優れた検索のようです)、unpnup という小さなスクリプトを見つけました。 poster を使用する 、PDF/PS 変換、および pdftk 私が必要とすることを正確に行うために。少し遠回りですが、吐き出す前にページをラスタライズしないため、私が見つけた他の方法 (imagemagick の使用など) よりもはるかに優れています。

なんらかの理由で mobileread がなくなった場合に備えて、スクリプトのコア (GPLv2 またはそれ以降で Harald Hackenberg によってライセンスされています <hackenberggmx.at> ) は次のとおりです:

pdftk "$1" burst
for file in pg*.pdf;
do
    pdftops -eps $file
    poster -v -pA4 -mA5 -c0% `basename $file .pdf`.eps > `basename $file .pdf`.tps
    epstopdf `basename $file .pdf`.tps
done
pdftk pg*.pdf cat output ../`basename $1 .pdf`_unpnuped.pdf

Linux
  1. 行に基づいて単一のファイルを複数のファイルに分割する方法

  2. 複数のディレクトリを個々のZipファイルに圧縮するコマンド?

  3. Vim:複数のファイルを異なるタブで開く方法は?

  1. 複数のファイルを.xzアーカイブに圧縮する方法は?

  2. 複数の PDF ファイルを 1 つの PDF に結合/変換する

  3. 1 つのテキスト ファイルを複数の *.txt ファイルに分割する方法は?

  1. 大きな「tar」アーカイブを特定のサイズの複数のファイルに分割する方法

  2. 複数のインターネット接続を1つにマージする方法は?

  3. 複数のファイルに分割された、または複数のファイルにまたがる tar アーカイブを作成する方法は?