সর্বশেষ আপডেট: 16 সেপ্টেম্বর, 2026

PPTX Reverse Engineering: Understanding PowerPoint Files Internally

রিভার্স ইঞ্জিনিয়ারিং PPTX ফাইল: ডেভেলপারদের গাইড

আধুনিক প্রেজেন্টেশন ডেকগুলি বিনিয়োগকারী পিচ থেকে অভ্যন্তরীণ ত্রৈমাসিক মেট্রিক্স পর্যন্ত সবকিছু চালিত করে। তবে যদি আপনি কখনও প্রোগ্রাম্যাটিকভাবে টেক্সট বের করতে, রানটাইমে টেমপ্লেট পরিবর্তন করতে, স্বয়ংক্রিয় স্লাইড জেনারেটর তৈরি করতে, অথবা গোপনীয় প্রেজেন্টেশন পরিষ্কার করতে হয়, তবে আপনি সম্ভবত দ্রুতই বুঝতে পারবেন: স্ট্যান্ডার্ড উচ্চ-স্তরের প্রেজেন্টেশন লাইব্রেরিগুলি অপ্রত্যাশিত ব্ল্যাক বক্সের মতো অনুভূত হতে পারে।

যখন python-pptx, Apache POI, অথবা OpenXML SDK এর মতো লাইব্রেরিগুলি তাদের সীমা পৌঁছে যায়—অথবা অডকুমেন্টেড নয় এমন লেআউট বাগ পরিচয় করিয়ে দেয়—একমাত্র পথ হল এর মধ্য দিয়ে অগ্রসর হওয়া। আপনাকে বুঝতে হবে একটি PowerPoint প্রেজেন্টেশন আসলে বাইট এবং স্কিমা স্তরে কী।

এই গভীর বিশ্লেষণে, আমরা .pptx ফরম্যাটের পর্দা তুলে দেব, এর অভ্যন্তরীণ কাঠামো খুলে দেখব, সম্পর্কের গ্রাফ ট্রেস করব, ড্রয়িং হায়ারার্কি বিশ্লেষণ করব, এবং রিভার্স ইঞ্জিনিয়ারিং, পরিদর্শন এবং কাঁচা কোড দিয়ে প্রেজেন্টেশন ম্যানিপুলেট করার ব্যবহারিক কৌশলগুলি দেখব।

১. একটি .pptx ফাইল আসলে কী?

এর মূলত, একটি .pptx ফাইল প্রাচীন ১৯৯০-এর দশকের .ppt ফরম্যাটের মতো একটি স্বত্বাধিকারী একক বাইনারি নয়। মাইক্রোসফ্ট যখন Office Open XML (ECMA-376 এবং ISO/IEC 29500) পরিচয় করিয়ে দেয়, তখন থেকে আধুনিক Office ডকুমেন্টগুলো Open Packaging Conventions (OPC) আর্কাইভ

সহজ বাংলায়: একটি .pptx ফাইল কেবল একটি জিপ আর্কাইভ যা XML ডকুমেন্ট এবং মিডিয়া সম্পদগুলোকে একটি নির্ধারিত ডিরেক্টরি গাছে সংগঠিত করে।

আপনি এটি সেকেন্ডের মধ্যে স্ট্যান্ডার্ড টার্মিনাল টুল ব্যবহার করে প্রমাণ করতে পারেন:

# Rename the extension and unpack it
cp presentation.pptx presentation.zip
unzip presentation.zip -d presentation_unpacked/
cd presentation_unpacked/
tree -L 2

ফলস্বরূপ ডিরেক্টরি গাছটি চমৎকারভাবে সঙ্গতিপূর্ণ দেখায়:

.
├── [Content_Types].xml
├── _rels/
│   └── .rels
├── docProps/
│   ├── app.xml
│   └── core.xml
└── ppt/
    ├── presentation.xml
    ├── _rels/
    ├── slides/
    ├── slideLayouts/
    ├── slideMasters/
    ├── theme/
    └── media/

