diff --git a/remove_watermark_self.sh b/remove_watermark_self.sh index 53702c8..be4203f 100644 --- a/remove_watermark_self.sh +++ b/remove_watermark_self.sh @@ -48,50 +48,75 @@ check_install_pdftk() { # 在开始处理之前检查并安装 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 [ "$#" -ne 1 ]; then - echo "使用方法: $0 [PDF文件名]" +# 参数校验 +if [ "${#args[@]}" -eq 0 ]; then + echo "使用方法: $0 [PDF文件1] [PDF文件2] ... [--keep-temp]" exit 1 fi -# 输入的 PDF 文件名 -PDF_FILE="$1" +# 开始处理多个文件 +for PDF_FILE in "${args[@]}"; do + if [ ! -f "$PDF_FILE" ]; then + echo "文件不存在: $PDF_FILE" + continue + fi -# 添加文件存在性检查 -if [ ! -f "$PDF_FILE" ]; then - echo "错误:文件 '$PDF_FILE' 不存在" - exit 1 -fi + if [[ ! "$PDF_FILE" =~ \.pdf$ ]]; then + echo "不是 PDF 文件,跳过: $PDF_FILE" + continue + fi -# 添加文件扩展名检查 -if [[ ! "$PDF_FILE" =~ \.pdf$ ]]; then - echo "错误:文件必须是 PDF 格式" - exit 1 -fi + TEMP_FILE="temp_$PDF_FILE" + OUTPUT_FILE="clean_$PDF_FILE" -# 设置临时文件和输出文件名 -TEMP_FILE="uncompressed_$PDF_FILE" -OUTPUT_FILE="recombined_$PDF_FILE" + if [ -f "$OUTPUT_FILE" ]; then + echo "文件 $OUTPUT_FILE 已存在,跳过处理。" + continue + fi -# 使用 pdftk 解压 PDF 到文本 -if ! pdftk "$PDF_FILE" output "$TEMP_FILE" uncompress; then - echo "错误:PDF 解压失败" - exit 1 -fi + echo "解压 PDF: $PDF_FILE" + if ! pdftk "$PDF_FILE" output "$TEMP_FILE" uncompress; then + echo "PDF 解压失败: $PDF_FILE" + continue + 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" + 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" -# 使用 pdftk 重新组合 PDF -if ! pdftk "$TEMP_FILE" output "$OUTPUT_FILE" compress; then - echo "错误:PDF 压缩失败" - rm -f "$TEMP_FILE" # 清理临时文件 - exit 1 -fi + if [ ! -f "${TEMP_FILE}.tmp" ]; then + echo "未生成中间文件,跳过: $PDF_FILE" + rm -f "$TEMP_FILE" + continue + fi -# 清理临时文件 -rm -f "$TEMP_FILE" + mv "${TEMP_FILE}.tmp" "$TEMP_FILE" -echo "处理完成!输出文件:$OUTPUT_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 \ No newline at end of file