<?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>java rest api on Document Processing REST APIs | GroupDocs Cloud</title>
    <link>https://blog-qa.groupdocs.cloud/tag/java-rest-api/</link>
    <description>Recent content in java rest api on Document Processing REST APIs | GroupDocs Cloud</description>
    <generator>Hugo -- gohugo.io</generator>
    <language>en</language>
    <lastBuildDate>Wed, 23 Sep 2026 13:04:19 +0000</lastBuildDate><atom:link href="https://blog-qa.groupdocs.cloud/tag/java-rest-api/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Add Text Overlay to GIF using REST in Java</title>
      <link>https://blog-qa.groupdocs.cloud/watermark/add-text-overlay-to-gif-using-rest-in-java/</link>
      <pubDate>Wed, 23 Sep 2026 13:04:19 +0000</pubDate>
      
      <guid>https://blog-qa.groupdocs.cloud/watermark/add-text-overlay-to-gif-using-rest-in-java/</guid>
      <description>Learn how to add text overlay to GIFs using GroupDocs.Watermark Cloud SDK for Java via REST API. Includes code, cURL and setup steps now. Start quickly.</description>
      <content:encoded><![CDATA[<p>Adding dynamic captions, subtitles, or promotional messages to animated GIFs is a common need for modern web and mobile applications. <a href="https://products.groupdocs.cloud/watermark/java/">GroupDocs.Watermark Cloud SDK for Java</a> provides a powerful REST‑based library that makes this task straightforward. In this guide you will learn how to <strong>add text Overlay to <a href="https://docs.fileformat.com/image/gif/">GIF</a> using REST in Java</strong>, see a full Java implementation, explore equivalent cURL commands, and understand the required setup steps.</p>
<h2 id="add-text-overlay-to-gif-using-rest-in-java---sample-code">Add Text Overlay to GIF Using REST in Java - Sample Code</h2>
<p>This example demonstrates how to configure a text watermark and apply it to every frame of a GIF file.</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.watermark.cloud.api.WatermarkApi<span style="color:#f92672">;</span>
</span></span><span style="display:flex;"><span><span style="color:#f92672">import</span> com.groupdocs.watermark.cloud.client.ApiException<span style="color:#f92672">;</span>
</span></span><span style="display:flex;"><span><span style="color:#f92672">import</span> com.groupdocs.watermark.cloud.client.Configuration<span style="color:#f92672">;</span>
</span></span><span style="display:flex;"><span><span style="color:#f92672">import</span> com.groupdocs.watermark.cloud.model.AddWatermarkRequest<span style="color:#f92672">;</span>
</span></span><span style="display:flex;"><span><span style="color:#f92672">import</span> com.groupdocs.watermark.cloud.model.AddWatermarkResponse<span style="color:#f92672">;</span>
</span></span><span style="display:flex;"><span><span style="color:#f92672">import</span> com.groupdocs.watermark.cloud.model.FileInfo<span style="color:#f92672">;</span>
</span></span><span style="display:flex;"><span><span style="color:#f92672">import</span> com.groupdocs.watermark.cloud.model.OutputFileInfo<span style="color:#f92672">;</span>
</span></span><span style="display:flex;"><span><span style="color:#f92672">import</span> com.groupdocs.watermark.cloud.model.TextWatermarkOptions<span style="color:#f92672">;</span>
</span></span><span style="display:flex;"><span><span style="color:#f92672">import</span> com.groupdocs.watermark.cloud.model.HorizontalAlignment<span style="color:#f92672">;</span>
</span></span><span style="display:flex;"><span><span style="color:#f92672">import</span> com.groupdocs.watermark.cloud.model.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">AddTextOverlayToGif</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 configuration (replace with your actual clientId and clientSecret)
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span>        Configuration config <span style="color:#f92672">=</span> <span style="color:#66d9ef">new</span> Configuration<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>config<span style="color:#f92672">);</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>        <span style="color:#75715e">// Prepare input file information
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span>        FileInfo inputFile <span style="color:#f92672">=</span> <span style="color:#66d9ef">new</span> FileInfo<span style="color:#f92672">();</span>
</span></span><span style="display:flex;"><span>        inputFile<span style="color:#f92672">.</span><span style="color:#a6e22e">setFilePath</span><span style="color:#f92672">(</span><span style="color:#e6db74">&#34;input.gif&#34;</span><span style="color:#f92672">);</span>          <span style="color:#75715e">// Path to the source GIF in the storage
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span>        inputFile<span style="color:#f92672">.</span><span style="color:#a6e22e">setStorageName</span><span style="color:#f92672">(</span><span style="color:#e6db74">&#34;MyStorage&#34;</span><span style="color:#f92672">);</span>       <span style="color:#75715e">// Optional: name of the storage
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span>
</span></span><span style="display:flex;"><span>        <span style="color:#75715e">// Prepare output file information
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span>        OutputFileInfo outputFile <span style="color:#f92672">=</span> <span style="color:#66d9ef">new</span> OutputFileInfo<span style="color:#f92672">();</span>
</span></span><span style="display:flex;"><span>        outputFile<span style="color:#f92672">.</span><span style="color:#a6e22e">setFilePath</span><span style="color:#f92672">(</span><span style="color:#e6db74">&#34;output.gif&#34;</span><span style="color:#f92672">);</span>        <span style="color:#75715e">// Desired path for the watermarked GIF
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span>        outputFile<span style="color:#f92672">.</span><span style="color:#a6e22e">setStorageName</span><span style="color:#f92672">(</span><span style="color:#e6db74">&#34;MyStorage&#34;</span><span style="color:#f92672">);</span>      <span style="color:#75715e">// Optional: name of the storage
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span>
</span></span><span style="display:flex;"><span>        <span style="color:#75715e">// Configure text watermark options
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span>        TextWatermarkOptions textOptions <span style="color:#f92672">=</span> <span style="color:#66d9ef">new</span> TextWatermarkOptions<span style="color:#f92672">();</span>
</span></span><span style="display:flex;"><span>        textOptions<span style="color:#f92672">.</span><span style="color:#a6e22e">setText</span><span style="color:#f92672">(</span><span style="color:#e6db74">&#34;Sample Watermark&#34;</span><span style="color:#f92672">);</span>
</span></span><span style="display:flex;"><span>        textOptions<span style="color:#f92672">.</span><span style="color:#a6e22e">setFontFamily</span><span style="color:#f92672">(</span><span style="color:#e6db74">&#34;Arial&#34;</span><span style="color:#f92672">);</span>
</span></span><span style="display:flex;"><span>        textOptions<span style="color:#f92672">.</span><span style="color:#a6e22e">setFontSize</span><span style="color:#f92672">(</span>24<span style="color:#f92672">.</span><span style="color:#a6e22e">0</span><span style="color:#f92672">);</span>
</span></span><span style="display:flex;"><span>        textOptions<span style="color:#f92672">.</span><span style="color:#a6e22e">setColor</span><span style="color:#f92672">(</span><span style="color:#e6db74">&#34;#FF0000&#34;</span><span style="color:#f92672">);</span>             <span style="color:#75715e">// Red color in HEX
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span>        textOptions<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>        textOptions<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:#a6e22e">0</span><span style="color:#f92672">);</span>
</span></span><span style="display:flex;"><span>        textOptions<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>        textOptions<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">MIDDLE</span><span style="color:#f92672">);</span>
</span></span><span style="display:flex;"><span>        textOptions<span style="color:#f92672">.</span><span style="color:#a6e22e">setPageRange</span><span style="color:#f92672">(</span><span style="color:#e6db74">&#34;1-&#34;</span><span style="color:#f92672">);</span>               <span style="color:#75715e">// Apply to all frames/pages
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span>
</span></span><span style="display:flex;"><span>        <span style="color:#75715e">// Build the request
</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>
</span></span><span style="display:flex;"><span>        request<span style="color:#f92672">.</span><span style="color:#a6e22e">setFileInfo</span><span style="color:#f92672">(</span>inputFile<span style="color:#f92672">);</span>
</span></span><span style="display:flex;"><span>        request<span style="color:#f92672">.</span><span style="color:#a6e22e">setOutputFileInfo</span><span style="color:#f92672">(</span>outputFile<span style="color:#f92672">);</span>
</span></span><span style="display:flex;"><span>        request<span style="color:#f92672">.</span><span style="color:#a6e22e">setOptions</span><span style="color:#f92672">(</span>textOptions<span style="color:#f92672">);</span>
</span></span><span style="display:flex;"><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>            <span style="color:#75715e">// Execute the request
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></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>ApiException 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 while 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>Note:</strong> This code example demonstrates the core functionality. Before using it in your project, make sure to update any file paths and configuration values to match your actual environment, verify that all required dependencies are properly installed, and test thoroughly in your development environment. If you encounter any issues, please refer to the <a href="https://docs.groupdocs.cloud/watermark/">official documentation</a> or reach out to the <a href="https://forum.groupdocs.cloud/c/watermark/29">support team</a> for assistance.</p>
</blockquote>
<h2 id="overlay-text-on-gif-with-rest-api-using-curl">Overlay Text on GIF with REST API Using cURL</h2>
<p>Below are the cURL commands that perform the same operation from a terminal. They illustrate the full REST workflow: authentication, upload, watermarking, and download.</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">&#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><p>Replace <code>YOUR_ACCESS_TOKEN</code> in the following calls with the token returned above.</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"># 2. Upload the source GIF to storage</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.gif&#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/octet-stream&#34;</span> <span style="color:#ae81ff">\
</span></span></span><span style="display:flex;"><span><span style="color:#ae81ff"></span>     --data-binary @path/to/local/input.gif
</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. Add text overlay to the GIF</span>
</span></span><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.gif&#34;, &#34;storageName&#34;: &#34;MyStorage&#34; },
</span></span></span><span style="display:flex;"><span><span style="color:#e6db74">           &#34;outputFileInfo&#34;: { &#34;filePath&#34;: &#34;output.gif&#34;, &#34;storageName&#34;: &#34;MyStorage&#34; },
</span></span></span><span style="display:flex;"><span><span style="color:#e6db74">           &#34;options&#34;: {
</span></span></span><span style="display:flex;"><span><span style="color:#e6db74">               &#34;text&#34;: &#34;Sample Watermark&#34;,
</span></span></span><span style="display:flex;"><span><span style="color:#e6db74">               &#34;fontFamily&#34;: &#34;Arial&#34;,
</span></span></span><span style="display:flex;"><span><span style="color:#e6db74">               &#34;fontSize&#34;: 24,
</span></span></span><span style="display:flex;"><span><span style="color:#e6db74">               &#34;color&#34;: &#34;#FF0000&#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;horizontalAlignment&#34;: &#34;Center&#34;,
</span></span></span><span style="display:flex;"><span><span style="color:#e6db74">               &#34;verticalAlignment&#34;: &#34;Middle&#34;,
</span></span></span><span style="display:flex;"><span><span style="color:#e6db74">               &#34;pageRange&#34;: &#34;1-&#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">         }&#39;</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. Download the watermarked GIF</span>
</span></span><span style="display:flex;"><span>curl -X GET <span style="color:#e6db74">&#34;https://api.groupdocs.cloud/v2.0/storage/file/output.gif&#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 path/to/local/output.gif
</span></span></code></pre></div><p>For more details on request bodies and response formats, see the <a href="https://docs.groupdocs.cloud/watermark/">official API documentation</a>.</p>
<h2 id="breaking-down-add-text-overlay-to-gif-using-rest-in-java---how-it-works">Breaking Down Add Text Overlay to GIF Using REST in Java - How It Works</h2>
<ol>
<li>
<p><strong>Initialize the API client</strong> - <code>new Configuration(&quot;YOUR_CLIENT_ID&quot;, &quot;YOUR_CLIENT_SECRET&quot;)</code> creates a configuration object that holds your credentials. The <code>WatermarkApi</code> instance uses this configuration to sign every request.</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>Configuration config <span style="color:#f92672">=</span> <span style="color:#66d9ef">new</span> Configuration<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>config<span style="color:#f92672">);</span>
</span></span></code></pre></div></li>
<li>
<p><strong>Specify source and destination files</strong> - <code>FileInfo</code> and <code>OutputFileInfo</code> tell the service where to read the original GIF and where to write the result. Both can reference a custom storage name.</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>FileInfo inputFile <span style="color:#f92672">=</span> <span style="color:#66d9ef">new</span> FileInfo<span style="color:#f92672">();</span>
</span></span><span style="display:flex;"><span>inputFile<span style="color:#f92672">.</span><span style="color:#a6e22e">setFilePath</span><span style="color:#f92672">(</span><span style="color:#e6db74">&#34;input.gif&#34;</span><span style="color:#f92672">);</span>
</span></span><span style="display:flex;"><span>inputFile<span style="color:#f92672">.</span><span style="color:#a6e22e">setStorageName</span><span style="color:#f92672">(</span><span style="color:#e6db74">&#34;MyStorage&#34;</span><span style="color:#f92672">);</span>
</span></span></code></pre></div></li>
<li>
<p><strong>Configure the text watermark</strong> - <code>TextWatermarkOptions</code> holds all visual properties: text, font, size, color, opacity, rotation, and alignment. Setting <code>pageRange</code> to <code>&quot;1-&quot;</code> ensures every frame of the animated GIF receives the overlay.</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>TextWatermarkOptions textOptions <span style="color:#f92672">=</span> <span style="color:#66d9ef">new</span> TextWatermarkOptions<span style="color:#f92672">();</span>
</span></span><span style="display:flex;"><span>textOptions<span style="color:#f92672">.</span><span style="color:#a6e22e">setText</span><span style="color:#f92672">(</span><span style="color:#e6db74">&#34;Sample Watermark&#34;</span><span style="color:#f92672">);</span>
</span></span><span style="display:flex;"><span>textOptions<span style="color:#f92672">.</span><span style="color:#a6e22e">setFontFamily</span><span style="color:#f92672">(</span><span style="color:#e6db74">&#34;Arial&#34;</span><span style="color:#f92672">);</span>
</span></span><span style="display:flex;"><span>textOptions<span style="color:#f92672">.</span><span style="color:#a6e22e">setFontSize</span><span style="color:#f92672">(</span>24<span style="color:#f92672">.</span><span style="color:#a6e22e">0</span><span style="color:#f92672">);</span>
</span></span><span style="display:flex;"><span>textOptions<span style="color:#f92672">.</span><span style="color:#a6e22e">setColor</span><span style="color:#f92672">(</span><span style="color:#e6db74">&#34;#FF0000&#34;</span><span style="color:#f92672">);</span>
</span></span><span style="display:flex;"><span>textOptions<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>textOptions<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>textOptions<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">MIDDLE</span><span style="color:#f92672">);</span>
</span></span><span style="display:flex;"><span>textOptions<span style="color:#f92672">.</span><span style="color:#a6e22e">setPageRange</span><span style="color:#f92672">(</span><span style="color:#e6db74">&#34;1-&#34;</span><span style="color:#f92672">);</span>
</span></span></code></pre></div></li>
<li>
<p><strong>Build and send the request</strong> - <code>AddWatermarkRequest</code> bundles the file info and options. Calling <code>watermarkApi.addWatermark(request)</code> performs the operation on the server and returns the path of the processed file.</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>AddWatermarkRequest request <span style="color:#f92672">=</span> <span style="color:#66d9ef">new</span> AddWatermarkRequest<span style="color:#f92672">();</span>
</span></span><span style="display:flex;"><span>request<span style="color:#f92672">.</span><span style="color:#a6e22e">setFileInfo</span><span style="color:#f92672">(</span>inputFile<span style="color:#f92672">);</span>
</span></span><span style="display:flex;"><span>request<span style="color:#f92672">.</span><span style="color:#a6e22e">setOutputFileInfo</span><span style="color:#f92672">(</span>outputFile<span style="color:#f92672">);</span>
</span></span><span style="display:flex;"><span>request<span style="color:#f92672">.</span><span style="color:#a6e22e">setOptions</span><span style="color:#f92672">(</span>textOptions<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></code></pre></div></li>
<li>
<p><strong>Handle the response</strong> - The response contains the output file path. In a real application you would typically download the file or pass the path to another service.</p>
</li>
</ol>
<p>For a full list of classes and properties, refer to the <a href="https://reference.groupdocs.cloud/watermark/">API reference</a>.</p>
<h2 id="installing-and-configuring-groupdocswatermark-cloud-sdk-for-java">Installing and Configuring GroupDocs.Watermark Cloud SDK for Java</h2>
<p>Add the Maven dependency to your <code>pom.xml</code> (or the equivalent Gradle entry). This pulls in version 23.8 of the 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-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><strong>Prerequisites</strong></p>
<ul>
<li>Java 8 or higher</li>
<li>An active GroupDocs Cloud account</li>
<li>Client ID and Client Secret (available in the GroupDocs Cloud dashboard)</li>
</ul>
<p><strong>Configuration Example</strong></p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-java" data-lang="java"><span style="display:flex;"><span>Configuration config <span style="color:#f92672">=</span> <span style="color:#66d9ef">new</span> Configuration<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></code></pre></div><p>Download the latest JARs from the <a href="https://releases.groupdocs.cloud/watermark/java/">download page</a>. For production use, apply a valid license obtained from the <a href="https://purchase.groupdocs.cloud/temporary-license/">temporary license page</a>.</p>
<h2 id="conclusion">Conclusion</h2>
<p>Adding text Overlay to GIF using REST in Java becomes a repeatable, server‑side operation with the help of the <a href="https://products.groupdocs.cloud/watermark/java/">GroupDocs.Watermark Cloud SDK for Java</a>. The SDK abstracts the complexities of handling animated frames, letting you focus on the content of your subtitles or promotional messages. After integrating the sample code or the cURL workflow, you can fine‑tune font styles, colors, and opacity to match your brand. Remember to secure a production license pricing details are available on the product page, and a temporary license can be obtained for testing via the <a href="https://purchase.groupdocs.cloud/temporary-license/">temporary license page</a>. Happy coding!</p>
<h2 id="faqs">FAQs</h2>
<ul>
<li>
<p><strong>How do I add text Overlay to GIF using REST in Java when the text changes per user?</strong><br>
Build the <code>TextWatermarkOptions</code> object at runtime with the user‑specific string, then invoke the same <code>addWatermark</code> call. The API processes each request independently, so dynamic content is fully supported.</p>
</li>
<li>
<p><strong>Can I add subtitles to an animated GIF without affecting its animation speed?</strong><br>
Yes. The watermark is applied to each frame while preserving the original frame delay. Just set <code>pageRange</code> to <code>&quot;1-&quot;</code> so every frame receives the same overlay.</p>
</li>
<li>
<p><strong>What formats are supported for the overlay text color?</strong><br>
The SDK accepts HEX color codes (e.g., <code>#FF0000</code>) and standard <a href="https://docs.fileformat.com/web/html/">HTML</a> color names. See the <a href="https://reference.groupdocs.cloud/watermark/">API reference</a> for the complete list.</p>
</li>
<li>
<p><strong>Do I need a license for development and testing?</strong><br>
A temporary license is sufficient for evaluation and testing. For production deployments, purchase a full license from the product page and apply it using the SDK&rsquo;s licensing API.</p>
</li>
</ul>
<h2 id="read-more">Read More</h2>
<ul>
<li><a href="https://blog.groupdocs.cloud/watermark/add-overlay-text-on-a-gif-using-rest-api-in-csharp/">Add Overlay Text on a GIF using REST API in C#</a></li>
<li><a href="https://blog.groupdocs.cloud/watermark/add-watermark-to-images-using-java/">Add Watermark to Images using Java</a></li>
<li><a href="https://blog.groupdocs.cloud/watermark/add-watermark-to-word-in-java-watermark-creator/">Add Watermark to Word in Java - Watermark Creator</a></li>
</ul>
]]></content:encoded>
    </item>
    
    <item>
      <title>Password Protect Excel via REST in Java</title>
      <link>https://blog-qa.groupdocs.cloud/merger/password-protect-excel-via-rest-in-java/</link>
      <pubDate>Fri, 04 Sep 2026 12:18:34 +0000</pubDate>
      
      <guid>https://blog-qa.groupdocs.cloud/merger/password-protect-excel-via-rest-in-java/</guid>
      <description>Learn how to password protect an Excel workbook via REST in Java using GroupDocs.Merger Cloud SDK. Step-by-step guide, code sample, and cURL commands included.</description>
      <content:encoded><![CDATA[<p>Concealing sensitive data in Excel workbooks is a common requirement for enterprises that share reports internally or with partners. <a href="https://products.groupdocs.cloud/merger/java/">GroupDocs.Merger Cloud SDK for Java</a> enables developers to add password protection to <a href="https://docs.fileformat.com/spreadsheet/xlsx/">XLSX</a> files through a simple REST API. In this guide you will learn how to implement <strong>password Protect Excel via REST in Java</strong>, see a complete Java example, and run equivalent cURL commands for cloud integration.</p>
<h2 id="prerequisites-and-setup">Prerequisites and Setup</h2>
<p>Before you begin, make sure you have the following:</p>
<ul>
<li>Java 8 or higher installed.</li>
<li>Maven or Gradle for dependency management.</li>
<li>A GroupDocs Cloud account with <strong>client ID</strong> and <strong>client secret</strong>.</li>
<li>Access to the cloud storage where the Excel files will reside.</li>
</ul>
<p>Add the Maven dependency to your <code>pom.xml</code> (or the equivalent Gradle snippet):</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-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-merger-cloud<span style="color:#f92672">&lt;/artifactId&gt;</span>
</span></span><span style="display:flex;"><span>    <span style="color:#f92672">&lt;version&gt;</span>25.11<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><!--[CODE_SNIPPET_END]-->
<p>You can download the latest JARs from the <a href="https://releases.groupdocs.cloud/merger/java/">download page</a>. After adding the dependency, create a configuration object with your credentials:</p>
<!--[CODE_SNIPPET_START]-->
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-java" data-lang="java"><span style="display:flex;"><span>String clientId <span style="color:#f92672">=</span> <span style="color:#e6db74">&#34;YOUR_CLIENT_ID&#34;</span><span style="color:#f92672">;</span>
</span></span><span style="display:flex;"><span>String clientSecret <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>
</span></span><span style="display:flex;"><span>Configuration config <span style="color:#f92672">=</span> <span style="color:#66d9ef">new</span> Configuration<span style="color:#f92672">(</span>clientId<span style="color:#f92672">,</span> clientSecret<span style="color:#f92672">);</span>
</span></span><span style="display:flex;"><span>MergerApi mergerApi <span style="color:#f92672">=</span> <span style="color:#66d9ef">new</span> MergerApi<span style="color:#f92672">(</span>config<span style="color:#f92672">);</span>
</span></span></code></pre></div><!--[CODE_SNIPPET_END]-->
<p>With the client ready, you can move on to the actual password‑protect workflow.</p>
<h2 id="password-protect-excel-via-rest-in-java-step-by-step-walkthrough">Password Protect Excel via REST in Java: Step-by-Step Walkthrough</h2>
<h3 id="step-1-load-the-source-document">Step 1: Load the Source Document</h3>
<p>Define the location of the source XLSX file inside your cloud storage.</p>
<!--[CODE_SNIPPET_START]-->
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-java" data-lang="java"><span style="display:flex;"><span>FileInfo inputFile <span style="color:#f92672">=</span> <span style="color:#66d9ef">new</span> FileInfo<span style="color:#f92672">();</span>
</span></span><span style="display:flex;"><span>inputFile<span style="color:#f92672">.</span><span style="color:#a6e22e">setFilePath</span><span style="color:#f92672">(</span><span style="color:#e6db74">&#34;input.xlsx&#34;</span><span style="color:#f92672">);</span>   <span style="color:#75715e">// source Excel file
</span></span></span></code></pre></div><!--[CODE_SNIPPET_END]-->
<h3 id="step-2-set-the-destination-path">Step 2: Set the Destination Path</h3>
<p>Specify where the protected workbook will be saved.</p>
<!--[CODE_SNIPPET_START]-->
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-java" data-lang="java"><span style="display:flex;"><span>String outputPath <span style="color:#f92672">=</span> <span style="color:#e6db74">&#34;output_protected.xlsx&#34;</span><span style="color:#f92672">;</span> <span style="color:#75715e">// destination file
</span></span></span></code></pre></div><!--[CODE_SNIPPET_END]-->
<h3 id="step-3-configure-password-protection-options">Step 3: Configure Password Protection Options</h3>
<p>Create a <code>ProtectOptions</code> object, attach the file info, output path, and the desired password.</p>
<!--[CODE_SNIPPET_START]-->
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-java" data-lang="java"><span style="display:flex;"><span>ProtectOptions protectOptions <span style="color:#f92672">=</span> <span style="color:#66d9ef">new</span> ProtectOptions<span style="color:#f92672">();</span>
</span></span><span style="display:flex;"><span>protectOptions<span style="color:#f92672">.</span><span style="color:#a6e22e">setFileInfo</span><span style="color:#f92672">(</span>inputFile<span style="color:#f92672">);</span>
</span></span><span style="display:flex;"><span>protectOptions<span style="color:#f92672">.</span><span style="color:#a6e22e">setOutputPath</span><span style="color:#f92672">(</span>outputPath<span style="color:#f92672">);</span>
</span></span><span style="display:flex;"><span>protectOptions<span style="color:#f92672">.</span><span style="color:#a6e22e">setPassword</span><span style="color:#f92672">(</span><span style="color:#e6db74">&#34;MySecretPassword&#34;</span><span style="color:#f92672">);</span> <span style="color:#75715e">// desired password
</span></span></span></code></pre></div><!--[CODE_SNIPPET_END]-->
<h3 id="step-4-build-the-protect-document-request">Step 4: Build the Protect Document Request</h3>
<p>Wrap the options in a <code>ProtectDocumentRequest</code>.</p>
<!--[CODE_SNIPPET_START]-->
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-java" data-lang="java"><span style="display:flex;"><span>ProtectDocumentRequest request <span style="color:#f92672">=</span> <span style="color:#66d9ef">new</span> ProtectDocumentRequest<span style="color:#f92672">(</span>protectOptions<span style="color:#f92672">);</span>
</span></span></code></pre></div><!--[CODE_SNIPPET_END]-->
<h3 id="step-5-execute-the-request-and-handle-the-response">Step 5: Execute the Request and Handle the Response</h3>
<p>Call the API method and process any errors.</p>
<!--[CODE_SNIPPET_START]-->
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-java" data-lang="java"><span style="display:flex;"><span><span style="color:#66d9ef">try</span> <span style="color:#f92672">{</span>
</span></span><span style="display:flex;"><span>    mergerApi<span style="color:#f92672">.</span><span style="color:#a6e22e">protectDocument</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;Excel file has been password protected successfully.&#34;</span><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;Protected file stored at: &#34;</span> <span style="color:#f92672">+</span> outputPath<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>ApiException 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 while protecting the Excel file:&#34;</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;Status Code: &#34;</span> <span style="color:#f92672">+</span> e<span style="color:#f92672">.</span><span style="color:#a6e22e">getCode</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;Message: &#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>For more details on each class, refer to the <a href="https://reference.groupdocs.cloud/merger/">API reference</a>.</p>
<h2 id="full-working-example-for-password-protect-excel-via-rest-in-java">Full Working Example for Password Protect Excel via REST in Java</h2>
<p>The following code demonstrates the complete process from start to finish.</p>
<!--[COMPLETE_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><span style="color:#f92672">import</span> com.groupdocs.merger.cloud.ApiException<span style="color:#f92672">;</span>
</span></span><span style="display:flex;"><span><span style="color:#f92672">import</span> com.groupdocs.merger.cloud.Configuration<span style="color:#f92672">;</span>
</span></span><span style="display:flex;"><span><span style="color:#f92672">import</span> com.groupdocs.merger.cloud.api.MergerApi<span style="color:#f92672">;</span>
</span></span><span style="display:flex;"><span><span style="color:#f92672">import</span> com.groupdocs.merger.cloud.model.FileInfo<span style="color:#f92672">;</span>
</span></span><span style="display:flex;"><span><span style="color:#f92672">import</span> com.groupdocs.merger.cloud.model.ProtectOptions<span style="color:#f92672">;</span>
</span></span><span style="display:flex;"><span><span style="color:#f92672">import</span> com.groupdocs.merger.cloud.model.requests.ProtectDocumentRequest<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">ProtectExcelExample</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">// Replace with your actual client credentials
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span>        String clientId <span style="color:#f92672">=</span> <span style="color:#e6db74">&#34;YOUR_CLIENT_ID&#34;</span><span style="color:#f92672">;</span>
</span></span><span style="display:flex;"><span>        String clientSecret <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>
</span></span><span style="display:flex;"><span>        <span style="color:#75715e">// Initialize the API configuration
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span>        Configuration config <span style="color:#f92672">=</span> <span style="color:#66d9ef">new</span> Configuration<span style="color:#f92672">(</span>clientId<span style="color:#f92672">,</span> clientSecret<span style="color:#f92672">);</span>
</span></span><span style="display:flex;"><span>        MergerApi mergerApi <span style="color:#f92672">=</span> <span style="color:#66d9ef">new</span> MergerApi<span style="color:#f92672">(</span>config<span style="color:#f92672">);</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>        <span style="color:#75715e">// Define input and output file locations (relative to the storage root)
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span>        FileInfo inputFile <span style="color:#f92672">=</span> <span style="color:#66d9ef">new</span> FileInfo<span style="color:#f92672">();</span>
</span></span><span style="display:flex;"><span>        inputFile<span style="color:#f92672">.</span><span style="color:#a6e22e">setFilePath</span><span style="color:#f92672">(</span><span style="color:#e6db74">&#34;input.xlsx&#34;</span><span style="color:#f92672">);</span>          <span style="color:#75715e">// source Excel file
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span>        String outputPath <span style="color:#f92672">=</span> <span style="color:#e6db74">&#34;output_protected.xlsx&#34;</span><span style="color:#f92672">;</span>  <span style="color:#75715e">// destination file
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span>
</span></span><span style="display:flex;"><span>        <span style="color:#75715e">// Set password protection options
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span>        ProtectOptions protectOptions <span style="color:#f92672">=</span> <span style="color:#66d9ef">new</span> ProtectOptions<span style="color:#f92672">();</span>
</span></span><span style="display:flex;"><span>        protectOptions<span style="color:#f92672">.</span><span style="color:#a6e22e">setFileInfo</span><span style="color:#f92672">(</span>inputFile<span style="color:#f92672">);</span>
</span></span><span style="display:flex;"><span>        protectOptions<span style="color:#f92672">.</span><span style="color:#a6e22e">setOutputPath</span><span style="color:#f92672">(</span>outputPath<span style="color:#f92672">);</span>
</span></span><span style="display:flex;"><span>        protectOptions<span style="color:#f92672">.</span><span style="color:#a6e22e">setPassword</span><span style="color:#f92672">(</span><span style="color:#e6db74">&#34;MySecretPassword&#34;</span><span style="color:#f92672">);</span> <span style="color:#75715e">// desired password
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span>
</span></span><span style="display:flex;"><span>        <span style="color:#75715e">// Build the request
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span>        ProtectDocumentRequest request <span style="color:#f92672">=</span> <span style="color:#66d9ef">new</span> ProtectDocumentRequest<span style="color:#f92672">(</span>protectOptions<span style="color:#f92672">);</span>
</span></span><span style="display:flex;"><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>            <span style="color:#75715e">// Execute the password protection operation
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span>            mergerApi<span style="color:#f92672">.</span><span style="color:#a6e22e">protectDocument</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;Excel file has been password protected successfully.&#34;</span><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;Protected file stored at: &#34;</span> <span style="color:#f92672">+</span> outputPath<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>ApiException 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 while protecting the Excel file:&#34;</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;Status Code: &#34;</span> <span style="color:#f92672">+</span> e<span style="color:#f92672">.</span><span style="color:#a6e22e">getCode</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;Message: &#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><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><!--[COMPLETE_CODE_SNIPPET_END]-->
<blockquote>
<p><strong>Note:</strong> This code example demonstrates the core functionality. Before using it in your project, make sure to update the file paths (<code>input.xlsx</code>, <code>output_protected.xlsx</code>) to match your actual file locations, verify that all required dependencies are properly installed, and test thoroughly in your development environment. If you encounter any issues, please refer to the <a href="https://docs.groupdocs.cloud/merger/">official documentation</a> or reach out to the <a href="https://forum.groupdocs.cloud/c/merger/18">support team</a> for assistance.</p>
</blockquote>
<h2 id="protect-excel-workbook-via-rest-api-using-curl">Protect Excel Workbook via REST API Using cURL</h2>
<p>Below is a set of cURL commands that perform the same password‑protect operation directly against the REST endpoints.</p>
<p><strong>1. Authenticate and obtain an access token</strong></p>
<!--[CODE_SNIPPET_START]-->
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>curl -X POST <span style="color:#e6db74">&#34;https://api.groupdocs.cloud/v2.0/auth/token&#34;</span> <span style="color:#ae81ff">\
</span></span></span><span style="display:flex;"><span><span style="color:#ae81ff"></span>     -H <span style="color:#e6db74">&#34;Content-Type: application/json&#34;</span> <span style="color:#ae81ff">\
</span></span></span><span style="display:flex;"><span><span style="color:#ae81ff"></span>     -d <span style="color:#e6db74">&#39;{
</span></span></span><span style="display:flex;"><span><span style="color:#e6db74">           &#34;client_id&#34;: &#34;YOUR_CLIENT_ID&#34;,
</span></span></span><span style="display:flex;"><span><span style="color:#e6db74">           &#34;client_secret&#34;: &#34;YOUR_CLIENT_SECRET&#34;
</span></span></span><span style="display:flex;"><span><span style="color:#e6db74">         }&#39;</span>
</span></span></code></pre></div><!--[CODE_SNIPPET_END]-->
<p>The response contains an <code>access_token</code> that you will use in subsequent calls.</p>
<p><strong>2. Upload the source XLSX file</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 PUT <span style="color:#e6db74">&#34;https://api.groupdocs.cloud/v2.0/storage/file/input.xlsx&#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/octet-stream&#34;</span> <span style="color:#ae81ff">\
</span></span></span><span style="display:flex;"><span><span style="color:#ae81ff"></span>     --data-binary @input.xlsx
</span></span></code></pre></div><!--[CODE_SNIPPET_END]-->
<p><strong>3. Request password protection</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/merger/protect&#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.xlsx&#34; },
</span></span></span><span style="display:flex;"><span><span style="color:#e6db74">           &#34;outputPath&#34;: &#34;output_protected.xlsx&#34;,
</span></span></span><span style="display:flex;"><span><span style="color:#e6db74">           &#34;password&#34;: &#34;MySecretPassword&#34;
</span></span></span><span style="display:flex;"><span><span style="color:#e6db74">         }&#39;</span>
</span></span></code></pre></div><!--[CODE_SNIPPET_END]-->
<p><strong>4. Download the protected workbook</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 GET <span style="color:#e6db74">&#34;https://api.groupdocs.cloud/v2.0/storage/file/output_protected.xlsx&#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_protected.xlsx
</span></span></code></pre></div><!--[CODE_SNIPPET_END]-->
<p>These commands let you integrate the protection workflow into scripts or CI pipelines. For more details, see the <a href="https://docs.groupdocs.cloud/merger/">official API documentation</a>.</p>
<h2 id="conclusion">Conclusion</h2>
<p>Implementing <strong>password Protect Excel via REST in Java</strong> is straightforward with the GroupDocs.Merger Cloud SDK for Java. By following the steps above you can secure Excel workbooks, automate the process in server‑side applications, and keep sensitive data safe. Remember to acquire a proper license for production use; pricing information is available on the product page and you can start with a <a href="https://purchase.groupdocs.cloud/temporary-license/">temporary license</a> to evaluate the library. Happy coding!</p>
<h2 id="faqs">FAQs</h2>
<ul>
<li>
<p><strong>How does password Protect Excel via REST in Java differ from local encryption?</strong><br>
The cloud API performs encryption on the server, so you don&rsquo;t need to manage cryptographic libraries locally. The SDK handles request construction and response parsing, simplifying integration.</p>
</li>
<li>
<p><strong>Is it possible to set additional protection options, such as read‑only mode?</strong><br>
The current <code>ProtectOptions</code> class focuses on password protection. For more advanced security features, consult the <a href="https://reference.groupdocs.cloud/merger/">API reference</a> for any newer parameters.</p>
</li>
<li>
<p><strong>What file formats are supported for password protection?</strong><br>
The Merger API currently supports XLSX, <a href="https://docs.fileformat.com/word-processing/docx/">DOCX</a>, <a href="https://docs.fileformat.com/presentation/pptx/">PPTX</a>, and <a href="https://docs.fileformat.com/pdf">PDF</a> for encryption. Refer to the <a href="https://docs.groupdocs.cloud/merger/">official documentation</a> for the full list.</p>
</li>
<li>
<p><strong>Do I need a license to run the example in a development environment?</strong><br>
Development and testing can be done with a temporary license. Production deployments require a paid license, which you can purchase through the product page.</p>
</li>
</ul>
<h2 id="read-more">Read More</h2>
<ul>
<li><a href="https://blog.groupdocs.cloud/merger/password-protect-powerpoint-files-in-nodejs/">Password-Protect PowerPoint Files in Node.js</a></li>
<li><a href="https://blog.groupdocs.cloud/merger/password-protect-excel-files-using-rest-api-in-python/">Password Protect Excel Files using REST API in Python</a></li>
<li><a href="https://blog.groupdocs.cloud/merger/combine-excel-sheets-in-java-excel-files-merger/">Combine Excel Sheets in Java - Excel Files Merger</a></li>
</ul>
]]></content:encoded>
    </item>
    
  </channel>
</rss>