প্রতিটি ভিজ্যুয়াল সম্পদ, ট্রানজিশন, স্লাইড মাস্টার ইনহেরিটেন্স, টেক্সট বক্সের কোঅর্ডিনেট এবং ভেক্টর গ্রাফিক এই ফাইল হায়ারার্কিতে কোডেড করা হয়েছে।

২. প্যাকেজের গঠন: মূল উপপ্রণালীসমূহ

প্রেজেন্টেশনগুলোকে কার্যকরভাবে রিভার্স ইঞ্জিনিয়ার করতে, আপনাকে প্রতিটি টপ-লেভেল কম্পোনেন্টের দায়িত্বগুলো বুঝতে হবে।

[Content_Types].xml

এটি OPC রিডারের জন্য এন্ট্রি ম্যানিফেস্ট। এটি ফাইল এক্সটেনশন এবং স্পষ্ট অভ্যন্তরীণ পার্ট নামগুলোকে মানকৃত MIME/কন্টেন্ট টাইপের সাথে ম্যাপ করে। যদি আপনি একটি নতুন স্লাইড তৈরি করেন বা একটি ছবি যোগ করেন এবং তা [Content_Types].xml-এ ঘোষণা না করেন, তবে PowerPoint ডেকটি ক্ষতিগ্রস্ত বলে ঘোষণা করবে এবং রিকভারি করার জন্য প্রম্পট দেখাবে।

উদাহরণ স্নিপেট:

<Types xmlns="http://schemas.openxmlformats.org/package/2006/content-types">
  <Default Extension="xml" ContentType="application/xml"/>
  <Default Extension="rels" ContentType="application/vnd.openxmlformats-package.relationships+xml"/>
  <Default Extension="png" ContentType="image/png"/>
  <Override PartName="/ppt/presentation.xml" 
            ContentType="application/vnd.openxmlformats-officedocument.presentationml.presentation.main+xml"/>
</Types>

_rels/ সম্পর্ক গ্রাফ

OpenXML-এ সবচেয়ে গুরুত্বপূর্ণ ধারণাগুলোর একটি হল সম্পর্কের মাধ্যমে পরোক্ষতা। অংশগুলি খুব কমই সরাসরি কাঁচা ফাইল পাথের দিকে নির্দেশ করে। বরং, একটি ফাইল (যেমন, slide1.xml) এর সাথে একটি সম্পর্কিত ফাইল থাকে যা একটি সহোদর _rels ফোল্ডারে অবস্থিত (যেমন, _rels/slide1.xml.rels)।

সম্পর্কগুলি সংজ্ঞায়িত করে:

  • হাইপারলিঙ্ক (r:id="rId2", TargetMode=“External”)
  • ppt/media/-এ সংরক্ষিত ছবি এবং অডিও ট্র্যাকগুলি
  • লেআউট উত্তরাধিকার পয়েন্টারগুলি (slideLayout1.xml)
  • নোট স্লাইড, মন্তব্য এবং এমবেডেড ফন্টগুলি

docProps/ (মেটাডেটা)

  • core.xml: ডাবলিন কোর মেটাডেটা—লেখক, শিরোনাম, সৃষ্টির তারিখ, পরিবর্তনের টাইমস্ট্যাম্প।
  • app.xml: অ্যাপ্লিকেশন-নির্দিষ্ট পরিসংখ্যান—PowerPoint সংস্করণ, মোট স্লাইড সংখ্যা, লুকানো স্লাইডের সংখ্যা, শব্দ গণনা, উপস্থাপনা টেমপ্লেটের নাম।

ppt/ (প্রেজেন্টেশন ইঞ্জিন)

