pptx
npx skills add https://github.com/marcelleon/skills-zh --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ã
设计åå
å ³é®ï¼å¨åå»ºä»»ä½æ¼ç¤ºæç¨¿ä¹åï¼åæå 容并鿩éå½ç设计å ç´ ï¼
- èè主é¢å å®¹ï¼æ¤æ¼ç¤ºæç¨¿æ¯å ³äºä»ä¹çï¼å®æç¤ºä»ä¹è¯è°ãè¡ä¸ææ°å´ï¼
- æ£æ¥åçï¼å¦æç¨æ·æåå ¬å¸/ç»ç»ï¼èèå ¶åçé¢è²åæ è¯
- å°è°è²æ¿ä¸å 容å¹é ï¼éæ©åæ 主é¢çé¢è²
- éè¿°æ¨çæ¹æ³ï¼å¨ç¼å代ç ä¹åè§£éæ¨çè®¾è®¡éæ©
è¦æ±ï¼
- â å¨ç¼å代ç ä¹åéè¿°åºäºå 容çè®¾è®¡æ¹æ³
- â ä» ä½¿ç¨ Web å®å ¨åä½ï¼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å建并ä¿åæ¨¡æ¿æ¸ åæä»¶ï¼å å«ï¼# æ¨¡æ¿æ¸ ååæ **æ»å¹»ç¯çæ°ï¼[æ°é]** **éè¦æç¤ºï¼å¹»ç¯çä» 0 å¼å§ç´¢å¼ï¼ç¬¬ä¸å¼ å¹»ç¯ç = 0ï¼æåä¸å¼ å¹»ç¯ç = æ°é-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", // æ¥èªç¬¬ä¸ä¸ª run "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\": [ { \"text\": \"æ°æ¼ç¤ºæç¨¿æ 颿æ¬\", \"alignment\": \"CENTER\", \"bold\": true }, { \"text\": \"èæ é¢\", \"bold\ }, { \"text\": \"第ä¸ä¸ªè¦ç¹ï¼ä¸å¸¦é¡¹ç®ç¬¦å·ï¼\", \"bullet\": true, ": 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èæ¬åºç¨æ¿æ¢pythts/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 è§£æï¼