PDF 压缩
浏览器本地优化 PDF 结构 · 减少冗余对象 / 流压缩 · 无图片重采样
高/中/低三档(Ghostscript)
浏览器本地优化 PDF 结构 · 减少冗余对象 / 流压缩 · 无图片重采样
优化项:移除未使用对象 / 压缩对象流 / 去重资源字典 / 合并相同字体。
不优化项:图片不会被重新采样(保持原始分辨率),文本不会被丢弃。
了解工具定位 · 使用场景 · 对比优势
将 PDF 文件压缩到指定大小,提供高、中、低三档压缩级别,基于 Ghostscript 引擎处理。适合需要邮件附件、上传系统或节省存储空间的日常办公场景。文件上传至服务器处理,处理完成后自动删除,不保留任何副本。
商务人员发送合同扫描件或产品手册时,原始 PDF 动辄 20 MB 以上,超出邮件附件限制(通常 10-25 MB)。使用本工具选择中档压缩,可将 30 MB 的扫描合同压至 8 MB 以内,同时保持文字清晰可读,确保对方能正常打开和打印,避免因文件过大被退回或需分卷发送的麻烦。
经常在手机或平板上查看技术图纸、培训教材的用户,设备存储空间有限。将 50 MB 的 PDF 图纸通过高档压缩降至 5 MB 左右,仅损失极细微的线条细节,在 6 英寸屏幕上肉眼几乎无法察觉差异,却能在设备上多存 10 倍数量的文件,方便离线查阅。
设计院或律所每天产生大量 PDF 文件需上传至团队共享云盘(如百度网盘、OneDrive),上传速度受文件大小和带宽双重限制。先通过低档压缩将 100 MB 的 CAD 导出 PDF 缩小至 30 MB,上传耗时从 15 分钟降至 4 分钟,且压缩后仍保留矢量图形的缩放精度,不影响同事后续标注和修改。
毕业生向学校系统提交学位论文时,系统常规定 PDF 大小上限(如 10 MB),但包含高分辨率实验图片的论文原始文件往往超过 20 MB。使用中档压缩,将 300 DPI 的图片降采样至 150 DPI,文件降至 6 MB,同时正文文字和图表数字依然清晰,满足盲审和存档要求。
投标团队需将几百页的标书(含资质扫描件、报价表、技术方案)合并为一个 PDF 提交,原始文件可达 200 MB。使用高档压缩,将彩色扫描件转换为灰度并降低图片质量,文件缩小至 20 MB 以内,仍能清晰辨认公章和签名,确保在规定时间内上传至电子招投标平台且不触发大小限制。
| 维度 | 本工具 | 竞品 A (Smallpdf) | 传统方法 |
|---|---|---|---|
| 数据隐私 | 纯浏览器处理,文件不上传服务器 | 文件上传至云端处理 | 文件需交给第三方或同事处理 |
| 处理速度 | 1-3 秒(取决于文件大小) | 5-15 秒(含上传下载时间) | 数分钟至数小时(取决于软件和操作熟练度) |
| 离线可用 | 完全离线,不依赖网络 | 必须联网 | 依赖本地安装的软件(如 Adobe Acrobat) |
| 大小限制 | 无限制(取决于浏览器内存) | 免费版通常限制 100MB | 无限制(取决于本地硬件) |
| 收费模式 | 完全免费,无隐藏费用 | 免费版有次数/功能限制,高级版需订阅 | 需购买专业软件(如 Adobe Acrobat Pro) |
| 压缩档位 | 提供高/中/低三档精细控制 | 通常只提供单一压缩强度 | 需手动调整参数,操作复杂 |
| 注册要求 | 无需注册或登录 | 免费用户需注册账号 | 无需注册 |
上手步骤 · 输入输出 · 避坑提示
| 输入 | 输出 | 说明 |
|---|---|---|
| 一份包含大量高清图片的 50MB PDF 报告,压缩等级设为「低」 | 输出文件大小约 12MB,图片质量无明显下降,文字清晰 | 典型场景:保留图片质量的轻度压缩 |
| 一份纯文字 2MB PDF 合同,压缩等级设为「中」 | 输出文件大小约 0.8MB,文字完全清晰,无可见失真 | 典型场景:文字型文档的中等压缩 |
| 一份包含扫描件的 100MB PDF 书籍,压缩等级设为「高」 | 输出文件大小约 15MB,扫描件出现轻微模糊,文字可读 | 边界 case:大文件高压缩,扫描件质量下降 |
| 一份仅 100KB 的空白 PDF(仅一页空白),压缩等级设为「低」 | 输出文件大小约 95KB,变化极小 | 边界 case:极小文件压缩收益有限 |
| 一份 200MB 的 PDF 工程图纸(含矢量线条),压缩等级设为「高」 | 输出文件大小约 40MB,矢量线条出现锯齿,细节丢失 | 边界 case:矢量图高压缩导致精度损失 |
| 一份加密的 PDF(需密码打开),压缩等级设为「中」 | 工具提示「文件加密,请先解密后上传」 | 易错 case:加密文件无法直接压缩 |
| 一个名为 document.pdf 但实际是 .exe 的恶意文件,压缩等级设为「低」 | 工具提示「文件格式错误,请上传有效 PDF」 | 易错 case:伪装扩展名文件会被拒绝 |
每次上传 PDF 都选择「高」压缩文本为主的 PDF(合同、简历)用「中」或「低」;图片密集的扫描件用「高」Ghostscript 高压缩会大幅降低图片 DPI(通常到 72dpi),文本页无明显差异但图片页会变模糊
下载压缩结果后,删除原 PDF 并用同名文件替换保留原文件至少一周,确认压缩后的文字、表格、水印、签名均未丢失再删除Ghostscript 对某些嵌入字体/透明对象/表单域的处理可能造成视觉差异,且不可逆
将 200MB 的扫描版画册用「低」压缩这类文件应选「高」压缩,或先提取图片单独压缩再重新合成 PDF低压缩几乎不做图片重采样,文件体积几乎不变;高压缩将图片降到 72-150dpi 可缩小 80% 体积
把已签名的 PDF 直接上传压缩先检查签名是否允许修改;若允许,压缩后需重新签名;否则应使用不破坏签名的工具Ghostscript 会重建整个 PDF 结构,数字签名校验会失败,导致法律文件无效
看到广告说「压缩 95%」,期望 10MB 文件变 0.5MB先上传小文件测试:5MB 文本 PDF 通常压到 1-2MB;扫描件压到原体积 30-50%Ghostscript 压缩率取决于原文件内容:纯文本可压 80%+,已压缩的图片 PDF 只能压 10-20%
选择「高」压缩后,PDF 里的 8pt 小字看不清了含小字号文字的 PDF 用「中」压缩;高压缩仅用于大字号文本或图片为主的文档高压缩下 Ghostscript 降低图片分辨率到 72dpi,文字如果被栅格化(如某些字体嵌入方式)会一起变模糊
下载压缩文件后直接使用,发现页面顺序错乱压缩后打开 PDF 快速翻一遍,确认页面顺序、旋转方向、图层均正确Ghostscript 在处理某些包含页面标签/书签/JS 动作的 PDF 时可能重新排序页面
上传有打开密码的 PDF(提示需要密码才能查看)先用其他工具移除密码(需知道密码),再上传无保护的版本Ghostscript 无法处理加密 PDF,上传会直接失败或输出空白页;工具界面应提示此限制
公式推导 · 流程图解 · 依据出处
OutputSize ≈ InputSize × (1 - CR)
OutputSize — 压缩后 PDF 文件大小(KB)InputSize — 原始 PDF 文件大小(KB)CR — 压缩率(0~1,由 Ghostscript 档位决定)原始 PDF 5.2 MB(5325 KB),选择中档压缩(CR=0.6)。OutputSize = 5325 × (1 - 0.6) = 5325 × 0.4 = 2130 KB ≈ 2.08 MB。实际输出约 2.1 MB,因 Ghostscript 内部重采样和图像编码差异存在 ±5% 波动。
适用于基于 Ghostscript 的 PDF 压缩工具,压缩率 CR 由预设档位(高/中/低)决定。低档 CR≈0.3(轻度压缩),中档 CR≈0.6,高档 CR≈0.85。不适用于纯文本 PDF(压缩效果有限)或已高度压缩的 PDF(CR 可能低于预期)。
3 种主流语言 · 复制即用
import subprocess
import os
# 使用 Ghostscript 压缩 PDF,三档质量
input_pdf = "input.pdf"
output_pdf = "output.pdf"
# 质量档位:/screen (低), /ebook (中), /prepress (高)
quality = "/ebook" # 中等质量
# 构建 Ghostscript 命令
cmd = [
"gs",
"-sDEVICE=pdfwrite",
"-dCompatibilityLevel=1.4",
f"-dPDFSETTINGS={quality}",
"-dNOPAUSE",
"-dQUIET",
"-dBATCH",
f"-sOutputFile={output_pdf}",
input_pdf
]
try:
subprocess.run(cmd, check=True)
print(f"压缩完成:{output_pdf}")
except subprocess.CalledProcessError as e:
print(f"压缩失败:{e}")package main
import (
"fmt"
"os"
"os/exec"
)
func main() {
inputPDF := "input.pdf"
outputPDF := "output.pdf"
quality := "/ebook" // 可选: /screen, /ebook, /prepress
cmd := exec.Command("gs",
"-sDEVICE=pdfwrite",
"-dCompatibilityLevel=1.4",
"-dPDFSETTINGS="+quality,
"-dNOPAUSE",
"-dQUIET",
"-dBATCH",
"-sOutputFile="+outputPDF,
inputPDF,
)
if err := cmd.Run(); err != nil {
fmt.Fprintf(os.Stderr, "压缩失败: %v\n", err)
os.Exit(1)
}
fmt.Println("压缩完成:", outputPDF)
}const { execSync } = require('child_process');
const path = require('path');
const inputPDF = 'input.pdf';
const outputPDF = 'output.pdf';
const quality = '/ebook'; // 可选: /screen, /ebook, /prepress
const cmd = [
'gs',
'-sDEVICE=pdfwrite',
'-dCompatibilityLevel=1.4',
`-dPDFSETTINGS=${quality}`,
'-dNOPAUSE',
'-dQUIET',
'-dBATCH',
`-sOutputFile=${outputPDF}`,
inputPDF
].join(' ');
try {
execSync(cmd, { stdio: 'inherit' });
console.log('压缩完成:', outputPDF);
} catch (err) {
console.error('压缩失败:', err.message);
process.exit(1);
}8 个高频疑问