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
- Zaladuj swoj dokument PDF, uzywajac
PdfDocument.fromFile() - Utwórz łańcuch HTML dla swojego znaku wodnego (tekst, obraz lub oba)
- Zastosuj znak wodny, uzywajac
pdf.applyWatermark(watermarkHtml) - Zapisz PDF z znakiem wodnym, uzywajac
pdf.saveAs()
: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("<h1 style='color:red;'>Confidential</h1>");
pdf.saveAs("watermarked.pdf");
: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("<h1 style='color:red;'>Confidential</h1>");
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.
Ten przewodnik obejmuje znaki wodne text, znaki wodne image, kontrolki przezroczystosci i pozycji oraz zaawansowane stemplowanie za pomoca TextStamper i ImageStamper. Dla powiązanych technik manipulacji PDF, zobacz przewodnik o tworzeniu PDF z HTML w Java lub przegląd dodawania tła i pierwszego planu.
Jak stosować znaki wodne w Javie
- Pobierz bibliotekę Java, aby nakładać znaki wodne na pliki PDF
- Wygeneruj nowy plik PDF lub załaduj istniejący
- Skonfiguruj ciąg HTML lub obraz, który ma być używany jako znak wodny
- Zastosuj znak wodny przy użyciu odpowiedniej metody
- W razie potrzeby dostosuj parametry krycia, obrotu i położenia
Jak dodać tekstowy znak wodny do pliku PDF?
Uzyj metody applyWatermark, aby przystemplowac tekst na kazdej 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.
//: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");
}
}
//: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");
}
}
Wywolanie Plik wyjsciowy Dla głębszych technik renderowania HTML, które mają zastosowanie do znaków wodnych, zobacz samouczek konwersji HTML do PDF. Znaki wodne obrazow dzialaja za pomoca tej samej metody Wlasciwosci CSS w znaczniku Sciezka obrazu musi byc dostepna z katalogu roboczego JVM podczas dzialania. Dla wdrozen serwerowych, nalezy uzywac sciezek absolutnych lub umieszczac obraz jako dane URI Base64 wewnatrz atrybutu 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 wyjsciowy IronSuite odgrywa kluczową rolę w naszej działalności. Są to narzędzia zwiększające wydajność w całej firmie, w tym tworzenie planów pięter i poprawa zarządzania zapasami. Metoda 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. Metoda Wyrownanie pionowe ( Wyrownanie poziome ( Połącz dowolną wartość pionową z dowolną wartością poziomą dla precyzyjnej kontroli. Dla dokumentow wymagajacych wielu nakladajacych sie stempli, takich jak logo w prawym gornym rogu i powiadomienie o projekcie wycentrowane przekatnie, zastosuj kazdy stempel jako osobne wywolanie Metoda Kluczowa przewaga klas do stemplowania nad Metoda Do przetwarzania wsadowego, takiego jak stemplowanie setek PDF-ow z unikalnymi znakami wodnymi specyficznymi dla klienta, zaladuj i przystempluj kazdy Metoda Deweloperzy pracujący z biblioteką Apache PDFBox do znakowania wodnego znajdą podejście IronPDF znacząco prostsze. PDFBox wymaga recznego konstruowania strumieni tresci i zarzadzania zasobami, podczas gdy Ten przewodnik obejmuje cztery podejscia do znakowania PDF-ow w IronPDF dla Java: proste znaki wodne tekstowe przez 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 Załaduj swój PDF z Tak. Przekaż tag Przekaż liczbę całkowitą od 0 (całkowicie przezroczysta) do 100 (całkowicie nieprzezroczysta) jako drugi argument do Tak. Dodaj styl CSS Przekaż wartości wyliczeniowe Tak. Użyj Tak. Wywołuj applyWatermark dodaje znak wodny na wszystkie strony w 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. HTML przekazany do applyWatermark przyjmuje dowolny prawidlowy element HTML, wiec mozna dodac lub stylizowane tagi dla wieloliniowych znakow wodnych.
Jak wygląda znak wodny w tekście?
text_watermark.pdf pokazuje slowo Poufne na czerwono, wycentrowane poziomo i pionowo na kazdej 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).
Jak dodać znak wodny z obrazkiem do PDF?
applyWatermark, owijajac tag w ciagu 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");
}
} kontroluja rozmiar, pozycje i przezroczystosc://: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);'/>";src, aby uniknac problemow z rozwiazaniem sciezki.Jakie formaty plików są obsługiwane w przypadku znaków wodnych na obrazach?
image_watermark.pdf pokazuje obraz o szerokosci 100 pikseli, wycentrowany na kazdej stronie z domyslna przezroczystoscia 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?
applyWatermark przyjmuje parametry przezroczystosci i wyrównania po ciagu 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. Enomy VerticalAlignment i HorizontalAlignment kontroluja, na ktory naroznik lub krawedz strony jest celowany 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");
}
}Jakie opcje wyrównania są dostępne?
applyWatermark obsluguje nastepujace stale wyrównania:VerticalAlignment):
TOP - znak wodny zakotwiczony do gornego brzeguMIDDLE - znak wodny wycentrowany pionowoBOTTOM - znak wodny zakotwiczony do dolnego brzeguHorizontalAlignment):
LEFT - znak wodny zakotwiczony do lewego brzeguCENTER - znak wodny wycentrowany poziomoRIGHT - znak wodny zakotwiczony do prawego brzeguapplyWatermark(html) bez dodatkowych parametrow jest rownowazne przekazaniu opacity 50, VerticalAlignment.MIDDLE, HorizontalAlignment.CENTER.applyWatermark. Dla nakładek opartych na adnotacjach zobacz przykłady adnotacji.
Jak stosować zaawansowane znaki wodne z TextStamper i ImageStamper?
applyWatermark obsluguje wiekszosc potrzeb dotyczacych znakow wodnych, ale klasy TextStamper i ImageStamper oferuja programatyczna kontrole, gdy wymagane sa dokladne wspolrzedne pikselowe, celowanie w zakres stron lub dynamiczne generowanie tekstu. Obydwie klasy naleza do pakietu com.ironsoftware.ironpdf.stamp.TextStamper przyjmuje wartosc lancucha i udostepnia wlasciwosci dla czcionki, rozmiaru czcionki, koloru czcionki, wyrówniania poziomego i pionowego oraz przezroczystosci. Obsługuje również rotację jako liczbę całkowitą (w stopniach). ImageStamper przyjmuje sciezke pliku lub array bajtow dla obrazu i udostepnia te same kontrolki wyrównania i przezroczystosci co TextStamper.applyWatermark jest zdolnosc do celowania w konkretne strony. Przekaz liste numerow stron indeksowanych od zera do metody stamp, aby zastosowac znak wodny tylko do stron, które tego wymagaja, na przyklad stemplowanie tylko strony tytulowej raportu lub strony koncowej 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");
}
}stamp przyjmuje List indeksowanych od zera numerow stron, dajac precyzyjna kontrole nad tym, jakie strony otrzymuja znak wodny. Gdy lista stron nie jest dostarczona, stempel stosowany jest do wszystkich stron. To czyni TextStamper wlasciwym wyborem za kazdym razem, gdy twoja aplikacja generuje znaki wodne dynamicznie, takie jak osadzanie unikalnego identyfikatora transakcji, nazwy uzytkownika lub sygnatury czasowej na kazdym wygenerowanym PDF-ie.TextStamper i ImageStamper dziela wspolna klasse bazowa 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.
PdfDocument w petli, nastepnie zakończ wywolaniem saveAs przed nastepną iteracja. IronPDF przetwarza każdy dokument niezależnie, więc zużycie pamięci pozostaje ograniczone. Przewodnik znakowania PDF w Javie obejmuje szczególowo ImageStamper i dodatkowe opcje stemplowania, a dokumentacja IronPDF Java dostarcza pelna dokumentacje API.Czym różni się TextStamper od applyWatermark?
applyWatermark jest zoptymalizowana pod katem szybkich, konsekwentnych stempli wielostronicowych z lancuchow HTML. TextStamper i ImageStamper adresuja sytuacje, w których applyWatermark jest niewystarczajacy: celowanie w podzbior stron, stosowanie wielu roznych stempli z roznymi konfiguracjami lub budowanie parametrow znakow wodnych programatycznie z bazy danych lub danych wejsciowych uzytkownika. 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.applyWatermark przyjmuje zwykly lancuch HTML. Przewodnik znakowania iText na Baeldung ilustruje porownywalne zadanie za pomoca iText, które obejmuje tworzenie obiektow PdfStampAnnotation i dodawanie ich przez pipeline PdfCanvas. IronPDF redukuje to do pojedynczego wywolania metody.PdfDocument.extractAllText() i sprawdz, czy oczekiwany lancuch znaku wodnego jest tam, albo uzyj dyskusji w spolecznosci Stack Overflow na temat manipulacji plikami PDF w Javie dla powszechnych wzorcow rozwiazywania problemów.
Jakie są kolejne kroki w znakowaniu wodnym PDF w Java?
applyWatermark, znaki wodne obrazowe za pomoca tagow HTML , kontrola przezroczystosci i wyrównania przez parametry metody oraz programatyczne oznaczanie stemplem ze TextStamper i ImageStamper dla zaawansowanych przypadkow uzycia.Często Zadawane Pytania
Jak dodac tekstowy znak wodny do PDF w Javie?
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?
<img> 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?
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?
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?
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?
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?
applyWatermark() wiele razy lub dokonaj wielu wywołań stamp() przed zapisaniem. Każde wywołanie dodaje nową warstwę do strumienia zawartości PDF.


