これが可能かどうかわかりません。私はゴーストスクリプトを学んでいます。それぞれ約500ページの長さのPDFファイルが複数あるとしましょう。各ドキュメントから100ページごとに抽出し、各ページを別々のPDFファイルとして保存するようにGhostscriptを設定できますか?
そのため、長さ500ページのFileA.pdfがあります。だから今私が欲しいファイル A_0001.pdf ファイル A_0002.pdf ファイル A_0003.pdf ファイル A_0004.pdf ファイル A_0005.pdf
私は時間間隔でファイルを分割してマージするスクリプトを書いていますが、ファイル名を正しく変更するのに問題があります。私が経験している問題は、最初のファイルの分割とマージが完了した後に名前が次に変更されることです。ファイル A_0001.pdf ファイル A_0002.pdf ファイル A_0003.pdf ファイル A_0004.pdf ファイル A_0005.pdf
しかし、問題は、一度FileBプロセスを起動するとファイルB_0006.pdfファイルB_0007.pdfいくつかの他の方法を試しましたが、すべて失敗しました。提案はありますか?誰でも助けることができますか?
for file in /mnt/bridge/pdfsplit/staging/*.[pP][dD][fF]
do
echo $file
#Splits All the Files
gs -q -dNOPAUSE -sDEVICE=pdfwrite -o tmp_%04d.pdf $file
#Removes Last File in List; Ghostscript creates a blank file everytime it splits
find /mnt/bridge/pdfsplit/ -name "tmp*" | tail -1 | while read filename ; do rm $filename; done
pageCount=$(find . -name "tmp*" | wc -l)
documents=$(((pageCount / 998) + (pageCount % 998 > 0)))
pages=$(((pageCount/documents) + (pageCount % documents > 0 )))
for ((i=1; i<$pageCount; i++)); do
list=$(ls -1 tmp* 2>/dev/null | head -$pages)
count=$(ls -1 tmp* 2>/dev/null| wc -l)
gs -q -dNOPAUSE -sDEVICE=pdfwrite -o $(basename $file .pdf )_Part_$(printf %04d $i).pdf -dBATCH $list
rm -f $list
if [[ $count -eq 0 ]]; then
echo "Done"
break
fi
done
#Removes Last File in List; Ghostscript is creating a blank file
mv *.pdf /mnt/bridge/pdfsplit/splitFiles/
find /mnt/bridge/pdfsplit/splitFiles/ -name "*.pdf" | tail -1 | while read filename ; do rm $filename; done
done
答え1
これは役に立ちますか?
#!/bin/bash
function getChunk {
#extract a page range
gs -q -dNOPAUSE -sDEVICE=pdfwrite -sPageList=$1-$2 -o ${3%%.*}_$(printf %04d $4).pdf $3
}
for file in *.pdf; do
#Use gs to get the page count
pgs=$(gs -q -dNODISPLAY -c "($file) (r) file runpdfbegin pdfpagecount = quit")
#specify the number of pages in each chunk as step
step=10
#calculate the number of whole chunks
chunks=$(( pgs / step))
#reset all counters between pdfs
f=0 #first page to extract in chunk
l=0 #last page to extract in chunk
i=0 #chunk counter
#Extract the whole chunks
for ((i=0; i<$chunks; i+=1)); do
#calculate the first and last pages
f=$((i*step+1))
l=$((f+step-1))
getChunk $f $l $file $i
done
#Pick up any part chunk at the end of the file
f=$((l+1))
if [ $f -le $pgs ]; then
getChunk $f $pgs $file $i
fi
done
名前を整理します...
答え2
GSなし
FileA_0001.pdf、FileA_0002.pdf、...、FileA_0100.pdfの生成
for i in $(seq 1 100); do pdftocairo -pdf -f $i -l $i FileA.pdf $(printf 'FileA_%04d.pdf' $i); done
FileA_1.pdf、FileA_2.pdf、...、FileA_100.pdfの生成
pdfseparate -l 100 FileA.pdf FileA_%d.pdf
私が好きなのはpdftocairoです。私の経験では、gsよりも高速で安定しています。試してみてください。