Cómo aplicar marcas de agua personalizadas a PDFs en Java
IronPDF permite a los desarrolladores Java aplicar marcas de agua personalizadas a documentos PDF usando cadenas HTML con soporte completo de CSS, permitiendo un control total sobre el texto, las imágenes, la opacidad, la rotación y el posicionamiento para propósitos de marca o seguridad.
Inicio rápido: aplicar marcas de agua a archivos PDF en Java
- Agrega IronPDF a tu proyecto Maven o Gradle y establece tu clave de licencia
- Cargue su documento PDF usando
PdfDocument.fromFile() - Crea una cadena HTML para tu marca de agua (texto, imagen o ambos)
- Aplique la marca de agua usando
pdf.applyWatermark(watermarkHtml) - Guarde el PDF con marca de agua con
pdf.saveAs()
```java :title=QuickStartWatermark.java //:path=/static-assets/pdf/content-code-examples/how-to/custom-watermark/quickstart.java PdfDocument pdf = PdfDocument.fromFile(Paths.get("ejemplo.pdf")); pdf.applyWatermark(""); pdf.saveAs("filigrana.pdf");
El marcaje de agua protege los documentos PDF y comunica la propiedad o el estado del documento. Los casos de uso comunes incluyen marcar borradores como "Confidencial," incrustar un logotipo de la compañía en cada página, o indicar que un documento está pendiente de aprobación. IronPDF sigue un enfoque de HTML y CSS, lo que significa que cualquier estilo que puedas expresar en un navegador (fuentes personalizadas, opacidad, rotación, posicionamiento absoluto) funciona de manera idéntica en una marca de agua.
Esta guía cubre `text` marcas de agua, `image` marcas de agua, controles de opacidad y posición, y estampado avanzado con [`TextStamper`](https://ironpdf.com/java/how-to/stamp-text-image-pdf/) y [`ImageStamper`](https://ironpdf.com/java/how-to/stamp-text-image-pdf/). Para técnicas relacionadas de manipulación de PDF, consulta la guía sobre [cómo crear PDFs desde HTML en Java](https://ironpdf.com/java/how-to/java-create-pdf-tutorial/) o el resumen de [cómo añadir fondos y primeros planos](https://ironpdf.com/java/how-to/background-foreground/).
<div class="hsg-featured-snippet">
<h3>Cómo aplicar marcas de agua en Java</h3>
<ol>
<li><a class="js-modal-open" data-modal-id="download-modal" href="#download-modal">Descargue la biblioteca Java para aplicar marcas de agua a PDF</a></li>
<li>Renderizar un nuevo PDF o cargar uno existente</li>
<li>Configure la cadena HTML o imagen que se usará como marca de agua</li>
<li>Aplique la marca de agua usando el método apropiado</li>
<li>Ajuste los parámetros de opacidad, rotación y ubicación según sea necesario</li>
</ol>
</div>
## ¿Cómo aplicar una marca de agua de texto a un PDF?
Use el método `applyWatermark` para sellar texto en cada página de un documento PDF. El método acepta una cadena HTML, por lo que puedes estilizar la marca de agua con cualquier propiedad CSS: familia de fuentes, tamaño, color, espaciado de letras o sombra de texto. El ejemplo a continuación marca un documento como "Confidencial" en rojo, lo que cubre el escenario más común de seguimiento de auditoría y control de acceso.
```java
//:path=/static-assets/pdf/content-code-examples/how-to/custom-watermark/text-watermark.java
import java.io.IOException;
import java.nio.file.Paths;
import com.ironsoftware.ironpdf.License;
import com.ironsoftware.ironpdf.PdfDocument;
public class Main {
public static void main(String[] args) throws IOException {
// Set the license key for IronPDF
License.setLicenseKey("IRONPDF-MYLICENSE-KEY-1EF01");
// Load an existing PDF document from file
PdfDocument pdf = PdfDocument.fromFile(Paths.get("ejemplo.pdf"));
// HTML string defines the watermark appearance via CSS
String watermarkHtml = "<h1 style='color:red;'>Confidential</h1>";
// Apply the watermark to every page
pdf.applyWatermark(watermarkHtml);
// Save the watermarked PDF to a new file
pdf.saveAs("text_watermark.pdf");
}
}
La llamada applyWatermark agrega la marca de agua a todas las páginas en una sola operación. Por defecto, la marca de agua se renderiza a un 50% de opacidad y está centrada en cada página. Para activar todas las funciones de la biblioteca, configura tu clave de licencia de IronPDF antes de realizar cualquier operación de PDF. El HTML pasado a applyWatermark acepta cualquier elemento HTML válido, por lo que puede incluir <div>, <span>, o etiquetas <p> estiladas para marcas de agua de varias líneas.
¿Qué aspecto tiene la marca de agua de texto?
El archivo de salida text_watermark.pdf muestra la palabra Confidencial en rojo, centrado horizontal y verticalmente en cada página. La opacidad por defecto del 50% mantiene el contenido del documento legible bajo la marca de agua. Para documentos de múltiples páginas, cada página recibe la misma marca sin necesidad de un bucle por página.
transform: rotate(-45deg) scale(1.5).Para técnicas más profundas de renderización de HTML aplicables a marcas de agua, consulta el tutorial de conversión de HTML a PDF.
¿Cómo puedo añadir una marca de agua de imagen a un PDF?
Las marcas de agua de imagen funcionan a través del mismo método applyWatermark envolviendo una etiqueta <img> en la cadena HTML. Los archivos PNG con fondos transparentes son ideales para marcas de agua de logotipo porque la transparencia se conserva cuando la imagen se compone en la página del PDF. Los formatos JPEG, GIF, SVG, y BMP también son compatibles.
//:path=/static-assets/pdf/content-code-examples/how-to/custom-watermark/image-watermark.java
import java.io.IOException;
import java.nio.file.Paths;
import com.ironsoftware.ironpdf.License;
import com.ironsoftware.ironpdf.PdfDocument;
public class Main {
public static void main(String[] args) throws IOException {
// Set the license key for IronPDF
License.setLicenseKey("IRONPDF-MYLICENSE-KEY-1EF01");
// Load an existing PDF document from file
PdfDocument pdf = PdfDocument.fromFile(Paths.get("ejemplo.pdf"));
// Reference the image file path relative to the runtime working directory
String watermarkHtml = "<img src='logo.png' style='width:100px;'/>";
// Apply the image watermark to all pages
pdf.applyWatermark(watermarkHtml);
// Save the result
pdf.saveAs("image_watermark.pdf");
}
}
//:path=/static-assets/pdf/content-code-examples/how-to/custom-watermark/image-watermark.java
import java.io.IOException;
import java.nio.file.Paths;
import com.ironsoftware.ironpdf.License;
import com.ironsoftware.ironpdf.PdfDocument;
public class Main {
public static void main(String[] args) throws IOException {
// Set the license key for IronPDF
License.setLicenseKey("IRONPDF-MYLICENSE-KEY-1EF01");
// Load an existing PDF document from file
PdfDocument pdf = PdfDocument.fromFile(Paths.get("ejemplo.pdf"));
// Reference the image file path relative to the runtime working directory
String watermarkHtml = "<img src='logo.png' style='width:100px;'/>";
// Apply the image watermark to all pages
pdf.applyWatermark(watermarkHtml);
// Save the result
pdf.saveAs("image_watermark.pdf");
}
}
Las propiedades CSS en la etiqueta <img> controlan el tamaño, la posición y la transparencia:
//:path=/static-assets/pdf/content-code-examples/how-to/custom-watermark/image-watermark-advanced.java
// Apply a 150px logo at 50% opacity, rotated 45 degrees counterclockwise
String advancedWatermarkHtml =
"<img src='logo.png' style='width:150px; opacity:0.5; transform:rotate(-45deg);'/>";
//:path=/static-assets/pdf/content-code-examples/how-to/custom-watermark/image-watermark-advanced.java
// Apply a 150px logo at 50% opacity, rotated 45 degrees counterclockwise
String advancedWatermarkHtml =
"<img src='logo.png' style='width:150px; opacity:0.5; transform:rotate(-45deg);'/>";
La ruta de la imagen debe ser accesible desde el directorio de trabajo del JVM en tiempo de ejecución. Para implementaciones en servidores, use rutas absolutas o incruste la imagen como un URI de datos Base64 dentro del atributo src para evitar problemas de resolución de rutas.
¿Qué formatos de archivo admiten las marcas de agua de imagen?
IronPDF soporta formatos de imagen PNG, JPEG, GIF, SVG, y BMP en marcas de agua. PNG con fondo transparente produce los resultados más limpios para marcas de agua de logotipo. El archivo de salida image_watermark.pdf muestra la imagen a 100 píxeles de ancho, centrada en cada página al 50% de opacidad predeterminada. Para extraer imágenes de un PDF existente para usarlas en otra marca de agua, consulta la guía sobre extracción de imágenes de PDFs.
¿Cómo controlo la opacidad y alineación de la marca de agua?
El método applyWatermark acepta parámetros de opacidad y alineación después de la cadena HTML. La opacidad es un entero de 0 (totalmente transparente) a 100 (totalmente opaco). Los valores entre 20 y 40 funcionan bien para la mayoría de los documentos, manteniendo visible la marca de agua sin oscurecer el texto del cuerpo. Los enumerados VerticalAlignment y HorizontalAlignment controlan qué esquina o borde de la página apunta la marca de agua.
//:path=/static-assets/pdf/content-code-examples/how-to/custom-watermark/watermark-opacity-alignment.java
import java.io.IOException;
import java.nio.file.Paths;
import com.ironsoftware.ironpdf.License;
import com.ironsoftware.ironpdf.PdfDocument;
import com.ironsoftware.ironpdf.stamp.HorizontalAlignment;
import com.ironsoftware.ironpdf.stamp.VerticalAlignment;
public class Main {
public static void main(String[] args) throws IOException {
// Set the license key for IronPDF
License.setLicenseKey("IRONPDF-MYLICENSE-KEY-1EF01");
// Load an existing PDF document from file
PdfDocument pdf = PdfDocument.fromFile(Paths.get("ejemplo.pdf"));
// Define the watermark HTML
String watermarkHtml = "<h1 style='color:blue;'>Confidential</h1>";
// Apply at 30% opacity, anchored to the top-left corner of each page
pdf.applyWatermark(watermarkHtml, 30, VerticalAlignment.TOP, HorizontalAlignment.LEFT);
// Save the result
pdf.saveAs("watermark_opacity_alignment.pdf");
}
}
//:path=/static-assets/pdf/content-code-examples/how-to/custom-watermark/watermark-opacity-alignment.java
import java.io.IOException;
import java.nio.file.Paths;
import com.ironsoftware.ironpdf.License;
import com.ironsoftware.ironpdf.PdfDocument;
import com.ironsoftware.ironpdf.stamp.HorizontalAlignment;
import com.ironsoftware.ironpdf.stamp.VerticalAlignment;
public class Main {
public static void main(String[] args) throws IOException {
// Set the license key for IronPDF
License.setLicenseKey("IRONPDF-MYLICENSE-KEY-1EF01");
// Load an existing PDF document from file
PdfDocument pdf = PdfDocument.fromFile(Paths.get("ejemplo.pdf"));
// Define the watermark HTML
String watermarkHtml = "<h1 style='color:blue;'>Confidential</h1>";
// Apply at 30% opacity, anchored to the top-left corner of each page
pdf.applyWatermark(watermarkHtml, 30, VerticalAlignment.TOP, HorizontalAlignment.LEFT);
// Save the result
pdf.saveAs("watermark_opacity_alignment.pdf");
}
}
Combinar los tres parámetros opcionales da nueve opciones de posicionamiento distintas, una para cada intersección de alineación vertical y horizontal. Para casos de uso que requieran marcas de agua en múltiples posiciones en la misma página, o marcas de agua aplicadas solo a un rango específico de páginas, las clases de estampador proporcionan un control más fino. Consulta la guía de fondos y primeros planos para técnicas de composición por capas.
¿Qué opciones de alineación hay disponibles?
El método applyWatermark admite las siguientes constantes de alineación:
Alineación vertical (VerticalAlignment):
TOP- marca de agua anclada al borde superiorMIDDLE- marca de agua centrada verticalmenteBOTTOM- marca de agua anclada al borde inferior
Alineación horizontal (HorizontalAlignment):
LEFT- marca de agua anclada al borde izquierdoCENTER- marca de agua centrada horizontalmenteRIGHT- marca de agua anclada al borde derecho
applyWatermark(html) sin parámetros adicionales es equivalente a pasar opacidad 50, VerticalAlignment.MIDDLE, HorizontalAlignment.CENTER.Combina cualquier valor vertical con cualquier valor horizontal para un control preciso. Para documentos que requieren múltiples sellos superpuestos, como un logo en la esquina superior derecha y un aviso de borrador centrado diagonalmente, aplique cada sello como una llamada applyWatermark separada. Para superposiciones basadas en anotaciones, consulta el ejemplo de anotaciones.
¿Cómo aplico marcas de agua avanzadas con TextStamper e ImageStamper?
El método applyWatermark maneja la mayoría de las necesidades de marca de agua, pero las clases TextStamper y ImageStamper ofrecen control programático cuando se requieren coordenadas de píxel exactas, orientación por rangos de página o generación dinámica de texto. Ambas clases pertenecen al paquete com.ironsoftware.ironpdf.stamp.
TextStamper acepta un valor de cadena y expone propiedades para fuente, tamaño de fuente, color de fuente, alineación horizontal y vertical, y opacidad. También soporta rotación como un entero (grados). ImageStamper acepta una ruta de archivo o un arreglo de bytes para la imagen y expone los mismos controles de alineación y opacidad que TextStamper.
La ventaja clave de las clases de estampador sobre applyWatermark es la capacidad de apuntar a páginas específicas. Pase una lista de números de página indexados desde cero al método stamp para aplicar la marca de agua solo a las páginas que la necesitan, por ejemplo, sellar solo la portada de un informe o la página de aprobación final de un contrato.
//:path=/static-assets/pdf/content-code-examples/how-to/custom-watermark/text-stamper.java
import java.io.IOException;
import java.nio.file.Paths;
import java.util.Arrays;
import com.ironsoftware.ironpdf.License;
import com.ironsoftware.ironpdf.PdfDocument;
import com.ironsoftware.ironpdf.stamp.HorizontalAlignment;
import com.ironsoftware.ironpdf.stamp.TextStamper;
import com.ironsoftware.ironpdf.stamp.VerticalAlignment;
public class Main {
public static void main(String[] args) throws IOException {
// Set the license key for IronPDF
License.setLicenseKey("IRONPDF-MYLICENSE-KEY-1EF01");
// Load the target PDF document
PdfDocument pdf = PdfDocument.fromFile(Paths.get("ejemplo.pdf"));
// Configure a TextStamper with custom font, rotation, and opacity
TextStamper stamper = new TextStamper();
stamper.setText("DRAFT");
stamper.setFontSize(72);
stamper.setFontColor("gray");
stamper.setOpacity(40);
stamper.setRotation(45);
stamper.setVerticalAlignment(VerticalAlignment.MIDDLE);
stamper.setHorizontalAlignment(HorizontalAlignment.CENTER);
// Apply the stamp only to pages 0 and 1 (zero-indexed)
pdf.stamp(stamper, Arrays.asList(0, 1));
// Save the stamped PDF
pdf.saveAs("text_stamped.pdf");
}
}
//:path=/static-assets/pdf/content-code-examples/how-to/custom-watermark/text-stamper.java
import java.io.IOException;
import java.nio.file.Paths;
import java.util.Arrays;
import com.ironsoftware.ironpdf.License;
import com.ironsoftware.ironpdf.PdfDocument;
import com.ironsoftware.ironpdf.stamp.HorizontalAlignment;
import com.ironsoftware.ironpdf.stamp.TextStamper;
import com.ironsoftware.ironpdf.stamp.VerticalAlignment;
public class Main {
public static void main(String[] args) throws IOException {
// Set the license key for IronPDF
License.setLicenseKey("IRONPDF-MYLICENSE-KEY-1EF01");
// Load the target PDF document
PdfDocument pdf = PdfDocument.fromFile(Paths.get("ejemplo.pdf"));
// Configure a TextStamper with custom font, rotation, and opacity
TextStamper stamper = new TextStamper();
stamper.setText("DRAFT");
stamper.setFontSize(72);
stamper.setFontColor("gray");
stamper.setOpacity(40);
stamper.setRotation(45);
stamper.setVerticalAlignment(VerticalAlignment.MIDDLE);
stamper.setHorizontalAlignment(HorizontalAlignment.CENTER);
// Apply the stamp only to pages 0 and 1 (zero-indexed)
pdf.stamp(stamper, Arrays.asList(0, 1));
// Save the stamped PDF
pdf.saveAs("text_stamped.pdf");
}
}
El método stamp acepta un List<Integer> de números de página indexados desde cero, brindando control preciso sobre qué páginas reciben la marca de agua. Cuando no se proporciona una lista de páginas, el sello se aplica a todas las páginas. Esto hace que TextStamper sea la elección correcta siempre que su aplicación genere marcas de agua dinámicamente, como insertar un ID de transacción único, nombre de usuario o marca de tiempo en cada PDF generado.
TextStamper y ImageStamper comparten una clase base común Stamper. Usa el enfoque de estampador siempre que tu aplicación genere marcas de agua dinámicamente, por ejemplo incrustando un ID de transacción único o nombre de usuario en cada PDF generado.Para el procesamiento por lotes, como estampar cientos de PDFs con marcas de agua únicas específicas para cada cliente, cargue y selle cada PdfDocument en un bucle, luego llame a saveAs antes de la siguiente iteración. IronPDF procesa cada documento independientemente, por lo que el uso de memoria se mantiene limitado. La guía de estampado de PDFs en Java cubre ImageStamper y opciones de estampado adicionales en detalle, y la documentación de IronPDF for Java proporciona la referencia completa de la API.
¿Cómo difiere TextStamper de applyWatermark?
El método applyWatermark está optimizado para sellos rápidos y consistentes en múltiples páginas desde cadenas HTML. TextStamper y ImageStamper abordan escenarios en los que applyWatermark no es suficiente: enfocar un subconjunto de páginas, aplicar múltiples sellos distintos con diferentes configuraciones o construir parámetros de marca de agua programáticamente desde una base de datos o entrada de usuario. Ambos enfoques producen una salida de calidad vectorial incrustada directamente en el flujo de contenido del PDF, por lo que las marcas de agua sobreviven el re-guardado, la impresión y los lectores de PDF que no respetan capas de contenido opcionales.
Los desarrolladores que trabajan con la biblioteca Apache PDFBox para marcaje de agua encontrarán el enfoque de IronPDF significativamente más simple. PDFBox requiere construir manualmente flujos de contenido y gestionar recursos, mientras que applyWatermark acepta una cadena HTML simple. La guía de marcas de agua de iText en Baeldung ilustra una tarea comparable con iText, que implica crear objetos PdfStampAnnotation y agregarlos a través de una canalización PdfCanvas. IronPDF reduce eso a una sola llamada de método.
PdfDocument.extractAllText() y verifique la cadena de marca de agua esperada, o utilice la discusión de la comunidad en Stack Overflow sobre manipulación de PDFs en Java para patrones comunes de solución de problemas.¿Cuáles son los siguientes pasos para el marcaje de agua de PDFs en Java?
Esta guía cubrió cuatro enfoques para marcar PDFs con marcas de agua usando IronPDF for Java: marcas de agua de texto simple a través de applyWatermark, marcas de agua de imagen usando etiquetas HTML <img>, control de opacidad y alineación a través de parámetros de método, y estampado programático con TextStamper y ImageStamper para casos de uso avanzados.
Inicia tu prueba gratuita para probar el marcaje de agua en tu aplicación Java. La prueba incluye acceso completo a todas las características de estampado y marcaje de agua sin límite de tiempo en la evaluación. Cuando estés listo para desplegar, consulta las opciones de licencia para encontrar la que se ajuste a tu uso.
¿Listo para ver qué más puedes hacer? Consulta la página completa del tutorial aquí: Guías de Cómo Hacer de IronPDF for Java
Preguntas Frecuentes
¿Cómo añado una marca de agua de texto a un PDF en Java?
Carga tu PDF con PdfDocument.fromFile(), luego llama a pdf.applyWatermark() con una cadena HTML. IronPDF renderiza cualquier HTML y CSS válido, por lo que puedes establecer color, tamaño de fuente y opacidad directamente en el elemento.
¿Puedo usar imágenes como marcas de agua en Java?
Sí. Pasa una etiqueta dentro de tu cadena HTML a applyWatermark(). Los archivos PNG con fondos transparentes producen los resultados más claros. También puedes usar la clase ImageStamper para targeting de rango de páginas.
¿Cómo controlo la opacidad de la marca de agua?
Pasa un entero de 0 (completamente transparente) a 100 (completamente opaco) como segundo argumento a applyWatermark(). Los valores entre 20 y 40 funcionan bien para la mayoría de los documentos sin oscurecer el texto del cuerpo.
¿Puedo rotar una marca de agua diagonalmente?
Sí. Agrega un estilo CSS transform: rotate(-45deg) a tu elemento HTML antes de pasarlo a applyWatermark(). IronPDF aplica todas las transformaciones CSS3 estándar durante el renderizado.
¿Cuál es la diferencia entre applyWatermark y TextStamper?
applyWatermark() es el enfoque más rápido para aplicar el mismo sello basado en HTML a cada página. TextStamper ofrece control programático sobre la fuente, rotación y una lista de páginas para targeting de páginas específicas únicamente.
¿Cómo posiciono una marca de agua en una ubicación específica?
Pasa valores de enum VerticalAlignment y HorizontalAlignment como el tercer y cuarto argumento a applyWatermark(). Las posiciones disponibles incluyen TOP, MIDDLE, BOTTOM combinadas con LEFT, CENTER, RIGHT.
¿Puedo aplicar diferentes marcas de agua a diferentes páginas?
Sí. Usa TextStamper o ImageStamper y pasa una lista de números de página indexados desde cero al método stamp() para targeting solo las páginas que requieren una marca de agua específica.
¿Puedo combinar marcas de agua de texto e imágenes en el mismo PDF?
Sí. Llama a applyWatermark() varias veces o haz múltiples llamadas a stamp() antes de guardar. Cada llamada añade una nueva capa al flujo de contenido PDF independientemente.


