更新 remove_watermark_self.sh

Signed-off-by: gamesme <i@gamesme.me>
This commit is contained in:
2025-07-17 01:39:28 +08:00
parent 89cff30da9
commit 8078ef1efb

View File

@@ -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