{"id":35174590,"url":"https://github.com/atharva9167j/dom-to-pptx","last_synced_at":"2026-05-03T18:08:13.189Z","repository":{"id":326932526,"uuid":"1107187814","full_name":"atharva9167j/dom-to-pptx","owner":"atharva9167j","description":"A client-side library that converts any HTML element into a fully editable PowerPoint slide. **dom-to-pptx** transforms DOM structures into pixel-accurate `.pptx` content, preserving gradients, shadows, rounded images, and responsive layouts.","archived":false,"fork":false,"pushed_at":"2026-01-12T03:29:27.000Z","size":291,"stargazers_count":34,"open_issues_count":1,"forks_count":6,"subscribers_count":0,"default_branch":"master","last_synced_at":"2026-01-12T10:20:10.440Z","etag":null,"topics":["client-side-pptx","convert-html","css-to-powerpoint","css-to-pptx","dom","dom-to-pptx","html-to-powerpoint","html-to-ppt","html-to-pptx","layout-engine","npm-package","powerpoint","powerpoint-presentation","pptx","pptx-creator","presentation-generator","slides-creation","web-to-powerpoint","web-to-pptx"],"latest_commit_sha":null,"homepage":"https://www.npmjs.com/package/dom-to-pptx","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/atharva9167j.png","metadata":{"files":{"readme":"Readme.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":"SUPPORTED.md","governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-11-30T18:38:01.000Z","updated_at":"2026-01-12T03:23:47.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/atharva9167j/dom-to-pptx","commit_stats":null,"previous_names":["atharva9167j/dom-to-pptx"],"tags_count":10,"template":false,"template_full_name":null,"purl":"pkg:github/atharva9167j/dom-to-pptx","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/atharva9167j%2Fdom-to-pptx","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/atharva9167j%2Fdom-to-pptx/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/atharva9167j%2Fdom-to-pptx/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/atharva9167j%2Fdom-to-pptx/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/atharva9167j","download_url":"https://codeload.github.com/atharva9167j/dom-to-pptx/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/atharva9167j%2Fdom-to-pptx/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28384004,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-13T10:34:27.190Z","status":"ssl_error","status_checked_at":"2026-01-13T10:34:26.289Z","response_time":56,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["client-side-pptx","convert-html","css-to-powerpoint","css-to-pptx","dom","dom-to-pptx","html-to-powerpoint","html-to-ppt","html-to-pptx","layout-engine","npm-package","powerpoint","powerpoint-presentation","pptx","pptx-creator","presentation-generator","slides-creation","web-to-powerpoint","web-to-pptx"],"created_at":"2025-12-28T21:54:51.783Z","updated_at":"2026-05-03T18:08:13.182Z","avatar_url":"https://github.com/atharva9167j.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# dom-to-pptx\n\n**The High-Fidelity HTML to PowerPoint Converter (v1.1.8)**\n\n\u003e [!TIP]\n\u003e **Quick Start for AI Agents (Claude Code, Gemini, Windsurf):**\n\u003e Run `npx dom-to-pptx-skills` to automatically install professional PPT creation skills into your agent's toolkit.\n\n---\n\nMost HTML-to-PPTX libraries fail when faced with modern web design. They break on gradients, misalign text, ignore rounded corners, or simply take a screenshot (which isn't editable).\n\n**dom-to-pptx** is different. It is a **Coordinate Scraper \u0026 Style Engine** that traverses your DOM, calculates the exact computed styles of every element (Flexbox/Grid positions, complex gradients, shadows), and mathematically maps them to native PowerPoint shapes and text boxes. The result is a fully editable, vector-sharp presentation that looks exactly like your web view.\n\n### 🛠️ Updates in v1.1.8\n\n- **XML Namespace Integrity**: Fixed a critical bug where font embedding caused PPTX corruption. Now uses explicit OpenXML namespaces for valid OOXML generation.\n- **Vertical Alignment Precision**: Fixed a regression where tall elements defaulted to middle-alignment. Standard block elements are now correctly top-aligned by default.\n- **`vertical-align` Support**: Added support for explicit CSS `vertical-align` (middle/bottom) mapping directly to PowerPoint text box vertical alignment.\n- **Enhanced Inset Logic**: Improved padding handling; centered text now correctly respects and preserves container insets (padding).\n\n## Features\n\n### 🚀 New in v1.1.0\n\n- **Smart Font Embedding:** The library **automatically detects** the fonts used in your HTML, finds their URLs in your CSS, and embeds them into the PPTX. Your slides will look identical on any computer, even if the user doesn't have the fonts installed.\n- **Enhanced Icon Support:** Flawless rendering of FontAwesome, Material Icons, and SVG-based icon libraries (including gradient text icons).\n\n### 🎨 Advanced Visual Fidelity\n\n- **Complex Gradients:** Includes a built-in CSS Gradient Parser that converts `linear-gradient` strings (with multiple stops, specific angles like `45deg`, and transparency) into vector SVGs.\n- **Mathematically Accurate Shadows:** Converts CSS Cartesian shadows (`x`, `y`, `blur`) into PowerPoint's Polar coordinate system (`angle`, `distance`) for 1:1 depth matching.\n- **Anti-Halo Image Processing:** Uses off-screen HTML5 Canvas with `source-in` composite masking to render rounded images without the ugly white \"halo\" artifacts found in other libraries.\n- **Soft Edges/Blurs:** Accurately translates CSS `filter: blur()` into PowerPoint's soft-edge effects, preserving visual depth.\n\n### 📐 Smart Layout \u0026 Typography\n\n- **Auto-Scaling Engine:** Build your slide in HTML at **1920x1080** (or any aspect ratio). The library automatically calculates the scaling factor to fit it perfectly into a standard 16:9 PowerPoint slide.\n- **Rich Text Blocks:** Handles mixed-style text (e.g., **bold** spans inside a normal paragraph).\n- **Text Transformations:** Supports CSS `text-transform: uppercase/lowercase` and `letter-spacing`.\n\n### ⚡ Technical Capabilities\n\n- **Z-Index Handling:** Respects DOM order for correct layering of elements.\n- **Border Radius Math:** Calculates perfect corner rounding percentages based on element dimensions.\n- **Client-Side:** Runs entirely in the browser. No server required.\n\n## Installation\n\n```bash\nnpm install dom-to-pptx\n```\n\n## 🤖 AI Skills Installation (New!)\n\nYou can now install the **dom-to-pptx skills** directly into your favorite AI agent (Claude Code, Gemini CLI, Windsurf, etc.) to help it generate high-fidelity presentations.\n\nRun the following command to start the interactive installer:\n\n```bash\nnpx dom-to-pptx-skills\n```\n\nThe installer will ask you:\n1. **Which AI Agent** you are using.\n2. **Installation scope** (Local `.agent/skills` for current project or Global for all projects).\n3. It will then automatically copy the latest optimized prompts and templates to your agent's directory.\n\n---\n\n## Usage\n\nThis library is intended for use in the browser (React, Vue, Svelte, Vanilla JS, etc.).\n\n### 1. Basic Example (Auto-Font Embedding)\n\nBy default, `dom-to-pptx` attempts to automatically find and embed your web fonts.\n\n```javascript\nimport { exportToPptx } from 'dom-to-pptx';\n\ndocument.getElementById('export-btn').addEventListener('click', async () =\u003e {\n  // Pass the CSS selector of the container\n  await exportToPptx('#slide-container', {\n    fileName: 'slide-presentation.pptx',\n  });\n});\n```\n\n### 2. Manual Font Configuration (Optional)\n\nIf you are using external fonts (like Google Fonts) that are hosted on a server without CORS headers, automatic detection might fail. In that case, you can explicitly pass the font URLs:\n\n```javascript\nimport { exportToPptx } from 'dom-to-pptx';\n\nawait exportToPptx('#slide-container', {\n  fileName: 'report.pptx',\n  // Optional: Only needed if auto-detection fails due to CORS\n  fonts: [\n    {\n      name: 'Roboto',\n      url: 'https://fonts.gstatic.com/s/roboto/v30/KFOmCnqEu92Fr1Mu4mxK.woff2',\n    },\n  ],\n});\n```\n\n### 3. Multi-Slide Example\n\nTo export multiple HTML elements as separate slides, pass an array of elements or selectors:\n\n```javascript\nimport { exportToPptx } from 'dom-to-pptx';\n\ndocument.getElementById('export-btn').addEventListener('click', async () =\u003e {\n  const slideElements = document.querySelectorAll('.slide');\n  await exportToPptx(Array.from(slideElements), {\n    fileName: 'multi-slide-presentation.pptx',\n  });\n});\n```\n\n### 4. SVG Vector Export (Editable Charts)\n\nIf your HTML contains SVG elements (like charts), you can keep them as vectors for editing in PowerPoint:\n\n```javascript\nimport { exportToPptx } from 'dom-to-pptx';\n\nawait exportToPptx('#slide-with-charts', {\n  fileName: 'editable-charts.pptx',\n  svgAsVector: true, // SVGs remain as vectors, not rasterized\n});\n```\n\nIn PowerPoint, right-click the SVG image and select **\"Convert to Shape\"** (or **Group \u003e Ungroup**) to make it fully editable.\n\n### 5. Browser Usage (Script Tags)\n\nYou can use `dom-to-pptx` directly via CDN. The bundle includes all dependencies.\n\n```html\n\u003cscript src=\"https://cdn.jsdelivr.net/npm/dom-to-pptx@latest/dist/dom-to-pptx.bundle.js\"\u003e\u003c/script\u003e\n\n\u003cscript\u003e\n  document.getElementById('export-btn').addEventListener('click', async () =\u003e {\n    // The library is available globally as `domToPptx`\n    await domToPptx.exportToPptx('#slide-container', {\n      fileName: 'slide.pptx',\n    });\n  });\n\u003c/script\u003e\n```\n\n## Recommended HTML Structure\n\nWe recommend building your slide container at **1920x1080px**. The library will handle the downscaling to fit the PowerPoint slide (16:9).\n\n```html\n\u003c!-- Container (16:9 Aspect Ratio) --\u003e\n\u003c!-- The library will capture this background color/gradient automatically --\u003e\n\u003cdiv\n  id=\"slide-container\"\n  class=\"slide w-[1000px] h-[562px] bg-white rounded-xl overflow-hidden relative shadow-2xl shadow-black/50 flex\"\n\u003e\n  \u003c!-- Left Sidebar --\u003e\n  \u003cdiv class=\"w-1/3 bg-slate-900 relative overflow-hidden flex flex-col p-10 justify-between\"\u003e\n    \u003c!-- Decorative gradients --\u003e\n    \u003cdiv class=\"absolute top-0 left-0 w-full h-full opacity-30 pointer-events-none\"\u003e\n      \u003cdiv\n        class=\"absolute -top-20 -left-20 w-64 h-64 bg-purple-600 rounded-full blur-3xl mix-blend-screen\"\n      \u003e\u003c/div\u003e\n      \u003cdiv\n        class=\"absolute bottom-0 right-0 w-80 h-80 bg-indigo-600 rounded-full blur-3xl mix-blend-screen\"\n      \u003e\u003c/div\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"relative z-10\"\u003e\n      \u003cdiv\n        class=\"inline-flex items-center gap-2 px-3 py-1 rounded-full bg-white/10 border border-white/10 backdrop-blur-md mb-6\"\n      \u003e\n        \u003cspan class=\"w-2 h-2 rounded-full bg-green-400 animate-pulse\"\u003e\u003c/span\u003e\n        \u003cspan class=\"text-xs font-medium text-slate-300 tracking-wider\"\u003eLIVE DATA\u003c/span\u003e\n      \u003c/div\u003e\n      \u003ch2 class=\"text-4xl font-bold text-white leading-tight mb-4\"\u003e\n        Quarterly \u003cbr /\u003e\n        \u003cspan class=\"text-transparent bg-clip-text bg-gradient-to-r from-indigo-400 to-cyan-400\"\n          \u003ePerformance\u003c/span\n        \u003e\n      \u003c/h2\u003e\n      \u003cp class=\"text-slate-400 leading-relaxed\"\u003e\n        Visualizing the impact of high-fidelity DOM conversion on presentation workflows.\n      \u003c/p\u003e\n    \u003c/div\u003e\n    \u003c!-- Feature List (Flexbox/Grid test) --\u003e\n    \u003cdiv class=\"relative z-10 space-y-4\"\u003e\n      \u003cdiv class=\"flex items-center gap-3 p-3 rounded-lg bg-white/5 border border-white/5\"\u003e\n        \u003cdiv\n          class=\"w-8 h-8 rounded-full bg-indigo-500/20 flex items-center justify-center text-indigo-400 font-bold\"\n        \u003e\n          1\n        \u003c/div\u003e\n        \u003cdiv class=\"text-sm text-slate-300\"\u003ePixel-perfect Shadows\u003c/div\u003e\n      \u003c/div\u003e\n      \u003cdiv class=\"flex items-center gap-3 p-3 rounded-lg bg-white/5 border border-white/5\"\u003e\n        \u003cdiv\n          class=\"w-8 h-8 rounded-full bg-purple-500/20 flex items-center justify-center text-purple-400 font-bold\"\n        \u003e\n          2\n        \u003c/div\u003e\n        \u003cdiv class=\"text-sm text-slate-300\"\u003eComplex Gradients\u003c/div\u003e\n      \u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n  \u003c!-- Right Content --\u003e\n  \u003cdiv class=\"w-2/3 bg-slate-50 p-10 relative\"\u003e\n    \u003c!-- Header --\u003e\n    \u003cdiv class=\"flex justify-between items-start mb-10\"\u003e\n      \u003cdiv\u003e\n        \u003ch3 class=\"text-slate-800 font-bold text-xl\"\u003eRevenue Breakdown\u003c/h3\u003e\n        \u003cp class=\"text-slate-500 text-sm\"\u003eFiscal Year 2024\u003c/p\u003e\n      \u003c/div\u003e\n      \u003cdiv class=\"flex -space-x-2\"\u003e\n        \u003c!-- Rounded Images Test (CORS friendly) --\u003e\n        \u003cimg\n          class=\"w-10 h-10 rounded-full border-2 border-white object-cover shadow-md\"\n          src=\"https://images.unsplash.com/photo-1534528741775-53994a69daeb?auto=format\u0026amp;fit=crop\u0026amp;w=64\u0026amp;h=64\"\n          alt=\"User 1\"\n        /\u003e\n        \u003cimg\n          class=\"w-10 h-10 rounded-full border-2 border-white object-cover shadow-md\"\n          src=\"https://images.unsplash.com/photo-1506794778202-cad84cf45f1d?auto=format\u0026amp;fit=crop\u0026amp;w=64\u0026amp;h=64\"\n          alt=\"User 2\"\n        /\u003e\n        \u003cdiv\n          class=\"w-10 h-10 rounded-full border-2 border-white bg-slate-200 flex items-center justify-center text-xs font-bold text-slate-500 shadow-md\"\n        \u003e\n          +5\n        \u003c/div\u003e\n      \u003c/div\u003e\n    \u003c/div\u003e\n    \u003c!-- Grid Layout Test --\u003e\n    \u003cdiv class=\"grid grid-cols-2 gap-6 mb-8\"\u003e\n      \u003c!-- Card 1: Gradient \u0026 Shadow --\u003e\n      \u003cdiv\n        class=\"bg-white p-5 rounded-xl complex-shadow border border-slate-100 relative overflow-hidden group\"\n      \u003e\n        \u003cdiv class=\"relative z-10\"\u003e\n          \u003cp class=\"text-xs font-bold text-indigo-500 uppercase tracking-wider mb-1\"\u003eTotal Sales\u003c/p\u003e\n          \u003ch4 class=\"text-3xl font-bold text-slate-800\"\u003e$124,500\u003c/h4\u003e\n          \u003cdiv class=\"mt-3 flex items-center text-xs font-semibold text-green-600\"\u003e\n            \u003csvg class=\"w-3 h-3 mr-1\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\"\u003e\n              \u003cpath\n                stroke-linecap=\"round\"\n                stroke-linejoin=\"round\"\n                stroke-width=\"2\"\n                d=\"M13 7h8m0 0v8m0-8l-8 8-4-4-6 6\"\n              \u003e\u003c/path\u003e\n            \u003c/svg\u003e\n            \u003cspan\u003e+14.5%\u003c/span\u003e\n          \u003c/div\u003e\n        \u003c/div\u003e\n      \u003c/div\u003e\n      \u003c!-- Card 2: Gradient Border/Background --\u003e\n      \u003cdiv\n        class=\"p-5 rounded-xl shadow-lg text-white relative overflow-hidden\"\n        style=\"\n          background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);\n        \"\n      \u003e\n        \u003cp class=\"text-xs font-bold text-white/80 uppercase tracking-wider mb-1\"\u003eActive Users\u003c/p\u003e\n        \u003ch4 class=\"text-3xl font-bold text-white\"\u003e45.2k\u003c/h4\u003e\n        \u003cdiv class=\"mt-3 w-full bg-black/20 rounded-full h-1.5\"\u003e\n          \u003cdiv class=\"bg-white/90 h-1.5 rounded-full\" style=\"width: 70%\"\u003e\u003c/div\u003e\n        \u003c/div\u003e\n      \u003c/div\u003e\n    \u003c/div\u003e\n    \u003c!-- Complex Typography \u0026 Layout --\u003e\n    \u003cdiv class=\"bg-indigo-50/50 rounded-xl p-6 border border-indigo-100\"\u003e\n      \u003ch5 class=\"font-bold text-indigo-900 mb-3\"\u003eAnalysis Summary\u003c/h5\u003e\n      \u003cp class=\"text-indigo-800/80 text-sm leading-relaxed\"\u003e\n        The\n        \u003cspan class=\"font-bold text-indigo-600\"\u003eQ3 projection\u003c/span\u003e\n        exceeds expectations due to the new\n        \u003cspan class=\"italic\"\u003eoptimization algorithm\u003c/span\u003e. We observed a\n        \u003cstrong class=\"text-indigo-700\"\u003e240% increase\u003c/strong\u003e\n        in processing speed across all nodes.\n      \u003c/p\u003e\n    \u003c/div\u003e\n    \u003c!-- Floating Badge (Absolute positioning test) --\u003e\n    \u003cdiv\n      class=\"absolute bottom-6 right-6 bg-white/90 backdrop-blur px-4 py-2 rounded-lg shadow-lg border border-slate-200 flex items-center gap-2\"\n    \u003e\n      \u003cdiv class=\"w-2 h-2 rounded-full bg-red-500\"\u003e\u003c/div\u003e\n      \u003cspan class=\"text-xs font-bold text-slate-600 uppercase\"\u003eConfidential\u003c/span\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n```\n\n## API\n\n### `exportToPptx(elementOrSelector, options)`\n\nReturns: `Promise\u003cBlob\u003e` - Resolves with the generated PPTX file data (Blob).\n\n| Parameter           | Type                                                        | Description                                                                                                        |\n| :------------------ | :---------------------------------------------------------- | :----------------------------------------------------------------------------------------------------------------- |\n| `elementOrSelector` | `string` \\| `HTMLElement` \\| `Array\u003cstring \\| HTMLElement\u003e` | The DOM node(s) or ID selector(s) to convert. Can be a single element/selector or an array for multi-slide export. |\n| `options`           | `object`                                                    | Configuration object.                                                                                              |\n\n**Options Object:**\n\n| Key              | Type      | Default         | Description                                                                                                   |\n| :--------------- | :-------- | :-------------- | :------------------------------------------------------------------------------------------------------------ |\n| `fileName`       | `string`  | `\"export.pptx\"` | The name of the downloaded file.                                                                              |\n| `autoEmbedFonts` | `boolean` | `true`          | Automatically detect and embed used fonts.                                                                    |\n| `fonts`          | `Array`   | `[]`            | Manual array of font objects: `{ name, url }`.                                                                |\n| `skipDownload`   | `boolean` | `false`         | If `true`, the file is not downloaded automatically. Use the returned `Blob` for custom handling (upload).    |\n| `svgAsVector`    | `boolean` | `false`         | If `true`, keeps SVG elements as vectors (not rasterized). Enables \"Convert to Shape\" in PowerPoint.          |\n| `layout`         | `string`  | `\"LAYOUT_16x9\"` | Slide layout name (e.g., `LAYOUT_4x3`, `LAYOUT_16x10`, `LAYOUT_WIDE`).                                        |\n| `width`          | `number`  | `10`            | Custom slide width in inches (requires `height` to be set).                                                   |\n| `height`         | `number`  | `5.625`         | Custom slide height in inches (requires `width` to be set).                                                   |\n| `listConfig`     | `object`  | `undefined`     | Global overrides for list styles. Structure: `{ color: string, spacing: { before: number, after: number } }`. |\n\n**List Configuration Example:**\n\n```javascript\nlistConfig: {\n  spacing: {\n    before: 10,       // Space before bullet (pt)\n    after: 5          // Space after bullet (pt)\n  }\n}\n```\n\n## Important Notes\n\n1.  **Fonts \u0026 CORS:**\n    - **Automatic Embedding:** Works perfectly for local fonts and external fonts served with correct CORS headers.\n    - **Google Fonts:** For auto-detection to work with Google Fonts, you must add `crossorigin=\"anonymous\"` to your link tag:\n      `\u003clink href=\"https://fonts.googleapis.com/...\" rel=\"stylesheet\" crossorigin=\"anonymous\"\u003e`\n    - If a font cannot be accessed due to CORS, the library will log a warning and proceed without embedding it (PowerPoint will fallback to Arial).\n\n2.  **Layout System:** The library does not \"read\" Flexbox or Grid definitions directly. It measures the final `x, y, width, height` of every element relative to the slide root and places them absolutely. This ensures 100% visual accuracy regardless of the CSS layout method used.\n\n3.  **CORS Images:** External images (`\u003cimg\u003e` tags) must also be served with `Access-Control-Allow-Origin: *` headers to be processed by the rounding/masking engine.\n\n## License\n\nMIT © [Atharva Dharmendra Jagtap](https://github.com/atharva9167j) and `dom-to-pptx` contributors.\n\n## Acknowledgements\n\nThis project is built on top of [PptxGenJS](https://github.com/gitbrent/PptxGenJS). Huge thanks to the PptxGenJS maintainers and all contributors — dom-to-pptx leverages and extends their excellent work on PPTX generation.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fatharva9167j%2Fdom-to-pptx","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fatharva9167j%2Fdom-to-pptx","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fatharva9167j%2Fdom-to-pptx/lists"}