mcpField
C
codeck-export

codeck-export

github.com/hiyeshu文档处理199184 次安装12 周前更新
代码仓库

关于 codeck-export

codeck-export 是用于将已组装的幻灯片导出为 PDF 或 PPTX 并检查输出的 Codeck 技能。它涵盖格式选择、渲染、质量检查,以及将源文件问题交接处理,而不直接修改源文件。

主要功能

  1. 01将 HTML 幻灯片导出为 PDF 或 PPTX
  2. 02未指定格式时选择导出格式
  3. 03检查 PDF 和 PPTX 渲染效果
  4. 04发现缺陷后重新导出
  5. 05记录源文件问题并交接

适用场景

  1. 01将演示文稿生成便于分享的 PDF
  2. 02从已组装的 HTML 生成 PPTX
  3. 03检查导出幻灯片是否裁切或重叠
  4. 04将源文件缺陷转交设计或审阅

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/hiyeshu/codeck --skill codeck-export

安装后在 Claude Code 中输入/codeck-export确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

pdf/
forms.md
LICENSE.txt
reference.md
pdf/scripts/
check_bounding_boxes.py
check_fillable_fields.py
convert_pdf_to_images.py
create_validation_image.py
extract_form_field_info.py
extract_form_structure.py
fill_fillable_fields.py
fill_pdf_form_with_annotations.py
pptx/
editing.md
LICENSE.txt
pptxgenjs.md
pptx/scripts/
__init__.py
add_slide.py
clean.py
pptx/scripts/office/
pack.py
pptx/scripts/office/helpers/
__init__.py
merge_runs.py
simplify_redlines.py
pptx/scripts/office/schemas/ecma/fouth-edition/
opc-contentTypes.xsd
opc-coreProperties.xsd
opc-digSig.xsd
opc-relationships.xsd
pptx/scripts/office/schemas/ISO-IEC29500-4_2016/
dml-chart.xsd
dml-chartDrawing.xsd
dml-diagram.xsd
dml-lockedCanvas.xsd
dml-main.xsd

详细介绍

codeck export — @export 工作通道

最少对话,最大输出。将演示文稿导出为用户指定的格式。

@export 负责 PDF/PPTX 输出和导出 QA。

写入边界:

  • 可以在用户的项目目录中写入最终 PDF/PPTX 文件
  • 可以将导出 QA 备注写入 $DECK_DIR/review.md 或 $DECK_DIR/MEMORY.md
  • 可以更新 $DECK_DIR/roles/export.md、$DECK_DIR/tasks/tasks.md 和 $DECK_DIR/channel/YYYY-MM-DD.md
  • 不得编辑 deck.md、DESIGN.md、custom.css、slides.html 或 speech.md
  • 需要更改源文件的导出缺陷,应作为提案写入 $DECK_DIR/threads/threads.md

步骤 1:状态

DECK_DIR="$HOME/.codeck/projects/$(basename "$(pwd)")"
CODECK_SKILL_DIR="${CODECK_SKILL_DIR:-}"
if [ -z "$CODECK_SKILL_DIR" ]; then
  for d in \
    "${CLAUDE_PLUGIN_ROOT}/skills/codeck" \
    "$HOME"/.claude/plugins/cache/*/codeck/*/skills/codeck \
    "$HOME"/.codex/plugins/cache/*/codeck/*/skills/codeck \
    "$HOME/.agents/skills/codeck" \
    "$HOME/.codex/skills/codeck" \
    "$HOME/.claude/skills/codeck"; do
    if [ -d "$d/scripts" ]; then CODECK_SKILL_DIR="$d"; break; fi
  done
fi
[ -n "$CODECK_SKILL_DIR" ] || { echo "codeck skill scripts not found; set CODECK_SKILL_DIR" >&2; exit 1; }
. "$CODECK_SKILL_DIR/scripts/resolve-dirs.sh"
mkdir -p "$DECK_DIR"
mkdir -p "$DECK_DIR/channel" "$DECK_DIR/tasks" "$DECK_DIR/threads" "$DECK_DIR/roles"
bash "$CODECK_SKILL_DIR/scripts/init-room.sh" "$DECK_DIR"
bash "$CODECK_SKILL_DIR/scripts/status.sh" "$DECK_DIR"

