<?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/es/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>es</language>
    <lastBuildDate>Wed, 23 Sep 2026 13:04:19 +0000</lastBuildDate><atom:link href="https://blog-qa.groupdocs.cloud/es/tag/java-rest-api/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Agregar superposición de texto a GIF usando REST en Java</title>
      <link>https://blog-qa.groupdocs.cloud/es/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/es/watermark/add-text-overlay-to-gif-using-rest-in-java/</guid>
      <description>Aprenda cómo agregar superposición de texto a GIFs usando GroupDocs.Watermark Cloud SDK for Java via REST API. Incluye código, cURL y pasos de configuración ahora. Comience rápidamente.</description>
      <content:encoded><![CDATA[<p>Agregar subtítulos dinámicos, leyendas o mensajes promocionales a GIFs animados es una necesidad común para aplicaciones web y móviles modernas. <a href="https://products.groupdocs.cloud/watermark/java/">GroupDocs.Watermark Cloud SDK for Java</a> proporciona una potente biblioteca basada en REST que hace que esta tarea sea sencilla. En esta guía aprenderá cómo <strong>agregar una superposición de texto a <a href="https://docs.fileformat.com/image/gif/">GIF</a> usando REST en Java</strong>, ver una implementación completa en Java, explorar comandos cURL equivalentes y comprender los pasos de configuración necesarios.</p>
<h2 id="añadir-superposición-de-texto-a-gif-usando-rest-en-java---código-de-ejemplo">Añadir superposición de texto a GIF usando REST en Java - Código de ejemplo</h2>
<p>Este ejemplo muestra cómo configurar una marca de agua de texto y aplicarla a cada fotograma de un archivo GIF.</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>Nota:</strong> Este ejemplo de código demuestra la funcionalidad principal. Antes de usarlo en su proyecto, asegúrese de actualizar cualquier ruta de archivo y valores de configuración para que coincidan con su entorno real, verifique que todas las dependencias requeridas estén instaladas correctamente y pruebe exhaustivamente en su entorno de desarrollo. Si encuentra algún problema, consulte la <a href="https://docs.groupdocs.cloud/watermark/">documentación oficial</a> o póngase en contacto con el <a href="https://forum.groupdocs.cloud/c/watermark/29">equipo de soporte</a> para obtener ayuda.</p>
</blockquote>
<h2 id="superponer-texto-en-gif-con-api-rest-usando-curl">Superponer texto en GIF con API REST usando cURL</h2>
<p>A continuación se presentan los comandos cURL que realizan la misma operación desde una terminal. Ilustran el flujo de trabajo completo de REST: autenticación, carga, marca de agua y descarga.</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>Reemplace <code>YOUR_ACCESS_TOKEN</code> en las siguientes llamadas con el token devuelto arriba.</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>Para obtener más detalles sobre los cuerpos de solicitud y los formatos de respuesta, consulte la <a href="https://docs.groupdocs.cloud/watermark/">documentación oficial de la API</a>.</p>
<h2 id="desglosando-la-adición-de-superposición-de-texto-a-gif-usando-rest-en-java---cómo-funciona">Desglosando la adición de superposición de texto a GIF usando REST en Java - Cómo funciona</h2>
<ol>
<li><strong>Inicializar el cliente API</strong> - <code>new Configuration(&quot;YOUR_CLIENT_ID&quot;, &quot;YOUR_CLIENT_SECRET&quot;)</code> crea un objeto de configuración que contiene sus credenciales. La instancia <code>WatermarkApi</code> utiliza esta configuración para firmar cada solicitud.</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-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><ol start="2">
<li>
<p><strong>Especifique los archivos de origen y destino</strong> - <code>FileInfo</code> y <code>OutputFileInfo</code> indican al servicio dónde leer el GIF original y dónde escribir el resultado. Ambos pueden hacer referencia a un nombre de almacenamiento personalizado.</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>Configurar la marca de agua de texto</strong> - <code>TextWatermarkOptions</code> contiene todas las propiedades visuales: texto, fuente, tamaño, color, opacidad, rotación y alineación. Configurar <code>pageRange</code> a <code>&quot;1-&quot;</code> garantiza que cada fotograma del GIF animado reciba la superposición.</p>
</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-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><ol start="4">
<li>
<p><strong>Construir y enviar la solicitud</strong> - <code>AddWatermarkRequest</code> agrupa la información del archivo y las opciones. Llamar a <code>watermarkApi.addWatermark(request)</code> realiza la operación en el servidor y devuelve la ruta del archivo procesado.</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>Manejar la respuesta</strong> - La respuesta contiene la ruta del archivo de salida. En una aplicación real, normalmente descargarías el archivo o pasarías la ruta a otro servicio.</p>
</li>
</ol>
<p>Para obtener una lista completa de clases y propiedades, consulte la <a href="https://reference.groupdocs.cloud/watermark/">referencia de API</a>.</p>
<h2 id="instalación-y-configuración-de-groupdocswatermark-cloud-sdk-for-java">Instalación y configuración de GroupDocs.Watermark Cloud SDK for Java</h2>
<p>Agrega la dependencia de Maven a tu <code>pom.xml</code> (o la entrada equivalente de Gradle). Esto incluye la versión 23.8 del 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>Requisitos previos</strong></p>
<ul>
<li>Java 8 o superior</li>
<li>Una cuenta activa de GroupDocs Cloud</li>
<li>Client ID y Client Secret (disponibles en el panel de GroupDocs Cloud)</li>
</ul>
<p><strong>Ejemplo de configuración</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>Descargue los últimos JARs desde la <a href="https://releases.groupdocs.cloud/watermark/java/">página de descarga</a>. Para uso en producción, aplique una licencia válida obtenida de la <a href="https://purchase.groupdocs.cloud/temporary-license/">página de licencia temporal</a>.</p>
<h2 id="conclusión">Conclusión</h2>
<p>Agregar superposición de texto a GIF usando REST en Java se convierte en una operación repetible del lado del servidor con la ayuda del <a href="https://products.groupdocs.cloud/watermark/java/">GroupDocs.Watermark Cloud SDK for Java</a>. El SDK abstrae la complejidad de manejar fotogramas animados, permitiéndote centrarte en el contenido de tus subtítulos o mensajes promocionales. Después de integrar el código de ejemplo o el flujo de trabajo cURL, puedes ajustar finamente los estilos de fuente, colores y opacidad para que coincidan con tu marca. Recuerda asegurar una licencia de producción; los detalles de precios están disponibles en la página del producto, y se puede obtener una licencia temporal para pruebas a través de la <a href="https://purchase.groupdocs.cloud/temporary-license/">página de licencia temporal</a>. ¡Feliz codificación!</p>
<h2 id="preguntas-frecuentes">Preguntas frecuentes</h2>
<ul>
<li>
<p><strong>¿Cómo agrego una superposición de texto a un GIF usando REST en Java cuando el texto cambia por usuario?</strong><br>
Construya el objeto <code>TextWatermarkOptions</code> en tiempo de ejecución con la cadena específica del usuario, luego invoque la misma llamada <code>addWatermark</code>. La API procesa cada solicitud de forma independiente, por lo que el contenido dinámico es totalmente compatible.</p>
</li>
<li>
<p><strong>¿Puedo añadir subtítulos a un GIF animado sin afectar su velocidad de animación?</strong><br>
Sí. La marca de agua se aplica a cada fotograma mientras se conserva el retraso original del fotograma. Simplemente establezca <code>pageRange</code> en <code>&quot;1-&quot;</code> para que cada fotograma reciba la misma superposición.</p>
</li>
<li>
<p><strong>¿Qué formatos son compatibles para el color del texto superpuesto?</strong><br>
El SDK acepta códigos de color HEX (p. ej., <code>#FF0000</code>) y nombres de color estándar de <a href="https://docs.fileformat.com/web/html/">HTML</a>. Consulte la <a href="https://reference.groupdocs.cloud/watermark/">referencia de API</a> para la lista completa.</p>
</li>
<li>
<p><strong>¿Necesito una licencia para desarrollo y pruebas?</strong><br>
Una licencia temporal es suficiente para la evaluación y pruebas. Para implementaciones en producción, compre una licencia completa en la página del producto y aplíquela mediante la API de licencias del SDK.</p>
</li>
</ul>
<h2 id="read-more">Read More</h2>
<ul>
<li><a href="https://blog.groupdocs.cloud/es/watermark/add-overlay-text-on-a-gif-using-rest-api-in-csharp/">Añadir texto superpuesto a un GIF usando la API REST en C#</a></li>
<li><a href="https://blog.groupdocs.cloud/es/watermark/add-watermark-to-images-using-java/">Añadir marca de agua a imágenes usando Java</a></li>
<li><a href="https://blog.groupdocs.cloud/es/watermark/add-watermark-to-word-in-java-watermark-creator/">Añadir marca de agua a Word en Java - Creador de marcas de agua</a></li>
</ul>
]]></content:encoded>
    </item>
    
    <item>
      <title>Proteger con contraseña Excel mediante REST en Java</title>
      <link>https://blog-qa.groupdocs.cloud/es/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/es/merger/password-protect-excel-via-rest-in-java/</guid>
      <description>Aprenda cómo proteger con contraseña un libro de Excel mediante REST en Java usando GroupDocs.Merger Cloud SDK. Guía paso a paso, ejemplo de código y comandos cURL incluidos.</description>
      <content:encoded><![CDATA[<p>Ocultar datos sensibles en libros de Excel es un requisito común para las empresas que comparten informes internamente o con socios. <a href="https://products.groupdocs.cloud/merger/java/">GroupDocs.Merger Cloud SDK for Java</a> permite a los desarrolladores agregar protección con contraseña a archivos <a href="https://docs.fileformat.com/spreadsheet/xlsx/">XLSX</a> mediante una API REST sencilla. En esta guía aprenderá cómo implementar <strong>proteger con contraseña Excel mediante REST en Java</strong>, ver un ejemplo completo en Java y ejecutar comandos cURL equivalentes para la integración en la nube.</p>
<h2 id="requisitos-y-configuración">Requisitos y configuración</h2>
<p>Antes de comenzar, asegúrese de tener lo siguiente:</p>
<ul>
<li>Java 8 o superior instalado.</li>
<li>Maven o Gradle para la gestión de dependencias.</li>
<li>Una cuenta de GroupDocs Cloud con <strong>client ID</strong> y <strong>client secret</strong>.</li>
<li>Acceso al almacenamiento en la nube donde residirán los archivos Excel.</li>
</ul>
<p>Agrega la dependencia de Maven a tu <code>pom.xml</code> (o el fragmento equivalente de Gradle):</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-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><p>Puedes descargar los últimos JARs desde la <a href="https://releases.groupdocs.cloud/merger/java/">página de descarga</a>. Después de agregar la dependencia, crea un objeto de configuración con tus credenciales:</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>Con el cliente listo, puedes pasar al flujo de trabajo real de protección con contraseña.</p>
<h2 id="proteger-con-contraseña-excel-mediante-rest-en-java-guía-paso-a-paso">Proteger con contraseña Excel mediante REST en Java: Guía paso a paso</h2>
<h3 id="paso-1-cargar-el-documento-de-origen">Paso 1: Cargar el documento de origen</h3>
<p>Defina la ubicación del archivo XLSX de origen en su almacenamiento en la nube.</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="paso-2-establecer-la-ruta-de-destino">Paso 2: Establecer la ruta de destino</h3>
<p>Especifique dónde se guardará el libro de trabajo protegido.</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="paso-3-configurar-opciones-de-protección-con-contraseña">Paso 3: Configurar opciones de protección con contraseña</h3>
<p>Cree un objeto <code>ProtectOptions</code>, adjunte la información del archivo, la ruta de salida y la contraseña deseada.</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>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><h3 id="paso-4-construir-la-solicitud-de-protección-del-documento">Paso 4: Construir la solicitud de protección del documento</h3>
<p>Envuelva las opciones en un <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="paso-5-ejecutar-la-solicitud-y-manejar-la-respuesta">Paso 5: Ejecutar la solicitud y manejar la respuesta</h3>
<p>Llame al método de la API y procese cualquier error.</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:#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><p>Para obtener más detalles sobre cada clase, consulte la <a href="https://reference.groupdocs.cloud/merger/">referencia de API</a>.</p>
<h2 id="ejemplo-completo-y-funcional-para-proteger-con-contraseña-excel-mediante-rest-en-java">Ejemplo completo y funcional para proteger con contraseña Excel mediante REST en Java</h2>
<p>El siguiente código demuestra el proceso completo de principio a fin.</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.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><blockquote>
<p><strong>Nota:</strong> Este ejemplo de código muestra la funcionalidad principal. Antes de usarlo en su proyecto, asegúrese de actualizar las rutas de archivo (<code>input.xlsx</code>, <code>output_protected.xlsx</code>) para que coincidan con sus ubicaciones reales, verifique que todas las dependencias requeridas estén instaladas correctamente y pruebe exhaustivamente en su entorno de desarrollo. Si encuentra algún problema, consulte la <a href="https://docs.groupdocs.cloud/merger/">documentación oficial</a> o comuníquese con el <a href="https://forum.groupdocs.cloud/c/merger/18">equipo de soporte</a> para obtener ayuda.</p>
</blockquote>
<h2 id="proteger-libro-de-excel-mediante-api-rest-usando-curl">Proteger libro de Excel mediante API REST usando cURL</h2>
<p>A continuación se muestra un conjunto de comandos cURL que realizan la misma operación de protección con contraseña directamente contra los puntos finales REST.</p>
<p><strong>1. Autenticar y obtener un token de acceso</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-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><p>La respuesta contiene un <code>access_token</code> que usarás en llamadas posteriores.</p>
<p><strong>2. Cargar el archivo XLSX de origen</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. Solicitar protección con contraseña</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-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><p><strong>4. Descargar el libro de trabajo protegido</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>Estos comandos le permiten integrar el flujo de trabajo de protección en scripts o canalizaciones CI. Para obtener más detalles, consulte la <a href="https://docs.groupdocs.cloud/merger/">documentación oficial de la API</a>.</p>
<h2 id="conclusión">Conclusión</h2>
<p>Implementar <strong>proteger con contraseña Excel mediante REST en Java</strong> es sencillo con el GroupDocs.Merger Cloud SDK for Java. Al seguir los pasos anteriores, puedes proteger los libros de Excel, automatizar el proceso en aplicaciones del lado del servidor y mantener los datos sensibles seguros. Recuerda obtener una licencia adecuada para uso en producción; la información de precios está disponible en la página del producto y puedes comenzar con una <a href="https://purchase.groupdocs.cloud/temporary-license/">licencia temporal</a> para evaluar la biblioteca. ¡Feliz codificación!</p>
<h2 id="preguntas-frecuentes">Preguntas frecuentes</h2>
<ul>
<li>
<p><strong>¿Cómo difiere la protección con contraseña de Excel mediante REST en Java del cifrado local?</strong><br>
La API en la nube realiza el cifrado en el servidor, por lo que no necesitas gestionar bibliotecas criptográficas localmente. El SDK maneja la construcción de la solicitud y el análisis de la respuesta, simplificando la integración.</p>
</li>
<li>
<p><strong>¿Es posible establecer opciones de protección adicionales, como el modo de solo lectura?</strong><br>
La clase <code>ProtectOptions</code> actual se centra en la protección mediante contraseña. Para funciones de seguridad más avanzadas, consulte la <a href="https://reference.groupdocs.cloud/merger/">referencia de API</a> para ver si hay parámetros más recientes.</p>
</li>
<li>
<p><strong>¿Qué formatos de archivo son compatibles con la protección por contraseña?</strong><br>
La Merger API actualmente admite XLSX, <a href="https://docs.fileformat.com/word-processing/docx/">DOCX</a>, <a href="https://docs.fileformat.com/presentation/pptx/">PPTX</a>, y <a href="https://docs.fileformat.com/pdf">PDF</a> para cifrado. Consulte la <a href="https://docs.groupdocs.cloud/merger/">documentación oficial</a> para obtener la lista completa.</p>
</li>
<li>
<p><strong>¿Necesito una licencia para ejecutar el ejemplo en un entorno de desarrollo?</strong><br>
El desarrollo y las pruebas pueden realizarse con una licencia temporal. Las implementaciones en producción requieren una licencia de pago, que puedes adquirir a través de la página del producto.</p>
</li>
</ul>
<h2 id="leer-más">Leer más</h2>
<ul>
<li><a href="https://blog.groupdocs.cloud/es/merger/password-protect-powerpoint-files-in-nodejs/">Proteger con contraseña archivos PowerPoint en Node.js</a></li>
<li><a href="https://blog.groupdocs.cloud/es/merger/password-protect-excel-files-using-rest-api-in-python/">Proteger con contraseña archivos Excel usando la API REST en Python</a></li>
<li><a href="https://blog.groupdocs.cloud/es/merger/combine-excel-sheets-in-java-excel-files-merger/">Combinar hojas de Excel en Java - Fusionador de archivos Excel</a></li>
</ul>
]]></content:encoded>
    </item>
    
  </channel>
</rss>
