<?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/fa/tag/pdf-manipulation/</link>
    <description>Recent content in pdf manipulation on Document Processing REST APIs | GroupDocs Cloud</description>
    <generator>Hugo -- gohugo.io</generator>
    <language>fa</language>
    <lastBuildDate>Wed, 21 Oct 2026 13:18:44 +0000</lastBuildDate><atom:link href="https://blog-qa.groupdocs.cloud/fa/tag/pdf-manipulation/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>حذف اشیاء حاشیه‌نویسی از PDF با استفاده از REST در Node.JS</title>
      <link>https://blog-qa.groupdocs.cloud/fa/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/fa/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>Note:</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 آمده است که همان جریان کار حذف حاشیه‌نویسی را از طریق GroupDocs.Annotation Cloud REST endpoints انجام می‌دهند.</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>
<p><strong>راه‌اندازی احراز هویت</strong> - کلاس <code>Configuration</code> با <code>clientId</code> و <code>clientSecret</code> شما نمونه‌سازی می‌شود و یک زمینهٔ احراز هویت برای تمام فراخوانی‌های 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">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>
<p><strong>بارگذاری فایل</strong> - <code>UploadFileRequest</code> بایت‌های PDF محلی را به ذخیره‌سازی GroupDocs Cloud ارسال می‌کند. متد <code>storageApi.uploadFile</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-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>
<p><strong>دریافت حاشیه‌نویسی‌ها</strong> - <code>GetAnnotationsRequest</code> یک شی درخواست با مرجع <code>FileInfo</code> می‌سازد. فراخوانی <code>annotationsApi.getAnnotations</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-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>
<p><strong>حذف حاشیه‌نویسی‌ها</strong> - اگر شناسه‌هایی وجود داشته باشند، <code>DeleteAnnotationsRequest</code> پر می‌شود و به <code>annotationsApi.deleteAnnotations</code> ارسال می‌شود، که حاشیه‌نویسی‌ها را به‌صورت دائمی از 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">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>
<p><strong>دانلود PDF تمیز</strong> - در نهایت، <code>DownloadFileRequest</code> فایل به‌روز شده را دریافت می‌کند و <code>fs.writeFileSync</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-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/">آدرس دانلود رسمی</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 بزرگ‌تر از ۱۰۰ مگابایت، ترجیحاً از نقطه انتهایی بارگذاری چندبخشی استفاده کنید تا از زمان‌سنجی جلوگیری شود.</li>
<li><strong>ثبت لاگ پاسخ‌های API</strong> - شناسه‌های درخواست و پاسخ‌ها را برای مسیرهای حسابرسی و رفع مشکل آسان‌تر ذخیره کنید.</li>
<li><strong>استفاده مجدد از توکن‌های دسترسی</strong> - توکن OAuth را تا زمان انقضا در کش نگه دارید تا بار احراز هویت کاهش یابد.</li>
</ul>
<h2 id="سوالات-متداول">سوالات متداول</h2>
<ul>
<li>
<p><strong>چگونه می‌توانم با GroupDocs.Annotation Cloud API احراز هویت کنم؟</strong><br>
یک شناسه کلاینت (client ID) و رمز (secret) را از حساب 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>چگونه می‌توانم اشیاء Annotation را از PDF با REST در Node.JS حذف کنم؟</strong><br>
برای حذف اشیاء Annotation از PDF با استفاده از REST در Node.JS، از GroupDocs.Annotation Cloud SDK for Node.js استفاده کنید تا پس از دریافت شناسه‌های حاشیه‌نویسی، endpoint 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/fa/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/fa/annotation/strikethrough-text-in-a-pdf-using-nodejs/">متن خط خورده در PDF با Node.js و REST API</a></li>
<li><a href="https://blog.groupdocs.cloud/fa/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/fa/merger/merge-pdf-in-nodejs/</link>
      <pubDate>Mon, 19 Oct 2026 15:04:19 +0000</pubDate>
      
      <guid>https://blog-qa.groupdocs.cloud/fa/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 و نکات عملکردی برای PDFهای بزرگ یا رمزگذاری‌شده راهنمایی می‌کند.</p>
