我每天都会编辑大量PDF文件,因此我花了很多时间思考如何以最佳方式做到这一点。
对我而言,最好的方法是将PDF拆分为1页的PDF文件,然后使用GIMP编辑,然后将其合并。我不会在所有文件上使用imagemagick(我一点也不使用),所以我不会在所有页面上都丢失文本层,而只会在编辑过的地方丢失。不要一次加载整个PDF文件,因为它会导致内存耗尽。
将PDF拆分为1页的文件
您可以通过此bash函数将PDF文件轻松拆分为1页PDF(将其放入〜/ .bashrc中):
function pdf_split(){
for file in "$@"; do
if [ "${file##*.}" != "pdf" ]; then
echo "Skip $file because it's not PDF file";
continue
fi;
pages=$(pdfinfo "$file" | grep "Pages" | awk '{print $2}')
echo "Detect $pages in $file";
filename="${file%.*}";
unset Outfile;
for i in $(seq 1 "$pages"); do
pdftk "$file" cat "$i" output "$filename-$i.pdf";
Outfile[$i]="$filename-$i.pdf";
done;
done;
};
现在,您可以输入split_pdf file.pdf
以获取许多PDF文件。
编辑文件
但是,现在您需要编辑所有这些文件。您可以使用gimp original-filename-*.pdf
。我建议在GIMP(主窗口->编辑->快捷方式)中配置快捷方式,以替换文件(我使用CTRL + R),模糊过滤器(例如CTRL + D),关闭文件(例如CTRL + W)并退出GIMP(例如CTRL + Q)。请记住,不要一次将GIMP加载到多个文件中,而是要在打开后立即加载GIMP,这样就可以gimp original-filename-*.pdf
安全地使用上千个文件。
合并档案
您可以轻松地将文件合并在一起: pdftk originam-filename-*.pdf cat output "new-file-anon.pdf";
将它们连接在一起
这些操作非常重复且无聊,因此我将所有这些都通过1个脚本进行连接:
function pdf_redact(){
for file in "$@"; do
if [ "${file##*.}" != "pdf" ]; then
echo "Skip $file because it's not PDF file";
continue
fi;
pages=$(pdfinfo "$file" | grep "Pages" | awk '{print $2}')
echo "Detect $pages in $file";
filename="${file%.*}";
unset Outfile;
for i in $(seq 1 "$pages"); do
pdftk "$file" cat "$i" output "$filename-$i.pdf";
Outfile[$i]="$filename-$i.pdf";
done;
gimp "${Outfile[@]}";
pdftk "${Outfile[@]}" cat output "$filename-anon.pdf";
rm "${Outfile[@]}";
read -p "Do you want open output file? " -n 1 -r
echo
if [[ $REPLY =~ ^[Yy]$ ]]
then
evince "$filename-anon.pdf";
fi
read -p "Do you want upload output file to Scribd.com? " -n 1 -r
echo
if [[ $REPLY =~ ^[Yy]$ ]]
then
scribd_up "$filename-anon.pdf";
fi
done;
};
始终可以从以下位置访问此脚本的最新版本:http : //dostep.jawne.info.pl/it/bashrc
记住,在所有修改后都要关闭GIMP(CTRL + Q)以继续执行脚本。
上瘾的是,我打开了经过编辑的文件(我喜欢阅读以检查是否全部),并使用其他脚本scribd_up上传到Scribd ,因此现在我可以非常高效地编辑许多PDF文件。