এখানেই প্রকৃত উপস্থাপনাটি থাকে:

  • presentation.xml: মাস্টার স্পাইন। এটি স্লাইড আইডি, স্লাইডের আকারের মাত্রা, নোটস মাস্টার রেফারেন্স এবং ডিফল্ট ফন্ট সেটিংস রেজিস্টার করে।
  • slides/: পৃথক স্লাইডগুলি (slide1.xml, slide2.xml, ইত্যাদি)।
  • slideLayouts/: মাস্টার কাঠামোগত প্রিসেট (শিরোনাম স্লাইড, দুই কলাম, সেকশন হেডার)।
  • slideMasters/: গ্লোবাল স্টাইল, ডিফল্ট প্যালেট, ব্যাকগ্রাউন্ড ফিল এবং প্লেসহোল্ডার ইনহেরিটেন্স।
  • theme/: রঙের প্যালেট (অ্যাকসেন্ট ১ থেকে ৬, ডার্ক/লাইট ভ্যারিয়েশন) এবং ফন্ট স্কিম (মেজর/মাইনর ফন্ট)।
  • media/: কাঁচা ইমেজ (PNG, JPEG, SVG), অডিও এবং ভিডিও ফাইল।

৩. স্লাইড বিশ্লেষণ: প্রেজেন্টেশনএমএল (p:) ও ড্রয়িংএমএল (a:) উপভাষা

ppt/slides/slide1.xml খুললে, আপনি দুটি প্রধান XML নেমস্পেসের মুখোমুখি হবেন:

  1. PresentationML (p:): কাঠামোগত উপস্থাপনা উপাদান (স্লাইড, শেপ ট্রি, ক্যানভাস গ্রুপ) পরিচালনা করে।
  2. DrawingML (a:): টাইপোগ্রাফি, জ্যামিতি, 2D কোঅর্ডিনেট, গ্রেডিয়েন্ট ফিল এবং ভেক্টর রেন্ডারিং পরিচালনা করে।

এখানে একটি সরলীকৃত উদাহরণ দেওয়া হল যে একটি স্ট্যান্ডার্ড টেক্সট শেপ কীভাবে দেখায়:

<p:sp>
  <!-- 1. Non-visual shape properties (Identifiers, names) -->
  <p:nvSpPr>
    <p:cNvPr id="4" name="Title Box 1"/>
    <p:cNvSpPr>
      <a:spLocks noGrp="1"/>
    </p:cNvSpPr>
    <p:nvPr>
      <p:ph type="title"/>
    </p:nvPr>
  </p:nvSpPr>

  <!-- 2. Visual shape properties (Position, size, geometry) -->
  <p:spPr>
    <a:xfrm>
      <a:off x="1524000" y="1143000"/>
      <a:ext cx="9144000" cy="1828800"/>
    </a:xfrm>
    <a:prstGeom prst="rect">
      <a:avLst/>
    </a:prstGeom>
    <a:solidFill>
      <a:schemeClr val="accent1"/>
    </a:solidFill>
  </p:spPr>

  <!-- 3. Text Body (Paragraphs, runs, styling) -->
  <p:txBody>
    <a:bodyPr rtlCol="0" anchor="ctr"/>
    <a:lstStyle/>
    <a:p>
      <a:r>
        <a:rPr lang="en-US" sz="3200" b="1"/>
        <a:t>Mission Critical Architecture</a:t>
      </a:r>
    </a:p>
  </p:txBody>
</p:sp>

গুরুত্বপূর্ণ মাপের একক: EMU এবং পয়েন্টের শতকরা অংশ

<a:xfrm>-এ কোঅর্ডিনেট সংখ্যা লক্ষ্য করুন:

  • x="1524000"
  • cx="9144000"

এগুলো ইংরেজি মেট্রিক ইউনিট (EMUs)

  • $1 \text{ inch} = 914,400 \text{ EMUs}$
  • $1 \text{ cm} = 360,000 \text{ EMUs}$
  • $1 \text{ pt} = 12,700 \text{ EMUs}$

