文档处理Skill working-with-documents

文档处理技能专注于Office文档的自动化创建、编辑与转换,涵盖Word、PDF和PowerPoint三大格式。该技能提供完整的工具链和工作流,包括使用pandoc、python-docx读取文档内容,通过docx-js、reportlab生成新文档,利用OOXML技术编辑跟踪修订,以及使用pypdf进行PDF合并拆分。同时支持格式转换、OCR识别和演示文稿设计规范,适用于文档自动化、报告生成、批量处理等场景。关键词:Office文档处理、PDF编辑、Word自动化、PPT生成、格式转换、文档OCR、批量处理、报告生成。

后端开发 12 次安装 351 次浏览 更新于 3/2/2026

name: working-with-documents description: | 创建和编辑Office文档:Word (.docx)、PDF和PowerPoint (.pptx)。 适用于文档创建、PDF处理、演示文稿生成、跟踪修订或格式转换的场景。

文档处理

快速参考

格式 读取 创建 编辑
DOCX pandoc, python-docx docx-js OOXML (解包/编辑/打包)
PDF pdfplumber, pypdf reportlab pypdf (合并/拆分)
PPTX markitdown html2pptx OOXML (解包/编辑/打包)

Word文档 (.docx)

读取内容

# 转换为Markdown(保留结构)
pandoc document.docx -o output.md

# 显示跟踪修订
pandoc --track-changes=all document.docx -o output.md

创建新文档

使用 docx-js (JavaScript):

const { Document, Packer, Paragraph, TextRun } = require('docx');

const doc = new Document({
  sections: [{
    children: [
      new Paragraph({
        children: [
          new TextRun({ text: "Hello World", bold: true }),
        ],
      }),
    ],
  }],
});

Packer.toBuffer(doc).then(buffer => {
  fs.writeFileSync("output.docx", buffer);
});

编辑现有文档(跟踪修订)

# 1. 解包
python ooxml/scripts/unpack.py document.docx unpacked/

# 2. 编辑解压目录中的XML文件
# 关键文件:
#   - word/document.xml (主要内容)
#   - word/comments.xml (批注)
#   - word/media/ (图片)

# 3. 打包
python ooxml/scripts/pack.py unpacked/ edited.docx

跟踪修订XML模式:

<!-- 删除 -->
<w:del><w:r><w:delText>旧文本</w:delText></w:r></w:del>

<!-- 插入 -->
<w:ins><w:r><w:t>新文本</w:t></w:r></w:ins>

PDF文档

读取PDF

import pdfplumber

# 提取文本
with pdfplumber.open("document.pdf") as pdf:
    for page in pdf.pages:
        print(page.extract_text())

# 提取表格
with pdfplumber.open("document.pdf") as pdf:
    for page in pdf.pages:
        tables = page.extract_tables()
        for table in tables:
            for row in table:
                print(row)

创建PDF

from reportlab.lib.pagesizes import letter
from reportlab.platypus import SimpleDocTemplate, Paragraph
from reportlab.lib.styles import getSampleStyleSheet

doc = SimpleDocTemplate("output.pdf", pagesize=letter)
styles = getSampleStyleSheet()
story = [
    Paragraph("报告标题", styles['Title']),
    Paragraph("正文内容。", styles['Normal']),
]
doc.build(story)

合并/拆分PDF

from pypdf import PdfReader, PdfWriter

# 合并
writer = PdfWriter()
for pdf_file in ["doc1.pdf", "doc2.pdf"]:
    reader = PdfReader(pdf_file)
    for page in reader.pages:
        writer.add_page(page)
writer.write(open("merged.pdf", "wb"))

# 拆分
reader = PdfReader("input.pdf")
for i, page in enumerate(reader.pages):
    writer = PdfWriter()
    writer.add_page(page)
    writer.write(open(f"page_{i+1}.pdf", "wb"))

命令行工具

# 提取文本
pdftotext input.pdf output.txt
pdftotext -layout input.pdf output.txt  # 保持布局

# 使用qpdf合并
qpdf --empty --pages file1.pdf file2.pdf -- merged.pdf

# 拆分页面
qpdf input.pdf --pages . 1-5 -- pages1-5.pdf

PowerPoint演示文稿 (.pptx)

读取内容

# 转换为Markdown
python -m markitdown presentation.pptx

创建新演示文稿

使用 html2pptx 工作流:

  1. 创建HTML幻灯片 (720pt × 405pt 对应 16:9)
  2. 使用html2pptx.js库转换
  3. 使用缩略图网格验证
# 创建缩略图用于验证
python scripts/thumbnail.py output.pptx --cols 4

编辑现有演示文稿

# 1. 解包
python ooxml/scripts/unpack.py presentation.pptx unpacked/

# 关键文件:
#   - ppt/slides/slide1.xml, slide2.xml 等
#   - ppt/notesSlides/ (演讲者备注)
#   - ppt/media/ (图片)

# 2. 编辑XML

# 3. 验证
python ooxml/scripts/validate.py unpacked/ --original presentation.pptx

# 4. 打包
python ooxml/scripts/pack.py unpacked/ edited.pptx

重新排列幻灯片

# 复制、重新排序、删除幻灯片
python scripts/rearrange.py template.pptx output.pptx 0,3,3,5,7
# 创建: 幻灯片0, 幻灯片3(两次), 幻灯片5, 幻灯片7

格式转换

# DOCX/PPTX 转 PDF
soffice --headless --convert-to pdf document.docx

# PDF 转图片
pdftoppm -jpeg -r 150 document.pdf page
# 创建: page-1.jpg, page-2.jpg 等

# DOCX 转 Markdown
pandoc document.docx -o output.md

扫描文档OCR

import pytesseract
from pdf2image import convert_from_path

images = convert_from_path('scanned.pdf')
text = ""
for image in images:
    text += pytesseract.image_to_string(image)

设计指南 (演示文稿)

配色方案

选择3-5种协调的颜色:

方案 颜色
经典蓝 海军蓝 #1C2833, 石板色 #2E4053, 银色 #AAB7B8
青绿与珊瑚 青绿 #5EA8A7, 珊瑚红 #FE4447, 白色 #FFFFFF
黑与金 金色 #BF9A4A, 黑色 #000000, 米白 #F4F6F6

仅使用网页安全字体

Arial, Helvetica, Times New Roman, Georgia, Verdana, Tahoma, Trebuchet MS, Courier New, Impact

布局规则

  • 两栏布局:仅用于2个独立项目
  • 三栏布局:仅用于3个项目
  • 切勿将图表垂直堆叠在文字下方
  • 满版图片配文字叠加效果良好

依赖项

# Python
pip install pypdf pdfplumber reportlab python-docx openpyxl

# 系统工具
apt-get install pandoc poppler-utils libreoffice

# Node.js (用于 docx-js)
npm install docx

验证

运行: python scripts/verify.py

相关技能

  • working-with-spreadsheets - Excel文件处理
  • building-nextjs-apps - 文档上传前端开发