本文目录导读:

我为您提供几种实用的PDF合并脚本方案,覆盖不同操作系统和使用场景。
Python脚本(跨平台,推荐)
安装依赖
pip install PyPDF2 # 或 pip install pypdf
基础合并脚本
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
PDF合并工具 - 自动合并指定目录下的所有PDF文件
"""
import os
import sys
from PyPDF2 import PdfMerger
def merge_pdfs(input_dir, output_file="merged.pdf", sort=True):
"""
合并指定目录下的所有PDF文件
Args:
input_dir: PDF文件所在目录
output_file: 输出文件名
sort: 是否按文件名排序
"""
# 获取所有PDF文件
pdf_files = [f for f in os.listdir(input_dir) if f.lower().endswith('.pdf')]
if not pdf_files:
print("错误: 未找到PDF文件!")
return False
if sort:
pdf_files.sort()
print(f"找到 {len(pdf_files)} 个PDF文件:")
for f in pdf_files:
print(f" - {f}")
# 合并文件
merger = PdfMerger()
try:
for pdf in pdf_files:
filepath = os.path.join(input_dir, pdf)
merger.append(filepath)
print(f"已添加: {pdf}")
# 保存合并后的文件
output_path = os.path.join(input_dir, output_file)
merger.write(output_path)
merger.close()
print(f"\n合并完成! 输出文件: {output_path}")
print(f"总页数: 请手动查看或使用其他工具")
return True
except Exception as e:
print(f"合并过程中出错: {e}")
return False
if __name__ == "__main__":
# 使用当前目录
current_dir = os.path.dirname(os.path.abspath(__file__))
# 支持命令行参数
input_path = sys.argv[1] if len(sys.argv) > 1 else current_dir
output_name = sys.argv[2] if len(sys.argv) > 2 else "merged.pdf"
merge_pdfs(input_path, output_name)
高级版本(带GUI选择界面)
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
PDF合并工具 - 带文件选择功能
"""
import tkinter as tk
from tkinter import filedialog, messagebox
import os
from PyPDF2 import PdfMerger
class PDFMergerGUI:
def __init__(self, root):
self.root = root
self.root.title("PDF合并工具")
self.root.geometry("500x400")
self.pdf_files = []
# 创建界面
self.create_widgets()
def create_widgets(self):
# 选择文件按钮
tk.Button(self.root, text="选择PDF文件",
command=self.select_files, width=20).pack(pady=10)
# 文件列表
self.listbox = tk.Listbox(self.root, height=10, width=60)
self.listbox.pack(pady=10, padx=10, fill=tk.BOTH, expand=True)
# 操作按钮
frame = tk.Frame(self.root)
frame.pack(pady=10)
tk.Button(frame, text="上移", command=self.move_up, width=10).pack(side=tk.LEFT, padx=5)
tk.Button(frame, text="下移", command=self.move_down, width=10).pack(side=tk.LEFT, padx=5)
tk.Button(frame, text="移除", command=self.remove_file, width=10).pack(side=tk.LEFT, padx=5)
# 合并按钮
tk.Button(self.root, text="合并PDF", command=self.merge_files,
bg="green", fg="white", width=20).pack(pady=10)
def select_files(self):
files = filedialog.askopenfilenames(
title="选择PDF文件",
filetypes=[("PDF文件", "*.pdf")]
)
for file in files:
if file not in self.pdf_files:
self.pdf_files.append(file)
self.listbox.insert(tk.END, os.path.basename(file))
def move_up(self):
selection = self.listbox.curselection()
if selection and selection[0] > 0:
index = selection[0]
self._swap_items(index, index-1)
def move_down(self):
selection = self.listbox.curselection()
if selection and selection[0] < self.listbox.size() - 1:
index = selection[0]
self._swap_items(index, index+1)
def _swap_items(self, i, j):
self.pdf_files[i], self.pdf_files[j] = self.pdf_files[j], self.pdf_files[i]
self.listbox.delete(i)
self.listbox.delete(j)
self.listbox.insert(j, os.path.basename(self.pdf_files[j]))
self.listbox.insert(i, os.path.basename(self.pdf_files[i]))
self.listbox.selection_set(j)
def remove_file(self):
selection = self.listbox.curselection()
if selection:
index = selection[0]
self.listbox.delete(index)
self.pdf_files.pop(index)
def merge_files(self):
if not self.pdf_files:
messagebox.showwarning("警告", "请先选择PDF文件!")
return
output_file = filedialog.asksaveasfilename(
defaultextension=".pdf",
filetypes=[("PDF文件", "*.pdf")],
title="保存合并后的PDF"
)
if not output_file:
return
merger = PdfMerger()
try:
for pdf in self.pdf_files:
merger.append(pdf)
merger.write(output_file)
merger.close()
messagebox.showinfo("完成", f"合并成功!\n输出文件: {output_file}")
except Exception as e:
messagebox.showerror("错误", f"合并失败: {e}")
if __name__ == "__main__":
root = tk.Tk()
app = PDFMergerGUI(root)
root.mainloop()
Windows PowerShell脚本
# merge_pdfs.ps1
# Windows系统使用
# 安装模块(首次运行需要)
# Install-Module -Name PSWritePDF -Force
param(
[string]$InputPath = ".",
[string]$OutputFile = "merged.pdf"
)
function Merge-PDFs {
param(
[string]$inputPath,
[string]$outputFile
)
# 获取所有PDF文件
$pdfFiles = Get-ChildItem -Path $inputPath -Filter *.pdf | Sort-Object Name
if ($pdfFiles.Count -eq 0) {
Write-Host "错误: 未找到PDF文件!" -ForegroundColor Red
return
}
Write-Host "找到 $($pdfFiles.Count) 个PDF文件:" -ForegroundColor Green
$pdfFiles | ForEach-Object { Write-Host " - $($_.Name)" }
# 使用PDFtk工具合并(需要先安装)
$pdftkPath = "C:\Program Files\PDFtk\bin\pdftk.exe"
if (Test-Path $pdftkPath) {
# 方法1: 使用PDFtk
$inputFiles = $pdfFiles.FullName -join " "
$outputPath = Join-Path $inputPath $outputFile
& $pdftkPath $inputFiles cat output $outputPath
if ($LASTEXITCODE -eq 0) {
Write-Host "合并完成! 输出文件: $outputPath" -ForegroundColor Green
} else {
Write-Host "合并失败!" -ForegroundColor Red
}
} else {
# 方法2: 使用PowerShell脚本(仅适用于文本PDF)
Write-Host "PDFtk未安装,尝试使用PowerShell方法..." -ForegroundColor Yellow
Write-Host "建议安装PDFtk: https://www.pdflabs.com/tools/pdftk-the-pdf-toolkit/" -ForegroundColor Yellow
}
}
Merge-PDFs -inputPath $InputPath -outputFile $OutputFile
Linux/Unix Bash脚本
#!/bin/bash
# merge_pdfs.sh
# Linux/Unix系统使用
# 检查依赖
check_dependencies() {
if command -v pdfunite &> /dev/null; then
MERGE_TOOL="pdfunite"
elif command -v pdftk &> /dev/null; then
MERGE_TOOL="pdftk"
elif command -v ghostscript &> /dev/null; then
MERGE_TOOL="ghostscript"
else
echo "错误: 未找到PDF合并工具!"
echo "请安装以下任一工具:"
echo " - poppler-utils (提供pdfunite)"
echo " - pdftk"
echo " - ghostscript"
exit 1
fi
}
# 主函数
merge_pdfs() {
local input_dir="${1:-.}"
local output_file="${2:-merged.pdf}"
local output_path="$input_dir/$output_file"
# 获取PDF文件列表
local pdf_files=($(ls "$input_dir"/*.pdf 2>/dev/null | sort))
if [ ${#pdf_files[@]} -eq 0 ]; then
echo "错误: 未找到PDF文件!"
exit 1
fi
echo "找到 ${#pdf_files[@]} 个PDF文件:"
for f in "${pdf_files[@]}"; do
echo " - $(basename "$f")"
done
case $MERGE_TOOL in
pdfunite)
echo "使用 pdfunite 合并..."
pdfunite "${pdf_files[@]}" "$output_path"
;;
pdftk)
echo "使用 pdftk 合并..."
pdftk "${pdf_files[@]}" cat output "$output_path"
;;
ghostscript)
echo "使用 ghostscript 合并..."
gs -q -dNOPAUSE -dBATCH -sDEVICE=pdfwrite \
-sOutputFile="$output_path" \
"${pdf_files[@]}"
;;
esac
if [ $? -eq 0 ]; then
echo "合并完成! 输出文件: $output_path"
else
echo "合并失败!"
exit 1
fi
}
# 检查依赖
check_dependencies
# 处理命令行参数
INPUT_DIR="${1:-.}"
OUTPUT_FILE="${2:-merged.pdf}"
merge_pdfs "$INPUT_DIR" "$OUTPUT_FILE"
macOS AppleScript
-- merge_pdfs.applescript
-- macOS系统使用
on merge_pdfs()
-- 选择PDF文件
set pdfFiles to choose file with prompt "选择要合并的PDF文件" of type {"pdf"} with multiple selections allowed
if pdfFiles is {} then return
-- 选择保存位置
set outputFile to choose file name with prompt "保存合并后的PDF" default name "merged.pdf"
-- 使用Automator或AppleScript合并PDF
set filePaths to ""
repeat with pdfFile in pdfFiles
set filePaths to filePaths & " " & quoted form of POSIX path of pdfFile
end repeat
-- 使用系统自带的合并功能
do shell script "/System/Library/Automator/Combine PDF Pages.action/Contents/MacOS/Combine PDF Pages " & filePaths & " " & quoted form of POSIX path of outputFile
display dialog "合并完成!" buttons {"确定"} default button 1
end merge_pdfs
-- 运行
merge_pdfs()
使用说明
Python脚本使用
# 基础用法(合并当前目录) python merge_pdfs.py # 指定目录 python merge_pdfs.py /path/to/pdf/files # 指定输出文件名 python merge_pdfs.py . output.pdf
Windows PowerShell使用
# 运行脚本(允许执行策略) Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass .\merge_pdfs.ps1 # 或指定参数 .\merge_pdfs.ps1 -InputPath "C:\PDFs" -OutputFile "result.pdf"
Linux Bash使用
# 赋予执行权限 chmod +x merge_pdfs.sh # 运行 ./merge_pdfs.sh # 或指定参数 ./merge_pdfs.sh /path/to/pdfs output.pdf
安装依赖
Python
pip install PyPDF2 # 或 pip install pypdf
Windows (PDFtk)
下载并安装: https://www.pdflabs.com/tools/pdftk-the-pdf-toolkit/
Linux
# Ubuntu/Debian sudo apt-get install poppler-utils pdftk ghostscript # CentOS/RHEL sudo yum install poppler-utils pdftk ghostscript # macOS brew install poppler pdftk ghostscript
这些脚本都能实现自动合并PDF文件的功能,您可以根据自己的操作系统和需求选择最适合的方案。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播