EMUs পূর্ণসংখ্যা ব্যবহার করে ইঞ্চি এবং মিলিমিটারের উভয়ই সঠিক ভগ্নাংশ উপস্থাপন করতে পারে, বিভিন্ন হার্ডওয়্যার আর্কিটেকচারে ফ্লোটিং-পয়েন্ট রাউন্ডিং ত্রুটি ছাড়া।

ফন্টের আকারটিও লক্ষ্য করুন:

  • sz="3200" মানে 32.00 pt। DrawingML-এ ফন্টের আকার পয়েন্টের শতকরা অংশে মাপা হয়।

৪. উত্তরাধিকার চেইন: কেন শেপগুলো অদৃশ্য স্টাইল উত্তরাধিকারী হয়

PPTX ফাইল রিভার্স ইঞ্জিনিয়ারিং করার সময় সবচেয়ে সাধারণ সমস্যাগুলোর একটি হল ধারণা করা যে কোনো শেপের ভিজ্যুয়াল স্টাইলিং সম্পূর্ণভাবে তার নিজস্ব slideX.xml-এ ঘোষণা করা হয়েছে।

বাস্তবে, OpenXML একটি কঠোর 4-স্তরের ক্যাসকেডিং ইনহেরিটেন্স মডেল-এর উপর নির্ভর করে:

[Theme: ppt/theme/theme1.xml]
[Slide Master: ppt/slideMasters/slideMaster1.xml]
[Slide Layout: ppt/slideLayouts/slideLayout1.xml]
[Slide: ppt/slides/slide1.xml]

slide1.xml-এ একটি টেক্সট বক্স যদি থাকে:

<a:p>
  <a:r>
    <a:t>Revenue Projections</a:t>
  </a:r>
</a:p>

