<?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>pdf manipulation on Document Processing REST APIs | GroupDocs Cloud</title>
    <link>https://blog-qa.groupdocs.cloud/ar/tag/pdf-manipulation/</link>
    <description>Recent content in pdf manipulation on Document Processing REST APIs | GroupDocs Cloud</description>
    <generator>Hugo -- gohugo.io</generator>
    <language>ar</language>
    <lastBuildDate>Wed, 21 Oct 2026 13:18:44 +0000</lastBuildDate><atom:link href="https://blog-qa.groupdocs.cloud/ar/tag/pdf-manipulation/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>إزالة كائنات التعليقات التوضيحية من PDF باستخدام REST في Node.JS</title>
      <link>https://blog-qa.groupdocs.cloud/ar/annotation/remove-annotation-objects-from-pdf-with-rest-in-nodejs/</link>
      <pubDate>Wed, 21 Oct 2026 13:18:44 +0000</pubDate>
      
      <guid>https://blog-qa.groupdocs.cloud/ar/annotation/remove-annotation-objects-from-pdf-with-rest-in-nodejs/</guid>
      <description>تعلم كيفية إزالة كائنات Annotation من PDF باستخدام REST في Node.JS باستخدام GroupDocs.Annotation Cloud SDK. دليل خطوة بخطوة مع الشيفرة، cURL والممارسات.</description>
      <content:encoded><![CDATA[<p>إزالة الملاحظات غير المرغوب فيها أو التظليل أو علامات الحبر من ملفات PDF هي حاجة متكررة عند إعداد مستندات نظيفة للتوزيع. <a href="https://products.groupdocs.cloud/annotation/nodejs/">GroupDocs.Annotation Cloud SDK for Node.js</a> يوفر مكتبة قوية تعتمد على REST تتيح لك إدارة تعليقات <a href="https://docs.fileformat.com/pdf">PDF</a> برمجيًا. يوضح هذا الدليل كيفية إزالة كائنات Annotation من PDF باستخدام REST في Node.JS، خطوة بخطوة. ستشاهد مثالًا كاملاً للكود، أوامر cURL المكافئة، نصائح التكوين، وتوصيات أفضل الممارسات لدمج إزالة التعليقات في خدماتك.</p>
<h2 id="مثال-عملي-كامل-لإزالة-كائنات-التعليقات-التوضيحية-من-pdf-باستخدام-rest-في-nodejs">مثال عملي كامل لإزالة كائنات التعليقات التوضيحية من PDF باستخدام REST في Node.JS</h2>
<p>يوضح هذا المثال كيفية تحميل ملف PDF، حذف جميع التعليقات التوضيحية الخاصة به، وتنزيل الملف المنظف باستخدام GroupDocs.Annotation SDK.</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-javascript" data-lang="javascript"><span style="display:flex;"><span><span style="color:#66d9ef">const</span> <span style="color:#a6e22e">fs</span> <span style="color:#f92672">=</span> <span style="color:#a6e22e">require</span>(<span style="color:#e6db74">&#39;fs&#39;</span>);
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">const</span> <span style="color:#a6e22e">path</span> <span style="color:#f92672">=</span> <span style="color:#a6e22e">require</span>(<span style="color:#e6db74">&#39;path&#39;</span>);
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">const</span> <span style="color:#a6e22e">GroupDocsAnnotationCloud</span> <span style="color:#f92672">=</span> <span style="color:#a6e22e">require</span>(<span style="color:#e6db74">&#34;@groupdocs/annotation-cloud&#34;</span>);
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#75715e">// ==== Authentication =========================================================
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span><span style="color:#66d9ef">const</span> <span style="color:#a6e22e">clientId</span> <span style="color:#f92672">=</span> <span style="color:#e6db74">&#34;YOUR_CLIENT_ID&#34;</span>;
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">const</span> <span style="color:#a6e22e">clientSecret</span> <span style="color:#f92672">=</span> <span style="color:#e6db74">&#34;YOUR_CLIENT_SECRET&#34;</span>;
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">const</span> <span style="color:#a6e22e">config</span> <span style="color:#f92672">=</span> <span style="color:#66d9ef">new</span> <span style="color:#a6e22e">GroupDocsAnnotationCloud</span>.<span style="color:#a6e22e">Configuration</span>(<span style="color:#a6e22e">clientId</span>, <span style="color:#a6e22e">clientSecret</span>);
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">const</span> <span style="color:#a6e22e">annotationsApi</span> <span style="color:#f92672">=</span> <span style="color:#66d9ef">new</span> <span style="color:#a6e22e">GroupDocsAnnotationCloud</span>.<span style="color:#a6e22e">AnnotationsApi</span>(<span style="color:#a6e22e">config</span>);
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">const</span> <span style="color:#a6e22e">storageApi</span> <span style="color:#f92672">=</span> <span style="color:#66d9ef">new</span> <span style="color:#a6e22e">GroupDocsAnnotationCloud</span>.<span style="color:#a6e22e">StorageApi</span>(<span style="color:#a6e22e">config</span>);
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#75715e">// ==== Local &amp; Remote file definitions =======================================
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span><span style="color:#66d9ef">const</span> <span style="color:#a6e22e">localInputPath</span> <span style="color:#f92672">=</span> <span style="color:#a6e22e">path</span>.<span style="color:#a6e22e">resolve</span>(<span style="color:#a6e22e">__dirname</span>, <span style="color:#e6db74">&#34;input.pdf&#34;</span>);
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">const</span> <span style="color:#a6e22e">localOutputPath</span> <span style="color:#f92672">=</span> <span style="color:#a6e22e">path</span>.<span style="color:#a6e22e">resolve</span>(<span style="color:#a6e22e">__dirname</span>, <span style="color:#e6db74">&#34;output.pdf&#34;</span>);
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">const</span> <span style="color:#a6e22e">remoteFilePath</span> <span style="color:#f92672">=</span> <span style="color:#e6db74">&#34;input.pdf&#34;</span>;
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#75715e">// ==== Main workflow ==========================================================
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span>(<span style="color:#66d9ef">async</span> () =&gt; {
</span></span><span style="display:flex;"><span>    <span style="color:#75715e">// 1. Upload PDF to GroupDocs Cloud storage
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span>    <span style="color:#66d9ef">const</span> <span style="color:#a6e22e">fileBytes</span> <span style="color:#f92672">=</span> <span style="color:#a6e22e">fs</span>.<span style="color:#a6e22e">readFileSync</span>(<span style="color:#a6e22e">localInputPath</span>);
</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">const</span> <span style="color:#a6e22e">uploadRequest</span> <span style="color:#f92672">=</span> <span style="color:#66d9ef">new</span> <span style="color:#a6e22e">GroupDocsAnnotationCloud</span>.<span style="color:#a6e22e">UploadFileRequest</span>({
</span></span><span style="display:flex;"><span>        <span style="color:#a6e22e">path</span><span style="color:#f92672">:</span> <span style="color:#a6e22e">remoteFilePath</span>,
</span></span><span style="display:flex;"><span>        <span style="color:#a6e22e">file</span><span style="color:#f92672">:</span> <span style="color:#a6e22e">fileBytes</span>
</span></span><span style="display:flex;"><span>    });
</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">await</span> <span style="color:#a6e22e">storageApi</span>.<span style="color:#a6e22e">uploadFile</span>(<span style="color:#a6e22e">uploadRequest</span>);
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#75715e">// 2. Build FileInfo object for the uploaded PDF
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span>    <span style="color:#66d9ef">const</span> <span style="color:#a6e22e">fileInfo</span> <span style="color:#f92672">=</span> <span style="color:#66d9ef">new</span> <span style="color:#a6e22e">GroupDocsAnnotationCloud</span>.<span style="color:#a6e22e">FileInfo</span>({
</span></span><span style="display:flex;"><span>        <span style="color:#a6e22e">filePath</span><span style="color:#f92672">:</span> <span style="color:#a6e22e">remoteFilePath</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">// 3. Retrieve all existing annotations
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span>    <span style="color:#66d9ef">const</span> <span style="color:#a6e22e">getAnnotationsRequest</span> <span style="color:#f92672">=</span> <span style="color:#66d9ef">new</span> <span style="color:#a6e22e">GroupDocsAnnotationCloud</span>.<span style="color:#a6e22e">GetAnnotationsRequest</span>({
</span></span><span style="display:flex;"><span>        <span style="color:#a6e22e">fileInfo</span><span style="color:#f92672">:</span> <span style="color:#a6e22e">fileInfo</span>
</span></span><span style="display:flex;"><span>    });
</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">const</span> <span style="color:#a6e22e">annotationsResult</span> <span style="color:#f92672">=</span> <span style="color:#66d9ef">await</span> <span style="color:#a6e22e">annotationsApi</span>.<span style="color:#a6e22e">getAnnotations</span>(<span style="color:#a6e22e">getAnnotationsRequest</span>);
</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">const</span> <span style="color:#a6e22e">annotationIds</span> <span style="color:#f92672">=</span> (<span style="color:#a6e22e">annotationsResult</span>.<span style="color:#a6e22e">annotations</span> <span style="color:#f92672">||</span> []).<span style="color:#a6e22e">map</span>(<span style="color:#a6e22e">a</span> =&gt; <span style="color:#a6e22e">a</span>.<span style="color:#a6e22e">id</span>);
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#75715e">// 4. Delete all annotations (if any)
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span>    <span style="color:#66d9ef">if</span> (<span style="color:#a6e22e">annotationIds</span>.<span style="color:#a6e22e">length</span> <span style="color:#f92672">&gt;</span> <span style="color:#ae81ff">0</span>) {
</span></span><span style="display:flex;"><span>        <span style="color:#66d9ef">const</span> <span style="color:#a6e22e">deleteRequest</span> <span style="color:#f92672">=</span> <span style="color:#66d9ef">new</span> <span style="color:#a6e22e">GroupDocsAnnotationCloud</span>.<span style="color:#a6e22e">DeleteAnnotationsRequest</span>({
</span></span><span style="display:flex;"><span>            <span style="color:#a6e22e">fileInfo</span><span style="color:#f92672">:</span> <span style="color:#a6e22e">fileInfo</span>,
</span></span><span style="display:flex;"><span>            <span style="color:#a6e22e">annotationIds</span><span style="color:#f92672">:</span> <span style="color:#a6e22e">annotationIds</span>
</span></span><span style="display:flex;"><span>        });
</span></span><span style="display:flex;"><span>        <span style="color:#66d9ef">await</span> <span style="color:#a6e22e">annotationsApi</span>.<span style="color:#a6e22e">deleteAnnotations</span>(<span style="color:#a6e22e">deleteRequest</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">// 5. Download the cleaned PDF back to local storage
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span>    <span style="color:#66d9ef">const</span> <span style="color:#a6e22e">downloadRequest</span> <span style="color:#f92672">=</span> <span style="color:#66d9ef">new</span> <span style="color:#a6e22e">GroupDocsAnnotationCloud</span>.<span style="color:#a6e22e">DownloadFileRequest</span>({
</span></span><span style="display:flex;"><span>        <span style="color:#a6e22e">path</span><span style="color:#f92672">:</span> <span style="color:#a6e22e">remoteFilePath</span>
</span></span><span style="display:flex;"><span>    });
</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">const</span> <span style="color:#a6e22e">fileStream</span> <span style="color:#f92672">=</span> <span style="color:#66d9ef">await</span> <span style="color:#a6e22e">storageApi</span>.<span style="color:#a6e22e">downloadFile</span>(<span style="color:#a6e22e">downloadRequest</span>);
</span></span><span style="display:flex;"><span>    <span style="color:#a6e22e">fs</span>.<span style="color:#a6e22e">writeFileSync</span>(<span style="color:#a6e22e">localOutputPath</span>, <span style="color:#a6e22e">fileStream</span>);
</span></span><span style="display:flex;"><span>    <span style="color:#a6e22e">console</span>.<span style="color:#a6e22e">log</span>(<span style="color:#e6db74">`All annotations removed. Clean file saved to </span><span style="color:#e6db74">${</span><span style="color:#a6e22e">localOutputPath</span><span style="color:#e6db74">}</span><span style="color:#e6db74">`</span>);
</span></span><span style="display:flex;"><span>})();
</span></span></code></pre></div><blockquote>
<p><strong>ملاحظة:</strong> يوضح مثال الشيفرة هذا الوظيفة الأساسية. قبل استخدامه في مشروعك، تأكد من تحديث أي مسارات ملفات وقيم التكوين لتتناسب مع بيئتك الفعلية، وتحقق من أن جميع الاعتمادات المطلوبة مثبتة بشكل صحيح، واختبر بدقة في بيئة التطوير الخاصة بك. إذا واجهت أي مشكلات، يرجى الرجوع إلى <a href="https://docs.groupdocs.cloud/annotation/">الوثائق الرسمية</a> أو التواصل مع <a href="https://forum.groupdocs.cloud/c/annotation/10">فريق الدعم</a> للحصول على المساعدة.</p>
</blockquote>
<h2 id="حذف-تعليقات-pdf-عبر-rest-api-باستخدام-curl">حذف تعليقات PDF عبر REST API باستخدام cURL</h2>
<p>فيما يلي أوامر cURL التي تنفّذ نفس سير عمل إزالة التعليقات التوضيحية عبر نقاط النهاية REST لسحابة GroupDocs.Annotation.</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"># 1. Obtain an access token</span>
</span></span><span style="display:flex;"><span>curl -X POST <span style="color:#e6db74">&#34;https://api.groupdocs.cloud/v2.0/auth/token&#34;</span> <span style="color:#ae81ff">\
</span></span></span><span style="display:flex;"><span><span style="color:#ae81ff"></span>     -H <span style="color:#e6db74">&#34;Content-Type: application/json&#34;</span> <span style="color:#ae81ff">\
</span></span></span><span style="display:flex;"><span><span style="color:#ae81ff"></span>     -d <span style="color:#e6db74">&#34;{\&#34;client_id\&#34;:\&#34;YOUR_CLIENT_ID\&#34;,\&#34;client_secret\&#34;:\&#34;YOUR_CLIENT_SECRET\&#34;}&#34;</span>
</span></span></code></pre></div><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"># 2. Upload the source PDF</span>
</span></span><span style="display:flex;"><span>curl -X PUT <span style="color:#e6db74">&#34;https://api.groupdocs.cloud/v2.0/storage/file/input.pdf&#34;</span> <span style="color:#ae81ff">\
</span></span></span><span style="display:flex;"><span><span style="color:#ae81ff"></span>     -H <span style="color:#e6db74">&#34;Authorization: Bearer YOUR_ACCESS_TOKEN&#34;</span> <span style="color:#ae81ff">\
</span></span></span><span style="display:flex;"><span><span style="color:#ae81ff"></span>     -H <span style="color:#e6db74">&#34;Content-Type: application/pdf&#34;</span> <span style="color:#ae81ff">\
</span></span></span><span style="display:flex;"><span><span style="color:#ae81ff"></span>     --data-binary <span style="color:#e6db74">&#34;@input.pdf&#34;</span>
</span></span></code></pre></div><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"># 3. Retrieve annotation IDs</span>
</span></span><span style="display:flex;"><span>curl -X GET <span style="color:#e6db74">&#34;https://api.groupdocs.cloud/v2.0/annotation/annotations?filePath=input.pdf&#34;</span> <span style="color:#ae81ff">\
</span></span></span><span style="display:flex;"><span><span style="color:#ae81ff"></span>     -H <span style="color:#e6db74">&#34;Authorization: Bearer YOUR_ACCESS_TOKEN&#34;</span>
</span></span></code></pre></div><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"># 4. Delete all retrieved annotations</span>
</span></span><span style="display:flex;"><span>curl -X DELETE <span style="color:#e6db74">&#34;https://api.groupdocs.cloud/v2.0/annotation/annotations?filePath=input.pdf&#34;</span> <span style="color:#ae81ff">\
</span></span></span><span style="display:flex;"><span><span style="color:#ae81ff"></span>     -H <span style="color:#e6db74">&#34;Authorization: Bearer YOUR_ACCESS_TOKEN&#34;</span> <span style="color:#ae81ff">\
</span></span></span><span style="display:flex;"><span><span style="color:#ae81ff"></span>     -H <span style="color:#e6db74">&#34;Content-Type: application/json&#34;</span> <span style="color:#ae81ff">\
</span></span></span><span style="display:flex;"><span><span style="color:#ae81ff"></span>     -d <span style="color:#e6db74">&#34;{\&#34;annotationIds\&#34;:[\&#34;id1\&#34;,\&#34;id2\&#34;]}&#34;</span>
</span></span></code></pre></div><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"># 5. Download the cleaned PDF</span>
</span></span><span style="display:flex;"><span>curl -X GET <span style="color:#e6db74">&#34;https://api.groupdocs.cloud/v2.0/storage/file/input.pdf&#34;</span> <span style="color:#ae81ff">\
</span></span></span><span style="display:flex;"><span><span style="color:#ae81ff"></span>     -H <span style="color:#e6db74">&#34;Authorization: Bearer YOUR_ACCESS_TOKEN&#34;</span> <span style="color:#ae81ff">\
</span></span></span><span style="display:flex;"><span><span style="color:#ae81ff"></span>     -o output.pdf
</span></span></code></pre></div><p>للحصول على قائمة كاملة بنقاط النهاية والمعلمات، راجع <a href="https://reference.groupdocs.cloud/annotation/">وثائق API الرسمية</a>.</p>
<h2 id="كيف-تعمل-إزالة-كائنات-التعليقات-التوضيحية-من-pdf-باستخدام-rest-في-nodejs">كيف تعمل إزالة كائنات التعليقات التوضيحية من PDF باستخدام REST في Node.JS</h2>
<ol>
<li><strong>إعداد المصادقة</strong> - يتم إنشاء فئة <code>Configuration</code> باستخدام <code>clientId</code> و <code>clientSecret</code> الخاصين بك، مما ينشئ سياقًا موثوقًا لجميع استدعاءات API اللاحقة.
<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-javascript" data-lang="javascript"><span style="display:flex;"><span><span style="color:#66d9ef">const</span> <span style="color:#a6e22e">config</span> <span style="color:#f92672">=</span> <span style="color:#66d9ef">new</span> <span style="color:#a6e22e">GroupDocsAnnotationCloud</span>.<span style="color:#a6e22e">Configuration</span>(<span style="color:#a6e22e">clientId</span>, <span style="color:#a6e22e">clientSecret</span>);
</span></span></code></pre></div></li>
<li><strong>رفع الملف</strong> - يرسل <code>UploadFileRequest</code> بايتات ملف PDF المحلي إلى تخزين GroupDocs Cloud. تتولى طريقة <code>storageApi.uploadFile</code> عملية النقل.
<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-javascript" data-lang="javascript"><span style="display:flex;"><span><span style="color:#66d9ef">const</span> <span style="color:#a6e22e">uploadRequest</span> <span style="color:#f92672">=</span> <span style="color:#66d9ef">new</span> <span style="color:#a6e22e">GroupDocsAnnotationCloud</span>.<span style="color:#a6e22e">UploadFileRequest</span>({
</span></span><span style="display:flex;"><span>    <span style="color:#a6e22e">path</span><span style="color:#f92672">:</span> <span style="color:#a6e22e">remoteFilePath</span>,
</span></span><span style="display:flex;"><span>    <span style="color:#a6e22e">file</span><span style="color:#f92672">:</span> <span style="color:#a6e22e">fileBytes</span>
</span></span><span style="display:flex;"><span>});
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">await</span> <span style="color:#a6e22e">storageApi</span>.<span style="color:#a6e22e">uploadFile</span>(<span style="color:#a6e22e">uploadRequest</span>);
</span></span></code></pre></div></li>
<li><strong>استرجاع التعليقات التوضيحية</strong> - يبني <code>GetAnnotationsRequest</code> كائن طلب يحتوي على مرجع <code>FileInfo</code>. تُعيد استدعاء <code>annotationsApi.getAnnotations</code> مجموعة من كائنات التعليقات التوضيحية، يتم استخراج المعرفات منها.
<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-javascript" data-lang="javascript"><span style="display:flex;"><span><span style="color:#66d9ef">const</span> <span style="color:#a6e22e">getAnnotationsRequest</span> <span style="color:#f92672">=</span> <span style="color:#66d9ef">new</span> <span style="color:#a6e22e">GroupDocsAnnotationCloud</span>.<span style="color:#a6e22e">GetAnnotationsRequest</span>({
</span></span><span style="display:flex;"><span>    <span style="color:#a6e22e">fileInfo</span><span style="color:#f92672">:</span> <span style="color:#a6e22e">fileInfo</span>
</span></span><span style="display:flex;"><span>});
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">const</span> <span style="color:#a6e22e">annotationsResult</span> <span style="color:#f92672">=</span> <span style="color:#66d9ef">await</span> <span style="color:#a6e22e">annotationsApi</span>.<span style="color:#a6e22e">getAnnotations</span>(<span style="color:#a6e22e">getAnnotationsRequest</span>);
</span></span></code></pre></div></li>
<li><strong>حذف التعليقات التوضيحية</strong> - إذا كانت هناك أي معرفات، يتم ملء <code>DeleteAnnotationsRequest</code> وتمريره إلى <code>annotationsApi.deleteAnnotations</code>، الذي يزيل التعليقات التوضيحية بشكل دائم من ملف PDF المخزن.
<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-javascript" data-lang="javascript"><span style="display:flex;"><span><span style="color:#66d9ef">const</span> <span style="color:#a6e22e">deleteRequest</span> <span style="color:#f92672">=</span> <span style="color:#66d9ef">new</span> <span style="color:#a6e22e">GroupDocsAnnotationCloud</span>.<span style="color:#a6e22e">DeleteAnnotationsRequest</span>({
</span></span><span style="display:flex;"><span>    <span style="color:#a6e22e">fileInfo</span><span style="color:#f92672">:</span> <span style="color:#a6e22e">fileInfo</span>,
</span></span><span style="display:flex;"><span>    <span style="color:#a6e22e">annotationIds</span><span style="color:#f92672">:</span> <span style="color:#a6e22e">annotationIds</span>
</span></span><span style="display:flex;"><span>});
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">await</span> <span style="color:#a6e22e">annotationsApi</span>.<span style="color:#a6e22e">deleteAnnotations</span>(<span style="color:#a6e22e">deleteRequest</span>);
</span></span></code></pre></div></li>
<li><strong>تنزيل ملف PDF نظيف</strong> - أخيرًا، يقوم <code>DownloadFileRequest</code> بجلب الملف المحدث، وتكتب <code>fs.writeFileSync</code>ه إلى نظام الملفات المحلي.
<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-javascript" data-lang="javascript"><span style="display:flex;"><span><span style="color:#66d9ef">const</span> <span style="color:#a6e22e">downloadRequest</span> <span style="color:#f92672">=</span> <span style="color:#66d9ef">new</span> <span style="color:#a6e22e">GroupDocsAnnotationCloud</span>.<span style="color:#a6e22e">DownloadFileRequest</span>({
</span></span><span style="display:flex;"><span>    <span style="color:#a6e22e">path</span><span style="color:#f92672">:</span> <span style="color:#a6e22e">remoteFilePath</span>
</span></span><span style="display:flex;"><span>});
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">const</span> <span style="color:#a6e22e">fileStream</span> <span style="color:#f92672">=</span> <span style="color:#66d9ef">await</span> <span style="color:#a6e22e">storageApi</span>.<span style="color:#a6e22e">downloadFile</span>(<span style="color:#a6e22e">downloadRequest</span>);
</span></span><span style="display:flex;"><span><span style="color:#a6e22e">fs</span>.<span style="color:#a6e22e">writeFileSync</span>(<span style="color:#a6e22e">localOutputPath</span>, <span style="color:#a6e22e">fileStream</span>);
</span></span></code></pre></div></li>
</ol>
<p>للحصول على تعريفات مفصلة للفئات والطرق، راجع <a href="https://reference.groupdocs.cloud/annotation/">مرجع API</a>.</p>
<h2 id="التثبيت-والتهيئة-groupdocsannotation-cloud-sdk-for-nodejs">التثبيت والتهيئة GroupDocs.Annotation Cloud SDK for Node.js</h2>
<p>يتم توزيع SDK كحزمة npm. قم بتثبيتها باستخدام الأمر أدناه ثم استخدم require في مشروعك.</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>npm install groupdocs-annotation-cloud
</span></span></code></pre></div><p>يمكنك أيضًا تنزيل أحدث حزمة مباشرةً من <a href="https://github.com/groupdocs-annotation-cloud/groupdocs-annotation-cloud-node">صفحة إصدارات GitHub</a> أو من <a href="https://releases.groupdocs.cloud/annotation/nodejs/">عنوان URL للتنزيل</a>.</p>
<p>بعد التثبيت، استورد المكتبة وأنشئ كائن التكوين كما هو موضح في مثال الشيفرة التالي:</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-javascript" data-lang="javascript"><span style="display:flex;"><span><span style="color:#66d9ef">const</span> <span style="color:#a6e22e">GroupDocsAnnotationCloud</span> <span style="color:#f92672">=</span> <span style="color:#a6e22e">require</span>(<span style="color:#e6db74">&#34;@groupdocs/annotation-cloud&#34;</span>);
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">const</span> <span style="color:#a6e22e">config</span> <span style="color:#f92672">=</span> <span style="color:#66d9ef">new</span> <span style="color:#a6e22e">GroupDocsAnnotationCloud</span>.<span style="color:#a6e22e">Configuration</span>(<span style="color:#e6db74">&#34;YOUR_CLIENT_ID&#34;</span>, <span style="color:#e6db74">&#34;YOUR_CLIENT_SECRET&#34;</span>);
</span></span></code></pre></div><p>تأكد من أن بيئة التشغيل الخاصة بك تلبي متطلبات إصدار Node.js وأن لديك حساب GroupDocs صالح للحصول على بيانات اعتماد العميل.</p>
<h2 id="خيارات-وإعدادات-إزالة-التعليقات-التوضيحية">خيارات وإعدادات إزالة التعليقات التوضيحية</h2>
<p>يعرض SDK عدة معلمات يمكنك ضبطها:</p>
<ul>
<li><strong>clientId / clientSecret</strong> - بيانات الاعتماد لمصادقة OAuth. قم بتعيينها في مُنشئ <code>Configuration</code>.</li>
<li><strong>fileInfo.filePath</strong> - مسار ملف PDF في تخزين GroupDocs Cloud. عدّل ذلك إذا كنت تخزن الملفات في مجلد مختلف.</li>
<li><strong>annotationIds</strong> - مصفوفة من المعرفات التي تم إرجاعها بواسطة <code>GetAnnotations</code>. توفير مجموعة فرعية يسمح بالحذف الانتقائي.</li>
</ul>
<p>الإعدادات الإضافية مثل مهلات الطلب وتكوين الوكيل متاحة في وثائق SDK؛ راجع <a href="https://docs.groupdocs.cloud/annotation/">الوثائق الرسمية</a> للحصول على القائمة الكاملة.</p>
<h2 id="أفضل-الممارسات-لإزالة-تعليقات-pdf-عبر-rest">أفضل الممارسات لإزالة تعليقات PDF عبر REST</h2>
<ul>
<li><strong>تحقق من معرفات التعليقات التوضيحية</strong> - دائمًا تحقق من أن المعرفات التي تنوي حذفها موجودة؛ محاولة حذف معرفات غير موجودة قد تتسبب في حدوث خطأ 404.</li>
<li><strong>استخدام HTTPS</strong> - يجب إجراء جميع مكالمات API عبر HTTPS لحماية بيانات الاعتماد وبيانات المستند.</li>
<li><strong>معالجة الملفات الكبيرة باستخدام التحميل المجزأ</strong> - بالنسبة لملفات PDF التي يزيد حجمها عن 100 ميغابايت، يفضَّل استخدام نقطة النهاية للتحميل المتعدد لتجنب انتهاء المهلة.</li>
<li><strong>تسجيل استجابات API</strong> - احفظ معرفات الطلبات والاستجابات لسجلات التدقيق وتسهيل استكشاف الأخطاء.</li>
<li><strong>إعادة استخدام رموز الوصول</strong> - خزن رمز OAuth في الذاكرة المؤقتة حتى انتهاء صلاحيته لتقليل عبء المصادقة.</li>
</ul>
<h2 id="الأسئلة-الشائعة">الأسئلة الشائعة</h2>
<ul>
<li>
<p><strong>كيف يمكنني المصادقة مع GroupDocs.Annotation Cloud API?</strong>  احصل على معرف عميل وسر من حسابك في GroupDocs، ثم اطلب رمز وصول عبر نقطة النهاية OAuth. راجع <a href="https://docs.groupdocs.cloud/annotation/">الوثائق الرسمية</a> للحصول على التفاصيل.</p>
</li>
<li>
<p><strong>هل يمكنني حذف تعليقات توضيحية محددة بدلاً من جميعها؟</strong><br>
نعم، قدم معرفات التعليقات التوضيحية التي تريد إزالتها في DeleteAnnotationsRequest. تُعيد SDK قائمة بمعرفات التعليقات التوضيحية بعد استدعاء GetAnnotations.</p>
</li>
<li>
<p><strong>كيف يمكنني إزالة كائنات التعليق التوضيحي من PDF باستخدام REST في Node.JS؟</strong><br>
استخدم GroupDocs.Annotation Cloud SDK for Node.js لاستدعاء نقطة النهاية DeleteAnnotations بعد استرجاع معرفات التعليقات التوضيحية. يتم عرض سير العمل الكامل في مثال الشيفرة وقسم cURL في هذا الدليل.</p>
</li>
<li>
<p><strong>ما هو الترخيص المطلوب للاستخدام في الإنتاج؟</strong><br>
يلزم الحصول على ترخيص مدفوع للإنتاج. يمكنك الحصول على ترخيص مؤقت من صفحة <a href="https://purchase.groupdocs.cloud/temporary-license/">صفحة الترخيص المؤقت</a> أثناء التقييم.</p>
</li>
</ul>
<h2 id="قراءة-إضافية">قراءة إضافية</h2>
<ul>
<li><a href="https://blog.groupdocs.cloud/ar/annotation/extract-or-remove-annotations-from-pdf-using-rest-api-in-node-js/">استخراج أو إزالة التعليقات التوضيحية من PDF باستخدام REST API في Node.js</a></li>
<li><a href="https://blog.groupdocs.cloud/ar/annotation/strikethrough-text-in-a-pdf-using-nodejs/">نص مشطوب في PDF باستخدام Node.js و REST API</a></li>
<li><a href="https://blog.groupdocs.cloud/ar/annotation/remove-annotations-from-pdf-using-rest-api-in-python/">إزالة التعليقات التوضيحية من PDF باستخدام REST API في Python</a></li>
</ul>
]]></content:encoded>
    </item>
    
    <item>
      <title>دمج PDF في Node.JS</title>
      <link>https://blog-qa.groupdocs.cloud/ar/merger/merge-pdf-in-nodejs/</link>
      <pubDate>Mon, 19 Oct 2026 15:04:19 +0000</pubDate>
      
      <guid>https://blog-qa.groupdocs.cloud/ar/merger/merge-pdf-in-nodejs/</guid>
      <description>تعلم كيفية دمج ملفات PDF في Node.JS باستخدام GroupDocs.Merger Cloud SDK. دليل خطوة بخطوة، مثال على الشيفرة، أوامر cURL، ونصائح الأداء للمطورين.</description>
      <content:encoded><![CDATA[<p>دمج مستندات <a href="https://docs.fileformat.com/pdf">PDF</a> متعددة في ملف واحد هو طلب شائع عند بناء سير عمل المستندات أو إنشاء التقارير. يسهّل <a href="https://products.groupdocs.cloud/merger/nodejs/">GroupDocs.Merger Cloud SDK for Node.js</a> دمج ملفات PDF في Node.JS دون الحاجة للتعامل مع هياكل PDF منخفضة المستوى. يقدّم هذا الدليل إرشادات حول الإعداد، وتنفيذ خطوة بخطوة، ومثال كامل للكود، واستدعاءات cURL المكافئة، ونصائح الأداء للملفات الكبيرة أو المشفّرة.</p>
<h2 id="قبل-أن-تبدأ-المتطلبات-والتثبيت">قبل أن تبدأ: المتطلبات والتثبيت</h2>
<p>قبل أن تبدأ، تأكد من أن لديك ما يلي:</p>
<ul>
<li>Node.js 14 أو أحدث مثبت على جهاز التطوير الخاص بك.</li>
<li>حساب GroupDocs Cloud نشط مع معرف العميل والسر الخاص بالعميل.</li>
<li>الوصول إلى ملفات PDF التي تريد دمجها، المخزنة في تخزين GroupDocs Cloud.</li>
</ul>
<p>قم بتثبيت SDK عبر npm وقم بتنزيل أحدث حزمة:</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>npm install groupdocs-merger-cloud
</span></span></code></pre></div><p>يمكنك أيضًا الحصول على SDK من صفحة الإصدار الرسمية: <a href="https://releases.groupdocs.cloud/merger/nodejs/">تحميل SDK</a>. بعد التثبيت، أنت جاهز للبدء في كتابة الشيفرة.</p>
<h2 id="دليل-خطوة-بخطوة-لدمج-pdf-في-nodejs">دليل خطوة بخطوة لدمج PDF في Node.JS</h2>
<h3 id="الخطوة-1-تثبيت-sdk-واستيراد-الفئات-المطلوبة">الخطوة 1: تثبيت SDK واستيراد الفئات المطلوبة</h3>
<p>أولاً، استورد الفئات التي ستحتاجها لدمج ملفات PDF.</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-javascript" data-lang="javascript"><span style="display:flex;"><span><span style="color:#66d9ef">const</span> { <span style="color:#a6e22e">MergeApi</span>, <span style="color:#a6e22e">MergeOptions</span>, <span style="color:#a6e22e">FileInfo</span>, <span style="color:#a6e22e">Configuration</span> } <span style="color:#f92672">=</span> <span style="color:#a6e22e">require</span>(<span style="color:#e6db74">&#34;@groupdocs/merger-cloud&#34;</span>);
</span></span></code></pre></div><p>يمنحك هذا الاستيراد الوصول إلى واجهة برمجة التطبيقات الأساسية، وكائنات التكوين، ومؤشرات الملفات.</p>
<h3 id="الخطوة-2-تكوين-بيانات-اعتماد-groupdocs-الخاصة-بك">الخطوة 2: تكوين بيانات اعتماد GroupDocs الخاصة بك</h3>
<p>إنشاء كائن تكوين باستخدام بيانات اعتماد العميل الخاصة بك.</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-javascript" data-lang="javascript"><span style="display:flex;"><span><span style="color:#66d9ef">const</span> <span style="color:#a6e22e">config</span> <span style="color:#f92672">=</span> <span style="color:#66d9ef">new</span> <span style="color:#a6e22e">Configuration</span>({
</span></span><span style="display:flex;"><span>    <span style="color:#a6e22e">clientId</span><span style="color:#f92672">:</span> <span style="color:#e6db74">&#34;YOUR_CLIENT_ID&#34;</span>,
</span></span><span style="display:flex;"><span>    <span style="color:#a6e22e">clientSecret</span><span style="color:#f92672">:</span> <span style="color:#e6db74">&#34;YOUR_CLIENT_SECRET&#34;</span>
</span></span><span style="display:flex;"><span>});
</span></span></code></pre></div><p>توفير بيانات الاعتماد الصحيحة يسمح للمكتبة بالمصادقة على طلباتك.</p>
<h3 id="الخطوة-3-تعريف-ملفات-pdf-للدمج">الخطوة 3: تعريف ملفات PDF للدمج</h3>
<p>قائمة مستندات PDF التي تريد دمجها. هذه الخطوة تُعدك لدمج PDF في Node.JS بكفاءة.</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-javascript" data-lang="javascript"><span style="display:flex;"><span><span style="color:#66d9ef">const</span> <span style="color:#a6e22e">filesToMerge</span> <span style="color:#f92672">=</span> [
</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">new</span> <span style="color:#a6e22e">FileInfo</span>({ <span style="color:#a6e22e">filePath</span><span style="color:#f92672">:</span> <span style="color:#e6db74">&#34;input1.pdf&#34;</span> }),
</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">new</span> <span style="color:#a6e22e">FileInfo</span>({ <span style="color:#a6e22e">filePath</span><span style="color:#f92672">:</span> <span style="color:#e6db74">&#34;input2.pdf&#34;</span> })
</span></span><span style="display:flex;"><span>];
</span></span></code></pre></div><p>كل <code>FileInfo</code> يشير إلى ملف مخزن في تخزين GroupDocs Cloud الخاص بك.</p>
<h3 id="الخطوة-4-تعيين-خيارات-الدمج">الخطوة 4: تعيين خيارات الدمج</h3>
<p>قم بتكوين موقع الإخراج وإرفاق قائمة الملفات بطلب الدمج.</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-javascript" data-lang="javascript"><span style="display:flex;"><span><span style="color:#66d9ef">const</span> <span style="color:#a6e22e">mergeOptions</span> <span style="color:#f92672">=</span> <span style="color:#66d9ef">new</span> <span style="color:#a6e22e">MergeOptions</span>();
</span></span><span style="display:flex;"><span><span style="color:#a6e22e">mergeOptions</span>.<span style="color:#a6e22e">fileInfos</span> <span style="color:#f92672">=</span> <span style="color:#a6e22e">filesToMerge</span>;
</span></span><span style="display:flex;"><span><span style="color:#a6e22e">mergeOptions</span>.<span style="color:#a6e22e">outputPath</span> <span style="color:#f92672">=</span> <span style="color:#e6db74">&#34;merged_output.pdf&#34;</span>;
</span></span></code></pre></div><p>تتحكم هذه الإعدادات في كيفية دمج ملفات PDF في Node.JS وأين سيتم حفظ النتيجة.</p>
<h3 id="الخطوة-5-تنفيذ-عملية-الدمج">الخطوة 5: تنفيذ عملية الدمج</h3>
<p>إنشاء مثيل API، استدعاء طريقة الدمج، ومعالجة الاستجابة.</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-javascript" data-lang="javascript"><span style="display:flex;"><span><span style="color:#66d9ef">const</span> <span style="color:#a6e22e">mergeApi</span> <span style="color:#f92672">=</span> <span style="color:#66d9ef">new</span> <span style="color:#a6e22e">MergeApi</span>(<span style="color:#a6e22e">config</span>);
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">try</span> {
</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">const</span> <span style="color:#a6e22e">result</span> <span style="color:#f92672">=</span> <span style="color:#66d9ef">await</span> <span style="color:#a6e22e">mergeApi</span>.<span style="color:#a6e22e">mergeDocuments</span>(<span style="color:#a6e22e">mergeOptions</span>);
</span></span><span style="display:flex;"><span>    <span style="color:#a6e22e">console</span>.<span style="color:#a6e22e">log</span>(<span style="color:#e6db74">&#34;Merge completed. Output file stored at:&#34;</span>, <span style="color:#a6e22e">result</span>.<span style="color:#a6e22e">path</span>);
</span></span><span style="display:flex;"><span>} <span style="color:#66d9ef">catch</span> (<span style="color:#a6e22e">error</span>) {
</span></span><span style="display:flex;"><span>    <span style="color:#a6e22e">console</span>.<span style="color:#a6e22e">error</span>(<span style="color:#e6db74">&#34;Error during PDF merge:&#34;</span>, <span style="color:#a6e22e">error</span>);
</span></span><span style="display:flex;"><span>}
</span></span></code></pre></div><p>تُعيد النداء غير المتزامن مسار المستند المدمج إذا نجحت العملية.</p>
<h2 id="مثال-كامل-للتنفيذ-لدمج-ملفات-pdf-في-nodejs">مثال كامل للتنفيذ لدمج ملفات PDF في Node.JS</h2>
<p>يعرض الكود التالي سير العمل الكامل من التكوين إلى معالجة النتيجة.</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-javascript" data-lang="javascript"><span style="display:flex;"><span><span style="color:#66d9ef">const</span> { <span style="color:#a6e22e">MergeApi</span>, <span style="color:#a6e22e">MergeOptions</span>, <span style="color:#a6e22e">FileInfo</span>, <span style="color:#a6e22e">Configuration</span> } <span style="color:#f92672">=</span> <span style="color:#a6e22e">require</span>(<span style="color:#e6db74">&#34;@groupdocs/merger-cloud&#34;</span>);
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#75715e">// Configure the SDK (replace with your actual credentials)
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span><span style="color:#66d9ef">const</span> <span style="color:#a6e22e">config</span> <span style="color:#f92672">=</span> <span style="color:#66d9ef">new</span> <span style="color:#a6e22e">Configuration</span>({
</span></span><span style="display:flex;"><span>    <span style="color:#a6e22e">clientId</span><span style="color:#f92672">:</span> <span style="color:#e6db74">&#34;YOUR_CLIENT_ID&#34;</span>,
</span></span><span style="display:flex;"><span>    <span style="color:#a6e22e">clientSecret</span><span style="color:#f92672">:</span> <span style="color:#e6db74">&#34;YOUR_CLIENT_SECRET&#34;</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:#66d9ef">async</span> <span style="color:#66d9ef">function</span> <span style="color:#a6e22e">mergePdfFiles</span>() {
</span></span><span style="display:flex;"><span>    <span style="color:#75715e">// Initialize the Merge API
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span>    <span style="color:#66d9ef">const</span> <span style="color:#a6e22e">mergeApi</span> <span style="color:#f92672">=</span> <span style="color:#66d9ef">new</span> <span style="color:#a6e22e">MergeApi</span>(<span style="color:#a6e22e">config</span>);
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#75715e">// Define the PDF files to be merged (must exist in GroupDocs Cloud storage)
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span>    <span style="color:#66d9ef">const</span> <span style="color:#a6e22e">filesToMerge</span> <span style="color:#f92672">=</span> [
</span></span><span style="display:flex;"><span>        <span style="color:#66d9ef">new</span> <span style="color:#a6e22e">FileInfo</span>({ <span style="color:#a6e22e">filePath</span><span style="color:#f92672">:</span> <span style="color:#e6db74">&#34;input1.pdf&#34;</span> }),
</span></span><span style="display:flex;"><span>        <span style="color:#66d9ef">new</span> <span style="color:#a6e22e">FileInfo</span>({ <span style="color:#a6e22e">filePath</span><span style="color:#f92672">:</span> <span style="color:#e6db74">&#34;input2.pdf&#34;</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">// Set merge options
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span>    <span style="color:#66d9ef">const</span> <span style="color:#a6e22e">mergeOptions</span> <span style="color:#f92672">=</span> <span style="color:#66d9ef">new</span> <span style="color:#a6e22e">MergeOptions</span>();
</span></span><span style="display:flex;"><span>    <span style="color:#a6e22e">mergeOptions</span>.<span style="color:#a6e22e">fileInfos</span> <span style="color:#f92672">=</span> <span style="color:#a6e22e">filesToMerge</span>;
</span></span><span style="display:flex;"><span>    <span style="color:#a6e22e">mergeOptions</span>.<span style="color:#a6e22e">outputPath</span> <span style="color:#f92672">=</span> <span style="color:#e6db74">&#34;merged_output.pdf&#34;</span>;
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">try</span> {
</span></span><span style="display:flex;"><span>        <span style="color:#75715e">// Perform the merge operation
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span>        <span style="color:#66d9ef">const</span> <span style="color:#a6e22e">result</span> <span style="color:#f92672">=</span> <span style="color:#66d9ef">await</span> <span style="color:#a6e22e">mergeApi</span>.<span style="color:#a6e22e">mergeDocuments</span>(<span style="color:#a6e22e">mergeOptions</span>);
</span></span><span style="display:flex;"><span>        <span style="color:#a6e22e">console</span>.<span style="color:#a6e22e">log</span>(<span style="color:#e6db74">&#34;Merge completed. Output file stored at:&#34;</span>, <span style="color:#a6e22e">result</span>.<span style="color:#a6e22e">path</span>);
</span></span><span style="display:flex;"><span>    } <span style="color:#66d9ef">catch</span> (<span style="color:#a6e22e">error</span>) {
</span></span><span style="display:flex;"><span>        <span style="color:#a6e22e">console</span>.<span style="color:#a6e22e">error</span>(<span style="color:#e6db74">&#34;Error during PDF merge:&#34;</span>, <span style="color:#a6e22e">error</span>);
</span></span><span style="display:flex;"><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">// Execute the merge
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span><span style="color:#a6e22e">mergePdfFiles</span>();
</span></span></code></pre></div><blockquote>
<p><strong>ملاحظة:</strong> هذا المثال البرمجي يوضح الوظيفة الأساسية. قبل استخدامه في مشروعك، تأكد من تحديث أي مسارات ملفات وقيم التكوين لتتناسب مع بيئتك الفعلية، وتحقق من أن جميع الاعتمادات المطلوبة مثبتة بشكل صحيح، واختبر بدقة في بيئة التطوير الخاصة بك. إذا واجهت أي مشكلات، يرجى الرجوع إلى <a href="https://docs.groupdocs.cloud/merger/">الوثائق الرسمية</a> أو التواصل مع <a href="https://forum.groupdocs.cloud/c/merger/18">فريق الدعم</a> للحصول على المساعدة.</p>
</blockquote>
<h2 id="دمج-ملفات-pdf-عبر-واجهة-برمجة-التطبيقات-rest-باستخدام-curl">دمج ملفات PDF عبر واجهة برمجة التطبيقات REST باستخدام cURL</h2>
<p>إذا كنت تفضل نهج REST النقي، يمكن تنفيذ العملية نفسها باستخدام أوامر cURL.</p>
<p>أولاً، احصل على رمز الوصول:</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>curl -X POST <span style="color:#e6db74">&#34;https://api.groupdocs.cloud/v2.0/oauth2/token&#34;</span> <span style="color:#ae81ff">\
</span></span></span><span style="display:flex;"><span><span style="color:#ae81ff"></span>     -H <span style="color:#e6db74">&#34;Content-Type: application/json&#34;</span> <span style="color:#ae81ff">\
</span></span></span><span style="display:flex;"><span><span style="color:#ae81ff"></span>     -d <span style="color:#e6db74">&#39;{&#34;client_id&#34;:&#34;YOUR_CLIENT_ID&#34;,&#34;client_secret&#34;:&#34;YOUR_CLIENT_SECRET&#34;,&#34;grant_type&#34;:&#34;client_credentials&#34;}&#39;</span>
</span></span></code></pre></div><p>حمّل ملفات PDF المصدر إلى التخزين الخاص بك (استبدل <code>YOUR_ACCESS_TOKEN</code> بالرمز المميز من الخطوة السابقة):</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>curl -X POST <span style="color:#e6db74">&#34;https://api.groupdocs.cloud/v2.0/storage/file/upload?path=input1.pdf&#34;</span> <span style="color:#ae81ff">\
</span></span></span><span style="display:flex;"><span><span style="color:#ae81ff"></span>     -H <span style="color:#e6db74">&#34;Authorization: Bearer YOUR_ACCESS_TOKEN&#34;</span> <span style="color:#ae81ff">\
</span></span></span><span style="display:flex;"><span><span style="color:#ae81ff"></span>     -F <span style="color:#e6db74">&#34;file=@/local/path/input1.pdf&#34;</span>
</span></span></code></pre></div><p>كرر التحميل لـ <code>input2.pdf</code>. ثم اطلب عملية الدمج:</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>curl -X POST <span style="color:#e6db74">&#34;https://api.groupdocs.cloud/v2.0/merger/merge&#34;</span> <span style="color:#ae81ff">\
</span></span></span><span style="display:flex;"><span><span style="color:#ae81ff"></span>     -H <span style="color:#e6db74">&#34;Authorization: Bearer YOUR_ACCESS_TOKEN&#34;</span> <span style="color:#ae81ff">\
</span></span></span><span style="display:flex;"><span><span style="color:#ae81ff"></span>     -H <span style="color:#e6db74">&#34;Content-Type: application/json&#34;</span> <span style="color:#ae81ff">\
</span></span></span><span style="display:flex;"><span><span style="color:#ae81ff"></span>     -d <span style="color:#e6db74">&#39;{
</span></span></span><span style="display:flex;"><span><span style="color:#e6db74">           &#34;fileInfos&#34;: [
</span></span></span><span style="display:flex;"><span><span style="color:#e6db74">               {&#34;filePath&#34;:&#34;input1.pdf&#34;},
</span></span></span><span style="display:flex;"><span><span style="color:#e6db74">               {&#34;filePath&#34;:&#34;input2.pdf&#34;}
</span></span></span><span style="display:flex;"><span><span style="color:#e6db74">           ],
</span></span></span><span style="display:flex;"><span><span style="color:#e6db74">           &#34;outputPath&#34;:&#34;merged_output.pdf&#34;
</span></span></span><span style="display:flex;"><span><span style="color:#e6db74">         }&#39;</span>
</span></span></code></pre></div><p>أخيرًا، قم بتنزيل الملف المدمج:</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>curl -X GET <span style="color:#e6db74">&#34;https://api.groupdocs.cloud/v2.0/storage/file/download?path=merged_output.pdf&#34;</span> <span style="color:#ae81ff">\
</span></span></span><span style="display:flex;"><span><span style="color:#ae81ff"></span>     -H <span style="color:#e6db74">&#34;Authorization: Bearer YOUR_ACCESS_TOKEN&#34;</span> <span style="color:#ae81ff">\
</span></span></span><span style="display:flex;"><span><span style="color:#ae81ff"></span>     -o merged_output.pdf
</span></span></code></pre></div><p>للحصول على قائمة كاملة بنقاط النهاية والمعلمات، راجع <a href="https://reference.groupdocs.cloud/merger/">مرجع API</a>.</p>
<h2 id="تكوين-خيارات-الدمج">تكوين خيارات الدمج</h2>
<p>يُتيح SDK عدة خيارات تسمح لك بضبط عملية الدمج بدقة:</p>
<ul>
<li><strong>outputPath</strong> - مسار الوجهة للملف PDF المدمج. عدّل هذا للتحكم في مكان تخزين النتيجة.</li>
<li><strong>fileInfos</strong> - مصفوفة من كائنات <code>FileInfo</code> التي تحدد ملفات PDF المصدر وترتيبها.</li>
</ul>
<p>يمكنك أيضًا تعيين خصائص إضافية مثل <code>pages</code> لدمج نطاقات صفحات محددة، أو <code>password</code> للملفات PDF المشفرة. راجع <a href="https://docs.groupdocs.cloud/merger/">الوثائق الرسمية</a> للحصول على القائمة الكاملة للحقول القابلة للتكوين.</p>
<h2 id="الاعتبارات-المتعلقة-بالأداء-عند-دمج-ملفات-pdf">الاعتبارات المتعلقة بالأداء عند دمج ملفات PDF</h2>
<p>عند دمج ملفات PDF الكبيرة أو العديدة، احرص على مراعاة النصائح التالية:</p>
<ul>
<li><strong>استخدام async/await</strong> لتجنب حظر حلقة الأحداث، خاصةً للوثائق الكبيرة.</li>
<li><strong>تحميل دفعي</strong>: رفع ملفات PDF المصدرية بالتوازي قبل استدعاء الدمج لتقليل الكمون الكلي.</li>
<li><strong>معالجة متدفقة</strong>: بالنسبة لملفات PDF الكبيرة جدًا، فكر في تخزين النتائج الوسيطة في التخزين السحابي ودمجها على دفعات أصغر.</li>
<li><strong>ملفات PDF مشفرة</strong>: قدم كلمات المرور في كائنات <code>FileInfo</code>؛ معالجة الملفات المشفرة يضيف عبئًا إضافيًا، لذا قم بدمجها بعد فك التشفير عندما يكون ذلك ممكنًا.</li>
</ul>
<p>تطبيق هذه الممارسات يساعدك على دمج ملفات PDF في Node.JS بكفاءة مع تقليل استهلاك الذاكرة.</p>
<h2 id="أسئلة-قد-تكون-لديك">أسئلة قد تكون لديك</h2>
<ul>
<li>
<p><strong>كيف يمكنني دمج ملفات PDF في Node.JS باستخدام GroupDocs؟</strong><br>
استخدم <a href="https://products.groupdocs.cloud/merger/nodejs/">GroupDocs.Merger Cloud SDK for Node.js</a> لإنشاء كائن <code>MergeApi</code>، وتكوين <code>MergeOptions</code> مع ملفات PDF المصدر الخاصة بك، واستدعاء <code>mergeDocuments</code>. يوضح مثال الشيفرة الكامل في هذا الدليل العملية.</p>
</li>
<li>
<p><strong>هل يمكنني دمج ملفات PDF المشفرة في Node.JS؟</strong><br>
نعم، يدعم SDK دمج ملفات PDF المشفرة. قدم كلمات المرور الصحيحة في كائنات <code>FileInfo</code> قبل استدعاء <code>mergeDocuments</code>. راجع <a href="https://docs.groupdocs.cloud/merger/">الوثائق الرسمية</a> للحصول على التفاصيل.</p>
</li>
<li>
<p><strong>ما هي خيارات الترخيص لـ GroupDocs.Merger؟</strong><br>
تقدم GroupDocs خطط أسعار مرنة. للاختبار، يمكنك طلب <a href="https://purchase.groupdocs.cloud/temporary-license/">رخصة مؤقتة</a> لتقييم المكتبة قبل شراء اشتراك كامل.</p>
</li>
<li>
<p><strong>أين يمكنني العثور على مزيد من الأمثلة والدعم؟</strong><br>
تتوفر عينات إضافية في <a href="https://github.com/groupdocs-merger-cloud/groupdocs-merger-cloud-node">مستودع GitHub</a>. للحصول على المساعدة، زر <a href="https://forum.groupdocs.cloud/c/merger/18">منتدى الدعم</a>.</p>
</li>
</ul>
<h2 id="قراءة-إضافية">قراءة إضافية</h2>
<ul>
<li><a href="https://blog.groupdocs.cloud/ar/merger/split-pdf-into-multiple-pdf-in-nodejs/">تقسيم PDF إلى ملفات PDF متعددة في Node.JS</a></li>
<li><a href="https://blog.groupdocs.cloud/ar/merger/lock-pdf-with-password-using-rest-api-in-nodejs/">قفل مستندات PDF باستخدام كلمات مرور عبر REST API في Node.js</a></li>
<li><a href="https://blog.groupdocs.cloud/ar/merger/how-to-merge-pdf-files-in-csharp-using-rest-api/">كيفية دمج ملفات PDF في C# باستخدام REST API</a></li>
</ul>
]]></content:encoded>
    </item>
    
    <item>
      <title>إضافة علامة مائية صورة إلى مستندات PDF في Java</title>
      <link>https://blog-qa.groupdocs.cloud/ar/watermark/add-image-watermark-to-pdf-documents-in-java/</link>
      <pubDate>Fri, 28 Aug 2026 19:41:04 +0000</pubDate>
      
      <guid>https://blog-qa.groupdocs.cloud/ar/watermark/add-image-watermark-to-pdf-documents-in-java/</guid>
      <description>تعلم كيفية إضافة علامة مائية صورة إلى مستندات PDF في Java باستخدام GroupDocs.Watermark Cloud SDK. دليل خطوة بخطوة مع الشيفرة، cURL ونصائح التكوين.</description>
      <content:encoded><![CDATA[<p>إضافة معرف بصري إلى ملفات <a href="https://docs.fileformat.com/pdf">PDF</a> أمر ضروري لحماية الملكية الفكرية وتوثيق العلامة التجارية للوثائق. يقدم <a href="https://products.groupdocs.cloud/watermark/java/">GroupDocs.Watermark Cloud SDK for Java</a> واجهة برمجة تطبيقات بسيطة لدمج علامات مائية صورة مباشرةً في ملفات PDF من تطبيق Java الخاص بك. في هذا البرنامج التعليمي ستتعلم كيفية إضافة علامة مائية صورة إلى مستندات PDF باستخدام Java، وستشاهد مثالًا عمليًا كاملاً، وتستكشف مكالمات cURL REST المكافئة للتكامل السحابي.</p>
<h2 id="إضافة-علامة-مائية-صورة-إلى-مستندات-pdf-في-java-في-5-خطوات">إضافة علامة مائية صورة إلى مستندات PDF في Java في 5 خطوات</h2>
<ol>
<li><strong>تهيئة عميل API</strong>: إنشاء مثيل <code>ApiClient</code> باستخدام معرف العميل والسر الخاصين بك.</li>
</ol>
<!--[CODE_SNIPPET_START]-->
<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-java" data-lang="java"><span style="display:flex;"><span>ApiClient apiClient <span style="color:#f92672">=</span> <span style="color:#66d9ef">new</span> ApiClient<span style="color:#f92672">(</span><span style="color:#e6db74">&#34;YOUR_CLIENT_ID&#34;</span><span style="color:#f92672">,</span> <span style="color:#e6db74">&#34;YOUR_CLIENT_SECRET&#34;</span><span style="color:#f92672">);</span>
</span></span><span style="display:flex;"><span>WatermarkApi watermarkApi <span style="color:#f92672">=</span> <span style="color:#66d9ef">new</span> WatermarkApi<span style="color:#f92672">(</span>apiClient<span style="color:#f92672">);</span>
</span></span></code></pre></div><!--[CODE_SNIPPET_END]-->  
<p>تقوم هذه الخطوة بربط كود Java الخاص بك بخدمة GroupDocs.Watermark Cloud. راجع <a href="https://reference.groupdocs.cloud/watermark/">مرجع API</a> لمزيد من التفاصيل.</p>
<ol start="2">
<li><strong>حدد ملف PDF المصدر</strong>: أنشئ كائن <code>FileInfo</code> يشير إلى ملف PDF الذي تريد إضافة علامة مائية إليه.</li>
</ol>
<!--[CODE_SNIPPET_START]-->
<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-java" data-lang="java"><span style="display:flex;"><span>FileInfo fileInfo <span style="color:#f92672">=</span> <span style="color:#66d9ef">new</span> FileInfo<span style="color:#f92672">();</span>
</span></span><span style="display:flex;"><span>fileInfo<span style="color:#f92672">.</span><span style="color:#a6e22e">setFilePath</span><span style="color:#f92672">(</span><span style="color:#e6db74">&#34;input.pdf&#34;</span><span style="color:#f92672">);</span>
</span></span></code></pre></div><!--[CODE_SNIPPET_END]-->  
<p>يجب تحميل الملف إلى تخزين GroupDocs الخاص بك قبل الطلب.</p>
<ol start="3">
<li>
<p><strong>تكوين علامة مائية للصورة</strong>: تعريف مسار الصورة، الشفافية، معامل المقياس، الدوران والمحاذاة.</p>
<!--[CODE_SNIPPET_START]-->
<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-java" data-lang="java"><span style="display:flex;"><span>ImageWatermark imageWatermark <span style="color:#f92672">=</span> <span style="color:#66d9ef">new</span> ImageWatermark<span style="color:#f92672">();</span>
</span></span><span style="display:flex;"><span>imageWatermark<span style="color:#f92672">.</span><span style="color:#a6e22e">setImagePath</span><span style="color:#f92672">(</span><span style="color:#e6db74">&#34;watermark.png&#34;</span><span style="color:#f92672">);</span>
</span></span><span style="display:flex;"><span>imageWatermark<span style="color:#f92672">.</span><span style="color:#a6e22e">setOpacity</span><span style="color:#f92672">(</span>0<span style="color:#f92672">.</span><span style="color:#a6e22e">5</span><span style="color:#f92672">);</span>
</span></span><span style="display:flex;"><span>imageWatermark<span style="color:#f92672">.</span><span style="color:#a6e22e">setScaleFactor</span><span style="color:#f92672">(</span>0<span style="color:#f92672">.</span><span style="color:#a6e22e">3</span><span style="color:#f92672">);</span>
</span></span><span style="display:flex;"><span>imageWatermark<span style="color:#f92672">.</span><span style="color:#a6e22e">setHorizontalAlignment</span><span style="color:#f92672">(</span>HorizontalAlignment<span style="color:#f92672">.</span><span style="color:#a6e22e">CENTER</span><span style="color:#f92672">);</span>
</span></span><span style="display:flex;"><span>imageWatermark<span style="color:#f92672">.</span><span style="color:#a6e22e">setVerticalAlignment</span><span style="color:#f92672">(</span>VerticalAlignment<span style="color:#f92672">.</span><span style="color:#a6e22e">CENTER</span><span style="color:#f92672">);</span>
</span></span><span style="display:flex;"><span>imageWatermark<span style="color:#f92672">.</span><span style="color:#a6e22e">setMargin</span><span style="color:#f92672">(</span><span style="color:#66d9ef">new</span> Margin<span style="color:#f92672">(</span>10<span style="color:#f92672">,</span> 10<span style="color:#f92672">,</span> 10<span style="color:#f92672">,</span> 10<span style="color:#f92672">));</span>
</span></span></code></pre></div><!--[CODE_SNIPPET_END]-->  
<p>قم بضبط هذه القيم لتحقيق المظهر المطلوب؛ الشفافية تتحكم في مستوى الشفافية، بينما يحدد معامل المقياس الحجم بالنسبة للصفحة.</p>
</li>
<li>
<p><strong>تعيين خيارات العلامة المائية ومسار الإخراج</strong>: اجمع معلومات الملف والعلامة المائية في كائن <code>WatermarkOptions</code>.</p>
</li>
</ol>
<!--[CODE_SNIPPET_START]-->
<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-java" data-lang="java"><span style="display:flex;"><span>WatermarkOptions options <span style="color:#f92672">=</span> <span style="color:#66d9ef">new</span> WatermarkOptions<span style="color:#f92672">();</span>
</span></span><span style="display:flex;"><span>options<span style="color:#f92672">.</span><span style="color:#a6e22e">setFileInfo</span><span style="color:#f92672">(</span>fileInfo<span style="color:#f92672">);</span>
</span></span><span style="display:flex;"><span>options<span style="color:#f92672">.</span><span style="color:#a6e22e">setImageWatermark</span><span style="color:#f92672">(</span>imageWatermark<span style="color:#f92672">);</span>
</span></span><span style="display:flex;"><span>options<span style="color:#f92672">.</span><span style="color:#a6e22e">setOutputPath</span><span style="color:#f92672">(</span><span style="color:#e6db74">&#34;output.pdf&#34;</span><span style="color:#f92672">);</span>
</span></span></code></pre></div><!--[CODE_SNIPPET_END]-->  
<p>يحدد <code>outputPath</code> للخدمة مكان تخزين ملف PDF الناتج.</p>
<ol start="5">
<li><strong>تنفيذ الطلب</strong>: بناء <code>AddWatermarkRequest</code> واستدعاء الـ API. معالجة الاستجابات الناجحة أو الأخطاء.</li>
</ol>
<!--[CODE_SNIPPET_START]-->
<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-java" data-lang="java"><span style="display:flex;"><span>AddWatermarkRequest request <span style="color:#f92672">=</span> <span style="color:#66d9ef">new</span> AddWatermarkRequest<span style="color:#f92672">(</span>options<span style="color:#f92672">);</span>
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">try</span> <span style="color:#f92672">{</span>
</span></span><span style="display:flex;"><span>    AddWatermarkResponse response <span style="color:#f92672">=</span> watermarkApi<span style="color:#f92672">.</span><span style="color:#a6e22e">addWatermark</span><span style="color:#f92672">(</span>request<span style="color:#f92672">);</span>
</span></span><span style="display:flex;"><span>    System<span style="color:#f92672">.</span><span style="color:#a6e22e">out</span><span style="color:#f92672">.</span><span style="color:#a6e22e">println</span><span style="color:#f92672">(</span><span style="color:#e6db74">&#34;Watermark added successfully. Output file: &#34;</span> <span style="color:#f92672">+</span> response<span style="color:#f92672">.</span><span style="color:#a6e22e">getPath</span><span style="color:#f92672">());</span>
</span></span><span style="display:flex;"><span><span style="color:#f92672">}</span> <span style="color:#66d9ef">catch</span> <span style="color:#f92672">(</span>Exception e<span style="color:#f92672">)</span> <span style="color:#f92672">{</span>
</span></span><span style="display:flex;"><span>    System<span style="color:#f92672">.</span><span style="color:#a6e22e">err</span><span style="color:#f92672">.</span><span style="color:#a6e22e">println</span><span style="color:#f92672">(</span><span style="color:#e6db74">&#34;Error adding watermark: &#34;</span> <span style="color:#f92672">+</span> e<span style="color:#f92672">.</span><span style="color:#a6e22e">getMessage</span><span style="color:#f92672">());</span>
</span></span><span style="display:flex;"><span><span style="color:#f92672">}</span>
</span></span></code></pre></div><!--[CODE_SNIPPET_END]-->  
<p>بعد التنفيذ، يصبح ملف PDF المطبوع عليه العلامة المائية متاحًا في الموقع الذي حددته.</p>
<h2 id="مثال-كامل-على-الكود-إضافة-علامة-مائية-صورة-إلى-مستندات-pdf-في-java">مثال كامل على الكود: إضافة علامة مائية صورة إلى مستندات PDF في Java</h2>
<p>يوضح المثال التالي التنفيذ الكامل من تهيئة العميل إلى حفظ ملف PDF مع علامة مائية.</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-java" data-lang="java"><span style="display:flex;"><span><span style="color:#f92672">import</span> com.groupdocs.cloud.watermark.api.WatermarkApi<span style="color:#f92672">;</span>
</span></span><span style="display:flex;"><span><span style="color:#f92672">import</span> com.groupdocs.cloud.watermark.client.ApiClient<span style="color:#f92672">;</span>
</span></span><span style="display:flex;"><span><span style="color:#f92672">import</span> com.groupdocs.cloud.watermark.model.AddWatermarkRequest<span style="color:#f92672">;</span>
</span></span><span style="display:flex;"><span><span style="color:#f92672">import</span> com.groupdocs.cloud.watermark.model.AddWatermarkResponse<span style="color:#f92672">;</span>
</span></span><span style="display:flex;"><span><span style="color:#f92672">import</span> com.groupdocs.cloud.watermark.model.FileInfo<span style="color:#f92672">;</span>
</span></span><span style="display:flex;"><span><span style="color:#f92672">import</span> com.groupdocs.cloud.watermark.model.ImageWatermark<span style="color:#f92672">;</span>
</span></span><span style="display:flex;"><span><span style="color:#f92672">import</span> com.groupdocs.cloud.watermark.model.Margin<span style="color:#f92672">;</span>
</span></span><span style="display:flex;"><span><span style="color:#f92672">import</span> com.groupdocs.cloud.watermark.model.WatermarkOptions<span style="color:#f92672">;</span>
</span></span><span style="display:flex;"><span><span style="color:#f92672">import</span> com.groupdocs.cloud.watermark.model.enums.HorizontalAlignment<span style="color:#f92672">;</span>
</span></span><span style="display:flex;"><span><span style="color:#f92672">import</span> com.groupdocs.cloud.watermark.model.enums.VerticalAlignment<span style="color:#f92672">;</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">public</span> <span style="color:#66d9ef">class</span> <span style="color:#a6e22e">AddImageWatermarkExample</span> <span style="color:#f92672">{</span>
</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">public</span> <span style="color:#66d9ef">static</span> <span style="color:#66d9ef">void</span> <span style="color:#a6e22e">main</span><span style="color:#f92672">(</span>String<span style="color:#f92672">[]</span> args<span style="color:#f92672">)</span> <span style="color:#f92672">{</span>
</span></span><span style="display:flex;"><span>        <span style="color:#75715e">// Initialize API client (replace with your actual credentials)
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span>        ApiClient apiClient <span style="color:#f92672">=</span> <span style="color:#66d9ef">new</span> ApiClient<span style="color:#f92672">(</span><span style="color:#e6db74">&#34;YOUR_CLIENT_ID&#34;</span><span style="color:#f92672">,</span> <span style="color:#e6db74">&#34;YOUR_CLIENT_SECRET&#34;</span><span style="color:#f92672">);</span>
</span></span><span style="display:flex;"><span>        WatermarkApi watermarkApi <span style="color:#f92672">=</span> <span style="color:#66d9ef">new</span> WatermarkApi<span style="color:#f92672">(</span>apiClient<span style="color:#f92672">);</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#75715e">// Input PDF file information
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span>        FileInfo fileInfo <span style="color:#f92672">=</span> <span style="color:#66d9ef">new</span> FileInfo<span style="color:#f92672">();</span>
</span></span><span style="display:flex;"><span>        fileInfo<span style="color:#f92672">.</span><span style="color:#a6e22e">setFilePath</span><span style="color:#f92672">(</span><span style="color:#e6db74">&#34;input.pdf&#34;</span><span style="color:#f92672">);</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#75715e">// Image watermark configuration
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span>        ImageWatermark imageWatermark <span style="color:#f92672">=</span> <span style="color:#66d9ef">new</span> ImageWatermark<span style="color:#f92672">();</span>
</span></span><span style="display:flex;"><span>        imageWatermark<span style="color:#f92672">.</span><span style="color:#a6e22e">setImagePath</span><span style="color:#f92672">(</span><span style="color:#e6db74">&#34;watermark.png&#34;</span><span style="color:#f92672">);</span>          <span style="color:#75715e">// Path to watermark image
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span>        imageWatermark<span style="color:#f92672">.</span><span style="color:#a6e22e">setOpacity</span><span style="color:#f92672">(</span>0<span style="color:#f92672">.</span><span style="color:#a6e22e">5</span><span style="color:#f92672">);</span>                        <span style="color:#75715e">// 50% opacity
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span>        imageWatermark<span style="color:#f92672">.</span><span style="color:#a6e22e">setScaleFactor</span><span style="color:#f92672">(</span>0<span style="color:#f92672">.</span><span style="color:#a6e22e">3</span><span style="color:#f92672">);</span>                    <span style="color:#75715e">// 30% of page size
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span>        imageWatermark<span style="color:#f92672">.</span><span style="color:#a6e22e">setRotationAngle</span><span style="color:#f92672">(</span>0<span style="color:#f92672">);</span>                    <span style="color:#75715e">// No rotation
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span>        imageWatermark<span style="color:#f92672">.</span><span style="color:#a6e22e">setHorizontalAlignment</span><span style="color:#f92672">(</span>HorizontalAlignment<span style="color:#f92672">.</span><span style="color:#a6e22e">CENTER</span><span style="color:#f92672">);</span>
</span></span><span style="display:flex;"><span>        imageWatermark<span style="color:#f92672">.</span><span style="color:#a6e22e">setVerticalAlignment</span><span style="color:#f92672">(</span>VerticalAlignment<span style="color:#f92672">.</span><span style="color:#a6e22e">CENTER</span><span style="color:#f92672">);</span>
</span></span><span style="display:flex;"><span>        imageWatermark<span style="color:#f92672">.</span><span style="color:#a6e22e">setMargin</span><span style="color:#f92672">(</span><span style="color:#66d9ef">new</span> Margin<span style="color:#f92672">(</span>10<span style="color:#f92672">,</span> 10<span style="color:#f92672">,</span> 10<span style="color:#f92672">,</span> 10<span style="color:#f92672">));</span>  <span style="color:#75715e">// 10 points margin on all sides
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span>
</span></span><span style="display:flex;"><span><span style="color:#75715e">// Watermark options
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span>        WatermarkOptions options <span style="color:#f92672">=</span> <span style="color:#66d9ef">new</span> WatermarkOptions<span style="color:#f92672">();</span>
</span></span><span style="display:flex;"><span>        options<span style="color:#f92672">.</span><span style="color:#a6e22e">setFileInfo</span><span style="color:#f92672">(</span>fileInfo<span style="color:#f92672">);</span>
</span></span><span style="display:flex;"><span>        options<span style="color:#f92672">.</span><span style="color:#a6e22e">setImageWatermark</span><span style="color:#f92672">(</span>imageWatermark<span style="color:#f92672">);</span>
</span></span><span style="display:flex;"><span>        options<span style="color:#f92672">.</span><span style="color:#a6e22e">setOutputPath</span><span style="color:#f92672">(</span><span style="color:#e6db74">&#34;output.pdf&#34;</span><span style="color:#f92672">);</span> <span style="color:#75715e">// Resulting PDF with watermark
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span>
</span></span><span style="display:flex;"><span><span style="color:#75715e">// Create request and call API
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span>        AddWatermarkRequest request <span style="color:#f92672">=</span> <span style="color:#66d9ef">new</span> AddWatermarkRequest<span style="color:#f92672">(</span>options<span style="color:#f92672">);</span>
</span></span><span style="display:flex;"><span>        <span style="color:#66d9ef">try</span> <span style="color:#f92672">{</span>
</span></span><span style="display:flex;"><span>            AddWatermarkResponse response <span style="color:#f92672">=</span> watermarkApi<span style="color:#f92672">.</span><span style="color:#a6e22e">addWatermark</span><span style="color:#f92672">(</span>request<span style="color:#f92672">);</span>
</span></span><span style="display:flex;"><span>            System<span style="color:#f92672">.</span><span style="color:#a6e22e">out</span><span style="color:#f92672">.</span><span style="color:#a6e22e">println</span><span style="color:#f92672">(</span><span style="color:#e6db74">&#34;Watermark added successfully. Output file: &#34;</span> <span style="color:#f92672">+</span> response<span style="color:#f92672">.</span><span style="color:#a6e22e">getPath</span><span style="color:#f92672">());</span>
</span></span><span style="display:flex;"><span>        <span style="color:#f92672">}</span> <span style="color:#66d9ef">catch</span> <span style="color:#f92672">(</span>Exception e<span style="color:#f92672">)</span> <span style="color:#f92672">{</span>
</span></span><span style="display:flex;"><span>            System<span style="color:#f92672">.</span><span style="color:#a6e22e">err</span><span style="color:#f92672">.</span><span style="color:#a6e22e">println</span><span style="color:#f92672">(</span><span style="color:#e6db74">&#34;Error adding watermark: &#34;</span> <span style="color:#f92672">+</span> e<span style="color:#f92672">.</span><span style="color:#a6e22e">getMessage</span><span style="color:#f92672">());</span>
</span></span><span style="display:flex;"><span>            e<span style="color:#f92672">.</span><span style="color:#a6e22e">printStackTrace</span><span style="color:#f92672">();</span>
</span></span><span style="display:flex;"><span>        <span style="color:#f92672">}</span>
</span></span><span style="display:flex;"><span>    <span style="color:#f92672">}</span>
</span></span><span style="display:flex;"><span><span style="color:#f92672">}</span>
</span></span></code></pre></div><blockquote>
<p><strong>ملاحظة:</strong> هذا المثال البرمجي يوضح الوظيفة الأساسية. قبل استخدامه في مشروعك، تأكد من تحديث مسارات الملفات (<code>input.pdf</code>, <code>watermark.png</code>, <code>output.pdf</code>) لتتناسب مع مواقع ملفاتك الفعلية، وتحقق من تثبيت جميع الاعتمادات المطلوبة بشكل صحيح، واختبر بدقة في بيئة التطوير الخاصة بك. إذا واجهت أي مشكلات، يرجى الرجوع إلى <a href="https://docs.groupdocs.cloud/watermark/">الوثائق الرسمية</a> أو التواصل مع <a href="https://forum.groupdocs.cloud/c/watermark/29">فريق الدعم</a> للحصول على المساعدة.</p>
</blockquote>
<h2 id="تطبيق-علامة-مائية-صورة-على-مستندات-pdf-عبر-curl-و-rest-api">تطبيق علامة مائية صورة على مستندات PDF عبر cURL و REST API</h2>
<p>فيما يلي طلبات REST التي يمكنك استخدامها مع cURL لتحقيق النتيجة نفسها دون كتابة كود Java.</p>
<ol>
<li>
<p><strong>الحصول على رمز وصول</strong></p>
<!--[CODE_SNIPPET_START]-->
<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>curl -X POST <span style="color:#e6db74">&#34;https://api.groupdocs.cloud/v2.0/auth/token&#34;</span> <span style="color:#ae81ff">\
</span></span></span><span style="display:flex;"><span><span style="color:#ae81ff"></span>     -H <span style="color:#e6db74">&#34;Content-Type: application/json&#34;</span> <span style="color:#ae81ff">\
</span></span></span><span style="display:flex;"><span><span style="color:#ae81ff"></span>     -d <span style="color:#e6db74">&#39;{&#34;client_id&#34;:&#34;YOUR_CLIENT_ID&#34;,&#34;client_secret&#34;:&#34;YOUR_CLIENT_SECRET&#34;}&#39;</span>
</span></span></code></pre></div><!--[CODE_SNIPPET_END]-->  
<p>تحتوي الاستجابة على <code>access_token</code> يُستخدم في المكالمات اللاحقة.</p>
</li>
<li>
<p><strong>تحميل ملف PDF المصدر</strong></p>
</li>
</ol>
<!--[CODE_SNIPPET_START]-->
<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>curl -X POST <span style="color:#e6db74">&#34;https://api.groupdocs.cloud/v2.0/storage/upload?path=input.pdf&#34;</span> <span style="color:#ae81ff">\
</span></span></span><span style="display:flex;"><span><span style="color:#ae81ff"></span>     -H <span style="color:#e6db74">&#34;Authorization: Bearer YOUR_ACCESS_TOKEN&#34;</span> <span style="color:#ae81ff">\
</span></span></span><span style="display:flex;"><span><span style="color:#ae81ff"></span>     -F <span style="color:#e6db74">&#34;file=@/path/to/input.pdf&#34;</span>
</span></span></code></pre></div><!--[CODE_SNIPPET_END]-->
<ol start="3">
<li><strong>رفع صورة العلامة المائية</strong></li>
</ol>
<!--[CODE_SNIPPET_START]-->
<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>curl -X POST <span style="color:#e6db74">&#34;https://api.groupdocs.cloud/v2.0/storage/upload?path=watermark.png&#34;</span> <span style="color:#ae81ff">\
</span></span></span><span style="display:flex;"><span><span style="color:#ae81ff"></span>     -H <span style="color:#e6db74">&#34;Authorization: Bearer YOUR_ACCESS_TOKEN&#34;</span> <span style="color:#ae81ff">\
</span></span></span><span style="display:flex;"><span><span style="color:#ae81ff"></span>     -F <span style="color:#e6db74">&#34;file=@/path/to/watermark.png&#34;</span>
</span></span></code></pre></div><!--[CODE_SNIPPET_END]-->
<ol start="4">
<li><strong>إضافة علامة مائية صورة</strong></li>
</ol>
<!--[CODE_SNIPPET_START]-->
<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>curl -X POST <span style="color:#e6db74">&#34;https://api.groupdocs.cloud/v2.0/watermark/add&#34;</span> <span style="color:#ae81ff">\
</span></span></span><span style="display:flex;"><span><span style="color:#ae81ff"></span>     -H <span style="color:#e6db74">&#34;Authorization: Bearer YOUR_ACCESS_TOKEN&#34;</span> <span style="color:#ae81ff">\
</span></span></span><span style="display:flex;"><span><span style="color:#ae81ff"></span>     -H <span style="color:#e6db74">&#34;Content-Type: application/json&#34;</span> <span style="color:#ae81ff">\
</span></span></span><span style="display:flex;"><span><span style="color:#ae81ff"></span>     -d <span style="color:#e6db74">&#39;{
</span></span></span><span style="display:flex;"><span><span style="color:#e6db74">           &#34;fileInfo&#34;: { &#34;filePath&#34;: &#34;input.pdf&#34; },
</span></span></span><span style="display:flex;"><span><span style="color:#e6db74">           &#34;imageWatermark&#34;: {
</span></span></span><span style="display:flex;"><span><span style="color:#e6db74">               &#34;imagePath&#34;: &#34;watermark.png&#34;,
</span></span></span><span style="display:flex;"><span><span style="color:#e6db74">               &#34;opacity&#34;: 0.5,
</span></span></span><span style="display:flex;"><span><span style="color:#e6db74">               &#34;scaleFactor&#34;: 0.3,
</span></span></span><span style="display:flex;"><span><span style="color:#e6db74">               &#34;horizontalAlignment&#34;: &#34;Center&#34;,
</span></span></span><span style="display:flex;"><span><span style="color:#e6db74">               &#34;verticalAlignment&#34;: &#34;Center&#34;,
</span></span></span><span style="display:flex;"><span><span style="color:#e6db74">               &#34;margin&#34;: { &#34;top&#34;: 10, &#34;right&#34;: 10, &#34;bottom&#34;: 10, &#34;left&#34;: 10 }
</span></span></span><span style="display:flex;"><span><span style="color:#e6db74">           },
</span></span></span><span style="display:flex;"><span><span style="color:#e6db74">           &#34;outputPath&#34;: &#34;output.pdf&#34;
</span></span></span><span style="display:flex;"><span><span style="color:#e6db74">         }&#39;</span>
</span></span></code></pre></div><!--[CODE_SNIPPET_END]-->  
<p>هذا الطلب يعكس منطق كود Java، ويطبق نفس إعدادات الشفافية، والتحجيم، والمحاذاة.</p>
<ol start="5">
<li><strong>تنزيل ملف PDF المطبوع عليه علامة مائية</strong></li>
</ol>
<!--[CODE_SNIPPET_START]-->
<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>curl -X GET <span style="color:#e6db74">&#34;https://api.groupdocs.cloud/v2.0/storage/download?path=output.pdf&#34;</span> <span style="color:#ae81ff">\
</span></span></span><span style="display:flex;"><span><span style="color:#ae81ff"></span>     -H <span style="color:#e6db74">&#34;Authorization: Bearer YOUR_ACCESS_TOKEN&#34;</span> <span style="color:#ae81ff">\
</span></span></span><span style="display:flex;"><span><span style="color:#ae81ff"></span>     -o output.pdf
</span></span></code></pre></div><!--[CODE_SNIPPET_END]-->
<p>لمزيد من التفاصيل حول أجسام الطلب والمعلمات المدعومة، راجع <a href="https://reference.groupdocs.cloud/watermark/">الوثائق الرسمية لواجهة برمجة التطبيقات</a>.</p>
<h2 id="تثبيت-وتكوين-groupdocswatermark-cloud-sdk-for-java">تثبيت وتكوين GroupDocs.Watermark Cloud SDK for Java</h2>
<p>أضف اعتماد Maven إلى ملف <code>pom.xml</code> الخاص بك (أو المقتطف المكافئ لـ Gradle). المكتبة مستضافة على Maven Central.</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;dependency&gt;</span>
</span></span><span style="display:flex;"><span>    <span style="color:#f92672">&lt;groupId&gt;</span>com.groupdocs<span style="color:#f92672">&lt;/groupId&gt;</span>
</span></span><span style="display:flex;"><span>    <span style="color:#f92672">&lt;artifactId&gt;</span>groupdocs-watermark-cloud<span style="color:#f92672">&lt;/artifactId&gt;</span>
</span></span><span style="display:flex;"><span>    <span style="color:#f92672">&lt;version&gt;</span>23.8<span style="color:#f92672">&lt;/version&gt;</span>
</span></span><span style="display:flex;"><span><span style="color:#f92672">&lt;/dependency&gt;</span>
</span></span></code></pre></div><p>ستحتاج أيضًا إلى حساب GroupDocs Cloud صالح. استرجع <strong>معرف العميل</strong> و <strong>سر العميل</strong> من <a href="https://products.groupdocs.cloud/watermark/java/">GroupDocs portal</a>. لا يلزم أي تثبيت إضافي في وقت التشغيل لأن SDK يتواصل مع خدمة السحابة.</p>
<h2 id="ضبط-خيارات-العلامة-المائية-بالصورة-لمستندات-pdf">ضبط خيارات العلامة المائية بالصورة لمستندات PDF</h2>
<p>يُتيح SDK عدة خصائص تسمح لك بالتحكم في المظهر البصري للعلامة المائية.</p>
<h3 id="ضبط-الشفافية">ضبط الشفافية</h3>
<!--[CODE_SNIPPET_START]-->
<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-java" data-lang="java"><span style="display:flex;"><span>imageWatermark<span style="color:#f92672">.</span><span style="color:#a6e22e">setOpacity</span><span style="color:#f92672">(</span>0<span style="color:#f92672">.</span><span style="color:#a6e22e">75</span><span style="color:#f92672">);</span> <span style="color:#75715e">// 75% opacity for a more visible watermark
</span></span></span></code></pre></div><!--[CODE_SNIPPET_END]-->
<p>تتراوح قيم الشفافية من 0.0 (شفاف تمامًا) إلى 1.0 (معتم تمامًا).</p>
<h3 id="تغيير-معامل-المقياس">تغيير معامل المقياس</h3>
<!--[CODE_SNIPPET_START]-->
<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-java" data-lang="java"><span style="display:flex;"><span>imageWatermark<span style="color:#f92672">.</span><span style="color:#a6e22e">setScaleFactor</span><span style="color:#f92672">(</span>0<span style="color:#f92672">.</span><span style="color:#a6e22e">5</span><span style="color:#f92672">);</span> <span style="color:#75715e">// Watermark occupies 50% of the page width
</span></span></span></code></pre></div><!--[CODE_SNIPPET_END]-->
<p>عامل المقياس يحدد حجم العلامة المائية بالنسبة لأبعاد الصفحة.</p>
<h3 id="تعيين-المحاذاة-والهوامش">تعيين المحاذاة والهوامش</h3>
<!--[CODE_SNIPPET_START]-->
<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-java" data-lang="java"><span style="display:flex;"><span>imageWatermark<span style="color:#f92672">.</span><span style="color:#a6e22e">setHorizontalAlignment</span><span style="color:#f92672">(</span>HorizontalAlignment<span style="color:#f92672">.</span><span style="color:#a6e22e">RIGHT</span><span style="color:#f92672">);</span>
</span></span><span style="display:flex;"><span>imageWatermark<span style="color:#f92672">.</span><span style="color:#a6e22e">setVerticalAlignment</span><span style="color:#f92672">(</span>VerticalAlignment<span style="color:#f92672">.</span><span style="color:#a6e22e">BOTTOM</span><span style="color:#f92672">);</span>
</span></span><span style="display:flex;"><span>imageWatermark<span style="color:#f92672">.</span><span style="color:#a6e22e">setMargin</span><span style="color:#f92672">(</span><span style="color:#66d9ef">new</span> Margin<span style="color:#f92672">(</span>20<span style="color:#f92672">,</span> 20<span style="color:#f92672">,</span> 20<span style="color:#f92672">,</span> 20<span style="color:#f92672">));</span>
</span></span></code></pre></div><!--[CODE_SNIPPET_END]-->
<p>تضع هذه الإعدادات العلامة المائية في الزاوية السفلية‑اليمنى مع هامش قدره 20 نقطة.</p>
<p>للحصول على قائمة كاملة بالخصائص القابلة للتكوين، راجع <a href="https://reference.groupdocs.cloud/watermark/">مرجع API</a>.</p>
<h2 id="الخلاصة">الخلاصة</h2>
<p>إضافة علامة مائية صورة إلى مستندات PDF في Java هي مهمة بسيطة عندما تستخدم <a href="https://products.groupdocs.cloud/watermark/java/">GroupDocs.Watermark Cloud SDK for Java</a>. يتعامل SDK مع جميع عمليات تعديل PDF منخفضة المستوى، مما يتيح لك التركيز على الجوانب البصرية مثل الشفافية، والتحجيم، والتموضع. سواء كنت تفضل تنفيذًا أصليًا بلغة Java أو سير عمل سحابي يعتمد على cURL، يمكن تحقيق نفس النتائج عالية الجودة دون التضحية بالأداء. تذكر الحصول على ترخيص مناسب للاستخدام في الإنتاج؛ تفاصيل التسعير متوفرة على صفحة المنتج ويمكن استخدام <a href="https://purchase.groupdocs.cloud/temporary-license/">temporary license page</a> للتقييم.</p>
<h2 id="الأسئلة-المتكررة">الأسئلة المتكررة</h2>
<ul>
<li>
<p><strong>كيف يمكنني إضافة علامة مائية صورة إلى PDF في Java دون فقدان الجودة؟</strong><br>
استخدم الخاصية <code>scaleFactor</code> لتحديد حجم العلامة المائية نسبة إلى الصفحة والحفاظ على DPI الأصلي لملف PDF المصدر. يحافظ SDK على دقة PDF، لذا تظهر العلامة المائية واضحة عند أي مستوى تكبير.</p>
</li>
<li>
<p><strong>هل يمكنني إضافة علامات مائية متعددة إلى نفس ملف PDF؟</strong><br>
نعم. أنشئ كائنات <code>ImageWatermark</code> منفصلة بإعدادات مختلفة وأضفها بالتتابع عن طريق استدعاء <code>addWatermark</code> عدة مرات أو عن طريق إضافتها إلى قائمة في الطلب.</p>
</li>
<li>
<p><strong>ما هي صيغ الصور المدعومة للعلامة المائية؟</strong><br>
تقبل API صيغ الصور الشائعة مثل <a href="https://docs.fileformat.com/image/png/">PNG</a>, <a href="https://docs.fileformat.com/image/jpg/">JPG</a>, <a href="https://docs.fileformat.com/image/bmp/">BMP</a>, <a href="https://docs.fileformat.com/image/gif/">GIF</a> و TIFF. يُنصح باستخدام PNG للحصول على جودة غير مضغوطة ودعم الشفافية.</p>
</li>
<li>
<p><strong>هل هناك طريقة لمعاينة العلامة المائية قبل تطبيقها؟</strong><br>
يمكنك استخدام GroupDocs.Watermark Cloud SDK for Java لإنشاء ملف PDF مؤقت مع العلامة المائية وتحميله للمراجعة. يستخدم هذا نفس استدعاء <code>addWatermark</code> مع مسار إخراج يشير إلى موقع مؤقت.</p>
</li>
</ul>
<h2 id="اقرأ-المزيد">اقرأ المزيد</h2>
<ul>
<li><a href="https://blog.groupdocs.cloud/ar/watermark/add-watermark-to-images-using-java/">إضافة علامة مائية إلى الصور باستخدام Java</a></li>
<li><a href="https://blog.groupdocs.cloud/ar/watermark/add-watermark-to-word-in-java-watermark-creator/">إضافة علامة مائية إلى Word في Java - منشئ العلامات المائية</a></li>
<li><a href="https://blog.groupdocs.cloud/ar/watermark/insert-watermark-to-pdf-in-csharp/">إضافة علامة مائية صورة إلى PDF | كيفية إضافة علامة مائية إلى مستندات PDF باستخدام .NET</a></li>
</ul>
]]></content:encoded>
    </item>
    
  </channel>
</rss>
