あなたの質問に...
結合する前に、両方の PDF が同じ通常の A4 サイズの PDF と解像度であることを確認する必要がありますか?
...答えは「はい、ページ サイズに関してです。解像度に関してはいいえ (問題ありません)」です。
Ghostscript を使用した PDF ページのスケーリング (1)
サイズが混在する PDF のすべてのページをすべて A4 に拡大縮小するコマンドは次のとおりです。
gswin64c.exe ^
-o all-a4.pdf ^
-sDEVICE=pdfwrite ^
-g5950x8420 ^
-dPDFFitPage ^
-f input.pdf
これにより、メディアのサイズとコンテンツも同様にスケーリングされます (GS v9.10 でテスト済み)。
パラメータ-dPDFFitPage
は常に縦横比を維持します。コンテンツを自動的に回転させて、最適にフィットさせます。「ストレッチ」またはページを一方向にのみにすることはできません。ただし、これは次の方法で実現できます。
[アップデート
この方法について、私が十分に理解できなかった点が 1 つあります。
問題は、入力ファイルからのメディアの縦横比がターゲット メディアのアスペクト比と同じでない場合、ターゲット メディア-dPDFFitPage
を完全にはカバーしないということです。
入力メディアが正方形のページ サイズ、500x500
ポイントを使用すると仮定します。これを A4 のターゲット サイズ ( -g5950x8420
) で処理する-dPDFFitPage
と、 は正方形の縦横比を維持し、出力サイズ-g5950x5950
のみを生成します。
ただし、-dPDFFitPage
どちらも除外することはできません。そうしないと、元の400x400
コンテンツが拡大縮小されず、より大きなページにのみ配置さ595x842
れ、左下隅に配置されます。
更新終了。]
Ghostscript を使用した PDF ページのスケーリング (2)
すべての PDF ページのコンテンツをそれぞれのサイズの 50% にスケーリングするコマンドは次のとおりです。
gswin64c.exe ^
-o 50pc.pdf ^
-sDEVICE=pdfwrite ^
-c "<</Install {.5 .5 scale}>> setpagedevice" ^
-f input.pdf
ただし、これによってメディア ボックスが同時にスケーリングされることはありません。
PDF ファイルのすべてのページが同じサイズであることがわかっている場合は、これを使用して A3 PDF を A4 に拡大縮小できます。
gswin64c.exe ^
-o A4-50pc.pdf ^
-g5950x8420 ^
-sDEVICE=pdfwrite ^
-c "<</Install {.5 .5 scale} /AutoRotatePages /None>> setpagedevice" ^
-f A3.pdf
ただし、私の回答の最初のコマンドももちろん機能し、より簡単に使用できます。
A5 -> A4またはA4 -> A3の場合:
{1.415 1.415 scale}
A3 -> A4またはA4 -> A5の場合:
{ .707 .707 scale}
しかし、内容を「伸ばす」こともできるので、ここではもっと面白くなります! 水平方向に 75%、垂直方向に 66% にスケーリングするには、次を使用します。
-c "<</Install {.75 .666 scale}>> setpagedevice"
LetterとA4の間の一種の「液体」スケーリングの場合、これらを使用できます。
- A4 -> レター:
{1.028571 .940617 scale}
- レター -> A4:
{ .972222 1.063131 scale}
上記のすべてについて、-gNNNNxMMMM
値を指定できます (出力 PDF の固定ページ サイズを決定します --pdfwrite
デバイスのデフォルトの内部解像度である 720 ppi でのピクセル単位の寸法、1 つの PostScript ポイント 10 ピクセルを指定します...) -
値を指定しない場合-gNNNNxMMMM
、元のページ サイズが使用されますが (値が混在している場合でも)、そのコンテンツは、指定した倍率でこれらのページに描画されます。
私が今知らないこと:メディアサイズを含む混合サイズのPDFの個々のページを一度に「リキッドスケーリング」する方法...
A4 に基づいて、オールレターとオール A5 の PDF ファイルを比較します。
すべてレター サイズの PDF とすべて A5 の PDF を比較し、最初に両方を A4 に拡大縮小する場合、次のようにします。
「Liquid」-スケール レターから A4:
gswin64c.exe ^
-o a4-1.pdf ^
-sDEVICE=pdfwrite ^
-g5950x8420 ^
-c "<</Install{.972222 1.063131 scale}>>setpagedevice" ^
-f letter.pdf
「固定」-スケール A5 から A4:
gswin64c.exe ^
-o a4-2.pdf ^
-sDEVICE=pdfwrite ^
-g5950x8420 ^
-c "<</Install{1.415 1.415 scale}>>setpagedevice" ^
-f a5.pdf
または、代わりに:
gswin64c.exe ^
-o a4-2.pdf ^
-sDEVICE=pdfwrite ^
-g5950x8420 ^
-dPDFFitPage ^
-f a5.pdf
次に、両方の A4 PDF ファイルを比較します....
比較ワークフローの最適化
質問で説明されているように、ワークフローの 1 つのステップを保存することもできます。これがより良いアプローチです。
最初のステップ: 左側を準備します (前と同じ)
A4 入力があり、最終出力は A3 であると仮定します。
gswin64c.exe ^
-o left-sides.pdf ^
-sDEVICE=pdfwrite ^
-g11900x8420 ^
-c "<</PageOffset [0 0]>>setpagedevice" ^
-f a.pdf
これにより、次が作成されます。
left-sides.pdf
+--------+--------+ ^
| | | |
| | | |
| a |(empty) | 595 pt == 5950 pixels
| | | |
| | | |
+--------+--------+ v
<-----1190 pt----->
== 11900 pixels
2 番目のステップ: 右側を準備します (すべて一度に)
gswin64c.exe ^
-o right-sides.pdf ^
-sDEVICE=pdfwrite ^
-g11900x8420 ^
-c "<</PageOffset [595 0]>>setpagedevice" ^
-f b.pdf
これにより、次が作成されます。
right-side.pdf
+--------+--------+ ^
| | | |
| | | |
|(empty) | b | 595 pt == 5950 pixels
| | | |
| | | |
+--------+--------+ v
<-----1190 pt----->
== 11900 pixels
3 番目のステップ: 2 つのファイルをpdftk
pdftk right-sides.pdf multistamp left-sides.pdf output compare.pdf
また
pdftk left-sides.pdf multistamp right-sides.pdf output compare2.pdf
これにより、次が作成されます。
compare.pdf
+--------+--------+ ^
| | | |
| | | |
| a | b | 595 pt == 5950 pixels
| | | |
| | | |
+--------+--------+ v
<-----1190 pt----->
== 11900 pixels
Crop-/Trim-/Art-/Bleed-Boxes に関する更新
もう一つ。
上記のコマンドが機能していないように見えることがあります。その理由は、PDF が単純に想定された「ページ サイズ」だけでなく、より複雑な設定MediaBox
(通常は「ページ サイズ」と見なされるもの) とTrimBox
、BleedBox
、ArtBox
および を内部的に使用するためCropBox
です。これらのボックスの正確な説明については、こちらを参照してください...
これらすべてのボックスの値について PDF ファイル (入力と結果または中間結果) をテストするには、次のpdfinfo
コマンドを使用します。
pdfinfo -f 1 -l 5 -box a.pdf
pdfinfo -f 1 -l 5 -box b.pdf
pdfinfo -f 1 -l 5 -box right-sides.pdf
pdfinfo -f 1 -l 5 -box left-sides.pdf
pdfinfo -f 1 -l 5 -box compare.pdf
はCropBox
、 PDF ビューアー (およびプリンター) に、 にあるコンテンツのその部分のみを表示 (または印刷) させます。MediaBox
それが とは異なるように定義されている場合MediaBox
、再スケーリング タスクの邪魔になる可能性があります。Ghostscript が検出されても、Ghostscript によって影響を受けることはありません。
ファイルが正常に処理されても、ビューアではページに同じビューポートが表示されることがあります。
これらのボックスの効果を「無効化」するには、非常に大まかなトリックを使用する必要があります。PDF 内のこれらの文字列の名前をすべて小文字の名前に変更します。コマンドラインで行う方法は次のsed
とおりです (Windows では使用できない場合があります)。
cat input.pdf \
| sed 's#CropBox#cropbox#g' \
| sed 's#TrimBox#trimbox#g' \
| sed 's#BleedBox#bleedbox#g' \
| sed 's#ArtBox#artbox#g' \
> disarmed.pdf
または、どういうわけか短いですが、解析するのは簡単ではありません:
sed 's#CropB#cropb#g;s#TrimB#trimb#g;s#BleedB#bleedb#g;s#ArtB#artb#g' \
in.pdf > out.pdf
Ghostscript はバイナリ ファイル形式であるため、一部のバージョンではsed
次のようなエラー メッセージが表示される場合があります。
sed: RE エラー: 不正なバイト シーケンス
この場合、GNU sed などの別のフレーバーを試してくださいgsed
...