我正在尝试将许多 PDF 文件合并为 3000 个左右的文件块。经过多次尝试,这个脚本似乎成功了。(当然我错了)
#!/bin/bash
basepath='/home/lemonidas/pdfstuff';
datename=`date "+%Y%m%d%H%M.%S"`;
start=`date "+%s"`;
echo "parsing pdf list to file..."
find $basepath/input/ -name "*.pdf" | xargs -I {} ls {} >> $basepath/tmp/biglist$datename.txt
split -l 3000 $basepath/tmp/biglist$datename.txt $basepath/tmp/splitfile
rm $basepath/tmp/biglist$datename.txt
echo "deleting big file..."
echo "done splitting!"
declare -i x
x=1
for f in $basepath/tmp/splitfile*
do
linenum=`cat $f | wc -l`;
echo "Processing $f ($linenum lines)..."
# merge to one big PDF
cat $f | xargs gs -q -sstdout=$basepath/error.log -sPAPERSIZE=letter -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -sOutputFile=$basepath/output/$x.big.pdf 2>$basepath/error.log
echo "Completed PDF $x"
(( x++ ))
# delete the list file
rm $f
echo "Deleted processed file $f"
done
end=`date "+%s"`;
echo "Started: $start"
echo "Finished: $end"
问题是,我有 22000 个 2 页 PDF,每个输出文件(最后一个除外)应该是 6000 页(因为我们在每个合并列表中有 3000 个 PDF,在解析之前由“wc -l”验证),并且我只得到大约 658 页左右。
除了 gs 之外,没有报告任何错误:
警告:嵌入式符号 TT 字体必须包含用于 Platform=1 Encoding=0 的 cmap。
警告:嵌入式符号 TT 字体必须包含用于 Platform=1 Encoding=0 的 cmap。
警告:嵌入式符号 TT 字体必须包含用于 Platform=1 Encoding=0 的 cmap。
警告:嵌入式符号 TT 字体必须包含用于 Platform=1 Encoding=0 的 cmap。
警告:嵌入式符号 TT 字体必须包含用于 Platform=1 Encoding=0 的 cmap。
警告:嵌入式符号 TT 字体必须包含用于 Platform=1 Encoding=0 的 cmap。
警告:嵌入式符号 TT 字体必须包含用于 Platform=1 Encoding=0 的 cmap。
警告:嵌入式符号 TT 字体必须包含用于 Platform=1 Encoding=0 的 cmap。
此文件包含已修复或忽略的错误。
文件制作者:>>>> Powered By Crystal 请通知生成此文件的软件的作者它不符合 Adobe 发布的 PDF 规范。
一遍又一遍(但不是 22000 次)
当我尝试使用 300-400 个文件时,它运行平稳,但是当我尝试完全运行时,2.5 小时后,我得到的文件合并不到一半。
我的下一个想法是将每个 2 页 PDF 转换为 .pgm 文件,但我不知道如何将它们重新制作为 PDF(这样就不会出现字体嵌入问题)。我错过了什么吗?(大概)