<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>PPTX Tersine Mühendisliği on File Format Blog</title>
    <link>https://blog.fileformat.com/tr/tag/pptx-tersine-m%C3%BChendisli%C4%9Fi/</link>
    <description>Recent content in PPTX Tersine Mühendisliği on File Format Blog</description>
    <generator>Hugo -- gohugo.io</generator>
    <language>tr</language>
    <lastBuildDate>Wed, 16 Sep 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://blog.fileformat.com/tr/tag/pptx-tersine-m%C3%BChendisli%C4%9Fi/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>PPTX Tersine Mühendisliği: PowerPoint Dosyalarını İçsel Olarak Anlamak</title>
      <link>https://blog.fileformat.com/tr/presentation/pptx-reverse-engineering-understanding-powerpoint-files-internally/</link>
      <pubDate>Wed, 16 Sep 2026 00:00:00 +0000</pubDate>
      
      <guid>https://blog.fileformat.com/tr/presentation/pptx-reverse-engineering-understanding-powerpoint-files-internally/</guid>
      <description>Bir `.pptx` dosyasının içinde gerçekten neler olduğunu keşfedin. OpenXML paketlemesinin, ilişki grafiklerinin, şekillerin ve çizim işaretlemesinin nasıl çalıştığını öğrenin.</description>
      <content:encoded><![CDATA[<p><strong>Son Güncelleme</strong>: 16 Eyl, 2026</p>
<figure class="align-center ">
    <img loading="lazy" src="images/pptx-reverse-engineering-understanding-powerpoint-files-internally.png#center"
         alt="PPTX Reverse Engineering: Understanding PowerPoint Files Internally"/> 
</figure>

<hr>
<h2 id="tersine-mühendislik-pptx4-dosyaları-geliştiriciler-için-rehber">Tersine Mühendislik <a href="https://docs.fileformat.com/presentation/pptx/">PPTX</a> Dosyaları: Geliştiriciler İçin Rehber</h2>
<p>Modern sunum setleri, yatırımcı sunumlarından iç çeyrek metriklerine kadar her şeyi güçlendirir. Ancak metni programlı olarak çıkarmanız, şablonları çalışma zamanında değiştirmeniz, otomatik slayt oluşturucular inşa etmeniz veya gizli sunumları temizlemeniz gerektiğinde, muhtemelen hızlıca bir şeyi fark etmişsinizdir: standart yüksek seviyeli sunum kütüphaneleri öngörülemez bir kara kutu gibi hissettirebilir.</p>
<p><a href="https://products.fileformat.com/presentation/python/python-pptx/"><code>python-pptx</code></a>, <a href="https://products.fileformat.com/presentation/java/apache-poi-xslf/">Apache POI</a> veya <a href="https://products.fileformat.com/presentation/net/openxmlsdk/">OpenXML SDK</a> gibi kütüphaneler sınırlarına ulaştığında—veya belgelenmemiş düzen hataları ortaya çıkardığında—tek çıkış yolu içeriye girmektir. Bir PowerPoint sunumunun aslında bayt ve şema seviyesinde ne olduğunu anlamalısınız.</p>
<p>Bu derin incelemede, <code>.pptx</code> formatının perdesini aralayacak, iç yapısını açacak, ilişki grafiğini izleyecek, çizim hiyerarşilerini çözümleyecek ve ham kodla sunumları tersine mühendislik, inceleme ve manipülasyon için pratik stratejilere bakacağız.</p>
<h2 id="1-bir-pptx-dosyası-gerçekte-nedir">1. Bir <code>.pptx</code> Dosyası Gerçekte Nedir?</h2>
<p>Özünde, bir <code>.pptx</code> dosyası, 1990&rsquo;ların eski <code>.ppt</code> formatı gibi tescilli tek parça ikili bir dosya değildir. Microsoft, Office Open XML&rsquo;i (ECMA-376 ve ISO/IEC 29500) tanıttığından beri, modern Office belgeleri <strong>Open Packaging Conventions (OPC) arşivleri</strong>dir.</p>
<p>Basit bir dille: <strong>bir <code>.pptx</code> dosyası, XML belgeleri ve medya varlıklarını belirli bir dizin ağacında düzenlenmiş bir zip arşivi olarak içerir.</strong></p>
<p>Bunu, standart terminal araçlarını kullanarak saniyeler içinde kanıtlayabilirsiniz:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span><span style="color:#75715e"># Rename the extension and unpack it</span>
</span></span><span style="display:flex;"><span>cp presentation.pptx presentation.zip
</span></span><span style="display:flex;"><span>unzip presentation.zip -d presentation_unpacked/
</span></span><span style="display:flex;"><span>cd presentation_unpacked/
</span></span><span style="display:flex;"><span>tree -L <span style="color:#ae81ff">2</span>
</span></span></code></pre></div><p>Ortaya çıkan dizin ağacı şaşırtıcı derecede tutarlı görünür:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-text" data-lang="text"><span style="display:flex;"><span>.
</span></span><span style="display:flex;"><span>├── [Content_Types].xml
</span></span><span style="display:flex;"><span>├── _rels/
</span></span><span style="display:flex;"><span>│   └── .rels
</span></span><span style="display:flex;"><span>├── docProps/
</span></span><span style="display:flex;"><span>│   ├── app.xml
</span></span><span style="display:flex;"><span>│   └── core.xml
</span></span><span style="display:flex;"><span>└── ppt/
</span></span><span style="display:flex;"><span>    ├── presentation.xml
</span></span><span style="display:flex;"><span>    ├── _rels/
</span></span><span style="display:flex;"><span>    ├── slides/
</span></span><span style="display:flex;"><span>    ├── slideLayouts/
</span></span><span style="display:flex;"><span>    ├── slideMasters/
</span></span><span style="display:flex;"><span>    ├── theme/
</span></span><span style="display:flex;"><span>    └── media/
</span></span></code></pre></div><p>Her bir görsel varlık, geçiş, slayt ana şablon kalıtımı, metin kutusu koordinatı ve vektör grafik bu dosya hiyerarşisinde kodlanmıştır.</p>
<h2 id="2-paketin-anatomisi-temel-alt-sistemler">2. Paketin Anatomisi: Temel Alt Sistemler</h2>
<p>Sunumları etkili bir şekilde tersine mühendislik yapmak için, her üst düzey bileşenin sorumluluklarını anlamalısınız.</p>
<h3 id="content_typesxml"><code>[Content_Types].xml</code></h3>
<p>Bu, OPC okuyucusu için giriş manifestosudur. Dosya uzantılarını ve açık iç parça adlarını standartlaştırılmış MIME/içerik türlerine eşler. Yeni bir slayt oluşturursanız veya bir resim eklerseniz ve bunu <code>[Content_Types].xml</code> içinde bildirmeyi unutursanız, PowerPoint desteyi bozuk olarak ilan eder ve kurtarma için istemde bulunur.</p>
<p>Örnek kod parçacığı:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-xml" data-lang="xml"><span style="display:flex;"><span><span style="color:#f92672">&lt;Types</span> <span style="color:#a6e22e">xmlns=</span><span style="color:#e6db74">&#34;http://schemas.openxmlformats.org/package/2006/content-types&#34;</span><span style="color:#f92672">&gt;</span>
</span></span><span style="display:flex;"><span>  <span style="color:#f92672">&lt;Default</span> <span style="color:#a6e22e">Extension=</span><span style="color:#e6db74">&#34;xml&#34;</span> <span style="color:#a6e22e">ContentType=</span><span style="color:#e6db74">&#34;application/xml&#34;</span><span style="color:#f92672">/&gt;</span>
</span></span><span style="display:flex;"><span>  <span style="color:#f92672">&lt;Default</span> <span style="color:#a6e22e">Extension=</span><span style="color:#e6db74">&#34;rels&#34;</span> <span style="color:#a6e22e">ContentType=</span><span style="color:#e6db74">&#34;application/vnd.openxmlformats-package.relationships+xml&#34;</span><span style="color:#f92672">/&gt;</span>
</span></span><span style="display:flex;"><span>  <span style="color:#f92672">&lt;Default</span> <span style="color:#a6e22e">Extension=</span><span style="color:#e6db74">&#34;png&#34;</span> <span style="color:#a6e22e">ContentType=</span><span style="color:#e6db74">&#34;image/png&#34;</span><span style="color:#f92672">/&gt;</span>
</span></span><span style="display:flex;"><span>  <span style="color:#f92672">&lt;Override</span> <span style="color:#a6e22e">PartName=</span><span style="color:#e6db74">&#34;/ppt/presentation.xml&#34;</span> 
</span></span><span style="display:flex;"><span>            <span style="color:#a6e22e">ContentType=</span><span style="color:#e6db74">&#34;application/vnd.openxmlformats-officedocument.presentationml.presentation.main+xml&#34;</span><span style="color:#f92672">/&gt;</span>
</span></span><span style="display:flex;"><span><span style="color:#f92672">&lt;/Types&gt;</span>
</span></span></code></pre></div><h3 id="_rels-ilişki-grafiği"><code>_rels/</code> İlişki Grafiği</h3>
<p>OpenXML&rsquo;deki en kritik kavramlardan biri <strong>ilişkiler aracılığıyla yönlendirme</strong>&lsquo;dir. Bölümler nadiren doğrudan ham dosya yollarına işaret eder. Bunun yerine, bir dosya (ör. <code>slide1.xml</code>) kardeş bir <code>_rels</code> klasöründe bulunan ilişkili bir ilişki dosyasına sahiptir (ör. <code>_rels/slide1.xml.rels</code>).</p>
<p>İlişkiler tanımlar:</p>
<ul>
<li>Köprüler (<code>r:id=&quot;rId2&quot;</code>, TargetMode=&ldquo;External&rdquo;)</li>
<li><code>ppt/media/</code> içinde depolanan görüntüler ve ses izleri</li>
<li>Düzen kalıtım işaretçileri (<code>slideLayout1.xml</code>)</li>
<li>Not slaytları, yorumlar ve gömülü yazı tipleri</li>
</ul>
<h3 id="docprops-meta-verileri"><code>docProps/</code> (Meta Verileri)</h3>
<ul>
<li><strong><code>core.xml</code></strong>: Dublin Core meta verileri—yazar, başlık, oluşturma tarihi, değiştirme zaman damgası.</li>
<li><strong><code>app.xml</code></strong>: Uygulamaya özgü istatistikler—PowerPoint sürümü, toplam slayt sayısı, gizli slayt sayısı, kelime sayısı, sunum şablonu adları.</li>
</ul>
<h3 id="ppt-sunum-motoru"><code>ppt/</code> (Sunum Motoru)</h3>
<p>Gerçek sunumun bulunduğu yer burası:</p>
<ul>
<li><strong><code>presentation.xml</code></strong>: Ana omurga. Slayt kimliklerini, slayt boyut ölçülerini, notlar ana referanslarını ve varsayılan yazı tipi ayarlarını kaydeder.</li>
<li><strong><code>slides/</code></strong>: Tek tek slaytlar (<code>slide1.xml</code>, <code>slide2.xml</code>, vb.).</li>
<li><strong><code>slideLayouts/</code></strong>: Ana yapısal ön ayarlar (Başlık Slaytı, İki Sütun, Bölüm Başlığı).</li>
<li><strong><code>slideMasters/</code></strong>: Küresel stiller, varsayılan paletler, arka plan doldurmaları ve yer tutucu kalıtımı.</li>
<li><strong><code>theme/</code></strong>: Renk paletleri (vurgulama 1&rsquo;den 6&rsquo;ya, koyu/aydınlık varyasyonlar) ve yazı tipi şemaları (büyük/küçük yazı tipleri).</li>
<li><strong><code>media/</code></strong>: Ham görüntüler (PNG, JPEG, SVG), ses ve video dosyaları.</li>
</ul>
<h2 id="3-bir-slaytı-parçalamak-presentationml-p-ve-drawingml-a-deyimleri">3. Bir Slaytı Parçalamak: PresentationML (<code>p:</code>) ve DrawingML (<code>a:</code>) Deyimleri</h2>
<p><code>ppt/slides/slide1.xml</code> dosyasını açtığınızda, iki temel XML ad alanıyla karşılaşırsınız:</p>
<ol>
<li><strong>PresentationML (<code>p:</code>)</strong>: Yapısal sunum öğelerini (slaytlar, şekil ağaçları, tuval grupları) yönetir.</li>
<li><strong>DrawingML (<code>a:</code>)</strong>: Tipografi, geometri, 2D koordinatlar, degrade doldurmalar ve vektör renderlamasını yönetir.</li>
</ol>
<p>Standart bir metin şeklinin nasıl göründüğüne dair sadeleştirilmiş bir örnek burada:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-xml" data-lang="xml"><span style="display:flex;"><span><span style="color:#f92672">&lt;p:sp&gt;</span>
</span></span><span style="display:flex;"><span>  <span style="color:#75715e">&lt;!-- 1. Non-visual shape properties (Identifiers, names) --&gt;</span>
</span></span><span style="display:flex;"><span>  <span style="color:#f92672">&lt;p:nvSpPr&gt;</span>
</span></span><span style="display:flex;"><span>    <span style="color:#f92672">&lt;p:cNvPr</span> <span style="color:#a6e22e">id=</span><span style="color:#e6db74">&#34;4&#34;</span> <span style="color:#a6e22e">name=</span><span style="color:#e6db74">&#34;Title Box 1&#34;</span><span style="color:#f92672">/&gt;</span>
</span></span><span style="display:flex;"><span>    <span style="color:#f92672">&lt;p:cNvSpPr&gt;</span>
</span></span><span style="display:flex;"><span>      <span style="color:#f92672">&lt;a:spLocks</span> <span style="color:#a6e22e">noGrp=</span><span style="color:#e6db74">&#34;1&#34;</span><span style="color:#f92672">/&gt;</span>
</span></span><span style="display:flex;"><span>    <span style="color:#f92672">&lt;/p:cNvSpPr&gt;</span>
</span></span><span style="display:flex;"><span>    <span style="color:#f92672">&lt;p:nvPr&gt;</span>
</span></span><span style="display:flex;"><span>      <span style="color:#f92672">&lt;p:ph</span> <span style="color:#a6e22e">type=</span><span style="color:#e6db74">&#34;title&#34;</span><span style="color:#f92672">/&gt;</span>
</span></span><span style="display:flex;"><span>    <span style="color:#f92672">&lt;/p:nvPr&gt;</span>
</span></span><span style="display:flex;"><span>  <span style="color:#f92672">&lt;/p:nvSpPr&gt;</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>  <span style="color:#75715e">&lt;!-- 2. Visual shape properties (Position, size, geometry) --&gt;</span>
</span></span><span style="display:flex;"><span>  <span style="color:#f92672">&lt;p:spPr&gt;</span>
</span></span><span style="display:flex;"><span>    <span style="color:#f92672">&lt;a:xfrm&gt;</span>
</span></span><span style="display:flex;"><span>      <span style="color:#f92672">&lt;a:off</span> <span style="color:#a6e22e">x=</span><span style="color:#e6db74">&#34;1524000&#34;</span> <span style="color:#a6e22e">y=</span><span style="color:#e6db74">&#34;1143000&#34;</span><span style="color:#f92672">/&gt;</span>
</span></span><span style="display:flex;"><span>      <span style="color:#f92672">&lt;a:ext</span> <span style="color:#a6e22e">cx=</span><span style="color:#e6db74">&#34;9144000&#34;</span> <span style="color:#a6e22e">cy=</span><span style="color:#e6db74">&#34;1828800&#34;</span><span style="color:#f92672">/&gt;</span>
</span></span><span style="display:flex;"><span>    <span style="color:#f92672">&lt;/a:xfrm&gt;</span>
</span></span><span style="display:flex;"><span>    <span style="color:#f92672">&lt;a:prstGeom</span> <span style="color:#a6e22e">prst=</span><span style="color:#e6db74">&#34;rect&#34;</span><span style="color:#f92672">&gt;</span>
</span></span><span style="display:flex;"><span>      <span style="color:#f92672">&lt;a:avLst/&gt;</span>
</span></span><span style="display:flex;"><span>    <span style="color:#f92672">&lt;/a:prstGeom&gt;</span>
</span></span><span style="display:flex;"><span>    <span style="color:#f92672">&lt;a:solidFill&gt;</span>
</span></span><span style="display:flex;"><span>      <span style="color:#f92672">&lt;a:schemeClr</span> <span style="color:#a6e22e">val=</span><span style="color:#e6db74">&#34;accent1&#34;</span><span style="color:#f92672">/&gt;</span>
</span></span><span style="display:flex;"><span>    <span style="color:#f92672">&lt;/a:solidFill&gt;</span>
</span></span><span style="display:flex;"><span>  <span style="color:#f92672">&lt;/p:spPr&gt;</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>  <span style="color:#75715e">&lt;!-- 3. Text Body (Paragraphs, runs, styling) --&gt;</span>
</span></span><span style="display:flex;"><span>  <span style="color:#f92672">&lt;p:txBody&gt;</span>
</span></span><span style="display:flex;"><span>    <span style="color:#f92672">&lt;a:bodyPr</span> <span style="color:#a6e22e">rtlCol=</span><span style="color:#e6db74">&#34;0&#34;</span> <span style="color:#a6e22e">anchor=</span><span style="color:#e6db74">&#34;ctr&#34;</span><span style="color:#f92672">/&gt;</span>
</span></span><span style="display:flex;"><span>    <span style="color:#f92672">&lt;a:lstStyle/&gt;</span>
</span></span><span style="display:flex;"><span>    <span style="color:#f92672">&lt;a:p&gt;</span>
</span></span><span style="display:flex;"><span>      <span style="color:#f92672">&lt;a:r&gt;</span>
</span></span><span style="display:flex;"><span>        <span style="color:#f92672">&lt;a:rPr</span> <span style="color:#a6e22e">lang=</span><span style="color:#e6db74">&#34;en-US&#34;</span> <span style="color:#a6e22e">sz=</span><span style="color:#e6db74">&#34;3200&#34;</span> <span style="color:#a6e22e">b=</span><span style="color:#e6db74">&#34;1&#34;</span><span style="color:#f92672">/&gt;</span>
</span></span><span style="display:flex;"><span>        <span style="color:#f92672">&lt;a:t&gt;</span>Mission Critical Architecture<span style="color:#f92672">&lt;/a:t&gt;</span>
</span></span><span style="display:flex;"><span>      <span style="color:#f92672">&lt;/a:r&gt;</span>
</span></span><span style="display:flex;"><span>    <span style="color:#f92672">&lt;/a:p&gt;</span>
</span></span><span style="display:flex;"><span>  <span style="color:#f92672">&lt;/p:txBody&gt;</span>
</span></span><span style="display:flex;"><span><span style="color:#f92672">&lt;/p:sp&gt;</span>
</span></span></code></pre></div><h3 id="kritik-ölçü-birimleri-emular-ve-noktanın-yüzde-biri">Kritik Ölçü Birimleri: EMU&rsquo;lar ve Noktanın Yüzde Biri</h3>
<p><code>&lt;a:xfrm&gt;</code> içindeki koordinat sayılarına dikkat edin:</p>
<ul>
<li><code>x=\&quot;1524000\&quot;</code></li>
<li><code>cx=\&quot;9144000\&quot;</code></li>
</ul>
<p>Bunlar <strong>İngiliz Metriği Birimleri (EMU&rsquo;lar)</strong>.</p>
<ul>
<li>$1 \text{ inch} = 914,400 \text{ EMUs}$</li>
<li>$1 \text{ cm} = 360,000 \text{ EMUs}$</li>
<li>$1 \text{ pt} = 12,700 \text{ EMUs}$</li>
</ul>
<p>EMU&rsquo;lar, tamsayıların hem inç hem de milimetre için tam kesirleri, farklı donanım mimarileri arasında kayan nokta yuvarlama hataları olmadan temsil etmesine olanak tanır.</p>
<p>Ayrıca yazı tipinin boyutuna dikkat edin:</p>
<ul>
<li><code>sz=&quot;3200&quot;</code> <strong>32,00 pt</strong> anlamına gelir. DrawingML&rsquo;deki yazı tipi boyutları bir noktanın yüzde birinde ölçülür.</li>
</ul>
<h2 id="4-kalıtım-zinciri-şekiller-neden-görünmez-stilleri-miras-alır">4. Kalıtım Zinciri: Şekiller Neden Görünmez Stilleri Miras Alır</h2>
<p>PPTX dosyalarını tersine mühendislik yaparken en yaygın tuzaklardan biri, bir şeklin görsel stilinin tamamen kendi <code>slideX.xml</code> dosyasında bildirildiğini varsaymaktır.</p>
<p>Gerçekte, OpenXML sıkı bir <strong>4 katmanlı kademeli kalıtım modeli</strong>&rsquo;ne dayanır:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-text" data-lang="text"><span style="display:flex;"><span>[Theme: ppt/theme/theme1.xml]
</span></span><span style="display:flex;"><span>              │
</span></span><span style="display:flex;"><span>              ▼
</span></span><span style="display:flex;"><span>[Slide Master: ppt/slideMasters/slideMaster1.xml]
</span></span><span style="display:flex;"><span>              │
</span></span><span style="display:flex;"><span>              ▼
</span></span><span style="display:flex;"><span>[Slide Layout: ppt/slideLayouts/slideLayout1.xml]
</span></span><span style="display:flex;"><span>              │
</span></span><span style="display:flex;"><span>              ▼
</span></span><span style="display:flex;"><span>[Slide: ppt/slides/slide1.xml]
</span></span></code></pre></div><p><code>slide1.xml</code> üzerindeki bir metin kutusu şunları içeriyorsa:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-xml" data-lang="xml"><span style="display:flex;"><span><span style="color:#f92672">&lt;a:p&gt;</span>
</span></span><span style="display:flex;"><span>  <span style="color:#f92672">&lt;a:r&gt;</span>
</span></span><span style="display:flex;"><span>    <span style="color:#f92672">&lt;a:t&gt;</span>Revenue Projections<span style="color:#f92672">&lt;/a:t&gt;</span>
</span></span><span style="display:flex;"><span>  <span style="color:#f92672">&lt;/a:r&gt;</span>
</span></span><span style="display:flex;"><span><span style="color:#f92672">&lt;/a:p&gt;</span>
</span></span></code></pre></div><p>Koşulda (<code>&lt;a:r&gt;</code>) font ailesi, açık renk ve boyut belirtilmemiştir. PowerPoint&rsquo;in bu metni nasıl işlediğini anlamak için ayrıştırıcınız şunları yapmalıdır:</p>
<ol>
<li>Yer tutucu tipini belirleyin (<code>&lt;p:ph type=&quot;title&quot;/&gt;</code>).</li>
<li><code>slide1.xml.rels</code> içinde referans verilen yerleşimi okuyun.</li>
<li><code>slideLayout1.xml</code>&lsquo;in o yer tutucu için stil geçersiz kılmaları sağlayıp sağlamadığını kontrol edin.</li>
<li>Varsayılan başlık metni gövde stilleri için <code>slideMaster1.xml</code>&lsquo;e geri dönün.</li>
<li><code>accent1</code> veya <code>tx1</code> gibi renk belirteçlerini <code>theme1.xml</code> içinde izleyerek onaltılık renk kodunu bulun.</li>
</ol>
<p>Bu kalıtım grafiğini atlayarsanız, ayrıştırıcınız stilleri yanlış okuyacak, fontları, font boyutlarını ve yerleşim bağlantı noktalarını kaçıracaktır.</p>
<h2 id="5-pratik-tersine-mühendislik-iş-akışı">5. Pratik Tersine Mühendislik İş Akışı</h2>
<p>Belirli bir PowerPoint özelliğinin (ör. morph geçişleri, karmaşık tablolar, vektör yolları) nasıl çalıştığını derinlemesine incelemeniz gerektiğinde, şu ampirik yaklaşımı izleyin:</p>
<h3 id="adım-1-minimal-diff-çifti-oluştur">Adım 1: Minimal &ldquo;Diff Çifti&rdquo; Oluştur</h3>
<ol>
<li>PowerPoint&rsquo;i açın ve boş bir slayt oluşturun.</li>
<li>Bunu <code>before.pptx</code> olarak kaydedin.</li>
<li>Tersine mühendislik yapmak istediğiniz tek değişikliği uygulayın (ör. bir daireye gölge ekleyin, madde işareti stilini değiştirin, gömülü bir video ekleyin).</li>
<li>Bunu <code>after.pptx</code> olarak kaydedin.</li>
</ol>
<h3 id="adım-2-her-iki-arşivi-aç">Adım 2: Her İki Arşivi Aç</h3>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>unzip before.pptx -d before/
</span></span><span style="display:flex;"><span>unzip after.pptx -d after/
</span></span></code></pre></div><h3 id="adım-3-xmli-biçimlendir">Adım 3: XML&rsquo;i Biçimlendir</h3>
<p>Office arşivlerindeki ham XML genellikle girinti ve satır sonu karakterlerinden arındırılır. Fark karşılaştırması yapmadan önce dosyaları biçimlendirin:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>find before/ after/ -name <span style="color:#e6db74">&#34;*.xml&#34;</span> -exec xmllint --format <span style="color:#f92672">{}</span> --output <span style="color:#f92672">{}</span> <span style="color:#ae81ff">\;</span>
</span></span></code></pre></div><h3 id="adım-4-birleşik-diff-çalıştır">Adım 4: Birleşik Diff Çalıştır</h3>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>diff -uNr before/ after/ &gt; changes.patch
</span></span></code></pre></div><p><code>changes.patch</code> dosyasını incelemek, PowerPoint&rsquo;in eklediği tam etiket adını, ad alanı özniteliğini ve konteyner hiyerarşisini ortaya çıkarır. Bu, ECMA-376 belgelerinin binlerce sayfasını kazımadan belgelenmemiş veya belirsiz şema özelliklerini keşfetmenin en hızlı yoludur.</p>
<h2 id="6-özel-bir-mikro-motor-oluşturma-aç-değiştir-yeniden-paketle">6. Özel Bir Mikro-Motor Oluşturma: Aç, Değiştir, Yeniden Paketle</h2>
<p>Bazen Apache POI veya Microsoft OpenXML SDK gibi ağır bir kurumsal bağımlılık istemezsiniz—özellikle hafif sunucusuz çalışma ortamlarında (AWS Lambda, Cloudflare Workers, kenar düğümleri).</p>
<p>İşte, bellek içi bir PPTX dosyasını güvenli bir şekilde açıp, standart kütüphane araçlarıyla özel veri enjekte edip, yeniden paketlemeyi gösteren bağımsız bir Python örüntüsü:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-python" data-lang="python"><span style="display:flex;"><span><span style="color:#f92672">import</span> zipfile
</span></span><span style="display:flex;"><span><span style="color:#f92672">import</span> io
</span></span><span style="display:flex;"><span><span style="color:#f92672">import</span> xml.etree.ElementTree <span style="color:#66d9ef">as</span> ET
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">def</span> <span style="color:#a6e22e">modify_slide_title</span>(input_pptx_bytes: bytes, new_title: str) <span style="color:#f92672">-&gt;</span> bytes:
</span></span><span style="display:flex;"><span>    input_zip <span style="color:#f92672">=</span> zipfile<span style="color:#f92672">.</span>ZipFile(io<span style="color:#f92672">.</span>BytesIO(input_pptx_bytes))
</span></span><span style="display:flex;"><span>    output_buffer <span style="color:#f92672">=</span> io<span style="color:#f92672">.</span>BytesIO()
</span></span><span style="display:flex;"><span>    
</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">with</span> zipfile<span style="color:#f92672">.</span>ZipFile(output_buffer, <span style="color:#e6db74">&#34;w&#34;</span>, zipfile<span style="color:#f92672">.</span>ZIP_DEFLATED) <span style="color:#66d9ef">as</span> output_zip:
</span></span><span style="display:flex;"><span>        <span style="color:#66d9ef">for</span> item <span style="color:#f92672">in</span> input_zip<span style="color:#f92672">.</span>infolist():
</span></span><span style="display:flex;"><span>            content <span style="color:#f92672">=</span> input_zip<span style="color:#f92672">.</span>read(item<span style="color:#f92672">.</span>filename)
</span></span><span style="display:flex;"><span>            
</span></span><span style="display:flex;"><span>            <span style="color:#75715e"># Target slide 1</span>
</span></span><span style="display:flex;"><span>            <span style="color:#66d9ef">if</span> item<span style="color:#f92672">.</span>filename <span style="color:#f92672">==</span> <span style="color:#e6db74">&#34;ppt/slides/slide1.xml&#34;</span>:
</span></span><span style="display:flex;"><span>                namespaces <span style="color:#f92672">=</span> {
</span></span><span style="display:flex;"><span>                    <span style="color:#e6db74">&#39;p&#39;</span>: <span style="color:#e6db74">&#39;http://schemas.openxmlformats.org/presentationml/2006/main&#39;</span>,
</span></span><span style="display:flex;"><span>                    <span style="color:#e6db74">&#39;a&#39;</span>: <span style="color:#e6db74">&#39;http://schemas.openxmlformats.org/drawingml/2006/main&#39;</span>
</span></span><span style="display:flex;"><span>                }
</span></span><span style="display:flex;"><span>                
</span></span><span style="display:flex;"><span>                <span style="color:#75715e"># Register namespaces to preserve prefixes</span>
</span></span><span style="display:flex;"><span>                <span style="color:#66d9ef">for</span> prefix, uri <span style="color:#f92672">in</span> namespaces<span style="color:#f92672">.</span>items():
</span></span><span style="display:flex;"><span>                    ET<span style="color:#f92672">.</span>register_namespace(prefix, uri)
</span></span><span style="display:flex;"><span>                    
</span></span><span style="display:flex;"><span>                root <span style="color:#f92672">=</span> ET<span style="color:#f92672">.</span>fromstring(content)
</span></span><span style="display:flex;"><span>                
</span></span><span style="display:flex;"><span>                <span style="color:#75715e"># Find title placeholder text run</span>
</span></span><span style="display:flex;"><span>                <span style="color:#66d9ef">for</span> title_run <span style="color:#f92672">in</span> root<span style="color:#f92672">.</span>findall(<span style="color:#e6db74">&#34;.//p:sp[p:nvSpPr/p:nvPr/p:ph[@type=&#39;title&#39;]]//a:t&#34;</span>, namespaces):
</span></span><span style="display:flex;"><span>                    title_run<span style="color:#f92672">.</span>text <span style="color:#f92672">=</span> new_title
</span></span><span style="display:flex;"><span>                    <span style="color:#66d9ef">break</span>
</span></span><span style="display:flex;"><span>                
</span></span><span style="display:flex;"><span>                content <span style="color:#f92672">=</span> ET<span style="color:#f92672">.</span>tostring(root, encoding<span style="color:#f92672">=</span><span style="color:#e6db74">&#34;utf-8&#34;</span>, xml_declaration<span style="color:#f92672">=</span><span style="color:#66d9ef">True</span>)
</span></span><span style="display:flex;"><span>            
</span></span><span style="display:flex;"><span>            output_zip<span style="color:#f92672">.</span>writestr(item, content)
</span></span><span style="display:flex;"><span>            
</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">return</span> output_buffer<span style="color:#f92672">.</span>getvalue()
</span></span></code></pre></div><h3 id="ham-bayt-düzeyinde-dosyaları-değiştirirken-dikkat-edilmesi-gereken-önemli-noktalar">Ham Bayt Düzeyinde Dosyaları Değiştirirken Dikkat Edilmesi Gereken Önemli Noktalar:</h3>
<ol>
<li><strong>Ad Alanı Koruma</strong>: XML ayrıştırıcıları genellikle önekleri yeniden yazar (<code>xmlns:p</code> <code>xmlns:ns0</code> haline gelebilir). Geçerli XML olmasına rağmen, PowerPoint&rsquo;in katı iç şema doğrulaması zaman zaman standart dışı önek takma adlarını reddeder. Ad alanlarını açıkça kaydedin.</li>
<li><strong>ZIP Sıkıştırma Yöntemleri</strong>: Dosyaları geri yazarken standart deflate sıkıştırmasını (<code>zipfile.ZIP_DEFLATED</code>) kullandığınızdan emin olun.</li>
<li><strong>Akış Boşaltma</strong>: Baytları aşağı akışa göndermeden önce zip tamponunuzun tamamen kapandığını ve boşaltıldığını her zaman kontrol edin.</li>
<li><strong>İlişkileri Koru</strong>: Bir slaytı kaldırırsanız, aynı zamanda <code>ppt/presentation.xml</code> içindeki kaydını da kaldırmalı, <code>ppt/_rels/presentation.xml.rels</code> içindeki ilişkisini silmeli ve <code>[Content_Types].xml</code> dosyasından içerik türünü temizlemelisiniz.</li>
</ol>
<h2 id="7-performans-ve-güvenlik-hususları">7. Performans ve Güvenlik Hususları</h2>
<p>PPTX dosyalarını tersine mühendislik yapmak sadece slaytları düzenlemekle kalmaz; aynı zamanda sistemlerinize girenleri denetlemekle de ilgilidir.</p>
<h3 id="güvenlik-milyar-kahkaha--xxe">Güvenlik: Milyar Kahkaha &amp; XXE</h3>
<p>PPTX dosyaları XML ayrıştırdığı için, kullanıcı tarafından gönderilen sunumları işleyen herhangi bir sunucu tarafı işlem hattı şunlara karşı savunmasızdır:</p>
<ul>
<li><strong>XML Dış Varlık (XXE) Enjeksiyonu</strong>: <code>/etc/passwd</code> dosyasına erişmeye veya dahili bulut meta verisi uç noktalarını sorgulamaya (<code>http://169.254.169.254/</code>) çalışan kötü amaçlı XML.</li>
<li><strong>Varlık Genişletme Saldırıları (Milyar Gülme)</strong>: Sistemin RAM&rsquo;ini tüketen üstel varlık döngüleri.</li>
</ul>
<p><strong>Azaltma</strong>: XML ayrıştırıcınızda (örneğin Python&rsquo;da <code>defusedxml</code> kullanarak) <code>resolve_entities</code>, <code>load_dtd</code> ve dış ağ çözümlemesini her zaman devre dışı bırakın.</p>
<h3 id="güvenlik-makro-yükleri-ve-gizli-akışlar">Güvenlik: Makro Yükleri ve Gizli Akışlar</h3>
<p>Dosyaları <code>.pptx</code> uzantısı altında gizlenmiş <code>.pptm</code> içeriği için inceleyin. Derlenmiş Visual Basic kodu içeren <code>ppt/vbaProject.bin</code> dosyasına dikkat edin. Standart <code>.pptx</code> dosyalarında VBA kodu yasaktır; ilişkilerde ikili yük referansları bulunması hemen karantina bayraklarını tetiklemelidir.</p>
<h2 id="sonuç">Sonuç</h2>
<p><code>.pptx</code> dosyalarının tersine mühendisliği, sunum yazılımının gizemini çözer. PowerPoint dosyalarının yalnızca koordinatlar, şema referansları ve XML ilişki ağaçlarıyla dolu yapılandırılmış zip paketleri olduğunu fark ettiğinizde, mevcut üçüncü taraf soyutlamalarına artık bağlı kalmazsınız.</p>
<p>Slayt üretim verimliliğini optimize ediyor, özel otomatik temizleyiciler yazıyor ya da render hatalarını gideriyor olun, temel OpenXML mimarisine doğrudan bakmak, sunum hattı üzerinde tam kontrol sağlar.</p>
<h2 id="sıkça-sorulan-sorular-sss">Sıkça Sorulan Sorular (SSS)</h2>
<p>**Q: Bir .pptx dosyasını standart bir klasöre dönüştürüp dosyaları doğrudan bir IDE&rsquo;de düzenleyebilir misiniz?</p>
<p><strong>A1:</strong> Evet, arşivi çıkarabilir, XML&rsquo;i VS Code gibi bir editörde düzenleyebilir ve dizin içeriğini yeniden zipleyerek PowerPoint&rsquo;te tekrar açabilirsiniz.</p>
<p>**Q: PowerPoint, manuel olarak değiştirdiğim PPTX dosyasının onarım gerektirdiğini neden söylüyor?</p>
<p><strong>A2:</strong> Bu genellikle hatalı XML eklediyseniz, <code>[Content_Types].xml</code> dosyasına yeni bir varlığı eklemeyi unuttuysanız veya ilişkili bir <code>.rels</code> dosyasında kopuk bir referans bıraktıysanız olur.</p>
<p>**Q: PowerPoint şekil konumları ve kenar boşlukları için hangi ölçü birimini kullanır?</p>
<p><strong>A3:</strong> PowerPoint İngiliz Ölçü Birimleri (EMUs) kullanır; burada 1 inç 914,400 EMU&rsquo;ya ve 1 puan 12,700 EMU&rsquo;ya eşittir.</p>
<p>**Q: Harici kütüphaneler kullanmadan bir sunumdan tüm görselleri <a href="https://products.fileformat.com/presentation/python/python-pptx/">programlı olarak çıkar</a> nasıl yapabilirim?</p>
<p><strong>A4:</strong> <code>.pptx</code> dosyasını herhangi bir standart zip aracıyla açın ve <code>ppt/media/</code> dizini içinde bulunan tüm ikili dosyaları çıkarın.</p>
<p>**Q: Kullanıcı tarafından yüklenen PPTX dosyalarını standart XML ayrıştırıcılarıyla işlemek güvenli mi?</p>
<p><strong>A5:</strong> Hayır, ayrıştırıcınızı güçlendirmeli veya <code>defusedxml</code> gibi güvenli sarmalayıcılar kullanarak XML Dış Varlık (XXE) ve zip-bomb saldırılarını engellemelisiniz.</p>
<h2 id="ayrıca-bakınız">Ayrıca Bakınız</h2>
<ul>
<li><a href="https://blog.fileformat.com/presentation/powerpoint-file-formats/">FileFormat.com&rsquo;da Sunum Dosya Formatları?</a></li>
<li><a href="https://blog.fileformat.com/presentation/apache-poi-api-to-access-powerpoint-file-formats/">PowerPoint Dosya Formatlarına Erişmek İçin Java API&rsquo;si</a></li>
<li><a href="https://blog.fileformat.com/presentation/odp-vs-pptx-opendocument-vs-microsoft-powerpoint-format-comparison/">ODP vs PPTX: OpenDocument vs Microsoft PowerPoint Sunum Formatı Karşılaştırması</a></li>
<li><a href="https://blog.fileformat.com/presentation/difference-between-ppt-and-pptx/">PPT ve PPTX Arasındaki Fark</a></li>
<li><a href="https://blog.fileformat.com/presentation/create-presentation-in-java-with-apache-poi-api/">Java ile Apache POI API kullanarak PowerPoint Sunumu Oluştur</a></li>
</ul>
<!-- raw HTML omitted -->
]]></content:encoded>
    </item>
    
  </channel>
</rss>
