<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Tom</title>
    <description>The latest articles on DEV Community by Tom (@slideforge_5f3f3f08).</description>
    <link>https://dev.to/slideforge_5f3f3f08</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3876924%2Fdeed0cdd-1ae5-4ef8-9581-092c8a176122.png</url>
      <title>DEV Community: Tom</title>
      <link>https://dev.to/slideforge_5f3f3f08</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/slideforge_5f3f3f08"/>
    <language>en</language>
    <item>
      <title>Using MCP to Generate Slides from Claude Desktop</title>
      <dc:creator>Tom</dc:creator>
      <pubDate>Mon, 13 Apr 2026 15:08:30 +0000</pubDate>
      <link>https://dev.to/slideforge_5f3f3f08/using-mcp-to-generate-slides-from-claude-desktop-8n9</link>
      <guid>https://dev.to/slideforge_5f3f3f08/using-mcp-to-generate-slides-from-claude-desktop-8n9</guid>
      <description>&lt;p&gt;&lt;strong&gt;SlideForge has a native MCP server that lets Claude Desktop generate consulting-quality PowerPoint files.&lt;/strong&gt; Connect in 30 seconds with OAuth 2.1. Your agent gets 27 tools.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is MCP?
&lt;/h2&gt;

&lt;p&gt;MCP (Model Context Protocol) lets AI agents call external tools. Instead of Claude trying to generate a .pptx itself, it calls SlideForge â€” consulting-grade templates, AI creative generation, and visual QA.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 1: Connect (30 seconds)
&lt;/h2&gt;

&lt;p&gt;Add this to your &lt;code&gt;claude_desktop_config.json&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"mcpServers"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"slideforge"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"url"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://api.slideforge.dev/mcp/"&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Restart Claude Desktop. OAuth handles authentication automatically.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Also works with:&lt;/strong&gt; Cursor, Windsurf, Claude Code, and any MCP-compatible client.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 2: Generate a slide
&lt;/h2&gt;

&lt;p&gt;Ask Claude: &lt;em&gt;"Create a KPI dashboard: revenue $12.4M (+18% YoY), 847 new clients (+23%), NPS 71"&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Claude calls &lt;code&gt;suggest_template&lt;/code&gt;, finds a KPI template, calls &lt;code&gt;render_slide&lt;/code&gt;, returns the .pptx with an inline preview. Under 2 seconds.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 3: Iterate
&lt;/h2&gt;

&lt;p&gt;&lt;em&gt;"Make the Revenue metric larger and add a green checkmark icon"&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Claude calls &lt;code&gt;iterate_slide&lt;/code&gt; with your feedback. $0.10 per iteration.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 4: Build a deck
&lt;/h2&gt;

&lt;p&gt;&lt;em&gt;"Create a 5-slide deck about our cloud migration strategy for the CTO"&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Claude calls &lt;code&gt;generate_deck&lt;/code&gt; â€” plans slides, matches templates, generates in parallel, compiles into one .pptx. ~30 seconds.&lt;/p&gt;

&lt;h2&gt;
  
  
  27 MCP Tools
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Category&lt;/th&gt;
&lt;th&gt;Tools&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Slide Generation&lt;/td&gt;
&lt;td&gt;render_slide, generate_slide, iterate_slide, render_spec, suggest_layout, render_preflight&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Deck Workflows&lt;/td&gt;
&lt;td&gt;generate_deck, consulting_deck, assemble_deck, fork_deck, translate_deck&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Discovery&lt;/td&gt;
&lt;td&gt;suggest_template, search_templates, list_templates, search_components, list_components&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Jobs &amp;amp; Status&lt;/td&gt;
&lt;td&gt;get_slide_status, list_jobs&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Account&lt;/td&gt;
&lt;td&gt;get_me, get_usage, get_capabilities, get_agent_onboarding, list_themes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Utilities&lt;/td&gt;
&lt;td&gt;upload_file, submit_feedback&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Pricing
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Template render: $0.03-$0.05/slide (&amp;lt;1s)&lt;/li&gt;
&lt;li&gt;AI generate: $0.20/slide (~30s)&lt;/li&gt;
&lt;li&gt;Iterate: $0.10&lt;/li&gt;
&lt;li&gt;Translate: $0.02/slide&lt;/li&gt;
&lt;li&gt;PDF to PPTX: $0.01/page&lt;/li&gt;
&lt;li&gt;Free trial: $3 credit on signup&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://slideforge.dev/docs/mcp" rel="noopener noreferrer"&gt;Full MCP setup guide&lt;/a&gt; | &lt;a href="https://slideforge.dev/sign-up" rel="noopener noreferrer"&gt;Sign up free&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Originally published at &lt;a href="https://slideforge.dev/blog/mcp-slides-claude" rel="noopener noreferrer"&gt;slideforge.dev&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>mcp</category>
      <category>claude</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Automate PowerPoint Reports from Excel with Python</title>
      <dc:creator>Tom</dc:creator>
      <pubDate>Mon, 13 Apr 2026 15:03:54 +0000</pubDate>
      <link>https://dev.to/slideforge_5f3f3f08/automate-powerpoint-reports-from-excel-with-python-42i3</link>
      <guid>https://dev.to/slideforge_5f3f3f08/automate-powerpoint-reports-from-excel-with-python-42i3</guid>
      <description>&lt;p&gt;&lt;strong&gt;You can automate your weekly PowerPoint reports from Excel data with 10 lines of Python â€” no manual formatting, no copy-pasting charts, no last-minute slide tweaks.&lt;/strong&gt; This guide shows two approaches: python-pptx for full control, and SlideForge's API for consulting-quality output in seconds.&lt;/p&gt;

