主要藉助linux系統中的已有工具pdfunite進行多份pdf文件合成
linux系統中自帶pdf處理工具,一般可以很簡單使用如下命令將兩份pdf合成一份pdf文件。
```bash
pdfunite 1.pdf 2.pdf 1_2.pdf
```
就是上面這條命令這麼簡單。
如果遇到成千上萬份pdf文件,合成一份咋辦
藉助pdfunite工具,我們可以使用shell腳本,來完成重複合成工作。比如,1萬份pdf,我們可以先分成10組1000份pdf,將每組中的1000份pdf按組合成一份pdf文件。那麼這一步之後,就只剩下10個“經過1000份合成一份的”pdf文件。
這裏使用shell腳本來實現上述合成原理。直接上腳本源碼。如下所示,該腳本,默認當前已經存在N份pdf文件。
#!/bin/bash
#set -x
PARA=2
if [ $# -lt $PARA ];then
echo usage:$0 [pdf list] [N] [out_name]
exit 1
fi
LIST=$1
N=$2
n=0
n_mod=0
out_n=0
out_name=$3
#real_num=`cat $LIST | wc -l`
pdf_files=
while read line
do
pdf_files+=" $line"
let n=n+1
n_mod=$((n%N))
if [ $n_mod == 0 ];then
#echo $pdf_files
echo $n $out_n
pdfunite $pdf_files $out_n.$out_name.pdf
let out_n=out_n+1
pdf_files=""
#exit 1
fi
done < $LIST
#let out_n=out_n+1
echo $out_n $n
pdfunite $pdf_files $out_n.$out_name.pdf
具體使用方法就是:
usage:./pdf_composite.sh [pdf list] [N] [out_name]
其中,[pdf list]——指當前pdf列表,可以使用ls *.pdf > list來生成
[N]——指一次pdfunite工具需要處理的文件數量,這裏嘗試的是1000份文件,貌似過大會有點意外問題。
[out_name]——指中間合成文件的名字,我這裏隨便寫的com,中間文件就會0~n.com.pdf
所以命令使用起來就是:./pdf_composite.sh list 1000 com
我實踐的時候是合成的4萬份pdf和8萬份pdf,合成出來的文件,簡直不要太大,超過500MB的文件,一般的pdf閱讀器,貌似搜索多了會報內存不足,看來太大的pdf文件不容易看啊。