Files
bash-script/remove_watermark_self.sh
2025-07-17 01:39:28 +08:00

122 lines
3.3 KiB
Bash
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/bin/bash
# 检查并安装 pdftk
check_install_pdftk() {
if ! command -v pdftk &> /dev/null; then
echo "未检测到 pdftk正在尝试安装..."
# 检测操作系统类型
if [ -f /etc/os-release ]; then
. /etc/os-release
case "$ID" in
ubuntu|debian)
sudo apt-get update && sudo apt-get install -y pdftk
;;
fedora)
sudo dnf install -y pdftk
;;
centos|rhel)
sudo yum install -y pdftk
;;
*)
echo "无法确定操作系统类型,请手动安装 pdftk"
exit 1
;;
esac
elif [ "$(uname)" == "Darwin" ]; then
# macOS
if command -v brew &> /dev/null; then
brew install pdftk-java
else
echo "请先安装 Homebrew然后再安装 pdftk"
echo "安装 Homebrew: /bin/bash -c \"\$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)\""
exit 1
fi
else
echo "不支持的操作系统,请手动安装 pdftk"
exit 1
fi
# 再次检查安装是否成功
if ! command -v pdftk &> /dev/null; then
echo "pdftk 安装失败,请手动安装"
exit 1
fi
echo "pdftk 安装成功!"
fi
}
# 在开始处理之前检查并安装 pdftk
check_install_pdftk
# 检查是否使用 --keep-temp 参数
KEEP_TEMP=false
args=()
for arg in "$@"; do
if [ "$arg" == "--keep-temp" ]; then
KEEP_TEMP=true
else
args+=("$arg")
fi
done
# 参数校验
if [ "${#args[@]}" -eq 0 ]; then
echo "使用方法: $0 [PDF文件1] [PDF文件2] ... [--keep-temp]"
exit 1
fi
# 开始处理多个文件
for PDF_FILE in "${args[@]}"; do
if [ ! -f "$PDF_FILE" ]; then
echo "文件不存在: $PDF_FILE"
continue
fi
if [[ ! "$PDF_FILE" =~ \.pdf$ ]]; then
echo "不是 PDF 文件,跳过: $PDF_FILE"
continue
fi
TEMP_FILE="temp_$PDF_FILE"
OUTPUT_FILE="clean_$PDF_FILE"
if [ -f "$OUTPUT_FILE" ]; then
echo "文件 $OUTPUT_FILE 已存在,跳过处理。"
continue
fi
echo "解压 PDF: $PDF_FILE"
if ! pdftk "$PDF_FILE" output "$TEMP_FILE" uncompress; then
echo "PDF 解压失败: $PDF_FILE"
continue
fi
echo "清除水印中: '$PDF_FILE'"
perl -pe '
s/\(\x00\x32\x00\x37\x00\x30\x00\x35\x00\x35\x00\x38\x00\x20\x52\x18f%i`\)Tj//g;
s/\(\x00\x15\x00\x1a\x00\x13\x00\x18\x00\x18\x00\x1b\x00\x03\\bN\x1C\[\x1F\x96\)Tj//g;
' "$TEMP_FILE" > "${TEMP_FILE}.tmp"
if [ ! -f "${TEMP_FILE}.tmp" ]; then
echo "未生成中间文件,跳过: $PDF_FILE"
rm -f "$TEMP_FILE"
continue
fi
mv "${TEMP_FILE}.tmp" "$TEMP_FILE"
echo "重新压缩生成: $OUTPUT_FILE"
if ! pdftk "$TEMP_FILE" output "$OUTPUT_FILE" compress; then
echo "PDF 压缩失败: $PDF_FILE"
rm -f "$TEMP_FILE"
continue
fi
if [ "$KEEP_TEMP" = false ]; then
rm -f "$TEMP_FILE"
else
echo "保留临时文件: $TEMP_FILE"
fi
echo "处理完成: $OUTPUT_FILE"
done