如何使用Python轻量化大体积PDF?去除背景保留文本
用Python轻量化PDF:去除背景保留文本
可以借助Python库实现PDF去背景轻量化,以下是基于你提到的pypdf、reportlab及更高效的PyMuPDF(适合处理页面元素)的具体方案:
核心思路
PDF的背景通常是底层的大型图形元素(矢量图/位图),我们可以通过解析页面内容,分离文本与背景元素,重新生成仅包含文本和白色背景的PDF,从而大幅缩小体积。
具体实现方法
方法1:用pypdf提取文本 + reportlab生成新PDF
这种方法适合背景与文本完全分离的PDF:
- 用
pypdf.PdfReader读取原PDF,提取每个页面的文本内容 - 用
reportlab创建新PDF,设置白色背景,将提取的文本逐页写入
代码示例:
from pypdf import PdfReader from reportlab.pdfgen import canvas from reportlab.lib.pagesizes import letter input_pdf = PdfReader("large_pdf.pdf") output_pdf = canvas.Canvas("lightweight_pdf.pdf", pagesize=letter) for page_num in range(len(input_pdf.pages)): page = input_pdf.pages[page_num] text = page.extract_text() # 设置白色背景 output_pdf.setFillColorRGB(1, 1, 1) output_pdf.rect(0, 0, letter[0], letter[1], fill=1) # 写入文本(可调整字体、位置适配原排版) output_pdf.setFont("Helvetica", 10) text_lines = text.split('\n') y_pos = letter[1] - 50 for line in text_lines: output_pdf.drawString(50, y_pos, line) y_pos -= 15 if y_pos < 50: output_pdf.showPage() output_pdf.setFillColorRGB(1, 1, 1) output_pdf.rect(0, 0, letter[0], letter[1], fill=1) output_pdf.setFont("Helvetica", 10) y_pos = letter[1] - 50 output_pdf.showPage() output_pdf.save()
方法2:用PyMuPDF直接移除背景元素
如果PDF的背景是独立图层的图形,PyMuPDF可以精准定位并移除背景,保留原文本排版:
- 遍历每个页面的所有元素,判断元素类型(图形/文本)
- 筛选出文本元素,重新构建页面,设置白色背景
代码示例:
import fitz # PyMuPDF input_path = "large_pdf.pdf" output_path = "lightweight_pdf.pdf" doc = fitz.open(input_path) for page in doc: # 设置白色背景 page.set_fill_color(fitz.utils.getColor("white")) page.draw_rect(page.rect, fill=True) # 提取文本块,重新绘制 text_blocks = page.get_text("blocks") for block in text_blocks: x0, y0, x1, y1, text, _, _ = block # 绘制文本(保留原字体、大小) page.insert_text((x0, y1), text, fontsize=page.get_fontsize(), color=fitz.utils.getColor("black")) # 移除原页面的非文本元素 page.clean_contents() doc.save(output_path, garbage=4, deflate=True) # 启用压缩进一步缩小体积 doc.close()
注意事项
- XP系统需使用Python 3.8及以下版本,确保
pypdf、PyMuPDF等库兼容 - 如果PDF背景与文本融合(如扫描件),则需要OCR提取文本后再生成新PDF,可结合
pytesseract实现 - 生成新PDF时可调整字体、排版,尽量贴合原电子书的阅读体验
内容的提问来源于stack exchange,提问作者Saleh Abubaker
相关产品推荐
相关产品推荐

