一部の内容が2ページに分割されたPDFがあります。
最初の部分は最初のページの下半分以下で、2番目の部分は2番目のページの上半分以下です。たとえば、x
最初のページでは目的のコンテンツ、y
2番目のページでは必要なものであれば-
出力文書では望ましくないものです。
|-| |y|
|-| |y|
|-| |-|
|x| |-|
|x| |-|
欲しい
|x|
|x|
|y|
|y|
1ページに。
Linuxでこのように部分をマージできますか?
答え1
私はあなたが望むことを達成するためにこのスクリプトを調整できる必要があると思います。
使用するのは少し実用的です。
- pdfinfo - 寸法を取得します。
- gs - ページからボックスを抽出します。
- pdftk - PDFで構成します。
- pdfjam - 2ページのうち1ページを生成します。
これまでは、上/下から抽出された同じ寸法に対して機能します。 (現在offs=50 AKA 50%でハードコードされています)。わずかな調整で70%〜30%程度動作するようにできます。
pdf50x50
:
#!/bin/bash
if ! [ -r "$1" ]; then
printf "Unable to read file \`%s'\n" "$1" >&2
exit 1
fi
fn_in="$1"
# A (debug) counter for "temp" files.
# NOTE: Printing to file .pdftestnr in working directory
fn_nr=.pdftestnr
[ -r $fn_nr ] && nr=$(<$fn_nr) || nr=0
((++nr))
printf %d $nr > $fn_nr
# File names.
fn_top=$(printf "top-%03d.pdf" $nr)
fn_bottom=$(printf "bottom-%03d.pdf" $nr)
fn_combi=$(printf "combi-%03d.pdf" $nr)
fn_fine=$(printf "fine-%03d.pdf" $nr)
# Get dimensions
read -r p w h <<<$(pdfinfo $fn_in | awk '/^Pages:/{print $2}/^Page size/{print $3, $5}')
# Calculate pixel dimensions (might fail.)
((pix_w = w * 10))
((pix_h = h * 10))
printf "Size %dx%d pts of %d pages\n" $w $h $p
# Percent
offs=50
((offs = h * offs / 100))
((pix_crop_h = pix_h - offs * 10 ))
echo $pix_crop_h $offs
# Extract top box to own pdf.
gs \
-o $fn_top \
-sDEVICE=pdfwrite \
-g${pix_w}x$pix_crop_h \
-c "<</PageOffset [0 -$offs]>> setpagedevice" \
-f $fn_in
# Extract bottom box to own pdf.
gs \
-o $fn_bottom \
-sDEVICE=pdfwrite \
-g${pix_w}x$pix_crop_h \
-c "<</PageOffset [0 0]>> setpagedevice" \
-f $fn_in
# Combine top and bottom files to one file.
pdftk \
A=$fn_top \
B=$fn_bottom \
cat A1 B2 \
output $fn_combi \
verbose
# Combine 2 pages to one.
pdfjam $fn_combi --nup 1x2 --outfile $fn_fine