pdf-translate

Translates PDF documents to Chinese with professional typography. Extracts text, translates section-by-section into well-structured Markdown, then generates PDF via weasyprint with full CJK support. Use when user asks to translate a PDF, says "翻译PDF", "translate this document", or "pdf translate".

Safety Notice

This listing is imported from skills.sh public index metadata. Review upstream SKILL.md and repository scripts before running.

Copy this and send it to your AI assistant to learn

Install skill "pdf-translate" with this command: npx skills add chrislee121/pdf-translate-skill/chrislee121-pdf-translate-skill-pdf-translate

PDF Translation Skill

翻译 PDF 文档并生成排版精美的中文文档。输出 Markdown + PDF 双格式。

版本信息

当前版本: v4.0.0 发布日期: 2026-02-21

v4.0.0 变更

  • 采用 Markdown-first 工作流:先生成结构化 Markdown,再转 PDF
  • PDF 引擎从 reportlab 切换为 weasyprint(支持完整 HTML/CSS 排版)
  • 修复代码块中文乱码问题(添加 CJK 字体 fallback)
  • 完整支持:标题层级、代码块、表格、列表、引用、粗体斜体
  • 新增 scripts/md2pdf.py 通用转换脚本

核心工作流

Step 1: 提取 PDF 文本

import pdfplumber

pdf = pdfplumber.open("输入文件.pdf")
for i, page in enumerate(pdf.pages):
    text = page.extract_text()
    if text:
        print(f"--- Page {i+1} ---")
        print(text)

长文档(>20 页)先提取前几页了解结构,再分批提取。

Step 2: 分析文档结构

通读全文,识别以下元素并规划 Markdown 映射:

原文元素Markdown 映射
文档标题#
章节(Chapter)##
小节(Section)###
子小节(Subsection)####
目录链接列表 - [章节名](#锚点)
正文段落段落(空行分隔)
代码块``` 围栏(不翻译内容)
表格| 列1 | 列2 | 语法
有序列表1. 开头
无序列表- 开头
引用/提示框> 语法
页脚/页码丢弃

Step 3: 逐章节翻译为中文 Markdown

必须逐章节翻译,不要一次输出全文。每完成一个章节就追加写入文件。

翻译规则

  1. 专有名词保留英文:首次出现时括号附英文,如"渐进式披露(Progressive Disclosure)"
  2. 代码块不翻译``` 内代码保持原文,只翻译围栏外说明文字
  3. 行内代码不翻译:反引号内标识符、命令、文件名保持英文
  4. 保持层级结构########## 不跳级
  5. 段落间必须空行:每个段落、列表、代码块、表格前后都要有空行
  6. 列表格式- 1. 开头,嵌套用 2 空格缩进
  7. 表格格式| 列1 | 列2 | 语法,必须有 |---|---| 分隔行
  8. 引用格式> 开头

翻译质量标准

参见 translation-standards.md

  • 三步翻译工作流:重写初稿 → 问题诊断 → 润色定稿
  • 四大语言转换策略:形合→意合、被动→主动、抽象→具体、精简冗余
  • 杜绝"欧化表达"和"翻译腔"

必须避免的格式错误

  • ❌ 段落之间没有空行 → 文字挤在一起
  • ❌ 列表项前没有空行 → 不被识别为列表
  • ❌ 表格前后没有空行 → 表格无法渲染
  • ❌ 代码块 ``` 前后没有空行 → 代码块不显示
  • ❌ 标题 ## 前后没有空行 → 标题不识别
  • ❌ 翻译代码块内的代码
  • ❌ 一次性输出全部内容导致截断

Step 4: 输出 Markdown 文件

写入 .md 文件,路径与原 PDF 同目录,文件名:原文件名_中文翻译.md

Step 5: 生成 PDF

使用 scripts/md2pdf.py 将 Markdown 转为排版精美的 PDF:

python3 ${SKILL_DIR}/scripts/md2pdf.py "输入.md" "输出.pdf"

macOS 上如果报 gobject 找不到:

DYLD_FALLBACK_LIBRARY_PATH="/opt/homebrew/lib" python3 ${SKILL_DIR}/scripts/md2pdf.py "输入.md" "输出.pdf"

也可以使用项目目录下的副本:

python3 scripts/md2pdf.py "输入.md" "输出.pdf"

PDF 排版特性:

  • A4 版面,自动分页,页码
  • 中文字体(苹方/黑体/雅黑)+ 英文字体 fallback
  • 深色背景代码块(支持中文注释)
  • 专业表格样式(交替行色、边框)
  • 蓝色左边框引用块
  • 标题层级样式(蓝色边线、字号递减)

Step 6: 确认输出

翻译完成后告知用户:

  1. .md 文件路径
  2. .pdf 文件路径
  3. 文档概况(页数、字数)

依赖安装

# macOS
brew install pango
pip3 install pdfplumber markdown weasyprint

# 旧方案依赖(仍可用)
pip3 install reportlab pypdf

脚本目录

脚本用途
scripts/md2pdf.py推荐 Markdown → PDF(weasyprint 引擎)
scripts/translate_pdf.py旧版:基础 PDF 提取和生成(reportlab)
scripts/generate_complete_pdf.py旧版:完整工作流(reportlab)

故障排除

问题解决方案
代码块中文乱码使用 md2pdf.py(v4.0,已修复 CJK font fallback)
weasyprint 报 gobject 找不到DYLD_FALLBACK_LIBRARY_PATH="/opt/homebrew/lib"
中文字体不显示确认系统有苹方或黑体字体
Markdown 格式错乱检查块级元素前后是否有空行

更多问题参见 troubleshooting.md


参考文档

Source Transparency

This detail page is rendered from real SKILL.md content. Trust labels are metadata-based hints, not a safety guarantee.

Related Skills

Related by shared tags or category signals.

General

image-gen

Generate AI images from text prompts. Triggers on: "生成图片", "画一张", "AI图", "generate image", "配图", "create picture", "draw", "visualize", "generate an image".

Archived SourceRecently Updated
General

explainer

Create explainer videos with narration and AI-generated visuals. Triggers on: "解说视频", "explainer video", "explain this as a video", "tutorial video", "introduce X (video)", "解释一下XX(视频形式)".

Archived SourceRecently Updated
General

asr

Transcribe audio files to text using local speech recognition. Triggers on: "转录", "transcribe", "语音转文字", "ASR", "识别音频", "把这段音频转成文字".

Archived SourceRecently Updated
General

axure-prototype-generator

Axure 原型代码生成器 - 输出 JavaScript 格式 HTML 代码,支持内联框架直接加载可交互原型

Archived SourceRecently Updated