&lt;h2&gt;
  
  
  The problem: manual report decks
&lt;/h2&gt;

&lt;p&gt;Every Monday morning, someone opens an Excel file, copies numbers into a PowerPoint template, screenshots a chart, pastes it, adjusts the alignment. For a 15-slide weekly report, this takes 1-2 hours. Every week.&lt;/p&gt;

&lt;h2&gt;
  
  
  Approach 1: python-pptx (free, full control)
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;pandas&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;pd&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;pptx&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;Presentation&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;pptx.util&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;Inches&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Pt&lt;/span&gt;

&lt;span class="n"&gt;df&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;pd&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;read_excel&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;weekly_metrics.xlsx&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;sheet_name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Summary&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;prs&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Presentation&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="n"&gt;slide&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;prs&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;slides&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;add_slide&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;prs&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;slide_layouts&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
&lt;span class="n"&gt;txBox&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;slide&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;shapes&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;add_textbox&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;Inches&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="nc"&gt;Inches&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="nc"&gt;Inches&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="nc"&gt;Inches&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;span class="n"&gt;txBox&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;text_frame&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;text&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Weekly Report&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="n"&gt;txBox&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;text_frame&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;paragraphs&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="n"&gt;font&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;size&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Pt&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;36&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="c1"&gt;# ... 500+ lines for a full 15-slide deck
&lt;/span&gt;&lt;span class="n"&gt;prs&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;save&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;weekly_report.pptx&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This works, but maintaining 500+ lines of layout code is a burden.&lt;/p&gt;

&lt;h2&gt;
  
  
  Approach 2: SlideForge API (10 lines)
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;

