<?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>python programming on File Format Blog</title>
    <link>https://blog.fileformat.com/ar/tag/python-programming/</link>
    <description>Recent content in python programming on File Format Blog</description>
    <generator>Hugo -- gohugo.io</generator>
    <language>ar</language>
    <lastBuildDate>Wed, 29 Jan 2025 00:00:00 +0000</lastBuildDate><atom:link href="https://blog.fileformat.com/ar/tag/python-programming/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>العمل مع ملفات الـ PDF في بايثون</title>
      <link>https://blog.fileformat.com/ar/programming/working-with-pdf-files-in-python/</link>
      <pubDate>Wed, 29 Jan 2025 00:00:00 +0000</pubDate>
      
      <guid>https://blog.fileformat.com/ar/programming/working-with-pdf-files-in-python/</guid>
      <description>تعلم كيفية استخراج النصوص من ملفات PDF في بايثون، تدوير صفحات PDF، دمج ملفات PDF متعددة، تقسيم ملفات PDF، وإضافة العلامات المائية إلى ملفات PDF الخاصة بك باستخدام مكتبات بايثون وأمثلة برمجية بسيطة.</description>
      <content:encoded><![CDATA[<p><strong>آخر تحديث</strong>: 29 يناير، 2025</p>
<figure class="align-center ">
    <img loading="lazy" src="images/working-with-pdf-files-in-python.png#center"
         alt="العنوان - العمل مع ملفات PDF في بايثون"/> 
</figure>

<p>في هذه المقالة، سنرشدك إلى كيفية <strong>العمل مع ملفات PDF باستخدام بايثون</strong>. سنستخدم مكتبة <a href="https://pypi.org/project/pypdf/"><strong>pypdf</strong></a>.</p>
<p>باستخدام مكتبة <strong>pypdf</strong>، سنوضح كيفية تنفيذ عمليات متنوعة في بايثون مثل:</p>
<ul>
<li>استخراج النصوص من ملفات PDF</li>
<li>تدوير صفحات PDF</li>
<li>دمج ملفات PDF متعددة</li>
<li>تقسيم ملفات PDF إلى ملفات منفصلة</li>
<li>إضافة علامات مائية إلى صفحات PDF</li>
</ul>
<p><em><strong>ملاحظة</strong>: تحتوي هذه المقالة على الكثير من التفاصيل القيمة، لذا لا تتردد في تخطي الأقسام التي تهتم بها أكثر! تم تنظيم المحتوى لسهولة التنقل حتى تتمكن بسرعة من التركيز على ما يهمك.</em></p>
<figure class="align-center ">
    <img loading="lazy" src="images/pdf-manipulation-with-pypdf.webp#center"
         alt="رسم توضيحي - العمل مع ملفات PDF في بايثون"/> 
</figure>

<h2 id="أمثلة-الشفرات-البرمجية">أمثلة الشفرات البرمجية</h2>
<p>يمكنك تنزيل جميع الشفرات البرمجية المستخدمة في هذه المقالة من الرابط التالي. يشمل الكود وملفات الإدخال وملفات الإخراج.</p>
<ul>
<li><a href="https://github.com/fileformat-blog-gists/code/tree/main/working-with-pdf-files-in-python">أمثلة كود وملفات الإدخال للعمل مع ملفات PDF في بايثون</a></li>
</ul>
<h2 id="تثبيت-pypdf">تثبيت pypdf</h2>
<p>لتثبيت pypdf، كل ما عليك فعله هو تنفيذ الأمر التالي في نافذة الأوامر أو موجه الأوامر:</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>pip install pypdf
</span></span></code></pre></div><p><strong>ملاحظة:</strong> الأمر أعلاه حساس لحالة الأحرف.</p>
<h2 id="1-استخراج-النصوص-من-ملف-pdf-باستخدام-بايثون">1. استخراج النصوص من ملف PDF باستخدام بايثون</h2>
<script type="application/javascript" src="https://gist.github.com/fileformat-blog-gists/e2b43a49dbad9e89745f8f9777817acb.js?file=extract-text-from-pdf-using-pypdf-in-python.py"></script>

<h3 id="شرح-الكود"><strong>شرح الكود</strong></h3>
<p><strong>1. إنشاء كائن قارئ PDF</strong></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>reader <span style="color:#f92672">=</span> PdfReader(pdf_file)
</span></span></code></pre></div><ul>
<li>يقوم الأمر <code>PdfReader(pdf_file)</code> بتحميل ملف PDF في <strong>كائن قارئ</strong>.</li>
<li>يتيح هذا الكائن الوصول إلى الصفحات ومحتواها.</li>
</ul>
<p><strong>2. التكرار عبر الصفحات</strong></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:#66d9ef">for</span> page_number, page <span style="color:#f92672">in</span> enumerate(reader<span style="color:#f92672">.</span>pages, start<span style="color:#f92672">=</span><span style="color:#ae81ff">1</span>):
</span></span></code></pre></div><ul>
<li><code>reader.pages</code> تُرجع قائمة بالصفحات في ملف PDF.</li>
<li><code>enumerate(..., start=1)</code> يعين <strong>رقم الصفحة بدءًا من 1</strong>.</li>
</ul>
<p><strong>3. طباعة النص المستخرج</strong></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>    print(<span style="color:#e6db74">f</span><span style="color:#e6db74">&#34;Page </span><span style="color:#e6db74">{</span>page_number<span style="color:#e6db74">}</span><span style="color:#e6db74">:&#34;</span>)
</span></span><span style="display:flex;"><span>    print(page<span style="color:#f92672">.</span>extract_text())
</span></span><span style="display:flex;"><span>    print(<span style="color:#e6db74">&#34;-&#34;</span> <span style="color:#f92672">*</span> <span style="color:#ae81ff">50</span>)  <span style="color:#75715e"># فاصلة للقراءة</span>
</span></span></code></pre></div><ul>
<li><code>page.extract_text()</code> يستخرج النص من الصفحة الحالية.</li>
<li>يُطبع النص المستخرج مع <strong>رقم الصفحة</strong>.</li>
<li><code>&quot;-&quot; * 50</code> يُطبع خط فاصلة (<code>--------------------------------------------------</code>) لتحسين القراءة.</li>
</ul>
<h3 id="ملف-pdf-المدخل-المستخدم-في-الكود">ملف PDF المدخل المستخدم في الكود</h3>
<ul>
<li><strong>ملف المدخل:</strong> <a href="https://github.com/fileformat-blog-gists/code/blob/main/working-with-pdf-files-in-python/pdf-to-extract-text/">رابط التحميل</a></li>
</ul>
<h3 id="ناتج-الكود">ناتج الكود</h3>
<script type="application/javascript" src="https://gist.github.com/fileformat-blog-gists/ab6976aa3a0fc2999093f5f9320a9e20.js?file=Output%20-%20extract-text-from-pdf-using-pypdf-in-python.txt"></script>

<h2 id="2-تدوير-صفحات-pdf-باستخدام-بايثون">2. تدوير صفحات PDF باستخدام بايثون</h2>
<script type="application/javascript" src="https://gist.github.com/fileformat-blog-gists/760d480cfede4178296c353d60662e1a.js?file=rotate-pdf-page-using-pypdf-in-python.py"></script>

<h3 id="شرح-الكود-1">شرح الكود</h3>
<p>الكود يقوم بتدوير <strong>الصفحة الأولى</strong> بزاوية <strong>90° باتجاه عقارب الساعة</strong> وحفظ ملف PDF المعدل دون التأثير على الصفحات الأخرى.</p>
<p><strong>1. استيراد الفئات المطلوبة</strong></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">from</span> pypdf <span style="color:#f92672">import</span> PdfReader, PdfWriter
</span></span></code></pre></div><ul>
<li><code>PdfReader</code>: لقراءة ملف الـPDF المدخل.</li>
<li><code>PdfWriter</code>: لإنشاء وحفظ ملف PDF مع التعديلات.</li>
</ul>
<p><strong>2. تعيين مسارات ملفات الإدخال والإخراج</strong></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>input_pdf <span style="color:#f92672">=</span> <span style="color:#e6db74">&#34;pdf-to-rotate/input.pdf&#34;</span>
</span></span><span style="display:flex;"><span>output_pdf <span style="color:#f92672">=</span> <span style="color:#e6db74">&#34;pdf-to-rotate/rotated_output.pdf&#34;</span>
</span></span></code></pre></div><ul>
<li>يُقرأ الكود من <code>input.pdf</code> ويحفظ الملف المعدل كـ <code>rotated_output.pdf</code>.</li>
</ul>
<p><strong>3. قراءة ملف PDF وإنشاء كائن الكاتب</strong></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>reader <span style="color:#f92672">=</span> PdfReader(input_pdf)
</span></span><span style="display:flex;"><span>writer <span style="color:#f92672">=</span> PdfWriter()
</span></span></code></pre></div><ul>
<li><code>reader</code> تحميل ملف PDF الحالي.</li>
<li><code>writer</code> يُستخدم لتخزين الصفحات المعدلة.</li>
</ul>
<p><strong>4. تدوير الصفحة الأولى بزاوية 90 درجة</strong></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>page <span style="color:#f92672">=</span> reader<span style="color:#f92672">.</span>pages[<span style="color:#ae81ff">0</span>]
</span></span><span style="display:flex;"><span>page<span style="color:#f92672">.</span>rotate(<span style="color:#ae81ff">90</span>)  <span style="color:#75715e"># التدوير 90 درجة باتجاه عقارب الساعة</span>
</span></span><span style="display:flex;"><span>writer<span style="color:#f92672">.</span>add_page(page)
</span></span></code></pre></div><ul>
<li>استخراج <strong>الصفحة 1</strong>، وتدويرها <strong>90 درجة</strong>، وإضافتها إلى ملف PDF الجديد.</li>
</ul>
<p><strong>5. إضافة الصفحات المتبقية دون تغييرات</strong></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:#66d9ef">for</span> i <span style="color:#f92672">in</span> range(<span style="color:#ae81ff">1</span>, len(reader<span style="color:#f92672">.</span>pages)):
</span></span><span style="display:flex;"><span>    writer<span style="color:#f92672">.</span>add_page(reader<span style="color:#f92672">.</span>pages[i])
</span></span></code></pre></div><ul>
<li>تمر عبر الصفحات المتبقية وإضافتها كما هي.</li>
</ul>
<p><strong>6. حفظ ملف PDF الجديد</strong></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:#66d9ef">with</span> open(output_pdf, <span style="color:#e6db74">&#34;wb&#34;</span>) <span style="color:#66d9ef">as</span> file:
</span></span><span style="display:flex;"><span>    writer<span style="color:#f92672">.</span>write(file)
</span></span></code></pre></div><ul>
<li>فتح <code>rotated_output.pdf</code> في وضع الكتابة الثنائية وحفظ ملف PDF الجديد.</li>
</ul>
<p><strong>7. طباعة تأكيد</strong></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>print(<span style="color:#e6db74">f</span><span style="color:#e6db74">&#34;Rotated page saved to </span><span style="color:#e6db74">{</span>output_pdf<span style="color:#e6db74">}</span><span style="color:#e6db74">&#34;</span>)
</span></span></code></pre></div><ul>
<li>يعرض رسالة تأكيد النجاح.</li>
</ul>
<h3 id="ملف-pdf-المدخل-المستخدم-في-الكود-وناتج-التدوير">ملف PDF المدخل المستخدم في الكود وناتج التدوير</h3>
<ul>
<li><strong>ملف PDF المدخل:</strong> <a href="https://github.com/fileformat-blog-gists/code/tree/main/working-with-pdf-files-in-python/pdf-to-rotate/">رابط التحميل</a></li>
<li><strong>ملف PDF الناتج المدور:</strong> <a href="https://github.com/fileformat-blog-gists/code/tree/main/working-with-pdf-files-in-python/pdf-to-rotate/rotated_output.pdf">رابط التحميل</a></li>
</ul>
<p><strong>لقطة شاشة</strong>
<img loading="lazy" src="https://raw.githubusercontent.com/fileformat-blog-gists/content/main/working-with-pdf-files-in-python/rotated-pdf.png" alt="لقطة شاشة للصفحة المدورة في PDF باستخدام بايثون"  />
</p>
<h2 id="3-دمج-ملفات-pdf-باستخدام-بايثون">3. دمج ملفات PDF باستخدام بايثون</h2>
<p>يوضح هذا الكود في بايثون كيفية <strong>دمج عدة ملفات PDF</strong> من دليل إلى ملف PDF واحد باستخدام مكتبة <strong>PyPDF</strong>.</p>
<script type="application/javascript" src="https://gist.github.com/fileformat-blog-gists/a1a571783e0f5e699678d1094bf1afa5.js?file=merge_pdf_files_using_pypdf_in_python.py"></script>

<h3 id="شرح-الكود-2">شرح الكود</h3>
<ul>
<li>يقوم هذا البرنامج بدمج جميع ملفات PDF الموجودة في الدليل المحدد (<code>pdfs-to-merge</code>) تلقائيًا في ملف إخراج واحد (<code>merged_output.pdf</code>).</li>
<li>يضمن وجود دليل الإخراج ويضيف صفحات كل PDF وفقًا لترتيبها.</li>
<li>يتم إخراج الملف النهائي المدمج في مجلد <code>output-dir</code> الفرعي.</li>
</ul>
<p><strong>تفاصيل الكود</strong></p>
<p><strong>1. استيراد المكتبات</strong></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> os
</span></span><span style="display:flex;"><span><span style="color:#f92672">from</span> pypdf <span style="color:#f92672">import</span> PdfReader, PdfWriter
</span></span></code></pre></div><ul>
<li><code>os</code>: يستخدم للتفاعل مع نظام الملفات مثل قراءة الأدلة وإدارة مسارات الملفات.</li>
<li><code>PdfReader</code>: يقرأ محتوى ملف PDF.</li>
<li><code>PdfWriter</code>: ينشئ ويكتب ملف PDF جديد.</li>
</ul>
<p><strong>2. تحديد الدليل وملف الإخراج</strong></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>directory <span style="color:#f92672">=</span> <span style="color:#e6db74">&#34;pdfs-to-merge&#34;</span>
</span></span><span style="display:flex;"><span>output_file <span style="color:#f92672">=</span> <span style="color:#e6db74">&#34;output-dir/merged_output.pdf&#34;</span>
</span></span></code></pre></div><ul>
<li><code>directory</code>: يحدد المجلد الذي تُخزن فيه ملفات الـPDF.</li>
<li><code>output_file</code>: يعرف مسار واسم ملف الـPDF الناتج والمدمج.</li>
</ul>
<p><strong>3. إنشاء دليل الإخراج إذا لم يكن موجودًا</strong></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>os<span style="color:#f92672">.</span>makedirs(os<span style="color:#f92672">.</span>path<span style="color:#f92672">.</span>join(directory, <span style="color:#e6db74">&#34;output-dir&#34;</span>), exist_ok<span style="color:#f92672">=</span><span style="color:#66d9ef">True</span>)
</span></span></code></pre></div><ul>
<li>يضمن وجود <strong>دليل الإخراج</strong>، وإذا لم يكن موجودًا، يقوم بإنشائه.</li>
</ul>
<p><strong>4. إنشاء كائن PdfWriter</strong></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>writer <span style="color:#f92672">=</span> PdfWriter()
</span></span></code></pre></div><ul>
<li><code>writer</code> يُستخدم لتجميع ودمج جميع الصفحات من ملفات الـPDF.</li>
</ul>
<p><strong>5. التكرار عبر جميع ملفات PDF في الدليل</strong></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:#66d9ef">for</span> file_name <span style="color:#f92672">in</span> sorted(os<span style="color:#f92672">.</span>listdir(directory)):
</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">if</span> file_name<span style="color:#f92672">.</span>endswith(<span style="color:#e6db74">&#34;.pdf&#34;</span>):
</span></span><span style="display:flex;"><span>        file_path <span style="color:#f92672">=</span> os<span style="color:#f92672">.</span>path<span style="color:#f92672">.</span>join(directory, file_name)
</span></span><span style="display:flex;"><span>        print(<span style="color:#e6db74">f</span><span style="color:#e6db74">&#34;Adding: </span><span style="color:#e6db74">{</span>file_name<span style="color:#e6db74">}</span><span style="color:#e6db74">&#34;</span>)
</span></span></code></pre></div><ul>
<li>يمر عبر جميع الملفات في الدليل المحدد، ويفحص الملفات ذات الامتداد <code>.pdf</code>. يستخدم <code>sorted()</code> لفرزها أبجديًا.</li>
</ul>
<p><strong>6. قراءة كل PDF وإرفاق الصفحات بالكاتب</strong></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>reader <span style="color:#f92672">=</span> PdfReader(file_path)
</span></span><span style="display:flex;"><span>writer<span style="color:#f92672">.</span>append(reader)
</span></span></code></pre></div><ul>
<li>لكل PDF، يقرأ <code>PdfReader</code> الملف، ثم تضيف جميع الصفحات الموجودة في هذا الـPDF إلى <code>writer</code>.</li>
</ul>
<p><strong>7. كتابة ملف PDF المدمج في ملف إخراج</strong></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>output_path <span style="color:#f92672">=</span> os<span style="color:#f92672">.</span>path<span style="color:#f92672">.</span>join(directory, output_file)
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">with</span> open(output_path, <span style="color:#e6db74">&#34;wb&#34;</span>) <span style="color:#66d9ef">as</span> output_pdf:
</span></span><span style="display:flex;"><span>    writer<span style="color:#f92672">.</span>write(output_pdf)
</span></span></code></pre></div><ul>
<li>بعد تجميع جميع الصفحات، يقوم <code>writer.write()</code> بكتابة ملف الـPDF المدمج إلى المسار المحدد للإخراج.</li>
</ul>
<p><strong>8. طباعة تأكيد</strong></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>print(<span style="color:#e6db74">f</span><span style="color:#e6db74">&#34;Merged PDF saved as: </span><span style="color:#e6db74">{</span>output_path<span style="color:#e6db74">}</span><span style="color:#e6db74">&#34;</span>)
</span></span></code></pre></div><ul>
<li>يطبع رسالة تأكيد تؤكد مكان حفظ ملف الـPDF المدمج.</li>
</ul>
<h3 id="ملفات-الـpdf-المدخلة-المستخدمة-في-الكود-وملف-الـpdf-المدمج-الناتج">ملفات الـPDF المدخلة المستخدمة في الكود وملف الـPDF المدمج الناتج</h3>
<ul>
<li><strong>ملفات PDF المدخلة:</strong> <a href="https://github.com/fileformat-blog-gists/code/tree/main/working-with-pdf-files-in-python/pdfs-to-merge">رابط التحميل</a></li>
<li><strong>ملف PDF المدمج الناتج:</strong> <a href="https://github.com/fileformat-blog-gists/code/tree/main/working-with-pdf-files-in-python/pdfs-to-merge/output-dir">رابط التحميل</a></li>
</ul>
<h2 id="4-تقسيم-ملف-pdf-باستخدام-بايثون">4. تقسيم ملف PDF باستخدام بايثون</h2>
<script type="application/javascript" src="https://gist.github.com/fileformat-blog-gists/0dee64422ac0dcf44cf027d90567bbf8.js?file=split-pdf-using-pypdf-in-python.py"></script>

<h3 id="شرح-الكود-3">شرح الكود</h3>
<p>تقوم الشفرة أعلاه بتقسيم ملف PDF إلى صفحات منفصلة باستخدام مكتبة <strong>PyPDF</strong>. في البداية، تتأكد الشفرة من أن مجلد الإخراج موجود، ثم تقرأ ملف الـPDF المدخل. وتكرارًا على كل صفحة، تنشئ الشفرة كائن <strong>PdfWriter</strong> جديدًا وتخزن كل صفحة كملف PDF فردي. يتم تسمية ملفات الإخراج بشكل تسلسلي (مثل <strong>page_1.pdf، page_2.pdf</strong>) وتخزن في مجلد <strong><code>output-dir</code></strong>. وأخيرًا، تطبع الشفرة رسالة تأكيد لكل ملف تم إنشاؤه وتخبر عند انتهاء العملية.</p>
<h3 id="ملف-pdf-المدخل-وملفات-الإخراج-المنقسمة">ملف PDF المدخل وملفات الإخراج المنقسمة</h3>
<ul>
<li><strong>ملف PDF المدخل:</strong> <a href="https://github.com/fileformat-blog-gists/code/tree/main/working-with-pdf-files-in-python/pdf-to-split">رابط التحميل</a></li>
<li><strong>ملفات الإخراج المنقسمة:</strong> <a href="https://github.com/fileformat-blog-gists/code/tree/main/working-with-pdf-files-in-python/pdf-to-split/output-dir">رابط التحميل</a></li>
</ul>
<h2 id="5-إضافة-علامة-مائية-إلى-ملف-pdf-باستخدام-بايثون">5. إضافة علامة مائية إلى ملف PDF باستخدام بايثون</h2>
<p>يمكنك إضافة علامة مائية إلى ملف PDF باستخدام مكتبة PyPDF عن طريق وضع علامة مائية PDF على ملف PDF موجود. تأكد من أن ملف العلامة المائية يحتوي على صفحة واحدة فقط ليتم تطبيقها بشكل صحيح على كل صفحة من ملف PDF الرئيسي.</p>
<script type="application/javascript" src="https://gist.github.com/fileformat-blog-gists/af057943580e2fcde6a635df34d7e39a.js?file=watermark-pdf-using-pypdf-in-python.py"></script>

<h3 id="شرح-الكود-4">شرح الكود</h3>
<p>تقرأ الشفرة أعلاه ملف PDF مدخلًا، وتستخرج ملف علامة مائية بصفحة واحدة، وتقوم بتطبيق العلامة المائية على كل صفحة من ملف الـPDF المدخل، وتحفظ ملف PDF النهائي المدموغ.</p>
<p><strong>تفاصيل الشفرة</strong></p>
<p>إليك شرح موجز لكل جزء</p>
<p><strong>1. استيراد الفئات المطلوبة</strong></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">from</span> pypdf <span style="color:#f92672">import</span> PdfReader, PdfWriter
</span></span></code></pre></div><ul>
<li><strong><code>PdfReader</code></strong> لقراءة ملفات PDF الحالية.</li>
<li><strong><code>PdfWriter</code></strong> لإنشاء وكتابة ملف PDF جديد.</li>
</ul>
<p><strong>2. تعيين مسارات الملفات</strong></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>input_pdf <span style="color:#f92672">=</span> <span style="color:#e6db74">&#34;pdf-to-watermark/input.pdf&#34;</span>
</span></span><span style="display:flex;"><span>watermark_pdf <span style="color:#f92672">=</span> <span style="color:#e6db74">&#34;pdf-to-watermark/watermark.pdf&#34;</span>
</span></span><span style="display:flex;"><span>output_pdf <span style="color:#f92672">=</span> <span style="color:#e6db74">&#34;pdf-to-watermark/output_with_watermark.pdf&#34;</span>
</span></span></code></pre></div><ul>
<li><code>input_pdf</code>: ملف الـPDF الأصلي الذي سيتم إضافة العلامة المائية إليه.</li>
<li><code>watermark_pdf</code>: ملف PDF منفصل بصفحة <strong>واحدة</strong> يخدم كعلامة مائية.</li>
<li><code>output_pdf</code>: الملف الناتج الذي سيحتوي على الصفحات المدموغة.</li>
</ul>
<p><strong>3. قراءة ملفات الـPDF</strong></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>reader <span style="color:#f92672">=</span> PdfReader(input_pdf)
</span></span><span style="display:flex;"><span>watermark <span style="color:#f92672">=</span> PdfReader(watermark_pdf)
</span></span></code></pre></div><ul>
<li><code>reader</code>: يقرأ ملف الـPDF المدخل.</li>
<li><code>watermark</code>: يقرأ ملف الـPDF الخاص بالعلامة المائية.</li>
</ul>
<p><strong>4. إنشاء كائن كاتب</strong></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>writer <span style="color:#f92672">=</span> PdfWriter()
</span></span></code></pre></div><ul>
<li>هذا سيتم استخدامه لإنشاء ملف الـPDF النهائي المدموغ.</li>
</ul>
<p><strong>5. استخراج صفحة العلامة المائية</strong></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>watermark_page <span style="color:#f92672">=</span> watermark<span style="color:#f92672">.</span>pages[<span style="color:#ae81ff">0</span>]
</span></span></code></pre></div><ul>
<li>يفترض أن ملف العلامة المائية يحتوي فقط على <strong>صفحة واحدة</strong>، تُستخدم للتراكب على جميع الصفحات.</li>
</ul>
<p><strong>6. التكرار عبر صفحات ملف الـPDF المدخل ودمج العلامة المائية</strong></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:#66d9ef">for</span> page <span style="color:#f92672">in</span> reader<span style="color:#f92672">.</span>pages:
</span></span><span style="display:flex;"><span>    <span style="color:#75715e"># دمج العلامة المائية بالصفحة الحالية</span>
</span></span><span style="display:flex;"><span>    page<span style="color:#f92672">.</span>merge_page(watermark_page)
</span></span><span style="display:flex;"><span>    
</span></span><span style="display:flex;"><span>    <span style="color:#75715e"># أضف الصفحة المدموجة إلى الكاتب</span>
</span></span><span style="display:flex;"><span>    writer<span style="color:#f92672">.</span>add_page(page)
</span></span></code></pre></div><ul>
<li>التكرار لكل صفحة من <code>input_pdf</code>.</li>
<li><strong><code>merge_page(watermark_page)</code></strong> يضع العلامة المائية فوق الصفحة الحالية.</li>
<li>يُضاف الصفحة المعدلة إلى <code>writer</code>.</li>
</ul>
<p><strong>7. حفظ ملف الـPDF المدموغ</strong></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:#66d9ef">with</span> open(output_pdf, <span style="color:#e6db74">&#34;wb&#34;</span>) <span style="color:#66d9ef">as</span> output_file:
</span></span><span style="display:flex;"><span>    writer<span style="color:#f92672">.</span>write(output_file)
</span></span></code></pre></div><ul>
<li>يكتب الصفحات المعدلة في ملف PDF جديد.</li>
</ul>
<p><strong>8. طباعة تأكيد</strong></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>print(<span style="color:#e6db74">f</span><span style="color:#e6db74">&#34;Watermarked PDF saved as: </span><span style="color:#e6db74">{</span>output_pdf<span style="color:#e6db74">}</span><span style="color:#e6db74">&#34;</span>)
</span></span></code></pre></div><ul>
<li>يطبع مسار ملف الإخراج للتأكيد.</li>
</ul>
<h3 id="ملف-الـpdf-المدخل-وملف-العلامة-المائية-وملف-الـpdf-المدموغ">ملف الـPDF المدخل، وملف العلامة المائية، وملف الـPDF المدموغ</h3>
<ul>
<li><strong>ملف PDF المدخل:</strong> <a href="https://github.com/fileformat-blog-gists/code/tree/main/working-with-pdf-files-in-python/pdf-to-watermark">رابط التحميل</a></li>
<li><strong>ملف PDF العلامة المائية:</strong> <a href="https://github.com/fileformat-blog-gists/code/tree/main/working-with-pdf-files-in-python/pdf-to-watermark">رابط التحميل</a></li>
<li><strong>ملف PDF المدموغ الناتج:</strong> <a href="https://github.com/fileformat-blog-gists/code/tree/main/working-with-pdf-files-in-python/pdf-to-watermark">رابط التحميل</a></li>
</ul>
<p><strong>لقطة شاشة</strong>
<img loading="lazy" src="https://raw.githubusercontent.com/fileformat-blog-gists/content/main/working-with-pdf-files-in-python/watermark-pdf.png" alt="لقطة شاشة لملف PDF مدموغ باستخدام بايثون"  />
</p>
<h2 id="الخاتمة">الخاتمة</h2>
<p>في هذا الدليل، استعرضنا العمليات الأساسية للعمل مع ملفات PDF باستخدام بايثون، بما في ذلك استخراج النصوص، تدوير الصفحات، الدمج، التقسيم، وإضافة العلامات المائية. مع هذه المهارات، يمكنك الآن بناء مدير ملفات PDF خاص بك وأتمتة مختلف المهام المتعلقة بـPDF بكفاءة.</p>
]]></content:encoded>
    </item>
    
  </channel>
</rss>