রানের (<a:r>) উপর কোনো ফন্ট ফ্যামিলি, কোনো স্পষ্ট রঙ, এবং কোনো সাইজ ঘোষণা করা নেই। PowerPoint কীভাবে এই টেক্সট রেন্ডার করে তা বুঝতে আপনার পার্সারকে অবশ্যই:

  1. প্লেসহোল্ডার টাইপ সনাক্ত করুন (<p:ph type=\"title\"/>).
  2. slide1.xml.rels-এ উল্লেখিত লেআউটটি পড়ুন।
  3. slideLayout1.xml-এ কি সেই প্লেসহোল্ডারের জন্য স্টাইল ওভাররাইড প্রদান করা হয়েছে কিনা পরীক্ষা করুন।
  4. ডিফল্ট শিরোনাম টেক্সট বডি স্টাইলের জন্য slideMaster1.xml-এ ফিরে যান।
  5. accent1 বা tx1 এর মতো রঙ টোকেনগুলো theme1.xml-এ অনুসরণ করে হেক্সাডেসিমাল রঙ কোডটি খুঁজে বের করুন।

যদি আপনি এই ইনহেরিটেন্স গ্রাফটি এড়িয়ে যান, আপনার পার্সার স্টাইল, ফন্ট, ফন্ট সাইজ এবং লেআউট অ্যানকরগুলো ভুলভাবে পড়বে।

৫. ব্যবহারিক রিভার্স ইঞ্জিনিয়ারিং ওয়ার্কফ্লো

যখন আপনাকে কোনো নির্দিষ্ট PowerPoint ফিচার কীভাবে কাজ করে তা (যেমন, মর্ফ ট্রানজিশন, জটিল টেবিল, ভেক্টর পাথ) তদন্ত করতে হবে, তখন এই প্রায়োগিক পদ্ধতি অনুসরণ করুন:

ধাপ ১: একটি ন্যূনতম “ডিফ পেয়ার” তৈরি করুন

  1. PowerPoint খুলুন এবং একটি ফাঁকা স্লাইড তৈরি করুন।
  2. এটি before.pptx নামে সংরক্ষণ করুন।
  3. আপনি যে একক পরিবর্তনটি রিভার্স ইঞ্জিনিয়ার করতে চান তা প্রয়োগ করুন (যেমন, একটি বৃত্তে ড্রপ শ্যাডো যোগ করা, বুলেট স্টাইল পরিবর্তন করা, এমবেডেড ভিডিও সন্নিবেশ করা)।
  4. এটি after.pptx নামে সংরক্ষণ করুন।

ধাপ ২: উভয় আর্কাইভ আনপ্যাক করুন

unzip before.pptx -d before/
unzip after.pptx -d after/

ধাপ ৩: XML ফরম্যাট করুন

Office আর্কাইভের ভিতরের কাঁচা XML সাধারণত ইনডেন্টেশন এবং নিউলাইন ক্যারেক্টারগুলি সরিয়ে দেয়। পার্থক্য করার আগে, ফাইলগুলো ফরম্যাট করুন:

find before/ after/ -name "*.xml" -exec xmllint --format {} --output {} \;

ধাপ ৪: একটি ইউনিফাইড ডিফ চালান

diff -uNr before/ after/ > changes.patch

changes.patch পর্যালোচনা করলে PowerPoint যে সঠিক ট্যাগ নাম, নেমস্পেস অ্যাট্রিবিউট এবং কন্টেইনার হায়ারার্কি পরিচয় করিয়ে দিয়েছে তা প্রকাশ পায়। এটি অডকুমেন্টেড নয় এমন বা অস্বচ্ছ স্কিমা প্রপার্টি আবিষ্কারের সবচেয়ে দ্রুত উপায়, হাজার হাজার পৃষ্ঠার ECMA-376 ডকুমেন্টেশন খোঁজার প্রয়োজন ছাড়াই।

৬. কাস্টম মাইক্রো-ইঞ্জিন তৈরি: আনপ্যাক, পরিবর্তন, রি-প্যাক

কখনও কখনও আপনি Apache POI বা Microsoft OpenXML SDK এর মতো ভারী এন্টারপ্রাইজ নির্ভরতা চান না—বিশেষ করে হালকা সার্ভারলেস রানটাইম (AWS Lambda, Cloudflare Workers, এজ নোড) এ।

এখানে একটি স্বয়ংসম্পূর্ণ Python প্যাটার্ন দেওয়া হয়েছে, যা দেখায় কীভাবে নিরাপদে ইন-মেমরি PPTX আনজিপ করা যায়, স্ট্যান্ডার্ড লাইব্রেরি টুল ব্যবহার করে কাস্টম ডেটা ইনজেক্ট করা যায়, এবং তা পুনরায় প্যাকেজ করা যায়:

import zipfile
import io
import xml.etree.ElementTree as ET

def modify_slide_title(input_pptx_bytes: bytes, new_title: str) -> bytes:
    input_zip = zipfile.ZipFile(io.BytesIO(input_pptx_bytes))
    output_buffer = io.BytesIO()
    
    with zipfile.ZipFile(output_buffer, "w", zipfile.ZIP_DEFLATED) as output_zip:
        for item in input_zip.infolist():
            content = input_zip.read(item.filename)
            
            # Target slide 1
            if item.filename == "ppt/slides/slide1.xml":
                namespaces = {
                    'p': 'http://schemas.openxmlformats.org/presentationml/2006/main',
                    'a': 'http://schemas.openxmlformats.org/drawingml/2006/main'
                }
                
                # Register namespaces to preserve prefixes
                for prefix, uri in namespaces.items():
                    ET.register_namespace(prefix, uri)
                    
                root = ET.fromstring(content)
                
                # Find title placeholder text run
                for title_run in root.findall(".//p:sp[p:nvSpPr/p:nvPr/p:ph[@type='title']]//a:t", namespaces):
                    title_run.text = new_title
                    break
                
                content = ET.tostring(root, encoding="utf-8", xml_declaration=True)
            
            output_zip.writestr(item, content)
            
    return output_buffer.getvalue()

র’ বাইট স্তরে ফাইল পরিবর্তন করার সময় মূল গটচা গুলো:

  1. Namespace Preservation: XML পার্সারগুলি প্রায়ই প্রিফিক্স পুনর্লিখন করে (xmlns:p হতে পারে xmlns:ns0)। যদিও এটি বৈধ XML, PowerPoint-এর কঠোর অভ্যন্তরীণ স্কিমা যাচাই কখনও কখনও অ-স্ট্যান্ডার্ড প্রিফিক্স উপনাম প্রত্যাখ্যান করে। স্পষ্টভাবে নেমস্পেস রেজিস্টার করুন।
  2. ZIP Compression Methods: নিশ্চিত করুন যে আপনি ফাইলগুলি পুনরায় লেখার সময় স্ট্যান্ডার্ড ডিফ্লেট কম্প্রেশন ব্যবহার করছেন (zipfile.ZIP_DEFLATED).
  3. Stream Flushing: সর্বদা নিশ্চিত করুন যে আপনার zip বাফার সম্পূর্ণভাবে বন্ধ এবং ফ্লাশ হয়েছে ডাউনস্ট্রিমে বাইট পাঠানোর আগে।
  4. Preserve Relationships: যদি আপনি একটি স্লাইড সরিয়ে ফেলেন, তবে আপনাকে ppt/presentation.xml থেকে তার এন্ট্রি মুছে ফেলতে হবে, ppt/_rels/presentation.xml.rels-এ তার রিলেশনশিপ মুছে ফেলতে হবে, এবং [Content_Types].xml থেকে তার কন্টেন্ট টাইপ পরিষ্কার করতে হবে।

৭. পারফরম্যান্স ও সিকিউরিটি বিবেচনা

PPTX ফাইলের রিভার্স ইঞ্জিনিয়ারিং শুধুমাত্র স্লাইড সম্পাদনা নয়; এটি আপনার সিস্টেমে কী প্রবেশ করে তা অডিট করাও অন্তর্ভুক্ত।

নিরাপত্তা: বিলিয়ন হাসি & XXE

PPTX ফাইলগুলি XML পার্স করে, তাই ব্যবহারকারী-সাবমিট করা প্রেজেন্টেশন গ্রহণকারী যেকোনো সার্ভার-সাইড পাইপলাইন নিম্নলিখিত ঝুঁকির প্রতি সংবেদনশীল:

  • XML External Entity (XXE) Injection: ক্ষতিকারক XML যা /etc/passwd অ্যাক্সেস করার চেষ্টা করে বা অভ্যন্তরীণ ক্লাউড মেটাডেটা এন্ডপয়েন্ট (http://169.254.169.254/) কুয়েরি করে।
  • Entity Expansion Attacks (Billion Laughs): সূচকীয় এন্টিটি লুপ যা সিস্টেমের RAM শেষ করে দেয়।

নিরোধ: আপনার XML পার্সারে সর্বদা resolve_entities, load_dtd, এবং বাহ্যিক নেটওয়ার্ক রেজোলিউশন নিষ্ক্রিয় করুন (উদাহরণস্বরূপ, পাইথনে defusedxml ব্যবহার করে)।

নিরাপত্তা: ম্যাক্রো পেলোড এবং লুকানো স্ট্রিমস

ফাইলগুলোতে .pptx এক্সটেনশনের নিচে লুকিয়ে থাকা .pptm কন্টেন্টের জন্য পরীক্ষা করুন। ppt/vbaProject.bin-এর দিকে নজর দিন, যা কম্পাইল করা ভিজ্যুয়াল বেসিক কোড ধারণ করে। স্ট্যান্ডার্ড .pptx ফাইলে VBA কোড নিষিদ্ধ; রিলেশনশিপে বাইনারি পে-লোড রেফারেন্স পাওয়া তৎক্ষণাৎ কোয়ারান্টাইন ফ্ল্যাগ ট্রিগার করা উচিত।

উপসংহার

.pptx ফাইলের রিভার্স ইঞ্জিনিয়ারিং প্রেজেন্টেশন সফটওয়্যারকে সহজ করে। একবার আপনি বুঝতে পারলে যে PowerPoint ফাইলগুলো কেবল সমন্বয়, স্কিমা রেফারেন্স এবং XML রিলেশনশিপ ট্রি দিয়ে পূর্ণ গঠিত জিপ প্যাকেজ, তখন আপনি আর বিদ্যমান তৃতীয় পক্ষের বিমূর্ততায় সীমাবদ্ধ থাকবেন না।

আপনি স্লাইড জেনারেশন থ্রুপুট অপ্টিমাইজ করছেন, কাস্টম অটোমেটেড স্যানিটাইজার লিখছেন, অথবা রেন্ডারিং গ্লিচ সমাধান করছেন, মূল OpenXML আর্কিটেকচারের সরাসরি পর্যবেক্ষণ আপনাকে প্রেজেন্টেশন পাইপলাইনের উপর সম্পূর্ণ নিয়ন্ত্রণ দেয়।

প্রায়শই জিজ্ঞাসিত প্রশ্ন (FAQ)

**Q: আপনি কি একটি .pptx-কে স্ট্যান্ডার্ড ফোল্ডারে রূপান্তর করে সরাসরি একটি IDE-তে ফাইলগুলো সম্পাদনা করতে পারেন?

A1: হ্যাঁ, আপনি আর্কাইভটি বের করে, VS Code-এর মতো একটি এডিটরে XML সম্পাদনা করতে পারেন, এবং ডিরেক্টরি কন্টেন্টগুলো পুনরায় জিপ করে PowerPoint-এ আবার খুলতে পারেন।

**Q: কেন PowerPoint বলে যে আমার ম্যানুয়ালি পরিবর্তিত PPTX ফাইলটি মেরামত প্রয়োজন?

A2: এটি সাধারণত ঘটে যদি আপনি বিকৃত XML প্রবেশ করান, [Content_Types].xml থেকে একটি নতুন সম্পদ বাদ দেন, অথবা সংশ্লিষ্ট .rels ফাইলে একটি ঝুলন্ত রেফারেন্স রেখে যান।

**Q: PowerPoint শেপের অবস্থান ও মার্জিনের জন্য কোন মাপের একক ব্যবহার করে?

A3: PowerPoint ইংরেজি মেট্রিক ইউনিট (EMUs) ব্যবহার করে, যেখানে ১ ইঞ্চি সমান ৯১৪,৪০০ EMU এবং ১ পয়েন্ট সমান ১২,৭০০ EMU।

**Q: আমি কীভাবে একটি প্রেজেন্টেশন থেকে বাহ্যিক লাইব্রেরি ব্যবহার না করে সব ছবি প্রোগ্রাম্যাটিকভাবে বের করা করতে পারি?

A4: কেবল .pptx ফাইলটি যেকোনো স্ট্যান্ডার্ড জিপ ইউটিলিটি দিয়ে খুলুন এবং ppt/media/ ডিরেক্টরির ভিতরে থাকা সব বাইনারি ফাইল বের করুন।

**Q: স্ট্যান্ডার্ড XML পার্সার ব্যবহার করে ব্যবহারকারী-আপলোড করা PPTX ফাইল পার্স করা নিরাপদ কি?

A5: না, আপনাকে আপনার পার্সারকে শক্তিশালী করতে হবে অথবা defusedxml এর মতো নিরাপদ র‍্যাপার ব্যবহার করতে হবে যাতে XML External Entity (XXE) এবং zip‑bomb আক্রমণগুলো ব্লক করা যায়।

আরও দেখুন