&lt;span class="n"&gt;resp&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;post&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://api.slideforge.dev/v1/render&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;headers&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Authorization&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Bearer sf_live_YOUR_KEY&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="n"&gt;json&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;template&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;kpi_dashboard&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;params&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;title&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Week 14 Performance&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;metrics&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
                &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;value&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;$12.4M&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;label&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Revenue&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;trend&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;+18%&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;trend_dir&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;up&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
                &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;value&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;847&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;label&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Clients&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;trend&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;+23%&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;trend_dir&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;up&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
            &lt;span class="p"&gt;],&lt;/span&gt;
        &lt;span class="p"&gt;},&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;theme_id&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;consulting_blue&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;resp&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;()[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;pptx_url&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;  &lt;span class="c1"&gt;# ready in &amp;lt;1s
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;$0.03 per slide. For a full deck, use the deck endpoint (~3s for 5 slides in parallel).&lt;/p&gt;

&lt;h2&gt;
  
  
  Scheduling
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Cron:&lt;/strong&gt; &lt;code&gt;0 7 * * 1 python3 weekly_report.py&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;GitHub Actions:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;on&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;schedule&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;cron&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;'&lt;/span&gt;&lt;span class="s"&gt;0&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;7&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;*&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;*&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;1'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Also works with Airflow, n8n, and Zapier.&lt;/p&gt;

&lt;h2&gt;
  
  
  Cost comparison
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;python-pptx:&lt;/strong&gt; Free, 500+ lines, 2-4 hours to build&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;SlideForge:&lt;/strong&gt; $0.03-$0.05/slide = &lt;strong&gt;$23-39/year&lt;/strong&gt; for a 15-slide weekly report&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Manual:&lt;/strong&gt; 1-2 hours/week = $2,500-5,000/year&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://slideforge.dev/sign-up" rel="noopener noreferrer"&gt;Sign up&lt;/a&gt; for $3 free credit.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Originally published at &lt;a href="https://slideforge.dev/blog/automate-powerpoint-excel-python" rel="noopener noreferrer"&gt;slideforge.dev&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

</description>
      <category>python</category>
      <category>automation</category>
      <category>api</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>How to Convert PDF to Editable PowerPoint via API</title>
      <dc:creator>Tom</dc:creator>
      <pubDate>Mon, 13 Apr 2026 15:01:55 +0000</pubDate>
      <link>https://dev.to/slideforge_5f3f3f08/how-to-convert-pdf-to-editable-powerpoint-via-api-2o1i</link>
      <guid>https://dev.to/slideforge_5f3f3f08/how-to-convert-pdf-to-editable-powerpoint-via-api-2o1i</guid>
      <description>&lt;p&gt;&lt;strong&gt;SlideForge can convert a PDF back into an editable .pptx file — with real text boxes, shapes, and images — not a rasterized image pasted onto a slide.&lt;/strong&gt; Upload a PDF exported from PowerPoint, Keynote, Google Slides, Canva, or LaTeX Beamer, and get an editable deck in seconds. $0.01 per page, fully automated via API.&lt;/p&gt;

&lt;h2&gt;
  
  
  The problem: PDFs are a dead end
&lt;/h2&gt;

&lt;p&gt;You receive a competitor's deck as a PDF. A client sends last quarter's board presentation. Your design team exports to PDF "for safety." Now you need to update one number, swap a logo, or translate it into German. You can't. The PDF is a sealed format.&lt;/p&gt;

&lt;p&gt;The usual options are terrible:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Adobe Acrobat "Export to PowerPoint"&lt;/strong&gt; — rasterizes every element into background images. Text boxes are fake overlays. Fonts don't match.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;SmallPDF / iLovePDF / CloudConvert&lt;/strong&gt; — same approach. OCR + image paste. Not editable in any meaningful way.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Manual recreation&lt;/strong&gt; — open the PDF, squint at the layout, rebuild it from scratch in PowerPoint. Takes hours per deck.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  How SlideForge does it differently: vector extraction
&lt;/h2&gt;

&lt;p&gt;SlideForge doesn't OCR your PDF. It reads the actual vector content stream — the same drawing commands that placed shapes, positioned text runs, and embedded images. The engine reconstructs these as real PowerPoint objects: text boxes with the original font and size, rectangles with the original fill colors, images at their source resolution.&lt;/p&gt;

&lt;p&gt;The result: you open the .pptx in PowerPoint and click on any element. It's a real shape. You can edit the text, change the color, move it, delete it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 1: Analyze (free)
&lt;/h2&gt;

&lt;p&gt;Before converting, check what you're working with:&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 2: Convert
&lt;/h2&gt;

&lt;p&gt;Returns  with a . Poll  for progress and the final .&lt;/p&gt;

&lt;h2&gt;
  
  
  What gets preserved
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Text&lt;/strong&gt; — original font family, size, color, bold/italic&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Shapes&lt;/strong&gt; — rectangles, rounded rects, ovals, lines, freeform paths&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Images&lt;/strong&gt; — embedded at source resolution&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tables&lt;/strong&gt; — reconstructed as PowerPoint table objects&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Layout&lt;/strong&gt; — element positioning matches the original PDF&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Supported sources
&lt;/h2&gt;

&lt;p&gt;PowerPoint, Apple Keynote, Google Slides, Canva, LaTeX Beamer, LibreOffice Impress. The  endpoint tells you whether a specific PDF is supported.&lt;/p&gt;

&lt;h2&gt;
  
  
  Pricing
&lt;/h2&gt;

&lt;p&gt;$0.01 per page. A 24-page deck costs $0.24. Failed extractions are refunded.&lt;/p&gt;

&lt;h2&gt;
  
  
  Get started
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://slideforge.dev/sign-up" rel="noopener noreferrer"&gt;Sign up&lt;/a&gt; for $3 free credit (enough for 300 pages), or &lt;a href="https://slideforge.dev/docs/quickstart" rel="noopener noreferrer"&gt;read the quickstart&lt;/a&gt;.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Originally published at &lt;a href="https://slideforge.dev/blog/pdf-to-editable-powerpoint" rel="noopener noreferrer"&gt;slideforge.dev&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

</description>
      <category>python</category>
      <category>api</category>
      <category>pdf</category>
      <category>tutorial</category>
    </item>
  </channel>
</rss>
