pptx
npx skills add https://github.com/leastbit/claude_skills_zh-cn --skill pptx
Agent 安装分布
Skill 文档
PPTX å建ãç¼è¾ååæ
æ¦è¿°
ç¨æ·å¯è½ä¼è¦æ±æ¨å建ãç¼è¾æåæ .pptx æä»¶çå 容ã.pptx æä»¶æ¬è´¨ä¸æ¯ä¸ä¸ªå å« XML æä»¶åå ¶ä»èµæºç ZIP å缩å ï¼æ¨å¯ä»¥è¯»åæç¼è¾ãä¸åç任塿ä¸åçå·¥å ·å工使µç¨å¯ç¨ã
读åååæå 容
ææ¬æå
妿æ¨åªéè¦è¯»åæ¼ç¤ºæç¨¿çææ¬å 容ï¼åºå°ææ¡£è½¬æ¢ä¸º markdownï¼
# å°ææ¡£è½¬æ¢ä¸º markdown
python -m markitdown path-to-file.pptx
åå§ XML 访é®
æ¨éè¦åå§ XML è®¿é®æ¥å¤çï¼æ¹æ³¨ãæ¼è®²è 夿³¨ãå¹»ç¯ççå¼ãå¨ç»ã设计å ç´ åå¤ææ ¼å¼ã对äºè¿äºåè½ï¼æ¨éè¦è§£åæ¼ç¤ºæç¨¿å¹¶è¯»åå ¶åå§ XML å 容ã
è§£åæä»¶
python ooxml/scripts/unpack.py <office_file> <output_dir>
注æï¼unpack.py èæ¬ä½äºç¸å¯¹äºé¡¹ç®æ ¹ç®å½ç skills/pptx/ooxml/scripts/unpack.pyãå¦æèæ¬ä¸å¨æ¤è·¯å¾ï¼è¯·ä½¿ç¨ find . -name "unpack.py" æ¥å®ä½å®ã
å ³é®æä»¶ç»æ
ppt/presentation.xml– 主æ¼ç¤ºæç¨¿å æ°æ®åå¹»ç¯çå¼ç¨ppt/slides/slide{N}.xml– å个幻ç¯çå 容ï¼slide1.xmlãslide2.xml çï¼ppt/notesSlides/notesSlide{N}.xml– æ¯ä¸ªå¹»ç¯ççæ¼è®²è 夿³¨ppt/comments/modernComment_*.xml– ç¹å®å¹»ç¯ççæ¹æ³¨ppt/slideLayouts/– å¹»ç¯çç弿¨¡æ¿ppt/slideMasters/– æ¯çå¹»ç¯ç模æ¿ppt/theme/– 主é¢åæ ·å¼ä¿¡æ¯ppt/media/– å¾çåå ¶ä»åªä½æä»¶
æçåé¢è²æå
彿ä¾äºè¦æ¨¡ä»¿ç示ä¾è®¾è®¡æ¶ï¼å§ç»å 使ç¨ä»¥ä¸æ¹æ³åææ¼ç¤ºæç¨¿çæçåé¢è²ï¼
- 读åä¸»é¢æä»¶ï¼æ£æ¥
ppt/theme/theme1.xmlä¸çé¢è²ï¼<a:clrScheme>ï¼ååä½ï¼<a:fontScheme>ï¼ - éæ ·å¹»ç¯çå
å®¹ï¼æ£æ¥
ppt/slides/slide1.xmlä¸çå®é åä½ä½¿ç¨ï¼<a:rPr>ï¼åé¢è² - æç´¢æ¨¡å¼ï¼ä½¿ç¨ grep 卿æ XML æä»¶ä¸æ¥æ¾é¢è²ï¼
<a:solidFill>ã<a:srgbClr>ï¼ååä½å¼ç¨
åå»ºæ° PowerPoint æ¼ç¤ºæç¨¿ ä¸ä½¿ç¨æ¨¡æ¿
ä»å¤´å¼å§åå»ºæ° PowerPoint æ¼ç¤ºæç¨¿æ¶ï¼ä½¿ç¨ html2pptx 工使µç¨å° HTML å¹»ç¯ç转æ¢ä¸ºå ·æç²¾ç¡®å®ä½ç PowerPointã
设计åå
å ³é®ï¼å¨åå»ºä»»ä½æ¼ç¤ºæç¨¿ä¹åï¼åæå 容并鿩éå½ç设计å ç´ ï¼
- èè主é¢ï¼è¿ä¸ªæ¼ç¤ºæç¨¿æ¯å ³äºä»ä¹çï¼å®æç¤ºä»ä¹è¯æ°ãè¡ä¸ææ 绪ï¼
- æ£æ¥åçï¼å¦æç¨æ·æå°å ¬å¸/ç»ç»ï¼èèå ¶åçé¢è²å形象
- å°è°è²æ¿ä¸å 容å¹é ï¼éæ©åæ 主é¢çé¢è²
- è¯´ææ¨çæ¹æ³ï¼å¨ç¼å代ç ä¹åè§£éæ¨çè®¾è®¡éæ©
è¦æ±ï¼
- â å¨ç¼å代ç ä¹åè¯´ææ¨åºäºå 容çè®¾è®¡æ¹æ³
- â ä» ä½¿ç¨ç½é¡µå®å ¨åä½ï¼ArialãHelveticaãTimes New RomanãGeorgiaãCourier NewãVerdanaãTahomaãTrebuchet MSãImpact
- â éè¿å¤§å°ãç²ç»åé¢è²åå»ºæ¸ æ°çè§è§å±æ¬¡
- â ç¡®ä¿å¯è¯»æ§ï¼å¼ºç对æ¯ãéå½å¤§å°çææ¬ãæ´æ´ç对é½
- â ä¿æä¸è´æ§ï¼å¨å¹»ç¯çä¹é´é夿¨¡å¼ãé´è·åè§è§è¯è¨
è°è²æ¿éæ©
åé æ§å°éæ©é¢è²ï¼
- è·³åºé»è®¤æç»´ï¼ä»ä¹é¢è²çæ£å¹é è¿ä¸ªç¹å®ä¸»é¢ï¼é¿å èªå¨éæ©ã
- èèå¤ä¸ªè§åº¦ï¼ä¸»é¢ãè¡ä¸ãæ 绪ãè½éæ°´å¹³ãç®æ åä¼ãåç形象ï¼å¦ææåï¼
- 大èå°è¯ï¼å°è¯ææ³ä¸å°çç»å – å»çä¿å¥æ¼ç¤ºæç¨¿ä¸å¿ æ¯ç»¿è²çï¼éèä¸å¿ æ¯æµ·åè
- æå»ºè°è²æ¿ï¼éæ© 3-5 ç§é åè¯å¥½çé¢è²ï¼ä¸»è² + è¾ å©è² + 强è°è²ï¼
- ç¡®ä¿å¯¹æ¯ï¼ææ¬å¿ é¡»å¨èæ¯ä¸æ¸ æ°å¯è¯»
示ä¾è°è²æ¿ï¼ç¨äºæ¿ååæ – éæ©ä¸ä¸ªãè°æ´å®æå建èªå·±çï¼ï¼
- ç»å ¸èï¼æ·±æµ·åèï¼#1C2833ï¼ãç³æ¿ç°ï¼#2E4053ï¼ãé¶è²ï¼#AAB7B8ï¼ãç±³ç½ï¼#F4F6F6ï¼
- é绿ä¸ççï¼é绿ï¼#5EA8A7ï¼ãæ·±é绿ï¼#277884ï¼ãççï¼#FE4447ï¼ãç½è²ï¼#FFFFFFï¼
- 大è红è²ï¼çº¢è²ï¼#C0392Bï¼ã亮红ï¼#E74C3Cï¼ãæ©è²ï¼#F39C12ï¼ãé»è²ï¼#F1C40Fï¼ã绿è²ï¼#2ECC71ï¼
- æè ®çº¢ï¼ç°è¤è²ï¼#A49393ï¼ãè ®çº¢ï¼#EED6D3ï¼ãç«ç°ï¼#E8B4B8ï¼ã奶油ï¼#FAF7F2ï¼
- é 红奢åï¼é 红ï¼#5D1D2Eï¼ã深红ï¼#951233ï¼ãééï¼#C15937ï¼ãéè²ï¼#997929ï¼
- 深紫ä¸ç¿¡ç¿ ï¼ç´«è²ï¼#B165FBï¼ãæ·±èï¼#181B24ï¼ãç¿¡ç¿ ï¼#40695Bï¼ãç½è²ï¼#FFFFFFï¼
- å¥¶æ²¹ä¸æ£®æç»¿ï¼å¥¶æ²¹ï¼#FFE1C7ï¼ã森æç»¿ï¼#40695Bï¼ãç½è²ï¼#FCFCFCï¼
- ç²è²ä¸ç´«è²ï¼ç²è²ï¼#F8275Bï¼ãççï¼#FF574Aï¼ãç«ç°ï¼#FF737Dï¼ãç´«è²ï¼#3D2F68ï¼
- éæ ä¸æ¢ è²ï¼éæ ï¼#C5DE82ï¼ãæ¢ è²ï¼#7C3A5Fï¼ãççï¼#FD8C6Eï¼ãèç°ï¼#98ACB5ï¼
- é»ä¸éï¼éè²ï¼#BF9A4Aï¼ãé»è²ï¼#000000ï¼ã奶油ï¼#F4F6F6ï¼
- é¼ å°¾èä¸èµ¤é¶ï¼é¼ å°¾èï¼#87A96Bï¼ã赤é¶ï¼#E07A5Fï¼ã奶油ï¼#F4F1DEï¼ãçç°ï¼#2C2C2Cï¼
- çç°ä¸çº¢ï¼çç°ï¼#292929ï¼ã红è²ï¼#E33737ï¼ãæµ ç°ï¼#CCCBCBï¼
- æ´»åæ©ï¼æ©è²ï¼#F96D00ï¼ãæµ ç°ï¼#F2F2F2ï¼ãçç°ï¼#222831ï¼
- 森æç»¿ï¼é»è²ï¼#191A19ï¼ã绿è²ï¼#4E9F3Dï¼ã深绿ï¼#1E5128ï¼ãç½è²ï¼#FFFFFFï¼
- å¤å¤å½©è¹ï¼ç´«è²ï¼#722880ï¼ãç²è²ï¼#D72D51ï¼ãæ©è²ï¼#EB5C18ï¼ãç¥çï¼#F08800ï¼ãéè²ï¼#DEB600ï¼
- å¤å¤å¤§å°ï¼è¥æ«ï¼#E3B448ï¼ãé¼ å°¾èï¼#CBD18Fï¼ã森æç»¿ï¼#3A6B35ï¼ã奶油ï¼#F4F1DEï¼
- 海岸ç«ç°ï¼èç«ç°ï¼#AD7670ï¼ãæµ·ç¸ï¼#B49886ï¼ãè壳ï¼#F3ECDCï¼ãç°ç»¿ï¼#BFD5BEï¼
- æ©ä¸éç»¿ï¼æµ æ©ï¼#FC993Eï¼ãç°é绿ï¼#667C6Fï¼ãç½è²ï¼#FCFCFCï¼
è§è§ç»èé项
å ä½å¾æ¡ï¼
- 对è§çº¿åéä»£æ¿æ°´å¹³åé
- ä¸å¯¹ç§°å宽ï¼30/70ã40/60ã25/75ï¼
- 90° æ 270° æè½¬çææ¬æ é¢
- å¾ççåå½¢/å è¾¹å½¢æ¡æ¶
- è§è½çä¸è§å½¢è£ 饰形ç¶
- éå å½¢ç¶å¢å 深度
è¾¹æ¡åæ¡æ¶å¤çï¼
- ä» ä¸ä¾§çç²åè²è¾¹æ¡ï¼10-20ptï¼
- 对æ¯è²çå线边æ¡
- è§æ¬å·ä»£æ¿å®æ´æ¡æ¶
- L 形边æ¡ï¼ä¸+å·¦æä¸+å³ï¼
- æ é¢ä¸æ¹çä¸å线强è°ï¼3-5pt ç²ï¼
æçå¤çï¼
- æç«¯å¤§å°å¯¹æ¯ï¼72pt æ é¢ vs 11pt æ£æï¼
- å¤§åæ é¢é 宽忝é´è·
- è¶ å¤§æ¾ç¤ºåä½çç¼å·ç« è
- ç宽åä½ï¼Courier Newï¼ç¨äºæ°æ®/ç»è®¡/ææ¯å 容
- çªä½åä½ï¼Arial Narrowï¼ç¨äºå¯éä¿¡æ¯
- è½®å»ææ¬å¼ºè°
å¾è¡¨åæ°æ®æ ·å¼ï¼
- åè²å¾è¡¨é åä¸å¼ºè°è²ç¨äºå ³é®æ°æ®
- æ°´å¹³æ¡å½¢å¾ä»£æ¿åç´æ¡å½¢å¾
- ç¹å¾ä»£æ¿æ¡å½¢å¾
- æå°ææ ç½æ ¼çº¿
- æ°æ®æ ç¾ç´æ¥å¨å ç´ ä¸ï¼æ å¾ä¾ï¼
- å ³é®ææ çè¶ å¤§æ°å
å¸å±åæ°ï¼
- å¸¦ææ¬å å çæ»¡çå¾ç
- ä¾§è¾¹æ åï¼20-30% 宽度ï¼ç¨äºå¯¼èª/ä¸ä¸æ
- 模ååç½æ ¼ç³»ç»ï¼3Ã3ã4Ã4 åï¼
- Z å½¢æ F å½¢å 容æµ
- æµ®å¨ææ¬æ¡è¦çå¨å½©è²å½¢ç¶ä¸
- æå¿é£æ ¼å¤æ å¸å±
èæ¯å¤çï¼
- å å¹»ç¯ç 40-60% ç纯è²å
- æ¸åå¡«å ï¼ä» åç´æå¯¹è§çº¿ï¼
- åå²èæ¯ï¼ä¸¤ç§é¢è²ï¼å¯¹è§çº¿æåç´ï¼
- è¾¹å°è¾¹çè²å¸¦
- è´ç©ºé´ä½ä¸ºè®¾è®¡å ç´
å¸å±æç¤º
å建带å¾è¡¨æè¡¨æ ¼çå¹»ç¯çæ¶ï¼
- 两æ å¸å±ï¼æ¨èï¼ï¼ä½¿ç¨è·¨è¶å ¨å®½çæ é¢ï¼ç¶å䏿¹ä¸¤æ – 䏿 æ¾ææ¬/è¦ç¹ï¼å¦ä¸æ æ¾ä¸»è¦å 容ãè¿æä¾æ´å¥½ç平衡ï¼ä½¿å¾è¡¨/è¡¨æ ¼æ´æè¯»ã使ç¨ä¸çå宽ç flexboxï¼ä¾å¦ 40%/60% åå²ï¼æ¥ä¼åæ¯ç§å 容类åç空é´ã
- å ¨å¹»ç¯çå¸å±ï¼è®©ä¸»è¦å 容ï¼å¾è¡¨/è¡¨æ ¼ï¼å æ®æ´ä¸ªå¹»ç¯ç以è·å¾æå¤§å½±åååå¯è¯»æ§
- åå¿åç´å å ï¼ä¸è¦å°å¾è¡¨/è¡¨æ ¼æ¾å¨ååä¸çææ¬ä¸æ¹ – è¿ä¼å¯¼è´å¯è¯»æ§å·®åå¸å±é®é¢
工使µç¨
- å¿
é¡» – 宿´é
读æ´ä¸ªæä»¶ï¼å®æ´é
读
html2pptx.mdï¼ä»å¤´å°å°¾ãé è¯»æ¤æä»¶æ¶åå¿è®¾ç½®ä»»ä½èå´éå¶ã å¨å¼å§å建æ¼ç¤ºæç¨¿ä¹åï¼é è¯»å®æ´æä»¶å 容以äºè§£è¯¦ç»è¯æ³ãå ³é®æ ¼å¼è§ååæä½³å®è·µã - 为æ¯ä¸ªå¹»ç¯çå建å
·ææ£ç¡®å°ºå¯¸ç HTML æä»¶ï¼ä¾å¦ 16:9 为 720pt à 405ptï¼
- 使ç¨
<p>ã<h1>–<h6>ã<ul>ã<ol>å¤çææææ¬å 容 - 坹尿·»å å¾è¡¨/è¡¨æ ¼çåºå使ç¨
class="placeholder"ï¼æ¸²æç°è²èæ¯ä»¥ä¾¿å¯è§ï¼ - å ³é®ï¼é¦å ä½¿ç¨ Sharp å°æ¸åå徿 å æ å为 PNG å¾çï¼ç¶åå¨ HTML ä¸å¼ç¨
- å¸å±ï¼å¯¹äºå¸¦å¾è¡¨/è¡¨æ ¼/å¾ççå¹»ç¯çï¼ä½¿ç¨å ¨å¹»ç¯çå¸å±æä¸¤æ å¸å±ä»¥è·å¾æ´å¥½çå¯è¯»æ§
- 使ç¨
- å建并è¿è¡ä½¿ç¨
html2pptx.jsåºç JavaScript æä»¶ï¼å° HTML å¹»ç¯ç转æ¢ä¸º PowerPoint å¹¶ä¿åæ¼ç¤ºæç¨¿- 使ç¨
html2pptx()彿°å¤çæ¯ä¸ª HTML æä»¶ - ä½¿ç¨ PptxGenJS API å°å¾è¡¨åè¡¨æ ¼æ·»å å°å ä½ç¬¦åºå
- 使ç¨
pptx.writeFile()ä¿åæ¼ç¤ºæç¨¿
- 使ç¨
- è§è§éªè¯ï¼çæç¼©ç¥å¾å¹¶æ£æ¥å¸å±é®é¢
- å建缩ç¥å¾ç½æ ¼ï¼
python scripts/thumbnail.py output.pptx workspace/thumbnails --cols 4 - é
读并ä»ç»æ£æ¥ç¼©ç¥å¾å¾çï¼
- ææ¬æªæï¼ææ¬è¢«æ 颿 ãå½¢ç¶æå¹»ç¯çè¾¹ç¼æªæ
- ææ¬éå ï¼ææ¬ä¸å ¶ä»ææ¬æå½¢ç¶éå
- å®ä½é®é¢ï¼å 容太é è¿å¹»ç¯çè¾¹çæå ¶ä»å ç´
- 对æ¯é®é¢ï¼ææ¬åèæ¯ä¹é´å¯¹æ¯ä¸è¶³
- 妿åç°é®é¢ï¼è°æ´ HTML è¾¹è·/é´è·/é¢è²å¹¶éæ°çææ¼ç¤ºæç¨¿
- éå¤ç´å°ææå¹»ç¯çè§è§æ£ç¡®
- å建缩ç¥å¾ç½æ ¼ï¼
ç¼è¾ç°æ PowerPoint æ¼ç¤ºæç¨¿
ç¼è¾ç°æ PowerPoint æ¼ç¤ºæç¨¿ä¸çå¹»ç¯çæ¶ï¼æ¨éè¦ä½¿ç¨åå§ Office Open XMLï¼OOXMLï¼æ ¼å¼ãè¿æ¶åè§£å .pptx æä»¶ãç¼è¾ XML å 容ï¼ç¶åéæ°æå ã
工使µç¨
- å¿
é¡» – 宿´é
读æ´ä¸ªæä»¶ï¼å®æ´é
读
ooxml.mdï¼çº¦ 500 è¡ï¼ï¼ä»å¤´å°å°¾ãé è¯»æ¤æä»¶æ¶åå¿è®¾ç½®ä»»ä½èå´éå¶ã å¨ç¼è¾ä»»ä½æ¼ç¤ºæç¨¿ä¹åï¼é è¯»å®æ´æä»¶å 容以è·åæå ³ OOXML ç»æåç¼è¾å·¥ä½æµç¨çè¯¦ç»æå¯¼ã - è§£åæ¼ç¤ºæç¨¿ï¼
python ooxml/scripts/unpack.py <office_file> <output_dir> - ç¼è¾ XML æä»¶ï¼ä¸»è¦æ¯
ppt/slides/slide{N}.xmlåç¸å ³æä»¶ï¼ - å
³é®ï¼æ¯æ¬¡ç¼è¾åç«å³éªè¯ï¼å¹¶å¨ç»§ç»ä¹åä¿®å¤ä»»ä½éªè¯é误ï¼
python ooxml/scripts/validate.py <dir> --original <file> - æå
æç»æ¼ç¤ºæç¨¿ï¼
python ooxml/scripts/pack.py <input_directory> <office_file>
ä½¿ç¨æ¨¡æ¿åå»ºæ° PowerPoint æ¼ç¤ºæç¨¿
彿¨éè¦å建éµå¾ªç°ææ¨¡æ¿è®¾è®¡çæ¼ç¤ºæç¨¿æ¶ï¼æ¨éè¦å¤å¶åéæ°æå模æ¿å¹»ç¯çï¼ç¶åæ¿æ¢å ä½ç¬¦å 容ã
工使µç¨
-
æåæ¨¡æ¿ææ¬å¹¶å建å¯è§å缩ç¥å¾ç½æ ¼ï¼
- æåææ¬ï¼
python -m markitdown template.pptx > template-content.md - é
读
template-content.mdï¼é 读æ´ä¸ªæä»¶ä»¥äºè§£æ¨¡æ¿æ¼ç¤ºæç¨¿çå 容ãé è¯»æ¤æä»¶æ¶åå¿è®¾ç½®ä»»ä½èå´éå¶ã - å建缩ç¥å¾ç½æ ¼ï¼
python scripts/thumbnail.py template.pptx - æå ³æ´å¤è¯¦ç»ä¿¡æ¯ï¼è¯·åé å建缩ç¥å¾ç½æ ¼é¨å
- æåææ¬ï¼
-
åææ¨¡æ¿å¹¶å°æ¸ åä¿åå°æä»¶ï¼
- è§è§åæï¼æ¥ç缩ç¥å¾ç½æ ¼ä»¥äºè§£å¹»ç¯ççå¼ã设计模å¼åè§è§ç»æ
- å建并ä¿åæ¨¡æ¿æ¸
åæä»¶å°
template-inventory.mdï¼å å«ï¼# æ¨¡æ¿æ¸ ååæ **æ»å¹»ç¯çæ°ï¼[count]** **éè¦ï¼å¹»ç¯çä» 0 å¼å§ç´¢å¼ï¼ç¬¬ä¸å¼ å¹»ç¯ç = 0ï¼æåä¸å¼ å¹»ç¯ç = count-1ï¼** ## [ç±»å«åç§°] - å¹»ç¯ç 0ï¼[çå¼ä»£ç ï¼å¦æï¼] - æè¿°/ç¨é - å¹»ç¯ç 1ï¼[çå¼ä»£ç ] - æè¿°/ç¨é - å¹»ç¯ç 2ï¼[çå¼ä»£ç ] - æè¿°/ç¨é [... æ¯ä¸ªå¹»ç¯çé½å¿ é¡»åç¬ååºå ¶ç´¢å¼ ...] - 使ç¨ç¼©ç¥å¾ç½æ ¼ï¼åèå¯è§å缩ç¥å¾æ¥è¯å«ï¼
- ç弿¨¡å¼ï¼æ é¢å¹»ç¯çãå 容çå¼ãç« èåéï¼
- å¾çå ä½ç¬¦ä½ç½®åæ°é
- å¹»ç¯çç»ä¹é´ç设计ä¸è´æ§
- è§è§å±æ¬¡åç»æ
- æ¤æ¸ åæä»¶æ¯ä¸ä¸æ¥éæ©é彿¨¡æ¿æå¿ éç
-
æ ¹æ®æ¨¡æ¿æ¸ åå建æ¼ç¤ºæç¨¿å¤§çº²ï¼
- æ¥çæ¥éª¤ 2 ä¸çå¯ç¨æ¨¡æ¿ã
- 为第ä¸å¼ å¹»ç¯çéæ©ä»ç»ææ 颿¨¡æ¿ãè¿åºè¯¥æ¯æåé¢ç模æ¿ä¹ä¸ã
- ä¸ºå ¶ä»å¹»ç¯çéæ©å®å ¨çãåºäºææ¬ççå¼ã
- å
³é®ï¼å°çå¼ç»æä¸å®é
å
容å¹é
ï¼
- ååçå¼ï¼ç¨äºç»ä¸åè¿°æåä¸ä¸»é¢
- 两åçå¼ï¼ä» 彿¨ææ£å¥½ 2 个ä¸åç项ç®/æ¦å¿µæ¶ä½¿ç¨
- ä¸åçå¼ï¼ä» 彿¨ææ£å¥½ 3 个ä¸åç项ç®/æ¦å¿µæ¶ä½¿ç¨
- å¾ç+ææ¬çå¼ï¼ä» 彿¨æå®é å¾çè¦æå ¥æ¶ä½¿ç¨
- å¼ç¨çå¼ï¼ä» ç¨äºå®é ç人ç©å¼ç¨ï¼å¸¦å½å±ï¼ï¼åå¿ç¨äºå¼ºè°
- åå¿ä½¿ç¨å ä½ç¬¦æ¯å 容å¤ççå¼
- å¦ææ¨æ 2 个项ç®ï¼ä¸è¦å¼ºè¡æ¾å ¥ 3 åçå¼
- å¦ææ¨æ 4+ 个项ç®ï¼èèåæå¤å¼ å¹»ç¯çæä½¿ç¨åè¡¨æ ¼å¼
- å¨éæ©çå¼ä¹åè®¡ç®æ¨çå®é å 容æ°é
- éªè¯æéçå¼ä¸çæ¯ä¸ªå ä½ç¬¦é½å°å¡«å ææä¹çå 容
- 为æ¯ä¸ªå 容é¨åéæ©ä¸ä¸ªä»£è¡¨æä½³çå¼çé项ã
- ä¿å
outline.mdï¼å å«å 容åå©ç¨å¯ç¨è®¾è®¡çæ¨¡æ¿æ å° - ç¤ºä¾æ¨¡æ¿æ å°ï¼
# è¦ä½¿ç¨ç模æ¿å¹»ç¯çï¼0 åºç´¢å¼ï¼ # è¦åï¼éªè¯ç´¢å¼å¨èå´å ï¼æ 73 å¼ å¹»ç¯ççæ¨¡æ¿ç´¢å¼ä¸º 0-72 # æ å°ï¼å¤§çº²ä¸çå¹»ç¯çç¼å· -> 模æ¿å¹»ç¯çç´¢å¼ template_mapping = [ 0, # 使ç¨å¹»ç¯ç 0ï¼æ é¢/å°é¢ï¼ 34, # 使ç¨å¹»ç¯ç 34ï¼B1ï¼æ é¢åæ£æï¼ 34, # 忬¡ä½¿ç¨å¹»ç¯ç 34ï¼å¤å¶ç¨äºç¬¬äºä¸ª B1ï¼ 50, # 使ç¨å¹»ç¯ç 50ï¼E1ï¼å¼ç¨ï¼ 54, # 使ç¨å¹»ç¯ç 54ï¼F2ï¼ç»æè¯+ææ¬ï¼ ]
-
使ç¨
rearrange.pyå¤å¶ãéæ°æåºåå é¤å¹»ç¯çï¼- 使ç¨
scripts/rearrange.pyèæ¬åå»ºå ·ææé顺åºå¹»ç¯ççæ°æ¼ç¤ºæç¨¿ï¼python scripts/rearrange.py template.pptx working.pptx 0,34,34,50,52 - è¯¥èæ¬èªå¨å¤çéå¤å¹»ç¯ççå¤å¶ãå 餿ªä½¿ç¨çå¹»ç¯çåéæ°æåº
- å¹»ç¯çç´¢å¼ä» 0 å¼å§ï¼ç¬¬ä¸å¼ å¹»ç¯çæ¯ 0ï¼ç¬¬äºå¼ æ¯ 1ï¼ççï¼
- åä¸å¹»ç¯çç´¢å¼å¯ä»¥åºç°å¤æ¬¡ä»¥å¤å¶è¯¥å¹»ç¯ç
- 使ç¨
-
使ç¨
inventory.pyèæ¬æåææææ¬ï¼-
è¿è¡æ¸ åæåï¼
python scripts/inventory.py working.pptx text-inventory.json -
é 读 text-inventory.jsonï¼é 读æ´ä¸ª text-inventory.json æä»¶ä»¥äºè§£ææå½¢ç¶åå ¶å±æ§ãé è¯»æ¤æä»¶æ¶åå¿è®¾ç½®ä»»ä½èå´éå¶ã
-
æ¸ å JSON ç»æï¼
{ "slide-0": { "shape-0": { "placeholder_type": "TITLE", // æéå ä½ç¬¦ä¸º null "left": 1.5, // ä½ç½®ï¼è±å¯¸ï¼ "top": 2.0, "width": 7.5, "height": 1.2, "paragraphs": [ { "text": "æ®µè½ææ¬", // å¯é屿§ï¼ä» å¨éé»è®¤æ¶å å«ï¼ï¼ "bullet": true, // æ£æµå°æ¾å¼é¡¹ç®ç¬¦å· "level": 0, // ä» å¨ bullet 为 true æ¶å å« "alignment": "CENTER", // CENTERãRIGHTï¼é LEFTï¼ "space_before": 10.0, // 段åé´è·ï¼ç£ ï¼ "space_after": 6.0, // 段åé´è·ï¼ç£ ï¼ "line_spacing": 22.4, // è¡é´è·ï¼ç£ ï¼ "font_name": "Arial", // æ¥èªç¬¬ä¸ä¸ªè¿è¡ "font_size": 14.0, // ç£ "bold": true, "italic": false, "underline": false, "color": "FF0000" // RGB é¢è² } ] } } } -
å ³é®ç¹æ§ï¼
- å¹»ç¯çï¼å½å为”slide-0″ã”slide-1″çã
- å½¢ç¶ï¼æè§è§ä½ç½®ï¼ä»ä¸å°ä¸ãä»å·¦å°å³ï¼æåºä¸º”shape-0″ã”shape-1″çã
- å ä½ç¬¦ç±»åï¼TITLEãCENTER_TITLEãSUBTITLEãBODYãOBJECT æ null
- é»è®¤åä½å¤§å°ï¼ä»çå¼å ä½ç¬¦æåç
default_font_sizeï¼ç£ ï¼å¦å¯ç¨ï¼ - å¹»ç¯çç¼å·è¢«è¿æ»¤ï¼å ·æ SLIDE_NUMBER å ä½ç¬¦ç±»åçå½¢ç¶èªå¨ä»æ¸ å䏿é¤
- 项ç®ç¬¦å·ï¼å½
bullet: trueæ¶ï¼levelå§ç»å å«ï¼å³ä½¿æ¯ 0ï¼ - é´è·ï¼
space_beforeãspace_afteråline_spacingï¼ç£ ï¼ä» å¨è®¾ç½®æ¶å å«ï¼ - é¢è²ï¼RGB ç
colorï¼ä¾å¦”FF0000″ï¼ï¼ä¸»é¢é¢è²çtheme_colorï¼ä¾å¦”DARK_1″ï¼ - 屿§ï¼è¾åºä¸ä» å å«éé»è®¤å¼
-
-
çææ¿æ¢ææ¬å¹¶å°æ°æ®ä¿åå° JSON æä»¶ æ ¹æ®ä¸ä¸æ¥çææ¬æ¸ åï¼
- å ³é®ï¼é¦å éªè¯æ¸ åä¸åå¨åªäºå½¢ç¶ – åªå¼ç¨å®é åå¨çå½¢ç¶
- éªè¯ï¼replace.py èæ¬å°éªè¯æ¿æ¢ JSON ä¸çææå½¢ç¶é½åå¨äºæ¸
åä¸
- 妿å¼ç¨ä¸åå¨çå½¢ç¶ï¼æ¨å°æ¶å°æ¾ç¤ºå¯ç¨å½¢ç¶çé误
- 妿å¼ç¨ä¸åå¨çå¹»ç¯çï¼æ¨å°æ¶å°æç¤ºè¯¥å¹»ç¯çä¸åå¨çé误
- ææéªè¯é误å¨èæ¬éåºå䏿¬¡æ§æ¾ç¤º
- éè¦ï¼replace.py èæ¬å é¨ä½¿ç¨ inventory.py æ¥è¯å«ææææ¬å½¢ç¶
- èªå¨æ¸ é¤ï¼æ¸ åä¸çææææ¬å½¢ç¶é½å°è¢«æ¸ é¤ï¼é¤éæ¨ä¸ºå®ä»¬æä¾”paragraphs”
- 为éè¦å 容çå½¢ç¶æ·»å “paragraphs”åæ®µï¼ä¸æ¯”replacement_paragraphs”ï¼
- æ¿æ¢ JSON 䏿²¡æ”paragraphs”çå½¢ç¶å°èªå¨æ¸ é¤å ¶ææ¬
- 带项ç®ç¬¦å·ç段è½å°èªå¨å·¦å¯¹é½ãå½
"bullet": trueæ¶ä¸è¦è®¾ç½®alignment屿§ - 为å ä½ç¬¦ææ¬çæéå½çæ¿æ¢å 容
- 使ç¨å½¢ç¶å¤§å°æ¥ç¡®å®éå½çå 容é¿åº¦
- å ³é®ï¼å å«åå§æ¸ åä¸ç段è½å±æ§ – ä¸è¦åªæä¾ææ¬
- éè¦ï¼å½ bullet: true æ¶ï¼ä¸è¦å¨ææ¬ä¸å å«é¡¹ç®ç¬¦å·ç¬¦å·ï¼â¢ã-ã*ï¼- å®ä»¬ä¼èªå¨æ·»å
- åºæ¬æ ¼å¼è§åï¼
- æ é¢éå¸¸åºæ
"bold": true - åè¡¨é¡¹åºæ
"bullet": true, "level": 0ï¼bullet 为 true æ¶éè¦ levelï¼ - ä¿çä»»ä½å¯¹é½å±æ§ï¼ä¾å¦å±
䏿æ¬ç
"alignment": "CENTER"ï¼ - ä¸é»è®¤ä¸åæ¶å
å«åä½å±æ§ï¼ä¾å¦
"font_size": 14.0ã"font_name": "Lora"ï¼ - é¢è²ï¼RGB 使ç¨
"color": "FF0000"ï¼ä¸»é¢é¢è²ä½¿ç¨"theme_color": "DARK_1" - æ¿æ¢èæ¬æææ£ç¡®æ ¼å¼ç段è½ï¼èä¸ä» ä» æ¯ææ¬å符串
- éå å½¢ç¶ï¼ä¼å éæ© default_font_size æ´å¤§æ placeholder_type æ´åéçå½¢ç¶
- æ é¢éå¸¸åºæ
- å°å¸¦ææ¿æ¢çæ´æ°æ¸
åä¿åå°
replacement-text.json - è¦åï¼ä¸åçæ¨¡æ¿ç弿ä¸åçå½¢ç¶æ°é – å¨åå»ºæ¿æ¢ä¹åå§ç»æ£æ¥å®é æ¸ å
æ¾ç¤ºæ£ç¡®æ ¼å¼çç¤ºä¾ paragraphs åæ®µï¼
"paragraphs": [ { "text": "æ°æ¼ç¤ºæç¨¿æ 颿æ¬", "alignment": "CENTER", "bold": true }, { "text": "ç« èæ é¢", "bold": true }, { "text": "第ä¸ä¸ªè¦ç¹ï¼ä¸å¸¦é¡¹ç®ç¬¦å·ç¬¦å·", "bullet": true, "level": 0 }, { "text": "çº¢è²ææ¬", "color": "FF0000" }, { "text": "主é¢é¢è²ææ¬", "theme_color": "DARK_1" }, { "text": "没æç¹æ®æ ¼å¼çæ®éæ®µè½ææ¬" } ]æ¿æ¢ JSON 䏿ªååºçå½¢ç¶å°èªå¨æ¸ é¤ï¼
{ "slide-0": { "shape-0": { "paragraphs": [...] // æ¤å½¢ç¶è·å¾æ°ææ¬ } // æ¸ åä¸ç shape-1 å shape-2 å°èªå¨æ¸ é¤ } }æ¼ç¤ºæç¨¿çå¸¸è§æ ¼å¼æ¨¡å¼ï¼
- æ é¢å¹»ç¯çï¼ç²ä½ææ¬ï¼ææ¶å± ä¸
- å¹»ç¯çå çç« èæ é¢ï¼ç²ä½ææ¬
- 项ç®ç¬¦å·åè¡¨ï¼æ¯ä¸ªé¡¹ç®éè¦
"bullet": true, "level": 0 - æ£æææ¬ï¼é常ä¸éè¦ç¹æ®å±æ§
- å¼ç¨ï¼å¯è½æç¹æ®ç坹齿åä½å±æ§
-
使ç¨
replace.pyèæ¬åºç¨æ¿æ¢python scripts/replace.py working.pptx replacement-text.json output.pptxè¯¥èæ¬å°ï¼
- é¦å ä½¿ç¨ inventory.py ç彿°æåææææ¬å½¢ç¶çæ¸ å
- éªè¯æ¿æ¢ JSON ä¸çææå½¢ç¶é½åå¨äºæ¸ åä¸
- æ¸ é¤æ¸ åä¸è¯å«çææå½¢ç¶çææ¬
- ä» å¯¹æ¿æ¢ JSON ä¸å®ä¹äº”paragraphs”çå½¢ç¶åºç¨æ°ææ¬
- éè¿åºç¨ JSON ä¸ç段è½å±æ§æ¥ä¿çæ ¼å¼
- èªå¨å¤ç项ç®ç¬¦å·ã对é½ãåä½å±æ§åé¢è²
- ä¿åæ´æ°åçæ¼ç¤ºæç¨¿
示ä¾éªè¯é误ï¼
éè¯¯ï¼æ¿æ¢ JSON ä¸çæ æå½¢ç¶ï¼ - 'slide-0' 䏿ªæ¾å°å½¢ç¶ 'shape-99'ãå¯ç¨å½¢ç¶ï¼shape-0ãshape-1ãshape-4 - æ¸ å䏿ªæ¾å°å¹»ç¯ç 'slide-999'éè¯¯ï¼æ¿æ¢ææ¬ä½¿ä»¥ä¸å½¢ç¶çæº¢åºæ´ä¸¥éï¼ - slide-0/shape-2ï¼æº¢åºå å§ 1.25"ï¼å为 0.00"ï¼ç°ä¸º 1.25"ï¼
å建缩ç¥å¾ç½æ ¼
è¦å建 PowerPoint å¹»ç¯ççå¯è§å缩ç¥å¾ç½æ ¼ä»¥ä¾¿å¿«éåæååèï¼
python scripts/thumbnail.py template.pptx [output_prefix]
åè½ï¼
- å建ï¼
thumbnails.jpgï¼æå¤§åæ¼ç¤ºæç¨¿ä¸ºthumbnails-1.jpgãthumbnails-2.jpgçï¼ - é»è®¤ï¼5 åï¼æ¯ä¸ªç½æ ¼æå¤ 30 å¼ å¹»ç¯çï¼5Ã6ï¼
- èªå®ä¹åç¼ï¼
python scripts/thumbnail.py template.pptx my-grid- 注æï¼å¦ææ¨æ³è¦è¾åºå°ç¹å®ç®å½ï¼è¾åºåç¼åºå
å«è·¯å¾ï¼ä¾å¦
workspace/my-gridï¼
- 注æï¼å¦ææ¨æ³è¦è¾åºå°ç¹å®ç®å½ï¼è¾åºåç¼åºå
å«è·¯å¾ï¼ä¾å¦
- è°æ´åæ°ï¼
--cols 4ï¼èå´ï¼3-6ï¼å½±åæ¯ä¸ªç½æ ¼çå¹»ç¯çæ°ï¼ - ç½æ ¼éå¶ï¼3 å = 12 å¼ å¹»ç¯ç/ç½æ ¼ï¼4 å = 20ï¼5 å = 30ï¼6 å = 42
- å¹»ç¯çä»é¶å¼å§ç´¢å¼ï¼å¹»ç¯ç 0ãå¹»ç¯ç 1 çï¼
ç¨ä¾ï¼
- 模æ¿åæï¼å¿«éäºè§£å¹»ç¯ççå¼å设计模å¼
- å 容审æ¥ï¼æ´ä¸ªæ¼ç¤ºæç¨¿çè§è§æ¦è§
- 导èªåèï¼éè¿å¤è§æ¾å°ç¹å®å¹»ç¯ç
- è´¨éæ£æ¥ï¼éªè¯ææå¹»ç¯çæ ¼å¼æ£ç¡®
示ä¾ï¼
# åºæ¬ç¨æ³
python scripts/thumbnail.py presentation.pptx
# ç»åé项ï¼èªå®ä¹åç§°ãåæ°
python scripts/thumbnail.py template.pptx analysis --cols 4
å°å¹»ç¯ç转æ¢ä¸ºå¾ç
è¦å¯è§ååæ PowerPoint å¹»ç¯çï¼ä½¿ç¨ä¸¤æ¥è¿ç¨å°å ¶è½¬æ¢ä¸ºå¾çï¼
-
å° PPTX 转æ¢ä¸º PDFï¼
soffice --headless --convert-to pdf template.pptx -
å° PDF 页é¢è½¬æ¢ä¸º JPEG å¾çï¼
pdftoppm -jpeg -r 150 template.pdf slideè¿ä¼å建
slide-1.jpgãslide-2.jpgçæä»¶ã
é项ï¼
-r 150ï¼è®¾ç½®å辨ç为 150 DPIï¼è°æ´ä»¥å¹³è¡¡è´¨é/大å°ï¼-jpegï¼è¾åº JPEG æ ¼å¼ï¼å¦éè¦å¯ä½¿ç¨-pngè¾åº PNGï¼-f Nï¼è¦è½¬æ¢ç第ä¸é¡µï¼ä¾å¦-f 2ä»ç¬¬ 2 页å¼å§ï¼-l Nï¼è¦è½¬æ¢çæåä¸é¡µï¼ä¾å¦-l 5å¨ç¬¬ 5 页忢ï¼slideï¼è¾åºæä»¶çåç¼
ç¹å®èå´ç¤ºä¾ï¼
pdftoppm -jpeg -r 150 -f 2 -l 5 template.pdf slide # ä»
转æ¢ç¬¬ 2-5 页
代ç 飿 ¼æå
éè¦ï¼çæ PPTX æä½ä»£ç æ¶ï¼
- ç¼åç®æ´ç代ç
- é¿å åé¿çåéååå使ä½
- é¿å ä¸å¿ è¦ç print è¯å¥
ä¾èµé¡¹
å¿ éçä¾èµé¡¹ï¼åºè¯¥å·²ç»å®è£ ï¼ï¼
- markitdownï¼
pip install "markitdown[pptx]"ï¼ç¨äºä»æ¼ç¤ºæç¨¿æåææ¬ï¼ - pptxgenjsï¼
npm install -g pptxgenjsï¼ç¨äºéè¿ html2pptx å建æ¼ç¤ºæç¨¿ï¼ - playwrightï¼
npm install -g playwrightï¼ç¨äº html2pptx ä¸ç HTML 渲æï¼ - react-iconsï¼
npm install -g react-icons react react-domï¼ç¨äºå¾æ ï¼ - sharpï¼
npm install -g sharpï¼ç¨äº SVG å æ ååå¾çå¤çï¼ - LibreOfficeï¼
sudo apt-get install libreofficeï¼ç¨äº PDF 转æ¢ï¼ - Popplerï¼
sudo apt-get install poppler-utilsï¼ç¨äº pdftoppm å° PDF 转æ¢ä¸ºå¾çï¼ - defusedxmlï¼
pip install defusedxmlï¼ç¨äºå®å ¨ç XML è§£æï¼