关于 working-with-documents
working-with-documents 是面向文档处理任务的技能,涵盖 DOCX、PDF 和 PPTX 的读取、创建、编辑与转换。它汇集命令行工具、代码示例及演示文稿设计和验证指引。
主要功能
- 01涵盖 DOCX、PDF 和 PPTX
- 02提供文档读取与创建方法
- 03说明 OOXML 编辑流程
- 04包含 PDF 合并与拆分指引
- 05介绍格式转换和扫描件 OCR
- 06提供演示文稿布局与验证建议
适用场景
- 01将 DOCX 内容转换为 Markdown
- 02提取 PDF 文本或表格
- 03合并、拆分或转换文档
- 04创建并检查演示文稿
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ mjunaidca/ mjs-agent-skills --skill working-with-documents安装后在 Claude Code 中输入/working-with-documents确认已加载。
附带文件scripts/verify.py
详细介绍
处理文档
快速参考
| 格式 | 读取 | 创建 | 编辑 |
|---|---|---|---|
| DOCX | pandoc,python-docx | docx-js | OOXML(解包/编辑/打包) |
| pdfplumber,pypdf | reportlab | pypdf(合并/拆分) | |
| PPTX | markitdown | html2pptx | OOXML(解包/编辑/打包) |
Word 文档(.docx)
读取内容
# Convert to markdown (preserves structure)
pandoc document.docx -o output.md
# With tracked changes visible
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. Unpack
python ooxml/scripts/unpack.py document.docx unpacked/
# 2. Edit XML files in unpacked/word/document.xml
# Key files:
# - word/document.xml (main content)
# - word/comments.xml (comments)
# - word/media/ (images)
# 3. Pack
python ooxml/scripts/pack.py unpacked/ edited.docx
修订 XML 模式:
<w:del><w:r><w:delText>old text</w:delText></w:r></w:del>
<w:ins><w:r><w:t>new text</w:t></w:r></w:ins>
PDF 文档
读取 PDF
import pdfplumber
# Extract text
with pdfplumber.open("document.pdf") as pdf:
for page in pdf.pages:
print(page.extract_text())
# Extract tables
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("Report Title", styles['Title']),
Paragraph("Body text goes here.", styles['Normal']),
]
doc.build(story)
合并/拆分 PDF
from pypdf import PdfReader, PdfWriter
# Merge
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"))
# Split
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"))
命令行工具
# Extract text
pdftotext input.pdf output.txt
pdftotext -layout input.pdf output.txt # Preserve layout
# Merge with qpdf
qpdf --empty --pages file1.pdf file2.pdf -- merged.pdf
# Split pages
qpdf input.pdf --pages . 1-5 -- pages1-5.pdf
PowerPoint 演示文稿(.pptx)
读取内容
# Convert to markdown
python -m markitdown presentation.pptx
创建新演示文稿
使用 html2pptx 工作流:
- 创建 HTML 幻灯片(16:9,720pt × 405pt)
- 使用 html2pptx.js 库进行转换
- 使用缩略图网格进行验证
# Create thumbnails for validation
python scripts/thumbnail.py output.pptx --cols 4
编辑现有演示文稿
# 1. Unpack
python ooxml/scripts/unpack.py presentation.pptx unpacked/
# Key files:
# - ppt/slides/slide1.xml, slide2.xml, etc.
# - ppt/notesSlides/ (speaker notes)
# - ppt/media/ (images)
# 2. Edit XML
# 3. Validate
python ooxml/scripts/validate.py unpacked/ --original presentation.pptx
# 4. Pack
python ooxml/scripts/pack.py unpacked/ edited.pptx
重新排列幻灯片
# Duplicate, reorder, delete slides
python scripts/rearrange.py template.pptx output.pptx 0,3,3,5,7
# Creates: slide 0, slide 3 (twice), slide 5, slide 7
在格式之间转换
# DOCX/PPTX to PDF
soffice --headless --convert-to pdf document.docx
# PDF to images
pdftoppm -jpeg -r 150 document.pdf page
# Creates: page-1.jpg, page-2.jpg, etc.
# DOCX to 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 |
仅使用 Web 安全字体
Arial、Helvetica、Times New Roman、Georgia、Verdana、Tahoma、Trebuchet MS、Courier New、Impact
布局规则
- 双栏:仅用于恰好 2 个不同项目
- 三栏:仅用于恰好 3 个项目
- 切勿将图表垂直放在文本下方
- 全幅图片叠加文字的效果很好
依赖项
# Python
pip install pypdf pdfplumber reportlab python-docx openpyxl
# System tools
apt-get install pandoc poppler-utils libreoffice
# Node.js (for docx-js)
npm install docx
验证
运行:python scripts/verify.py
相关技能
working-with-spreadsheets- Excel 文件处理building-nextjs-apps- 用于文档上传的前端
评论
支持 Markdown