name: working-with-documents description: | 创建和编辑Office文档:Word (.docx)、PDF和PowerPoint (.pptx)。 适用于文档创建、PDF处理、演示文稿生成、跟踪修订或格式转换的场景。
文档处理
快速参考
| 格式 | 读取 | 创建 | 编辑 |
|---|---|---|---|
| DOCX | pandoc, python-docx | docx-js | OOXML (解包/编辑/打包) |
| 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 工作流:
- 创建HTML幻灯片 (720pt × 405pt 对应 16:9)
- 使用html2pptx.js库转换
- 使用缩略图网格验证
# 创建缩略图用于验证
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- 文档上传前端开发