#!/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