convert_to_docx.py 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496
  1. #!/usr/bin/env python3
  2. """Convert the user manual markdown to a formatted DOCX file."""
  3. from docx import Document
  4. from docx.shared import Pt, Cm, RGBColor
  5. from docx.enum.text import WD_ALIGN_PARAGRAPH
  6. import re
  7. def create_manual():
  8. doc = Document()
  9. # Set default style
  10. style = doc.styles['Normal']
  11. style.font.name = '微软雅黑'
  12. style.font.size = Pt(11)
  13. style.font.color.rgb = RGBColor(0x33, 0x33, 0x33)
  14. style.paragraph_format.space_after = Pt(6)
  15. style.paragraph_format.line_spacing = 1.5
  16. def h(text, level=1):
  17. heading = doc.add_heading(text, level=level)
  18. for run in heading.runs:
  19. run.font.name = '微软雅黑'
  20. return heading
  21. def p(text, bold=False, size=None, color=None, align=None, indent=False):
  22. para = doc.add_paragraph()
  23. run = para.add_run(text)
  24. if bold: run.bold = True
  25. if size: run.font.size = Pt(size)
  26. if color: run.font.color.rgb = RGBColor(*color)
  27. if align: para.alignment = align
  28. if indent: para.paragraph_format.left_indent = Cm(1)
  29. run.font.name = '微软雅黑'
  30. return para
  31. def code(text):
  32. para = doc.add_paragraph()
  33. para.paragraph_format.left_indent = Cm(1)
  34. para.paragraph_format.space_before = Pt(4)
  35. para.paragraph_format.space_after = Pt(4)
  36. run = para.add_run(text)
  37. run.font.name = 'Consolas'
  38. run.font.size = Pt(9)
  39. run.font.color.rgb = RGBColor(0x1a, 0x1a, 0x2e)
  40. return para
  41. def tbl(headers, rows):
  42. table = doc.add_table(rows=1 + len(rows), cols=len(headers))
  43. table.style = 'Light Grid Accent 1'
  44. for i, h_text in enumerate(headers):
  45. cell = table.rows[0].cells[i]
  46. cell.text = h_text
  47. for cell_p in cell.paragraphs:
  48. for r in cell_p.runs:
  49. r.bold = True
  50. r.font.name = '微软雅黑'
  51. r.font.size = Pt(10)
  52. for ri, row in enumerate(rows):
  53. for ci, cell_text in enumerate(row):
  54. cell = table.rows[ri+1].cells[ci]
  55. cell.text = str(cell_text)
  56. for cell_p in cell.paragraphs:
  57. for r in cell_p.runs:
  58. r.font.name = '微软雅黑'
  59. r.font.size = Pt(10)
  60. doc.add_paragraph()
  61. return table
  62. def tip(text):
  63. para = doc.add_paragraph()
  64. para.paragraph_format.left_indent = Cm(1)
  65. run = para.add_run('💡 ' + text)
  66. run.font.name = '微软雅黑'
  67. run.font.size = Pt(10)
  68. run.font.color.rgb = RGBColor(0x25, 0x63, 0xeb)
  69. return para
  70. def image_placeholder(text):
  71. para = doc.add_paragraph()
  72. para.alignment = WD_ALIGN_PARAGRAPH.CENTER
  73. para.paragraph_format.space_before = Pt(12)
  74. para.paragraph_format.space_after = Pt(12)
  75. run = para.add_run(f'[此处插入截图:{text}]')
  76. run.font.name = '微软雅黑'
  77. run.font.size = Pt(10)
  78. run.font.color.rgb = RGBColor(0x93, 0x3a, 0xea)
  79. run.italic = True
  80. run.bold = True
  81. return para
  82. def page_break():
  83. doc.add_page_break()
  84. # ===== TITLE PAGE =====
  85. doc.add_paragraph()
  86. doc.add_paragraph()
  87. title_para = doc.add_paragraph()
  88. title_para.alignment = WD_ALIGN_PARAGRAPH.CENTER
  89. title_run = title_para.add_run('用 Claude Code 搭建企业产品独立站')
  90. title_run.font.size = Pt(28)
  91. title_run.font.color.rgb = RGBColor(0x0f, 0x17, 0x2a)
  92. title_run.bold = True
  93. title_run.font.name = '微软雅黑'
  94. subtitle_para = doc.add_paragraph()
  95. subtitle_para.alignment = WD_ALIGN_PARAGRAPH.CENTER
  96. subtitle_run = subtitle_para.add_run('零代码使用手册')
  97. subtitle_run.font.size = Pt(18)
  98. subtitle_run.font.color.rgb = RGBColor(0x25, 0x63, 0xeb)
  99. subtitle_run.bold = True
  100. subtitle_run.font.name = '微软雅黑'
  101. doc.add_paragraph()
  102. p('v1.0 · 2026年5月', size=10, color=(0x94, 0xa3, 0xb8), align=WD_ALIGN_PARAGRAPH.CENTER)
  103. doc.add_paragraph()
  104. p('适用人群:没有编程基础的市场、运营、产品经理', align=WD_ALIGN_PARAGRAPH.CENTER)
  105. p('所需工具:Claude Code(命令行版)+ 产品介绍 PPT', align=WD_ALIGN_PARAGRAPH.CENTER)
  106. p('产出成果:一个被 AI 搜索引擎收录的多语言产品官网', align=WD_ALIGN_PARAGRAPH.CENTER)
  107. p('全程耗时:约 1-2 小时(含 AI 自动生成时间)', align=WD_ALIGN_PARAGRAPH.CENTER)
  108. page_break()
  109. # ===== TABLE OF CONTENTS =====
  110. h('目录', level=1)
  111. toc_items = [
  112. '准备工作:你需要什么',
  113. '第一步:准备产品资料',
  114. '第二步:让 AI 学习你的产品',
  115. '第三步:让 AI 研究 SEO 策略',
  116. '第四步:让 AI 设计网站架构',
  117. '第五步:让 AI 编写网站',
  118. '第六步:检查网站效果',
  119. '第七步:发现样式问题并修复',
  120. '第八步:部署上线(可选)',
  121. '常见问题排查',
  122. '附录 A:给 AI 的完整提示词合集',
  123. '附录 B:我们的实战案例复盘',
  124. '附录 C:GEO 优化清单',
  125. '附录 D:关键技术概念解释',
  126. ]
  127. for i, item in enumerate(toc_items):
  128. p(f'{i+1}. {item}', size=11)
  129. page_break()
  130. # ===== SECTION 1: 准备工作 =====
  131. h('1. 准备工作:你需要什么', level=1)
  132. h('硬件/软件要求', level=2)
  133. tbl(['项目', '要求'], [
  134. ['电脑', 'Windows / Mac 均可'],
  135. ['网络', '能正常访问互联网'],
  136. ['Claude Code', '已安装并登录'],
  137. ['Node.js', 'Claude Code 自带,无需单独安装'],
  138. ])
  139. h('材料要求', level=2)
  140. tbl(['材料', '格式', '说明'], [
  141. ['产品介绍 PPT', '.pptx', '产品定位、功能、品牌故事等'],
  142. ['品牌手册', '.pptx 或 .pdf', '愿景、使命、价值观等'],
  143. ])
  144. image_placeholder('准备就绪的文件夹,内含 PPT 文件')
  145. h('确认 Claude Code 已启动', level=2)
  146. p('打开终端(Windows 按 Win+R,输入 cmd,回车),输入:')
  147. code('claude')
  148. p('看到欢迎界面说明启动成功。')
  149. image_placeholder('Claude Code 启动后的欢迎界面')
  150. # ===== SECTION 2 =====
  151. h('2. 第一步:准备产品资料', level=1)
  152. h('操作目标', level=2)
  153. p('将 PPT 产品资料放到一个文件夹里,让 Claude Code 能找到它们。')
  154. h('步骤 2.1:创建文件夹', level=2)
  155. p('在电脑上创建一个文件夹来存放所有材料。例如:')
  156. code('D:\\我的项目\\产品介绍\\')
  157. p('将你的产品 PPT 文件放入这个文件夹。')
  158. image_placeholder('文件夹中放置了 PPT 文件')
  159. h('步骤 2.2:确认工作目录', level=2)
  160. p('在 Claude Code 中,输入以下命令查看当前工作目录:')
  161. code('你现在在哪个文件夹工作?')
  162. p('Claude 会告诉你当前的工作路径,记下这个路径。')
  163. image_placeholder('Claude 回复当前工作路径')
  164. # ===== SECTION 3 =====
  165. h('3. 第二步:让 AI 学习你的产品', level=1)
  166. h('操作目标', level=2)
  167. p('让 Claude 读取你的 PPT 资料,深入理解你的产品、品牌和业务。')
  168. h('步骤 3.1:发送第一个提示词', level=2)
  169. p('将以下提示词完整复制到 Claude Code 对话框中,替换 [文件夹路径] 为实际路径:')
  170. code('请读取我放在 [你的产品介绍文件夹路径] 目录下的所有 PPT 文件,\n深度理解我们的产品定位、品牌理念、核心功能、目标客户和竞争优势。\n然后帮我总结:\n1. 产品的核心定位是什么?\n2. 产品解决什么痛点?\n3. 产品有哪些核心功能?\n4. 目标客户是谁?')
  171. image_placeholder('在 Claude Code 中粘贴提示词')
  172. h('步骤 3.2:确认 AI 的理解', level=2)
  173. p('Claude 会输出对产品的理解摘要。仔细阅读,确认理解正确。')
  174. p('如果 AI 有理解偏差,直接告诉它:"第 2 点不太对,正确的理解应该是……"')
  175. image_placeholder('Claude 输出的产品理解摘要')
  176. # ===== SECTION 4 =====
  177. h('4. 第三步:让 AI 研究 SEO 策略', level=1)
  178. h('操作目标', level=2)
  179. p('让 Claude 搜索互联网上关于 GEO(生成式引擎优化)的最佳实践。')
  180. h('为什么这步很重要?', level=2)
  181. p('传统 SEO 是让 Google 收录你的网站。但现在越来越多用户用 ChatGPT、豆包等 AI 工具搜索信息。GEO 就是让你的网站在 AI 回答中被引用和推荐的技巧。')
  182. h('步骤 4.1:复制以下提示词', level=2)
  183. code('请帮我做三件事:\n\n1. 搜索 GEO(Generative Engine Optimization)的最佳实践和最新策略\n\n2. 搜索 Astro 框架制作多语言网站的 SEO 最佳实践\n\n3. 基于你对我们产品的理解,梳理目标用户可能会搜索什么内容、\n 问什么问题,建立一个问题库\n\n然后把以上内容整理成一个 GEO 优化方案。')
  184. image_placeholder('粘贴 GEO 研究提示词')
  185. h('步骤 4.2:等待 AI 完成研究', level=2)
  186. p('Claude 会自动搜索多个网页,阅读内容,然后整理出一份完整的 GEO 方案。约需 1-3 分钟。')
  187. image_placeholder('Claude 输出的 GEO 优化方案摘要')
  188. h('步骤 4.3:确认方案', level=2)
  189. p('阅读 AI 输出的内容,重点关注:')
  190. p('• 关键词列表:用户搜索时会用的词', indent=True)
  191. p('• 问题库:用户可能会问的问题', indent=True)
  192. p('• 内容建议:网站需要包含的内容', indent=True)
  193. # ===== SECTION 5 =====
  194. h('5. 第四步:让 AI 设计网站架构', level=1)
  195. h('操作目标', level=2)
  196. p('让 Claude 规划网站的页面结构、导航、每个页面的内容。')
  197. h('具体步骤', level=2)
  198. p('复制以下提示词,一次性发送:')
  199. code('基于你对产品资料的学习和 GEO 研究,现在帮我规划完整的网站架构。\n\n请完成以下工作:\n1. 设计网站的页面地图(sitemap),列出所有页面\n2. 设计中英文双语的 URL 结构\n3. 规划每个页面的核心内容\n4. 列出所有需要做的 GEO 优化措施\n5. 把规划写入一个 ARCHITECTURE.md 文件\n\n输出格式要清晰,让我这个不懂技术的人也能看明白。')
  200. image_placeholder('Claude 输出的网站架构设计')
  201. # ===== SECTION 6 =====
  202. h('6. 第五步:让 AI 编写网站', level=1)
  203. h('操作目标', level=2)
  204. p('让 Claude 自动生成整个网站的代码。')
  205. h('步骤 6.1:发送生成指令', level=2)
  206. p('复制以下提示词,确保一次性完整发送:')
  207. code('现在请开始实际的网站搭建。\n\n要求:\n1. 使用 Astro 框架\n2. 支持中英文双语(/zh/ 和 /en/)\n3. 包含完整的 GEO 优化(结构化数据、hreflang、FAQ schema 等)\n4. 创建一个 website 目录存放所有代码\n5. 所有代码一次性生成,确保完整可运行\n\n请在开始前先创建任务清单,然后逐步执行每个任务,\n直到网站可以正常构建和预览。')
  208. image_placeholder('粘贴网站生成提示词')
  209. h('步骤 6.2:等待代码生成', level=2)
  210. p('Claude 会自动完成:创建项目结构、编写所有页面、配置 SEO/GEO 优化、设置中英文双语、自动安装依赖包、构建并启动网站。约需 10-20 分钟。')
  211. image_placeholder('Claude 正在生成代码的进度显示')
  212. h('步骤 6.3:网站生成完成', level=2)
  213. p('构建成功后会看到:')
  214. code('38 page(s) built in 2.32s\nComplete!')
  215. image_placeholder('构建成功的输出信息')
  216. # ===== SECTION 7 =====
  217. h('7. 第六步:检查网站效果', level=1)
  218. h('操作目标', level=2)
  219. p('在浏览器中查看生成的网站。')
  220. h('步骤 7.1:让 Claude 打开浏览器', level=2)
  221. code('帮我用浏览器打开网站首页看看效果')
  222. image_placeholder('浏览器中打开的网站首页')
  223. h('步骤 7.2:检查清单', level=2)
  224. tbl(['检查项', '正常标准', '✅/❌'], [
  225. ['页面排版', '文字、图片排列整齐,无重叠', ''],
  226. ['导航菜单', '能正常展开,链接可点击', ''],
  227. ['语言切换', '点"EN"能切换到英文版', ''],
  228. ['手机显示', '手机浏览器中正常显示', ''],
  229. ['页面加载速度', '2 秒内打开', ''],
  230. ])
  231. # ===== SECTION 8 =====
  232. h('8. 第七步:发现样式问题并修复', level=1)
  233. p('这是本次实战中实际遇到的问题,供你参考。')
  234. h('问题描述', level=2)
  235. p('网站打开后只有文字,排版完全乱了。')
  236. image_placeholder('排版错乱的网站')
  237. h('原因分析', level=2)
  238. p('Claude 使用的技术方案中引用了海外 CDN 资源(Google Fonts、Partytown 等),国内网络无法访问。')
  239. h('修复步骤', level=2)
  240. p('直接复制以下提示词给 Claude:')
  241. code('网页打开后排版是乱的,只有文字没有样式。\n请你检查是否引用了海外 CDN 资源(如 Google Fonts、Partytown 等),\n把这些都替换为国内可用的替代方案或完全移除。\n修复后重新构建并打开浏览器给我看。\n\n另外,请建立一条规则记住:以后在国内网络环境下做项目,\n禁止使用任何海外 CDN 资源。')
  242. image_placeholder('粘贴修复提示词')
  243. p('Claude 会自动:')
  244. p('1. 切换到 Tailwind CSS v3(国内稳定版本)', indent=True)
  245. p('2. 移除 Partytown 组件', indent=True)
  246. p('3. 移除 Google Fonts 引用', indent=True)
  247. p('4. 重新安装依赖并构建', indent=True)
  248. p('5. 建立持久化规则,以后不会再犯', indent=True)
  249. image_placeholder('修复后排版正常的网站')
  250. # ===== SECTION 9 =====
  251. h('9. 第八步:部署上线(可选)', level=1)
  252. h('操作目标', level=2)
  253. p('将网站发布到互联网上,让所有人都能访问。')
  254. h('推荐方案', level=2)
  255. tbl(['平台', '费用', '适合人群', '操作难度'], [
  256. ['Vercel', '免费额度够用', '所有人', '⭐ 最简单'],
  257. ['Cloudflare Pages', '免费', '有小技术基础', '⭐⭐'],
  258. ['GitHub Pages', '免费', '有 GitHub 账号', '⭐⭐'],
  259. ])
  260. h('使用 Vercel 部署(推荐新手)', level=2)
  261. code('帮我把这个网站部署到 Vercel 上。')
  262. p('Claude 会引导你完成:注册 Vercel 账号、安装 Vercel CLI、一键部署。')
  263. h('绑定自己的域名', level=2)
  264. code('网站部署好了,我想绑定自己的域名 www.我的公司.com,\n请告诉我怎么做?')
  265. # ===== SECTION 10 =====
  266. h('10. 常见问题排查', level=1)
  267. h('Q1:生成的代码有错误,网站打不开', level=2)
  268. code('构建时报错了,错误信息如下:\n[粘贴错误信息]\n请帮我修复。')
  269. h('Q2:网站内容需要修改', level=2)
  270. code('请把首页的标题从"XX"改为"YY",并添加一段关于我们新产品的介绍。')
  271. h('Q3:想增加新的页面', level=2)
  272. code('请帮我在网站上增加一个"客户案例"页面,列出以下 3 个案例:\n1. [案例1名称]:[简述]\n2. [案例2名称]:[简述]\n3. [案例3名称]:[简述]')
  273. h('Q4:想让网站更好看', level=2)
  274. code('首页的配色太单调了,能否换成更现代的风格?\n主题色改为蓝色系 (#2563eb),搭配紫色点缀。')
  275. h('Q5:Claude 操作到一半停了', level=2)
  276. code('继续刚才未完成的工作。')
  277. # ===== APPENDIX A =====
  278. page_break()
  279. h('附录 A:给 AI 的完整提示词合集', level=1)
  280. p('使用时,将 [方括号] 中的内容替换为你的实际信息。')
  281. h('A.1 产品学习提示词', level=2)
  282. code('请读取我放在 [文件夹路径] 目录下的所有 PPT 文件,\n深度理解我们的产品定位、品牌理念、核心功能、目标客户和竞争优势。\n然后帮我总结产品的核心定位、解决的痛点、核心功能和目标客户。')
  283. h('A.2 GEO 研究提示词', level=2)
  284. code('请搜索 GEO 的最佳实践。\n然后基于你对我们产品的理解:\n1. 梳理目标用户可能会搜索的内容和问题\n2. 建立一个问题库\n3. 整理关键词列表\n4. 制定完整的内容策略')
  285. h('A.3 网站架构设计提示词', level=2)
  286. code('基于产品学习和GEO研究,帮我规划完整的网站架构:\n1. 网站页面地图(sitemap)\n2. 中英文双语URL结构\n3. 每个页面的核心内容\n4. GEO优化措施清单')
  287. h('A.4 网站生成提示词', level=2)
  288. code('请使用 Astro 框架,帮我创建一个完整的产品官网。\n要求:\n- 支持中英文双语(/zh/ 和 /en/)\n- 包含完整的GEO优化\n- 所有代码放在 website 目录下\n- 确保在国内网络环境下所有资源可用\n- 完成后自动构建并用浏览器打开')
  289. h('A.5 样式修复提示词', level=2)
  290. code('网页排版乱了,请检查是否有海外CDN依赖并修复。\n以后在国内环境做项目,禁止使用海外CDN资源。')
  291. h('A.6 内容修改提示词', level=2)
  292. code('请修改 [页面名称] 页面的以下内容:\n- [修改项1]\n- [修改项2]')
  293. # ===== APPENDIX B =====
  294. page_break()
  295. h('附录 B:我们的实战案例复盘', level=1)
  296. h('B.1 任务全景', level=2)
  297. tbl(['阶段', '输入', '输出', '耗时'], [
  298. ['产品学习', '2 个 PPTX 文件(共 58 页)', '产品理解摘要', '~3 分钟'],
  299. ['SEO 研究', '"搜索 GEO 最佳实践"', 'GEO 优化方案 + 问题库', '~5 分钟'],
  300. ['架构设计', '"设计网站架构"', '完整网站地图 + URL 结构', '~5 分钟'],
  301. ['代码生成', '"使用 Astro 框架搭建"', '38 个页面 + 全部配置', '~15 分钟'],
  302. ['样式修复', '"页面排版乱了"', '切换到 Tailwind v3 方案', '~5 分钟'],
  303. ['总计', '', '', '~35 分钟'],
  304. ])
  305. h('B.2 产出统计', level=2)
  306. tbl(['指标', '数值'], [
  307. ['页面总数', '38 个(中英双语)'],
  308. ['代码文件', '40+ 个'],
  309. ['博客文章', '3 篇 GEO 优化文章'],
  310. ['FAQ 条目', '10 个(含结构化数据)'],
  311. ['术语定义', '13 个(中英双语)'],
  312. ['SEO Schema 类型', '6 种'],
  313. ['支持语言', '中文 + 英文'],
  314. ])
  315. h('B.3 人机分工', level=2)
  316. tbl(['人类做的事', 'AI 做的事'], [
  317. ['提供产品 PPT 资料', '读取和分析 PPT'],
  318. ['审核 AI 理解和方案', '搜索 SEO 最佳实践'],
  319. ['检查网站效果', '设计网站架构'],
  320. ['发现排版问题', '编写全部代码'],
  321. ['反馈问题给 AI', '自动修复技术问题'],
  322. ['', '构建和启动网站'],
  323. ])
  324. # ===== APPENDIX C =====
  325. page_break()
  326. h('附录 C:GEO 优化清单', level=1)
  327. p('以下是所有实施的 GEO 措施,可交给 AI 逐项检查。')
  328. h('C.1 结构化数据', level=2)
  329. p('✅ 网站首页:Organization schema(告诉 AI 这是哪家公司)')
  330. p('✅ FAQ 页面:FAQPage schema(让 AI 直接引用问答)')
  331. p('✅ 博客文章:TechArticle schema(标注作者、发布时间)')
  332. p('✅ 产品页面:SoftwareApplication schema(标注产品信息)')
  333. p('✅ 所有页面:BreadcrumbList schema(标注页面层级)')
  334. h('C.2 多语言 SEO', level=2)
  335. p('✅ hreflang 标签:告知搜索引擎中英文版本对应关系')
  336. p('✅ x-default 标签:指定默认语言版本')
  337. p('✅ 规范链接(canonical URL):避免重复内容问题')
  338. p('✅ 多语言站点地图(sitemap):列出所有语言版本')
  339. h('C.3 AI 爬虫友好', level=2)
  340. p('✅ llms.txt:专门给 AI 爬虫的站点说明文件')
  341. p('✅ robots.txt:明确允许 ChatGPT、Google AI 等爬虫访问')
  342. p('✅ 术语表页面:为专业术语提供权威定义')
  343. p('✅ 每篇博客标注"作者 + 发布时间"')
  344. h('C.4 内容策略', level=2)
  345. p('✅ 为核心概念建立专属页面')
  346. p('✅ FAQ 回答直接、权威、结构化')
  347. p('✅ 博客覆盖高频搜索问题')
  348. p('✅ 内容互联(文章之间互相引用链接)')
  349. # ===== APPENDIX D =====
  350. page_break()
  351. h('附录 D:关键技术概念解释', level=1)
  352. p('以下内容面向非技术读者,用"白话"解释涉及的技术概念。', size=10, color=(0x94, 0xa3, 0xb8))
  353. concepts = [
  354. ('Astro 是什么?',
  355. '一个"静态网站生成器",能像搭积木一样把网站的各个部分拼在一起,最终输出为纯 HTML 文件,加载极快。',
  356. '传统的网站像"现场炒菜"——用户访问时服务器现做。Astro 像"预制菜"——提前做好,用户来了直接端上桌。'),
  357. ('Tailwind CSS 是什么?',
  358. '一个"样式工具箱",通过给 HTML 标签添加简短的类名来控制外观,不需要写 CSS 代码。',
  359. '传统写样式像"从零设计一套家具",Tailwind 像"宜家的标准化配件"——你只需要选择搭配。'),
  360. ('GEO 是什么?',
  361. 'Generative Engine Optimization,生成式引擎优化。让你的内容被 ChatGPT、豆包等 AI 在回答中引用和推荐。',
  362. '传统 SEO 像在图书馆卡片目录中排名靠前;GEO 像是让你的书成为图书馆员回答问题时必引用的参考书。'),
  363. ('JSON-LD 是什么?',
  364. '在网页中嵌入"机器可读的标签",告诉搜索引擎和 AI"这段文字是 FAQ 问答"、"这个页面是产品介绍"。',
  365. '就像超市货架上商品的条形码——人类看包装就知道是什么,但扫码器需要条形码。JSON-LD 就是给 AI 的"条形码"。'),
  366. ('hreflang 是什么?',
  367. '告诉搜索引擎"这个页面有中文版和英文版,中文版在这里,英文版在那里",避免被当作重复内容。',
  368. '就像一本书有中英文两个版本,封面标注"中文版"和"English Edition",读者不会困惑。'),
  369. ('i18n 是什么?',
  370. 'Internationalization(国际化)的缩写——i 和 n 之间有 18 个字母。指让网站支持多种语言。',
  371. ''),
  372. ]
  373. for name, explanation, analogy in concepts:
  374. h(name, level=2)
  375. p(f'一句话解释:{explanation}')
  376. if analogy:
  377. p(f'类比:{analogy}', size=10, color=(0x64, 0x74, 0x8b))
  378. # ===== CONCLUSION =====
  379. page_break()
  380. h('总结', level=1)
  381. p('你现在拥有了一套完整的方法:')
  382. steps = [
  383. '准备好产品 PPT → 放到文件夹',
  384. '打开 Claude Code → 粘贴本手册的提示词',
  385. '审核 AI 输出 → 必要时反馈调整',
  386. '获得成品网站 → 浏览器直接看效果',
  387. ]
  388. for i, step in enumerate(steps, 1):
  389. p(f'{i}. {step}', indent=True)
  390. h('最重要的原则', level=2)
  391. p('✅ 提示词要完整清晰,一次性说清楚需求')
  392. p('✅ 每一步确认 AI 理解正确再继续')
  393. p('✅ 遇到问题直接反馈,AI 会自己修复')
  394. p('✅ 让 AI 建立规则,下次不再犯同类错误')
  395. doc.add_paragraph()
  396. doc.add_paragraph()
  397. footer_para = doc.add_paragraph()
  398. footer_para.alignment = WD_ALIGN_PARAGRAPH.CENTER
  399. footer_run = footer_para.add_run('— 手册结束 —')
  400. footer_run.font.size = Pt(10)
  401. footer_run.font.color.rgb = RGBColor(0x94, 0xa3, 0xb8)
  402. footer_run.font.name = '微软雅黑'
  403. doc.add_paragraph()
  404. version_para = doc.add_paragraph()
  405. version_para.alignment = WD_ALIGN_PARAGRAPH.CENTER
  406. vr = version_para.add_run('v1.0 · 2026年5月 · 基于未来飞马(Fmode)产品官网实战编写')
  407. vr.font.size = Pt(9)
  408. vr.font.color.rgb = RGBColor(0x94, 0xa3, 0xb8)
  409. vr.font.name = '微软雅黑'
  410. # Save
  411. output_path = 'd:/workspace/temp/newp/产品独立站搭建手册-Claude版.docx'
  412. doc.save(output_path)
  413. print(f'✅ DOCX saved to: {output_path}')
  414. if __name__ == '__main__':
  415. create_manual()