Jak zastosować niestandardowe znaki wodne do PDFów w Java
IronPDF pozwala deweloperom Java stosować niestandardowe znaki wodne do dokumentów PDF za pomocą łańcuchów HTML z pełnym wsparciem dla CSS, pozwalając na pełną kontrolę nad tekstem, obrazami, przezroczystością, rotacją oraz pozycjonowaniem w celach brandingowych czy zabezpieczających.
Szybki start: Dodawanie znaków wodnych do plików PDF w Javie
- Dodaj IronPDF do swojego projektu Maven lub Gradle i ustaw swój klucz licencyjny
- Załaduj dokument PDF za pomocą
PdfDocument.fromFile() - Utwórz łańcuch HTML dla swojego znaku wodnego (tekst, obraz lub oba)
- Zastosuj znak wodny za pomocą
pdf.applyWatermark(watermarkHtml) - Zapisz plik PDF z znakiem wodnym
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("sample.pdf")); pdf.applyWatermark(""); PDF.saveAs("watermarked.PDF");
Stosowanie znaków wodnych chroni dokumenty PDF i komunikuje własność lub status dokumentu. Częste przypadki użycia obejmują oznaczanie wersji roboczych jako "Poufne", osadzanie logo firmy na każdej stronie lub wskazywanie, że dokument oczekuje na zatwierdzenie. IronPDF stosuje podejście oparte na HTML i CSS, co oznacza, że każde stylizowanie, które można wyrazić w przeglądarce (niestandardowe czcionki, przezroczystość, rotacja, pozycjonowanie absolutne) działa identycznie w znaku wodnym.
Niniejszy przewodnik obejmuje znaki wodne `text`, znaki wodne `image`, kontrolki krycia i położenia oraz zaawansowane stemplowanie za pomocą [`TextStamper`](https://ironpdf.com/java/how-to/stamp-text-image-pdf/) i [`ImageStamper`](https://ironpdf.com/java/how-to/stamp-text-image-pdf/). Dla powiązanych technik manipulacji PDF, zobacz przewodnik o [tworzeniu PDF z HTML w Java](https://ironpdf.com/java/how-to/java-create-pdf-tutorial/) lub przegląd [dodawania tła i pierwszego planu](https://ironpdf.com/java/how-to/background-foreground/).
<div class="hsg-featured-snippet">
<h3>Jak stosować znaki wodne w Javie</h3>
<ol>
<li><a class="js-modal-open" data-modal-id="download-modal" href="#download-modal">Pobierz bibliotekę Java, aby nakładać znaki wodne na pliki PDF</a></li>
<li>Wygeneruj nowy plik PDF lub załaduj istniejący</li>
<li>Skonfiguruj ciąg HTML lub obraz, który ma być używany jako znak wodny</li>
<li>Zastosuj znak wodny przy użyciu odpowiedniej metody</li>
<li>W razie potrzeby dostosuj parametry krycia, obrotu i położenia</li>
</ol>
</div>
## Jak dodać tekstowy znak wodny do pliku PDF?
Użyj metody `applyWatermark`, aby umieścić tekst na każdej stronie dokumentu PDF. Metoda akceptuje łańcuch HTML, więc możesz stylizować znak wodny za pomocą dowolnej właściwości CSS: rodzina czcionek, rozmiar, kolor, odstęp między literami czy cień tekstu. W przykładzie poniżej dokument oznaczono jako "Poufny" na czerwono, co obejmuje najczęstszy scenariusz ścieżki audytu i kontroli dostępu.
```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("sample.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");
}
}
Wywołanie applyWatermark dodaje znak wodny do wszystkich stron w ramach jednej operacji. Domyślnie znak wodny renderuje się z 50% przezroczystością i jest wyśrodkowany na każdej stronie. Aby aktywować wszystkie funkcje biblioteki, skonfiguruj swój klucz licencyjny IronPDF przed jakimikolwiek operacjami na PDF. Kod HTML przekazany do applyWatermark akceptuje dowolny prawidłowy element HTML, więc można dołączyć tagi <div>, <span> lub stylizowane tagi <p> w celu utworzenia wielowierszowych znaków wodnych.
Jak wygląda znak wodny w tekście?
Plik wyjściowy text_watermark.pdf zawiera słowo "Confidential" (Poufne) w kolorze czerwonym, wyśrodkowane poziomo i pionowo na każdej stronie. Domyślna przezroczystość 50% utrzymuje czytelność treści dokumentu pod znakiem wodnym. Dla dokumentów wielostronicowych każda strona otrzymuje ten sam stempel bez potrzeby pętli po stronach.
transform: rotate(-45deg) scale(1.5).Dla głębszych technik renderowania HTML, które mają zastosowanie do znaków wodnych, zobacz samouczek konwersji HTML do PDF.
Jak dodać znak wodny z obrazkiem do PDF?
Znak wodny na obrazie działa na tej samej zasadzie applyWatermark poprzez umieszczenie tagu <img> w ciągu HTML. Pliki PNG z przezroczystym tłem są idealne do znaków wodnych z logo, ponieważ przezroczystość jest zachowana, gdy obraz jest łączony ze stroną PDF. Formaty JPEG, GIF, SVG i BMP również są obsługiwane.
//: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("sample.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("sample.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");
}
}
Właściwości CSS w tagu <img> kontrolują rozmiar, położenie i przezroczystość:
//: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);'/>";
Ścieżka do obrazu musi być dostępna z katalogu roboczego JVM w czasie wykonywania. W przypadku wdrożeń serwerowych należy używać ścieżek bezwzględnych lub osadzić obraz jako URI danych Base64 wewnątrz atrybutu src, aby uniknąć problemów z rozpoznawaniem ścieżek.
Jakie formaty plików są obsługiwane w przypadku znaków wodnych na obrazach?
IronPDF obsługuje formaty PNG, JPEG, GIF, SVG i BMP w znakach wodnych. PNG z przezroczystym tłem daje najczystsze wyniki dla znaków wodnych z logo. Plik wyjściowy image_watermark.pdf pokazuje obraz o szerokości 100 pikseli, wyśrodkowany na każdej stronie z domyślną kryciem 50%. Aby wydobyć obrazy z istniejącego PDF do użycia w innym znaku wodnym, zobacz przewodnik ekstrakcja obrazów z PDF.
Jak kontrolować przezroczystość i wyrównanie znaku wodnego?
Metoda applyWatermark akceptuje parametry krycia i wyrównania po ciągu HTML. Przezroczystość to liczba całkowita od 0 (całkowicie przezroczysty) do 100 (całkowicie nieprzezroczysty). Wartości między 20 a 40 dobrze sprawdzają się w większości dokumentów, utrzymując widoczność znaku wodnego bez zasłaniania tekstu głównego. Enumy VerticalAlignment i HorizontalAlignment kontrolują, w którym rogu lub na której krawędzi strony ma się znajdować znak wodny.
//: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("sample.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("sample.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");
}
}
Połączenie trzech opcjonalnych parametrów daje dziewięć różnych opcji pozycjonowania, po jednej dla każdego przecięcia wyrównania pionowego i poziomego. W przypadkach użycia, które wymagają znaków wodnych w wielu pozycjach na tej samej stronie lub znaków wodnych stosowanych tylko do określonego zakresu stron, klasy stemplarza zapewniają dokładniejszą kontrolę. Zobacz przewodnik w tle i pierwszym planie dla technik kompozycji warstwowej.
Jakie opcje wyrównania są dostępne?
Metoda applyWatermark obsługuje następujące stałe wyrównania:
Wyrównanie w pionie (VerticalAlignment):
TOP- znak wodny przymocowany do górnej krawędziMIDDLE- znak wodny wyśrodkowany w pionieBOTTOM- znak wodny przymocowany do dolnej krawędzi
Wyrównanie poziome (HorizontalAlignment):
LEFT- znak wodny przymocowany do lewej krawędziCENTER- znak wodny wyśrodkowany poziomoRIGHT- znak wodny przymocowany do prawej krawędzi
applyWatermark(html) bez dodatkowych parametrów jest równoważne przekazaniu opacity 50, VerticalAlignment.MIDDLE, HorizontalAlignment.CENTER.Połącz dowolną wartość pionową z dowolną wartością poziomą dla precyzyjnej kontroli. W przypadku dokumentów wymagających wielu nakładających się stempli, takich jak logo w prawym górnym rogu i informacja o wersji roboczej wyśrodkowana po przekątnej, każdy stempel należy zastosować jako oddzielne wywołanie applyWatermark. Dla nakładek opartych na adnotacjach zobacz przykłady adnotacji.
Jak stosować zaawansowane znaki wodne z TextStamper i ImageStamper?
Metoda applyWatermark obsługuje większość potrzeb związanych z znakami wodnymi, ale klasy TextStamper i ImageStamper oferują kontrolę programową, gdy wymagane są dokładne współrzędne pikseli, kierowanie na zakres stron lub dynamiczne generowanie tekstu. Obie klasy należą do pakietu com.ironsoftware.ironpdf.stamp.
TextStamper przyjmuje wartość ciągu znaków i udostępnia właściwości dotyczące czcionki, rozmiaru czcionki, koloru czcionki, wyrównania poziomego i pionowego oraz krycia. Obsługuje również rotację jako liczbę całkowitą (w stopniach). ImageStamper akceptuje ścieżkę do pliku lub tablicę bajtów dla obrazu i udostępnia te same opcje wyrównania i krycia, co TextStamper.
Główną zaletą klas stamper w porównaniu z applyWatermark jest możliwość kierowania działań na konkretne strony. Przekaż listę numerów stron indeksowanych od zera do metody stamp, aby zastosować znak wodny tylko na tych stronach, które tego wymagają, na przykład umieszczając go tylko na stronie tytułowej raportu lub na stronie ostatecznego zatwierdzenia umowy.
//: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("sample.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("sample.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");
}
}
Metoda stamp przyjmuje List<Integer> indeksowanych od zera numerów stron, co daje precyzyjną kontrolę nad tym, które strony otrzymają znak wodny. Gdy lista stron nie jest dostarczona, stempel stosowany jest do wszystkich stron. To sprawia, że TextStamper jest właściwym wyborem zawsze, gdy aplikacja generuje znaki wodne dynamicznie, np. osadzając unikalny identyfikator transakcji, nazwę użytkownika lub znacznik czasu w każdym wygenerowanym pliku PDF.
TextStamper i ImageStamper mają wspólną klasę bazową Stamper. Używaj podejścia stemplarza zawsze, gdy Twoja aplikacja generuje znaki wodne dynamicznie, na przykład wstawiając unikalny identyfikator transakcji lub nazwę użytkownika na każdym generowanym PDF.W przypadku przetwarzania wsadowego, takiego jak stemplowanie setek plików PDF unikalnymi znakami wodnymi dostosowanymi do potrzeb klienta, należy załadować i ostemplować każdy PdfDocument w pętli, a następnie wywołać saveAs przed kolejną iteracją. IronPDF przetwarza każdy dokument niezależnie, więc zużycie pamięci pozostaje ograniczone. Przewodnik po stemplach Java PDF szczegółowo omawia ImageStamper oraz dodatkowe opcje stemplowania, a dokumentacja IronPDF Java zawiera kompletną Dokumentację API.
Czym różni się TextStamper od applyWatermark?
Metoda applyWatermark jest zoptymalizowana pod kątem szybkiego i spójnego tworzenia wielostronicowych stempli na podstawie ciągów HTML. TextStamper i ImageStamper dotyczą scenariuszy, w których applyWatermark nie spełnia oczekiwań: kierowanie do podzbioru stron, stosowanie wielu różnych stempli o różnych konfiguracjach lub programowe tworzenie parametrów znaku wodnego na podstawie bazy danych lub danych wprowadzonych przez użytkownika. Oba podejścia produkują wyjście wektorowej jakości osadzone bezpośrednio w strumieniu treści PDF, dzięki czemu znaki wodne przetrwają ponowne zapisywanie, drukowanie oraz czytniki PDF, które nie honorują opcjonalnych warstw treści.
Deweloperzy pracujący z biblioteką Apache PDFBox do znakowania wodnego znajdą podejście IronPDF znacząco prostsze. PDFBox wymaga ręcznego tworzenia strumieni treści i zarządzania zasobami, podczas gdy applyWatermark akceptuje zwykły ciąg znaków HTML. Przewodnik po znakach wodnych iText na stronie Baeldung ilustruje podobne zadanie z wykorzystaniem iText, które polega na tworzeniu obiektów PdfStampAnnotation i dodawaniu ich za pośrednictwem potoku PdfCanvas. IronPDF redukuje to do jednego wywołania metody.
PdfDocument.extractAllText() i sprawdź, czy zawiera oczekiwany ciąg znaków znaku wodnego, lub skorzystaj z dyskusji społeczności Stack Overflow na temat manipulacji plikami PDF w Javie, aby zapoznać się z typowymi wzorcami rozwiązywania problemów.Jakie są kolejne kroki w znakowaniu wodnym PDF w Java?
W niniejszym przewodniku omówiono cztery podejścia do znakowania wodnego plików PDF za pomocą IronPDF for Java: proste znaki wodne tekstowe za pomocą applyWatermark, znaki wodne graficzne przy użyciu tagów HTML <img>, kontrolę krycia i wyrównania za pomocą parametrów metod oraz programowe nanoszenie znaków za pomocą TextStamper i ImageStamper w zaawansowanych przypadkach użycia.
Rozpocznij darmowy okres próbny, aby przetestować znakowanie wodne w swojej aplikacji Java. Okres próbny oferuje pełny dostęp do wszystkich funkcji stemplowania i znakowania wodnego bez limitu czasowego na ocenę. Gdy będziesz gotowy do wdrożenia, zapoznaj się z opcjami licencyjnymi, aby znaleźć poziom, który pasuje do Twojego użycia.
Gotowy, aby sprawdzić, co jeszcze możesz zrobić? Sprawdź pełną stronę przewodnika tutaj: IronPDF for Java How-To Guides
Często Zadawane Pytania
Jak dodac tekstowy znak wodny do PDF w Javie?
Załaduj swój PDF z PdfDocument.fromFile(), a następnie wywołaj pdf.applyWatermark() z ciągiem HTML. IronPDF renderuje dowolny prawidłowy HTML i CSS, więc możesz ustawić kolor, rozmiar czcionki i przezroczystość bezpośrednio na elemencie.
Czy mogę używać obrazów jako znaków wodnych w Java?
Tak. Przekaż tag wewnątrz ciągu HTML do applyWatermark(). Pliki PNG z przezroczystymi tłami dają najczystsze wyniki. Możesz również użyć klasy ImageStamper do celowania w zakres stron.
Jak kontrolować przezroczystość znaku wodnego?
Przekaż liczbę całkowitą od 0 (całkowicie przezroczysta) do 100 (całkowicie nieprzezroczysta) jako drugi argument do applyWatermark(). Wartości między 20 a 40 dobrze działają dla większości dokumentów, nie zasłaniając tekstu głównego.
Czy mogę obrócić znak wodny na ukos?
Tak. Dodaj styl CSS transform: rotate(-45deg) do swojego elementu HTML zanim przekażesz go do applyWatermark(). IronPDF stosuje wszystkie standardowe transformacje CSS3 podczas renderowania.
Jaka jest różnica między applyWatermark a TextStamper?
applyWatermark() to najszybsze podejście do stosowania tego samego znaku HTML na każdej stronie. TextStamper oferuje programatyczną kontrolę nad czcionką, rotacją i listą stron do celowania tylko w określone strony.
Jak umiejscowić znak wodny w konkretnym miejscu?
Przekaż wartości wyliczeniowe VerticalAlignment i HorizontalAlignment jako trzeci i czwarty argument do applyWatermark(). Dostępne położenia obejmują GÓRĘ, ŚRODEK, DÓŁ w połączeniu z LEWO, ŚRODEK, PRAWO.
Czy mogę stosować różne znaki wodne do różnych stron?
Tak. Użyj TextStamper lub ImageStamper i przekaż listę numerów stron indeksowanych od zera do metody stamp(), aby celować tylko w strony, które wymagają określonego znaku wodnego.
Czy mogę połączyć tekstowe i obrazowe znaki wodne w tym samym PDF?
Tak. Wywołuj applyWatermark() wiele razy lub dokonaj wielu wywołań stamp() przed zapisaniem. Każde wywołanie dodaje nową warstwę do strumienia zawartości PDF.