<h2 id="قبل-از-شروع-پیشنیازها-و-نصب">قبل از شروع: پیش‌نیازها و نصب</h2>
<p>قبل از شروع، مطمئن شوید که موارد زیر را دارید:</p>
<ul>
<li>Node.js 14 یا بالاتر نصب شده بر روی ماشین توسعه شما.</li>
<li>یک حساب فعال GroupDocs Cloud با client ID و client secret.</li>
<li>دسترسی به فایل‌های PDF که می‌خواهید ترکیب کنید، ذخیره شده در GroupDocs Cloud storage.</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/">Download 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>این وارد کردن به شما دسترسی به API اصلی، اشیاء پیکربندی و توصیف‌گرهای فایل را می‌دهد.</p>
<h3 id="مرحله-۲-پیکربندی-اعتبارهای-groupdocs-خود">مرحله ۲: پیکربندی اعتبارهای 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 ایجاد کنید، متد merge را فراخوانی کنید و پاسخ را مدیریت کنید.</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>Note:</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-api-با-استفاده-از-curl">ادغام PDFها از طریق REST API با استفاده از 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>Use async/await</strong> برای جلوگیری از مسدود کردن حلقهٔ رویداد، به‌ویژه برای اسناد بزرگ.</li>
<li><strong>Batch uploads</strong>: بارگذاری فایل‌های PDF منبع به‌صورت موازی قبل از فراخوانی ادغام برای کاهش تأخیر کلی.</li>
<li><strong>Streamed processing</strong>: برای PDFهای بسیار بزرگ، ذخیره نتایج میانی در فضای ذخیره‌سازی ابری و ادغام آن‌ها در بخش‌های کوچکتر را در نظر بگیرید.</li>
<li><strong>Encrypted PDFs</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>mergeDocuments</code>، رمزهای عبور صحیح را در اشیاء <code>FileInfo</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/fa/merger/split-pdf-into-multiple-pdf-in-nodejs/">تقسیم PDF به چندین PDF در Node.JS</a></li>
<li><a href="https://blog.groupdocs.cloud/fa/merger/lock-pdf-with-password-using-rest-api-in-nodejs/">قفل کردن اسناد PDF با رمز عبور با استفاده از REST API در Node.js</a></li>
<li><a href="https://blog.groupdocs.cloud/fa/merger/how-to-merge-pdf-files-in-csharp-using-rest-api/">نحوه ادغام فایل‌های PDF در C# با استفاده از REST API</a></li>
</ul>
]]></content:encoded>
    </item>
    
    <item>
      <title>افزودن واترمارک تصویر به اسناد PDF در جاوا</title>
      <link>https://blog-qa.groupdocs.cloud/fa/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/fa/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> یک API ساده برای جاسازی واترمارک‌های تصویری به طور مستقیم در PDFها از برنامه Java شما ارائه می‌دهد. در این آموزش، خواهید آموخت که چگونه واترمارک تصویری را به اسناد PDF در Java اضافه کنید، یک مثال کامل و عملی را ببینید و تماس‌های معادل cURL REST برای ادغام ابری را بررسی کنید.</p>
<h2 id="افزودن-واترمارک-تصویر-به-اسناد-pdf-در-جاوا-در-5-گام">افزودن واترمارک تصویر به اسناد PDF در جاوا در 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><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-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>
<ol start="4">
<li><strong>تنظیم گزینه‌های واترمارک و مسیر خروجی</strong>: اطلاعات فایل و واترمارک را در یک شیء <code>WatermarkOptions</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>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-در-جاوا">مثال کامل کد: افزودن واترمارک تصویر به اسناد PDF در جاوا</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><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/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>
<ol start="2">
<li>
<p><strong>بارگذاری PDF منبع</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/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]-->
</li>
<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/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]-->
</li>
<li>
<p><strong>افزودن واترمارک تصویر</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/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>
<!--[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]-->
</li>
</ol>
<p>برای جزئیات بیشتر در مورد بدنه‌های درخواست و پارامترهای پشتیبانی‌شده، <a href="https://reference.groupdocs.cloud/watermark/">مستندات رسمی API</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>Client ID</strong> و <strong>Client Secret</strong> خود را از <a href="https://products.groupdocs.cloud/watermark/java/">پرتال GroupDocs</a> دریافت کنید. نصب زمان اجرا اضافی لازم نیست زیرا SDK با سرویس ابری ارتباط برقرار می‌کند.</p>
<h2 id="تنظیم-دقیق-گزینههای-واترمارک-تصویر-برای-اسناد-pdf">تنظیم دقیق گزینه‌های واترمارک تصویر برای اسناد PDF</h2>
<p>SDK چندین ویژگی را فراهم می‌کند که به شما امکان می‌دهد ظاهر بصری واترمارک را کنترل کنید.</p>
<h3 id="تنظیم-شفافیت">تنظیم شفافیت</h3>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-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><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 در جاوا کاری ساده است هنگامی که از <a href="https://products.groupdocs.cloud/watermark/java/">GroupDocs.Watermark Cloud SDK for Java</a> استفاده می‌کنید. SDK تمام عملیات‌های سطح پایین PDF را مدیریت می‌کند و به شما امکان می‌دهد بر جنبه‌های بصری مانند شفافیت، مقیاس‌بندی و موقعیت‌یابی تمرکز کنید. چه پیاده‌سازی بومی جاوا را ترجیح دهید و چه گردش کار مبتنی بر cURL در ابر، می‌توانید نتایج با کیفیت بالا را بدون کاهش عملکرد به دست آورید. به‌خاطر داشته باشید که برای استفاده در محیط تولید یک لایسنس مناسب دریافت کنید؛ جزئیات قیمت‌گذاری در صفحه محصول موجود است و می‌توانید برای ارزیابی از <a href="https://purchase.groupdocs.cloud/temporary-license/">صفحه لایسنس موقت</a> استفاده کنید.</p>
<h2 id="سوالات-متداول">سوالات متداول</h2>
<ul>
<li>
<p><strong>چگونه می‌توانم واترمارک تصویر را به PDF در جاوا اضافه کنم بدون از دست دادن کیفیت؟</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="read-more">Read More</h2>
<ul>
<li><a href="https://blog.groupdocs.cloud/fa/watermark/add-watermark-to-images-using-java/">افزودن واترمارک به تصاویر با استفاده از جاوا</a></li>
<li><a href="https://blog.groupdocs.cloud/fa/watermark/add-watermark-to-word-in-java-watermark-creator/">افزودن واترمارک به Word در جاوا - Watermark Creator</a></li>
<li><a href="https://blog.groupdocs.cloud/fa/watermark/insert-watermark-to-pdf-in-csharp/">افزودن واترمارک تصویر به PDF | نحوه افزودن واترمارک به اسناد PDF با استفاده از .NET</a></li>
</ul>
]]></content:encoded>
    </item>
    
  </channel>
</rss>