读取 $DECK_DIR/MEMORY.md、$DECK_DIR/tasks/tasks.md 中的活动行,以及 $DECK_DIR/threads/threads.md 中的未关闭行。除非要排查历史问题,否则不要读取 channel/YYYY-MM-DD.md。

入口检查:如果不存在已组装的 HTML(./*-r*.html),先运行 /codeck 生成或重建演示文稿。

导出前,认领工作任务:

@orchestrator
Owner: @export. Task: export latest HTML and run export QA.

@export
I claim the export pass. I will write PDF/PPTX outputs and record any source defects as threads.

将这次交流追加到当天的 channel 文件,并更新 tasks/tasks.md。

步骤 2:格式

在 /codeck 中,导出格式是一个允许进行 Decision Ask 的时机。

遵循共享的 /codeck Decision Ask Policy。用户指定目标时,跳过 Decision Ask:

  • PDF、print、save as PDF → 导出 PDF
  • PPTX、PowerPoint、slides file → 导出 PPTX
  • all、both → 导出 PDF 和 PPTX

如果用户只说“导出”,则在 threads/threads.md 中创建一个非阻塞的 D-YYYYMMDD-NN 决策,并渲染一次:

codeck needs the export format.

Current read: HTML already exists as the audience preview.

I suggest PDF because it preserves the visual layout and is easiest to share.

A) PDF (recommended)
B) PPTX
C) PDF + PPTX

如果用户未回答,或结构化 AskUser UI 不可用,则导出 PDF,并在 MEMORY.md 中写入 assumed default。

不要将 HTML 作为导出选项提供。HTML 是预览/源文件产物。

步骤 3:导出

在用户的项目目录中找到 HTML 文件(./*-r*.html),并据此确定 baseName。

HTML

已存在。用浏览器打开,按 F 键进入全屏,用方向键浏览。

PDF — 从 HTML 打印

使用 Playwright 生成 WYSIWYG PDF:

npx playwright install chromium 2>/dev/null || true
import { chromium } from 'playwright';
import { resolve } from 'path';
import { readdirSync } from 'fs';
import { pathToFileURL } from 'url';

const html = readdirSync('.').find(f => /-r\d+\.html$/.test(f));
const baseName = html.replace('.html', '');
const browser = await chromium.launch();
const page = await browser.newPage();
await page.goto(pathToFileURL(resolve(html)).toString(), { waitUntil: 'networkidle' });
await page.emulateMedia({ media: 'screen' });
await page.pdf({
  path: `${baseName}.pdf`,
  printBackground: true,
  preferCSSPageSize: true,
  margin: { top: '12mm', right: '12mm', bottom: '12mm', left: '12mm' }
});
await browser.close();
console.log(`done: ${baseName}.pdf`);
海报资源

slides.html 中的 .media-poster 元素是视频/音频占位符。原始文件路径位于说明文字和 deck.md 资源清单中。

默认情况下,导出时保留占位符。如果用户要求“嵌入视频”,则从说明文字中提取路径,并在 PPTX 中使用 slide.addMedia({ path: "..." })。

PPTX — 从 HTML 转换

选项 A(推荐):LibreOffice

CODECK_SKILL_DIR="${CODECK_SKILL_DIR:-}"
if [ -z "$CODECK_SKILL_DIR" ]; then
  for d in \
    "${CLAUDE_PLUGIN_ROOT}/skills/codeck" \
    "$HOME"/.claude/plugins/cache/*/codeck/*/skills/codeck \
    "$HOME"/.codex/plugins/cache/*/codeck/*/skills/codeck \
    "$HOME/.agents/skills/codeck" \
    "$HOME/.codex/skills/codeck" \
    "$HOME/.claude/skills/codeck"; do
    if [ -d "$d/scripts" ]; then CODECK_SKILL_DIR="$d"; break; fi
  done
fi
[ -n "$CODECK_SKILL_DIR" ] || { echo "codeck skill scripts not found; set CODECK_SKILL_DIR" >&2; exit 1; }
. "$CODECK_SKILL_DIR/scripts/resolve-dirs.sh"
[ -n "${CODECK_EXPORT_DIR:-}" ] || { echo "codeck-export not found; set CODECK_EXPORT_DIR" >&2; exit 1; }
EXPORT_SCRIPTS="$CODECK_EXPORT_DIR/pptx/scripts"
python "$EXPORT_SCRIPTS/office/soffice.py" --headless --convert-to pdf ./*-r*.html
python "$EXPORT_SCRIPTS/office/soffice.py" --headless --convert-to pptx ./*-r*.html

选项 B(备用):截图嵌入

如果 soffice 不可用,则使用 Playwright 为每一页截图,再用 PptxGenJS 将截图嵌入为幻灯片。阅读 $CODECK_EXPORT_DIR/pptx/pptxgenjs.md 了解 API。

步骤 4:QA(PDF/PPTX 必做)

假设导出结果有问题。找出问题。

PDF

检查:页面完整(没有截断)、背景正常渲染、字体显示正确。

PPTX

生成缩略图:

CODECK_SKILL_DIR="${CODECK_SKILL_DIR:-}"
if [ -z "$CODECK_SKILL_DIR" ]; then
  for d in \
    "${CLAUDE_PLUGIN_ROOT}/skills/codeck" \
    "$HOME"/.claude/plugins/cache/*/codeck/*/skills/codeck \
    "$HOME"/.codex/plugins/cache/*/codeck/*/skills/codeck \
    "$HOME/.agents/skills/codeck" \
    "$HOME/.codex/skills/codeck" \
    "$HOME/.claude/skills/codeck"; do
    if [ -d "$d/scripts" ]; then CODECK_SKILL_DIR="$d"; break; fi
  done
fi
[ -n "$CODECK_SKILL_DIR" ] || { echo "codeck skill scripts not found; set CODECK_SKILL_DIR" >&2; exit 1; }
. "$CODECK_SKILL_DIR/scripts/resolve-dirs.sh"
[ -n "${CODECK_EXPORT_DIR:-}" ] || { echo "codeck-export not found; set CODECK_EXPORT_DIR" >&2; exit 1; }
EXPORT_SCRIPTS="$CODECK_EXPORT_DIR/pptx/scripts"
python "$EXPORT_SCRIPTS/thumbnail.py" ./*-r*.pptx

转换为图像以便详细检查:

python "$EXPORT_SCRIPTS/office/soffice.py" --headless --convert-to pdf ./*-r*.pptx
pdftoppm -jpeg -r 150 *.pdf slide-check

使用子 Agent 对截图进行目视检查。重点关注:元素重叠、文本溢出、间距不均、低对比度文本,以及与 HTML 原稿的差异。

修复循环
  1. 发现问题 → 调整导出参数或 HTML
  2. 重新导出 → 重新截图 → 再次检查
  3. 持续进行,直到完整检查未发现新问题

宣布完成前,至少进行一次修复和验证。

如果 QA 发现源文件缺陷,不要直接编辑源文件。添加一个 thread,注明受影响的产物和建议负责人,然后移交给 @design 或 @review。

导出后:

  1. 更新 MEMORY.md 中的 Active Context、Latest Channel Summary、Task Index 和 Artifacts。
  2. 在 tasks/tasks.md 中将 @export 任务标记为完成。
  3. 将交接信息追加到当天的 channel 文件。

步骤 5:完成

导出完成。输出:{baseName}.pdf / {baseName}.pptx

@export 我已导出最新的 HTML、完成 QA,并在 memory 中记录输出路径。

演讲稿:/codeck speech script。概览:/codeck。

评论

支持 Markdown