<?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/pl/tag/pdf-manipulation/</link>
    <description>Recent content in pdf manipulation on Document Processing REST APIs | GroupDocs Cloud</description>
    <generator>Hugo -- gohugo.io</generator>
    <language>pl</language>
    <lastBuildDate>Wed, 21 Oct 2026 13:18:44 +0000</lastBuildDate><atom:link href="https://blog-qa.groupdocs.cloud/pl/tag/pdf-manipulation/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Usuwanie obiektów adnotacji z PDF przy użyciu REST w Node.JS</title>
      <link>https://blog-qa.groupdocs.cloud/pl/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/pl/annotation/remove-annotation-objects-from-pdf-with-rest-in-nodejs/</guid>
      <description>Dowiedz się, jak usunąć obiekty adnotacji z pliku PDF za pomocą REST w Node.JS przy użyciu GroupDocs.Annotation Cloud SDK. Przewodnik krok po kroku z kodem, cURL i praktykami.</description>
      <content:encoded><![CDATA[<p>Usuwanie niechcianych notatek, podświetleń lub znaków atramentowych z plików PDF jest częstym wymogiem przy przygotowywaniu czystych dokumentów do dystrybucji. <a href="https://products.groupdocs.cloud/annotation/nodejs/">GroupDocs.Annotation Cloud SDK for Node.js</a> zapewnia potężną bibliotekę opartą na REST, która umożliwia programowe zarządzanie adnotacjami w formacie <a href="https://docs.fileformat.com/pdf">PDF</a>. Ten przewodnik pokazuje, jak usunąć obiekty Annotation z PDF przy użyciu REST w Node.JS, krok po kroku. Zobaczysz kompletny przykład kodu, równoważne polecenia cURL, wskazówki konfiguracyjne oraz zalecenia najlepszych praktyk, aby zintegrować usuwanie adnotacji w swoich usługach.</p>
<h2 id="pełny-działający-przykład-usuwania-obiektów-adnotacji-z-pdf-przy-użyciu-rest-w-nodejs">Pełny działający przykład usuwania obiektów adnotacji z PDF przy użyciu REST w Node.JS</h2>
<p>Ten przykład demonstruje, jak przesłać plik PDF, usunąć wszystkie jego adnotacje i pobrać oczyszczony plik przy użyciu 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>Uwaga:</strong> Ten przykład kodu demonstruje podstawową funkcjonalność. Przed użyciem go w swoim projekcie upewnij się, że zaktualizowałeś wszystkie ścieżki plików i wartości konfiguracyjne, aby odpowiadały rzeczywistemu środowisku, sprawdź, czy wszystkie wymagane zależności są prawidłowo zainstalowane, oraz dokładnie przetestuj w środowisku deweloperskim. Jeśli napotkasz jakiekolwiek problemy, odwołaj się do <a href="https://docs.groupdocs.cloud/annotation/">oficjalnej dokumentacji</a> lub skontaktuj się z <a href="https://forum.groupdocs.cloud/c/annotation/10">zespołem wsparcia</a> w celu uzyskania pomocy.</p>
</blockquote>
<h2 id="usuwanie-adnotacji-pdf-za-pomocą-rest-api-przy-użyciu-curl">Usuwanie adnotacji PDF za pomocą REST API przy użyciu cURL</h2>
<p>Poniżej znajdują się polecenia cURL, które wykonują ten sam przepływ usuwania adnotacji za pośrednictwem punktów końcowych REST usługi GroupDocs.Annotation Cloud.</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>Aby uzyskać pełną listę punktów końcowych i parametrów, zobacz <a href="https://reference.groupdocs.cloud/annotation/">oficjalną dokumentację API</a>.</p>
<h2 id="jak-działa-usuwanie-obiektów-adnotacji-z-pdf-przy-użyciu-rest-w-nodejs">Jak działa usuwanie obiektów adnotacji z PDF przy użyciu REST w Node.JS</h2>
<ol>
<li><strong>Konfiguracja uwierzytelniania</strong> - Klasa <code>Configuration</code> jest tworzona z Twoim <code>clientId</code> i <code>clientSecret</code>, tworząc uwierzytelniony kontekst dla wszystkich kolejnych wywołań API.</li>
</ol>
<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><ol start="2">
<li><strong>Przesyłanie pliku</strong> - <code>UploadFileRequest</code> wysyła lokalne bajty PDF do magazynu GroupDocs Cloud. Metoda <code>storageApi.uploadFile</code> obsługuje transfer.</li>
</ol>
<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><ol start="3">
<li><strong>Pobieranie adnotacji</strong> - <code>GetAnnotationsRequest</code> tworzy obiekt żądania z odniesieniem do <code>FileInfo</code>. Wywołanie <code>annotationsApi.getAnnotations</code> zwraca kolekcję obiektów adnotacji, z których wyodrębnia się identyfikatory.</li>
</ol>
<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><ol start="4">
<li><strong>Usuwanie adnotacji</strong> - Jeśli istnieją jakiekolwiek identyfikatory, <code>DeleteAnnotationsRequest</code> jest wypełniany i przekazywany do <code>annotationsApi.deleteAnnotations</code>, które trwale usuwa adnotacje z przechowywanego PDF.</li>
</ol>
<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><ol start="5">
<li><strong>Pobieranie czystego PDF</strong> - Na koniec <code>DownloadFileRequest</code> pobiera zaktualizowany plik, a <code>fs.writeFileSync</code> zapisuje go w lokalnym systemie plików.</li>
</ol>
<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><p>Aby uzyskać szczegółowe definicje klas i metod, odwołaj się do <a href="https://reference.groupdocs.cloud/annotation/">referencji API</a>.</p>
<h2 id="instalowanie-i-konfigurowanie-groupdocsannotation-cloud-sdk-dla-nodejs">Instalowanie i konfigurowanie GroupDocs.Annotation Cloud SDK dla Node.js</h2>
<p>SDK jest dystrybuowany jako pakiet npm. Zainstaluj go przy pomocy poniższego polecenia, a następnie użyj <strong>require</strong> w swoim projekcie.</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>Możesz również pobrać najnowszy pakiet bezpośrednio ze <a href="https://github.com/groupdocs-annotation-cloud/groupdocs-annotation-cloud-node">strony wydań GitHub</a> lub z oficjalnego <a href="https://releases.groupdocs.cloud/annotation/nodejs/">adresu URL do pobrania</a>.</p>
<p>Po instalacji zaimportuj bibliotekę i utwórz obiekt konfiguracji, jak pokazano w przykładzie kodu:</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>Upewnij się, że Twoje środowisko uruchomieniowe spełnia wymagania dotyczące wersji Node.js oraz że posiadasz ważne konto GroupDocs, aby uzyskać dane uwierzytelniające klienta.</p>
<h2 id="opcje-i-ustawienia-usuwania-adnotacji">Opcje i ustawienia usuwania adnotacji</h2>
<p>SDK udostępnia kilka parametrów, które możesz dostroić:</p>
<ul>
<li><strong>clientId / clientSecret</strong> - Dane uwierzytelniające do autoryzacji OAuth. Ustaw je w konstruktorze <code>Configuration</code>.</li>
<li><strong>fileInfo.filePath</strong> - Ścieżka do pliku PDF w pamięci GroupDocs Cloud. Dostosuj ją, jeśli przechowujesz pliki w innym folderze.</li>
<li><strong>annotationIds</strong> - Tablica identyfikatorów zwróconych przez <code>GetAnnotations</code>. Podanie podzbioru umożliwia selektywne usuwanie.</li>
</ul>
<p>Dodatkowe ustawienia, takie jak limit czasu żądania i konfiguracja proxy, są dostępne w dokumentacji SDK; zobacz <a href="https://docs.groupdocs.cloud/annotation/">oficjalną dokumentację</a> po pełną listę.</p>
<h2 id="najlepsze-praktyki-usuwania-adnotacji-pdf-za-pośrednictwem-rest">Najlepsze praktyki usuwania adnotacji PDF za pośrednictwem REST</h2>
<ul>
<li><strong>Sprawdź identyfikatory adnotacji</strong> - Zawsze sprawdzaj, czy identyfikatory, które zamierzasz usunąć, istnieją; próba usunięcia nieistniejących identyfikatorów może spowodować błąd 404.</li>
<li><strong>Używaj HTTPS</strong> - Wszystkie wywołania API muszą być wykonywane przez HTTPS, aby chronić Twoje poświadczenia i dane dokumentu.</li>
<li><strong>Obsługuj duże pliki przy użyciu przesyłania w częściach</strong> - Dla plików PDF większych niż 100 MB, preferuj punkt końcowy wieloczęściowego przesyłania, aby uniknąć przekroczenia limitu czasu.</li>
<li><strong>Loguj odpowiedzi API</strong> - Przechowuj identyfikatory żądań i odpowiedzi w celu tworzenia ścieżek audytu i ułatwienia rozwiązywania problemów.</li>
<li><strong>Ponownie używaj tokenów dostępu</strong> - Buforuj token OAuth, dopóki nie wygaśnie, aby zmniejszyć obciążenie uwierzytelniania.</li>
</ul>
<h2 id="często-zadawane-pytania">Często zadawane pytania</h2>
<ul>
<li>
<p><strong>Jak uwierzytelnić się w GroupDocs.Annotation Cloud API?</strong><br>
Uzyskaj identyfikator klienta (client ID) i sekret z konta GroupDocs, a następnie żądaj tokenu dostępu poprzez punkt końcowy OAuth. Zobacz <a href="https://docs.groupdocs.cloud/annotation/">oficjalną dokumentację</a>, aby uzyskać szczegóły.</p>
</li>
<li>
<p><strong>Czy mogę usunąć konkretne adnotacje zamiast wszystkich?</strong><br>
Tak, podaj identyfikatory adnotacji, które chcesz usunąć w DeleteAnnotationsRequest. SDK zwraca listę identyfikatorów adnotacji po wywołaniu GetAnnotations.</p>
</li>
<li>
<p><strong>Jak mogę usunąć obiekty adnotacji z PDF przy użyciu REST w Node.JS?</strong><br>
Użyj GroupDocs.Annotation Cloud SDK for Node.js, aby wywołać endpoint DeleteAnnotations po pobraniu identyfikatorów adnotacji. Pełny przepływ pracy jest przedstawiony w przykładzie kodu oraz sekcji cURL tego przewodnika.</p>
</li>
<li>
<p><strong>Jakie licencjonowanie jest wymagane do użytku produkcyjnego?</strong><br>
Do produkcji wymagana jest płatna licencja. Podczas oceny możesz uzyskać tymczasową licencję ze <a href="https://purchase.groupdocs.cloud/temporary-license/">strony tymczasowej licencji</a>.</p>
</li>
</ul>
<h2 id="dalsza-lektura">Dalsza lektura</h2>
<ul>
<li><a href="https://blog.groupdocs.cloud/pl/annotation/extract-or-remove-annotations-from-pdf-using-rest-api-in-node-js/">Wyodrębnij lub usuń adnotacje z PDF przy użyciu REST API w Node.js</a></li>
<li><a href="https://blog.groupdocs.cloud/pl/annotation/strikethrough-text-in-a-pdf-using-nodejs/">Tekst przekreślony w PDF przy użyciu Node.js i REST API</a></li>
<li><a href="https://blog.groupdocs.cloud/pl/annotation/remove-annotations-from-pdf-using-rest-api-in-python/">Usuń adnotacje z PDF przy użyciu REST API w Pythonie</a></li>
</ul>
]]></content:encoded>
    </item>
    
    <item>
      <title>Scalanie PDF w Node.JS</title>
      <link>https://blog-qa.groupdocs.cloud/pl/merger/merge-pdf-in-nodejs/</link>
      <pubDate>Mon, 19 Oct 2026 15:04:19 +0000</pubDate>
      
      <guid>https://blog-qa.groupdocs.cloud/pl/merger/merge-pdf-in-nodejs/</guid>
      <description>Dowiedz się, jak scalać pliki PDF w Node.JS przy użyciu GroupDocs.Merger Cloud SDK. Przewodnik krok po kroku, przykład kodu, polecenia cURL oraz wskazówki dotyczące wydajności dla programistów.</description>
      <content:encoded><![CDATA[<p>Łączenie wielu dokumentów <a href="https://docs.fileformat.com/pdf">PDF</a> w jeden plik jest częstym wymogiem przy budowaniu przepływów dokumentów lub generowaniu raportów. <a href="https://products.groupdocs.cloud/merger/nodejs/">GroupDocs.Merger Cloud SDK for Node.js</a> ułatwia scalanie PDF w Node.JS bez konieczności zajmowania się niskopoziomowymi strukturami PDF. Ten przewodnik prowadzi Cię przez konfigurację, krok po kroku implementację, pełny przykład kodu, równoważne wywołania cURL oraz wskazówki dotyczące wydajności przy dużych lub zaszyfrowanych plikach PDF.</p>
<h2 id="zanim-zaczniesz-wymagania-wstępne-i-instalacja">Zanim zaczniesz: Wymagania wstępne i instalacja</h2>
<p>Zanim rozpoczniesz, upewnij się, że masz następujące:</p>
<ul>
<li>Node.js 14 lub nowszy zainstalowany na Twojej maszynie deweloperskiej.</li>
<li>Aktywne konto GroupDocs Cloud z identyfikatorem klienta i sekretem klienta.</li>
<li>Dostęp do plików PDF, które chcesz połączyć, przechowywanych w magazynie GroupDocs Cloud.</li>
</ul>
<p>Zainstaluj SDK za pomocą npm i pobierz najnowszy pakiet:</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>Możesz również pobrać SDK ze strony oficjalnych wydań: <a href="https://releases.groupdocs.cloud/merger/nodejs/">Pobierz SDK</a>. Po instalacji jesteś gotowy, aby rozpocząć kodowanie.</p>
<h2 id="przewodnik-krok-po-kroku-łączenia-pdf-w-nodejs">Przewodnik krok po kroku łączenia PDF w Node.JS</h2>
<h3 id="krok-1-zainstaluj-sdk-i-zaimportuj-wymagane-klasy">Krok 1: Zainstaluj SDK i zaimportuj wymagane klasy</h3>
<p>Najpierw zaimportuj klasy, które będą potrzebne do scalania plików 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>Ten import zapewnia dostęp do podstawowego API, obiektów konfiguracyjnych i deskryptorów plików.</p>
<h3 id="krok-2-skonfiguruj-swoje-poświadczenia-groupdocs">Krok 2: Skonfiguruj swoje poświadczenia GroupDocs</h3>
<p>Utwórz obiekt konfiguracji ze swoimi poświadczeniami klienta.</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>Podanie prawidłowych poświadczeń pozwala bibliotece uwierzytelnić Twoje żądania.</p>
<h3 id="krok-3-zdefiniuj-pliki-pdf-do-scalenia">Krok 3: Zdefiniuj pliki PDF do scalenia</h3>
<p>Wymień dokumenty PDF, które chcesz połączyć. Ten krok przygotowuje Cię do efektywnego łączenia PDF w 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>Każdy <code>FileInfo</code> wskazuje na plik przechowywany w Twoim magazynie GroupDocs Cloud.</p>
<h3 id="krok-4-ustaw-opcje-scalania">Krok 4: Ustaw opcje scalania</h3>
<p>Skonfiguruj lokalizację wyjścia i dołącz listę plików do żądania scalenia.</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>Te ustawienia kontrolują, jak łączysz PDF w Node.JS i gdzie zostanie zapisany wynik.</p>
<h3 id="krok-5-wykonaj-operację-scalania">Krok 5: Wykonaj operację scalania</h3>
<p>Utwórz instancję API, wywołaj metodę merge i obsłuż odpowiedź.</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>Wywołanie asynchroniczne zwraca ścieżkę do połączonego dokumentu, jeśli operacja zakończy się sukcesem.</p>
<h2 id="pełny-przykład-implementacji-łączenia-plików-pdf-w-nodejs">Pełny przykład implementacji łączenia plików PDF w Node.JS</h2>
<p>Poniższy kod demonstruje kompletny przepływ pracy od konfiguracji po obsługę wyników.</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>Uwaga:</strong> Ten przykład kodu demonstruje podstawową funkcjonalność. Przed użyciem go w swoim projekcie upewnij się, że zaktualizowałeś wszystkie ścieżki plików i wartości konfiguracyjne, aby odpowiadały rzeczywistemu środowisku, sprawdź, czy wszystkie wymagane zależności są poprawnie zainstalowane, i dokładnie przetestuj w swoim środowisku deweloperskim. Jeśli napotkasz jakiekolwiek problemy, odwołaj się do <a href="https://docs.groupdocs.cloud/merger/">oficjalnej dokumentacji</a> lub skontaktuj się z <a href="https://forum.groupdocs.cloud/c/merger/18">zespołem wsparcia</a> w celu uzyskania pomocy.</p>
</blockquote>
<h2 id="scalanie-plików-pdf-za-pomocą-rest-api-przy-użyciu-curl">Scalanie plików PDF za pomocą REST API przy użyciu cURL</h2>
<p>Jeśli wolisz czyste podejście REST, tę samą operację można wykonać przy użyciu poleceń cURL.</p>
<p>Najpierw uzyskaj token dostępu:</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>Prześlij pliki PDF źródłowe do swojego magazynu (zastąp <code>YOUR_ACCESS_TOKEN</code> tokenem z poprzedniego kroku):</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>Powtórz przesyłanie pliku <code>input2.pdf</code>. Następnie żądaj operacji scalania:</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>Na koniec pobierz połączony plik:</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>Aby uzyskać pełną listę punktów końcowych i parametrów, zobacz <a href="https://reference.groupdocs.cloud/merger/">referencję API</a>.</p>
<h2 id="konfigurowanie-opcji-scalania">Konfigurowanie opcji scalania</h2>
<p>SDK udostępnia kilka opcji, które pozwalają precyzyjnie dostosować proces scalania:</p>
<ul>
<li><strong>outputPath</strong> – Ścieżka docelowa dla scalonego pliku PDF. Dostosuj ją, aby kontrolować, gdzie zostanie zapisany wynik.</li>
<li><strong>fileInfos</strong> – Tablica obiektów <code>FileInfo</code>, które określają źródłowe pliki PDF i ich kolejność.</li>
</ul>
<p>Możesz także ustawić dodatkowe właściwości, takie jak <code>pages</code>, aby scalić określone zakresy stron, lub <code>password</code> dla zaszyfrowanych plików PDF. Odwołaj się do <a href="https://docs.groupdocs.cloud/merger/">oficjalnej dokumentacji</a> po pełną listę konfigurowalnych pól.</p>
<h2 id="rozważania-dotyczące-wydajności-przy-łączeniu-plików-pdf">Rozważania dotyczące wydajności przy łączeniu plików PDF</h2>
<p>Podczas łączenia dużych lub wielu plików PDF, pamiętaj o tych wskazówkach:</p>
<ul>
<li><strong>Używaj async/await</strong> aby uniknąć blokowania pętli zdarzeń, szczególnie przy dużych dokumentach.</li>
<li><strong>Przesyłanie wsadowe</strong>: przesyłaj pliki PDF źródłowe równolegle przed wywołaniem scalania, aby zmniejszyć całkowite opóźnienie.</li>
<li><strong>Przetwarzanie strumieniowe</strong>: dla wyjątkowo dużych plików PDF rozważ przechowywanie wyników pośrednich w chmurze i scalanie ich w mniejszych fragmentach.</li>
<li><strong>Zaszyfrowane PDF</strong>: podaj hasła w obiektach <code>FileInfo</code>; przetwarzanie zaszyfrowanych plików zwiększa obciążenie, więc scal je po odszyfrowaniu, jeśli to możliwe.</li>
</ul>
<p>Stosowanie tych praktyk pomaga efektywnie łączyć pliki PDF w Node.JS, minimalizując zużycie pamięci.</p>
<h2 id="pytania-które-możesz-mieć">Pytania, które możesz mieć</h2>
<ul>
<li>
<p><strong>Jak scalić pliki PDF w Node.JS przy użyciu GroupDocs?</strong><br>
Użyj <a href="https://products.groupdocs.cloud/merger/nodejs/">GroupDocs.Merger Cloud SDK for Node.js</a> aby utworzyć instancję <code>MergeApi</code>, skonfigurować <code>MergeOptions</code> z źródłowymi plikami PDF i wywołać <code>mergeDocuments</code>. Pełny przykład kodu w tym przewodniku demonstruje proces.</p>
</li>
<li>
<p><strong>Czy mogę scalać zaszyfrowane pliki PDF w Node.JS?</strong><br>
Tak, SDK obsługuje scalanie zaszyfrowanych plików PDF. Podaj prawidłowe hasła w obiektach <code>FileInfo</code> przed wywołaniem <code>mergeDocuments</code>. Zobacz <a href="https://docs.groupdocs.cloud/merger/">oficjalną dokumentację</a> po szczegóły.</p>
</li>
<li>
<p><strong>Jakie są opcje licencjonowania dla GroupDocs.Merger?</strong><br>
GroupDocs oferuje elastyczne plany cenowe. Do testów możesz poprosić o <a href="https://purchase.groupdocs.cloud/temporary-license/">tymczasową licencję</a>, aby ocenić bibliotekę przed zakupem pełnej subskrypcji.</p>
</li>
<li>
<p><strong>Gdzie mogę znaleźć więcej przykładów i wsparcia?</strong><br>
Dodatkowe przykłady są dostępne w <a href="https://github.com/groupdocs-merger-cloud/groupdocs-merger-cloud-node">repozytorium GitHub</a>. Aby uzyskać pomoc, odwiedź <a href="https://forum.groupdocs.cloud/c/merger/18">forum wsparcia</a>.</p>
</li>
</ul>
<h2 id="dalsza-lektura">Dalsza lektura</h2>
<ul>
<li><a href="https://blog.groupdocs.cloud/pl/merger/split-pdf-into-multiple-pdf-in-nodejs/">Podziel PDF na wiele plików PDF w Node.JS</a></li>
<li><a href="https://blog.groupdocs.cloud/pl/merger/lock-pdf-with-password-using-rest-api-in-nodejs/">Zabezpiecz dokumenty PDF hasłami przy użyciu REST API w Node.js</a></li>
<li><a href="https://blog.groupdocs.cloud/pl/merger/how-to-merge-pdf-files-in-csharp-using-rest-api/">Jak scalić pliki PDF w C# przy użyciu REST API</a></li>
</ul>
]]></content:encoded>
    </item>
    
    <item>
      <title>Dodaj znak wodny obrazu do dokumentów PDF w Javie</title>
      <link>https://blog-qa.groupdocs.cloud/pl/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/pl/watermark/add-image-watermark-to-pdf-documents-in-java/</guid>
      <description>Dowiedz się, jak dodać znak wodny obrazu do dokumentów PDF w języku Java przy użyciu GroupDocs.Watermark Cloud SDK. Przewodnik krok po kroku z kodem, cURL i wskazówkami dotyczącymi konfiguracji.</description>
      <content:encoded><![CDATA[<p>Dodanie wizualnego identyfikatora do plików <a href="https://docs.fileformat.com/pdf">PDF</a> jest niezbędne do ochrony własności intelektualnej i brandingu dokumentów. <a href="https://products.groupdocs.cloud/watermark/java/">GroupDocs.Watermark Cloud SDK for Java</a> oferuje prosty interfejs API umożliwiający osadzanie znaków wodnych w postaci obrazu bezpośrednio w plikach PDF z poziomu aplikacji Java. W tym samouczku dowiesz się, jak dodać znak wodny obrazu do dokumentów PDF w Javie, zobaczysz kompletny działający przykład oraz poznasz równoważne wywołania cURL REST dla integracji w chmurze.</p>
<h2 id="dodaj-znak-wodny-obrazu-do-dokumentów-pdf-w-javie-w-5-krokach">Dodaj znak wodny obrazu do dokumentów PDF w Javie w 5 krokach</h2>
<ol>
<li><strong>Zainicjuj klienta API</strong>: Utwórz instancję <code>ApiClient</code> z identyfikatorem klienta i sekretem.</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>Ten krok łączy Twój kod Java z usługą GroupDocs.Watermark Cloud. Zobacz <a href="https://reference.groupdocs.cloud/watermark/">odniesienie API</a> po więcej szczegółów.</p>
<ol start="2">
<li><strong>Określ plik PDF źródłowy</strong>: Utwórz obiekt <code>FileInfo</code>, który wskazuje na PDF, który chcesz oznaczyć znakiem wodnym.</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>Plik musi zostać przesłany do Twojego magazynu GroupDocs przed żądaniem.</p>
<ol start="3">
<li><strong>Skonfiguruj znak wodny obrazu</strong>: Zdefiniuj ścieżkę obrazu, krycie, współczynnik skali, obrót i wyrównanie.</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>Dostosuj te wartości, aby uzyskać pożądany wygląd; krycie kontroluje przejrzystość, natomiast współczynnik skali określa rozmiar względem strony.</p>
<ol start="4">
<li><strong>Ustaw opcje znaku wodnego i ścieżkę wyjściową</strong>: Połącz informacje o pliku i znak wodny w obiekt <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> informuje usługę, gdzie ma przechowywać wynikowy plik PDF.</p>
<ol start="5">
<li><strong>Wykonaj żądanie</strong>: Utwórz <code>AddWatermarkRequest</code> i wywołaj API. Obsłuż odpowiedzi sukcesu lub błędu.</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>Po wykonaniu żądania plik PDF z dodanym znakiem wodnym jest dostępny w określonej lokalizacji.</p>
<h2 id="kompletny-przykład-kodu-dodaj-znak-wodny-obrazu-do-dokumentów-pdf-w-javie">Kompletny przykład kodu: Dodaj znak wodny obrazu do dokumentów PDF w Javie</h2>
<p>Poniższy przykład demonstruje pełną implementację, od inicjalizacji klienta po zapisanie PDF z znakiem wodnym.</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>Uwaga:</strong> Ten przykład kodu demonstruje podstawową funkcjonalność. Przed użyciem go w swoim projekcie upewnij się, że zaktualizowałeś ścieżki do plików (<code>input.pdf</code>, <code>watermark.png</code>, <code>output.pdf</code>), aby odpowiadały rzeczywistym lokalizacjom, sprawdź, czy wszystkie wymagane zależności są poprawnie zainstalowane, oraz dokładnie przetestuj w środowisku programistycznym. Jeśli napotkasz jakiekolwiek problemy, odwołaj się do <a href="https://docs.groupdocs.cloud/watermark/">oficjalnej dokumentacji</a> lub skontaktuj się z <a href="https://forum.groupdocs.cloud/c/watermark/29">zespołem wsparcia</a> w celu uzyskania pomocy.</p>
</blockquote>
<h2 id="zastosuj-znak-wodny-obrazu-w-dokumentach-pdf-za-pomocą-curl-i-rest-api">Zastosuj znak wodny obrazu w dokumentach PDF za pomocą cURL i REST API</h2>
<p>Poniżej znajdują się wywołania REST, których możesz użyć z cURL, aby uzyskać ten sam wynik bez pisania kodu w języku Java.</p>
<ol>
<li><strong>Uzyskaj token dostępu</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>Odpowiedź zawiera <code>access_token</code> używany w kolejnych wywołaniach.</p>
<ol start="2">
<li>
<p><strong>Prześlij źródłowy 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>Prześlij obraz znaku wodnego</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>Dodaj znak wodny obrazu</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>To żądanie odzwierciedla logikę kodu Java, stosując te same ustawienia przezroczystości, skalowania i wyrównania.</p>
<ol start="5">
<li><strong>Pobierz PDF z znakiem wodnym</strong></li>
</ol>
<!--[CODE_SNIPPET_START]-->
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>curl -X GET <span style="color:#e6db74">&#34;https://api.groupdocs.cloud/v2.0/storage/download?path=output.pdf&#34;</span> <span style="color:#ae81ff">\
</span></span></span><span style="display:flex;"><span><span style="color:#ae81ff"></span>     -H <span style="color:#e6db74">&#34;Authorization: Bearer YOUR_ACCESS_TOKEN&#34;</span> <span style="color:#ae81ff">\
</span></span></span><span style="display:flex;"><span><span style="color:#ae81ff"></span>     -o output.pdf
</span></span></code></pre></div><!--[CODE_SNIPPET_END]-->
<p>Aby uzyskać więcej informacji o ciałach żądań i obsługiwanych parametrach, zobacz <a href="https://reference.groupdocs.cloud/watermark/">oficjalną dokumentację API</a>.</p>
<h2 id="instalowanie-i-konfigurowanie-groupdocswatermark-cloud-sdk-for-java">Instalowanie i konfigurowanie GroupDocs.Watermark Cloud SDK for Java</h2>
<p>Dodaj zależność Maven do swojego <code>pom.xml</code> (lub równoważny fragment Gradle). Biblioteka jest hostowana w 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>Potrzebujesz także ważnego konta GroupDocs Cloud. Pobierz swój <strong>Client ID</strong> i <strong>Client Secret</strong> z <a href="https://products.groupdocs.cloud/watermark/java/">portalu GroupDocs</a>. Nie jest wymagana dodatkowa instalacja środowiska uruchomieniowego, ponieważ SDK komunikuje się z usługą w chmurze.</p>
<h2 id="dostosowywanie-opcji-znaku-wodnego-obrazu-dla-dokumentów-pdf">Dostosowywanie opcji znaku wodnego obrazu dla dokumentów PDF</h2>
<p>SDK udostępnia kilka właściwości, które pozwalają kontrolować wygląd wizualny znaku wodnego.</p>
<h3 id="dostosuj-przezroczystość">Dostosuj przezroczystość</h3>
<!--[CODE_SNIPPET_START]-->
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-java" data-lang="java"><span style="display:flex;"><span>imageWatermark<span style="color:#f92672">.</span><span style="color:#a6e22e">setOpacity</span><span style="color:#f92672">(</span>0<span style="color:#f92672">.</span><span style="color:#a6e22e">75</span><span style="color:#f92672">);</span> <span style="color:#75715e">// 75% opacity for a more visible watermark
</span></span></span></code></pre></div><!--[CODE_SNIPPET_END]-->
<p>Wartości nieprzezroczystości mieszczą się w przedziale od 0.0 (całkowicie przezroczyste) do 1.0 (całkowicie nieprzezroczyste).</p>
<h3 id="zmień-współczynnik-skali">Zmień współczynnik skali</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>Współczynnik skalowania określa rozmiar znaku wodnego względem wymiarów strony.</p>
<h3 id="ustaw-wyrównanie-i-marginesy">Ustaw wyrównanie i marginesy</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>Te ustawienia umieszczają znak wodny w prawym dolnym rogu z marginesem 20 punktów.</p>
<p>Aby uzyskać pełną listę konfigurowalnych właściwości, odwołaj się do <a href="https://reference.groupdocs.cloud/watermark/">referencji API</a>.</p>
<h2 id="podsumowanie">Podsumowanie</h2>
<p>Dodanie znaku wodnego w postaci obrazu do dokumentów PDF w Javie jest prostym zadaniem, gdy używasz <a href="https://products.groupdocs.cloud/watermark/java/">GroupDocs.Watermark Cloud SDK for Java</a>. SDK obsługuje wszystkie niskopoziomowe operacje na PDF, pozwalając skupić się na aspektach wizualnych, takich jak przezroczystość, skalowanie i pozycjonowanie. Niezależnie od tego, czy wolisz natywną implementację w Javie, czy chmurę opartą na cURL, te same wysokiej jakości wyniki są osiągalne bez utraty wydajności. Pamiętaj, aby uzyskać odpowiednią licencję do użytku produkcyjnego; szczegóły cenowe są dostępne na stronie produktu, a <a href="https://purchase.groupdocs.cloud/temporary-license/">strona tymczasowej licencji</a> może być użyta do oceny.</p>
<h2 id="najczęściej-zadawane-pytania">Najczęściej zadawane pytania</h2>
<ul>
<li>
<p><strong>Jak dodać znak wodny obrazu do PDF w Javie bez utraty jakości?</strong><br>
Użyj właściwości <code>scaleFactor</code>, aby dopasować rozmiar znaku wodnego względem strony i zachować oryginalną rozdzielczość DPI źródłowego PDF. SDK zachowuje rozdzielczość PDF, więc znak wodny pozostaje wyraźny przy każdym poziomie powiększenia.</p>
</li>
<li>
<p><strong>Czy mogę dodać wiele znaków wodnych do tego samego PDF?</strong><br>
Tak. Utwórz osobne obiekty <code>ImageWatermark</code> z różnymi konfiguracjami i dodawaj je kolejno, wywołując <code>addWatermark</code> wielokrotnie lub dodając je do listy w żądaniu.</p>
</li>
<li>
<p><strong>Jakie formaty obrazów są obsługiwane dla znaku wodnego?</strong><br>
API akceptuje powszechne typy obrazów, takie jak <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> oraz TIFF. PNG jest zalecany ze względu na bezstratną jakość i obsługę przezroczystości.</p>
</li>
<li>
<p><strong>Czy istnieje sposób, aby podglądnąć znak wodny przed jego zastosowaniem?</strong><br>
Możesz użyć GroupDocs.Watermark Cloud SDK for Java, aby wygenerować tymczasowy plik PDF ze znakiem wodnym i pobrać go do przeglądu. To używa tego samego wywołania <code>addWatermark</code> z ścieżką wyjściową wskazującą tymczasową lokalizację.</p>
</li>
</ul>
<h2 id="czytaj-więcej">Czytaj więcej</h2>
<ul>
<li><a href="https://blog.groupdocs.cloud/pl/watermark/add-watermark-to-images-using-java/">Dodaj znak wodny do obrazów przy użyciu Javy</a></li>
<li><a href="https://blog.groupdocs.cloud/pl/watermark/add-watermark-to-word-in-java-watermark-creator/">Dodaj znak wodny do Worda w Javie - Watermark Creator</a></li>
<li><a href="https://blog.groupdocs.cloud/pl/watermark/insert-watermark-to-pdf-in-csharp/">Dodaj znak wodny obrazu do PDF | Jak dodać znak wodny do dokumentów PDF przy użyciu .NET</a></li>
</ul>
]]></content:encoded>
    </item>
    
  </channel>
</rss>
