#!/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 # 检查是否提供了文件名 if [ "$#" -ne 1 ]; then echo "使用方法: $0 [PDF文件名]" exit 1 fi # 输入的 PDF 文件名 PDF_FILE="$1" # 添加文件存在性检查 if [ ! -f "$PDF_FILE" ]; then echo "错误:文件 '$PDF_FILE' 不存在" exit 1 fi # 添加文件扩展名检查 if [[ ! "$PDF_FILE" =~ \.pdf$ ]]; then echo "错误:文件必须是 PDF 格式" exit 1 fi # 设置临时文件和输出文件名 TEMP_FILE="uncompressed_$PDF_FILE" OUTPUT_FILE="recombined_$PDF_FILE" # 使用 pdftk 解压 PDF 到文本 if ! pdftk "$PDF_FILE" output "$TEMP_FILE" uncompress; then echo "错误:PDF 解压失败" exit 1 fi # 使用 Perl 去除特殊字符 # 注意: 这里假设特殊字符已经正确插入 perl -pi -e 's/\x00\x32\x00\x37\x00\x30\x00\x35\x00\x35\x00\x38\x00\x20\x52\x18f%i`\)Tj//g' "$TEMP_FILE" # 使用 pdftk 重新组合 PDF if ! pdftk "$TEMP_FILE" output "$OUTPUT_FILE" compress; then echo "错误:PDF 压缩失败" rm -f "$TEMP_FILE" # 清理临时文件 exit 1 fi # 清理临时文件 rm -f "$TEMP_FILE" echo "处理完成!输出文件:$OUTPUT_FILE"