HTML do PDF w Java
IronPDF for Java konwertuje treść HTML na dokumenty PDF uruchamiając pełny silnik renderowania Chromium — ten sam silnik, który zasila nowoczesne przeglądarki. Każda właściwość CSS, czcionka, obraz i układ generowany przez JavaScript jest renderowany dokładnie tak, jak byłby w oknie przeglądarki, a następnie ląduje na stronie jako precyzyjny pikselowo PDF.
Ten samouczek przeprowadza przez trzy podstawowe metody konwersji: HTML string do PDF, live URL do PDF i lokalny plik HTML do PDF. Obejmuje również instalację, konfigurację licencji i opcje renderowania, po które programiści sięgają najczęściej.
Biblioteka Java odzwierciedla kształt API IronPDF for .NET, więc zespoły pracujące w obu środowiskach uznają przejście za proste. Kod źródłowy dla wszystkich przykładów w tym samouczku jest dostępny na GitHub.
Szybki start: Konwersja HTML do PDF w JavieDodaj IronPDF do twojego pom.xml Maven, a następnie wywoła jedną metodę, aby wygenerować PDF:
import com.ironsoftware.ironpdf.*;
// Set your license key before any rendering calls
License.setLicenseKey("YOUR-LICENSE-KEY");
// Convert an HTML string to a PDF and save it
PdfDocument pdf = PdfDocument.renderHtmlAsPdf("<h1>Hello from IronPDF for Java!</h1>");
pdf.saveAs("output.pdf");
Start using IronPDF in your project today with a free trial.
- Instalacja IronPDF for Java
- Jak zaimportować IronPDF i skonfigurować klucz licencyjny?
- Jak konwertować ciąg HTML do PDF?
- Jak przekonwertować URL do PDF w Javie?
- Jak przekonwertować lokalny plik HTML do PDF?
- Jak ustawić opcje generowania PDF?
- Jak dodać nagłówki i stopki?
- Jak ustawić marginesy stron i rozmiar papieru?
- Jak zastosować znak wodny do PDF?
- Jak scalić wiele plików PDF w jeden?
- Jak dodać lub usunąć strony z PDF?
- Jak zabezpieczyć hasłem PDF w Javie?
- Jak przekonwertować szablon HTML z dynamicznymi danymi?
- Jak wyodrębnić tekst z PDF w Javie?
- Jak skompresować plik PDF?
- Kolejne kroki
Instalacja IronPDF for Java
IronPDF for Java jest dostarczany przez Maven Central oraz jako samodzielny JAR. Trasa Maven jest zalecana dla większości projektów, ponieważ obsługuje zależności przechodnie i utrzymuje zgodność wersji biblioteki między komputerami programistycznymi i potokami CI.
Opcja 1: Dodaj IronPDF jako zależność Maven
Otwórz plik pom.xml projektu i dodaj następujące wpisy do bloku <dependencies>:
//:path=/static-assets/pdf/content-code-examples/tutorials/html-to-pdf/maven-dependency.xml
<dependencies>
<!-- IronPDF for Java -->
<dependency>
<groupId>com.ironsoftware</groupId>
<artifactId>ironpdf</artifactId>
<version>[LATEST_VERSION]</version>
</dependency>
<!-- SLF4J logging provider (recommended) -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-simple</artifactId>
<version>[LATEST_VERSION]</version>
</dependency>
</dependencies>
Pierwszy artefakt pobiera najświeższe wydanie IronPDF for Java. Drugi artefakt aktywuje logowanie SLF4J, aby silnik renderowania IronPDF mógł zapisywać wiadomości diagnostyczne podczas wykonywania. Programiści, którzy preferują Logback lub Log4J, mogą zamiast tego zastąpić tego dostawcę. Zależność logowania jest opcjonalna — pomiń ją, jeśli logi nie są potrzebne.
Po zapisaniu pliku uruchom mvn install z katalogu głównego projektu, aby pobrać obie biblioteki. Maven automatycznie rozwiązuje pełen graf zależności, w tym wszelkie przechodnie zależności, które wymaga IronPDF.
Dla projektów Gradle odpowiednia deklaracja zależności w build.gradle to:
// build.gradle (Groovy DSL)
// dependencies {
// implementation 'com.ironsoftware:ironpdf:[LATEST_VERSION]'
// implementation 'org.slf4j:slf4j-simple:[LATEST_VERSION]'
// }
Zamień [LATEST_VERSION] numerem wersji z changelog-u IronPDF lub ze strony Maven Central dla artefaktu.
Opcja 2: Dodaj plik JAR ręcznie
Pobierz bezpośrednio JAR IronPDF z Maven Central i dodaj go do ścieżki klasy projektu. To podejście działa bez narzędzia do budowy, ale wymaga ręcznego zarządzania wersjami, więc najlepiej nadaje się do projektów odziedziczonek, które nie używają Maven ani Gradle, lub dla środowisk, gdzie dostęp do sieci zewnętrznej jest ograniczony.
Po pobraniu dodaj JAR do ścieżki klasy projektu przez ustawienia projektu w IDE. W IntelliJ IDEA kliknij prawym przyciskiem myszy korzeń projektu, wybierz "Open Module Settings", przejdź do "Dependencies" i dodaj plik JAR. W Eclipse kliknij prawym przyciskiem myszy projekt, idź do "Properties > Java Build Path > Libraries", a następnie kliknij "Add External JARs".
Wymagania systemowe
IronPDF for Java działa na JDK 8 lub późniejszych. Obsługuje Windows, Linux i macOS na architekturach zarówno x86-64, jak i ARM64. Nie jest wymagana instalacja zewnętrznej przeglądarki — binarka Chromium jest wbudowana w JAR. Na systemach Linux upewnij się, że standardowe biblioteki współdzielone oczekiwane przez Chromium są obecne. Dokumentacja IronPDF for Java wymienia minimalnie wymagane pakiety dla popularnych dystrybucji Linux.
Jak zaimportować IronPDF i skonfigurować klucz licencyjny?
Każda klasa IronPDF znajduje się w pakiecie com.ironsoftware.ironpdf. Zaimportuj ją na górze dowolnego pliku źródłowego, który będzie tworzył lub manipulował dokumentami PDF.
import com.ironsoftware.ironpdf.*;
import java.nio.file.Paths;
// Apply your license key before any other IronPDF calls
License.setLicenseKey("YOUR-LICENSE-KEY");
// Optional: set a custom log file path
Settings.setLogPath(Paths.get("IronPdfEngine.log"));
Bez klucza licencyjnego IronPDF działa w trybie testowym i umieszcza na każdej stronie PDF znak wodny kafelkowany. Ustawienie klucza usuwa znak wodny i odblokowuje wszystkie funkcje. Rozpocznij bezpłatny okres próbny, aby natychmiast uzyskać klucz.
Znak wodny trybu próbnego IronPDF umieszczony na stronie PDF.
Klucz licencyjny jest ciągiem znaków, który Iron Software wydaje, gdy aktywowana jest licencja testowa lub komercyjna. Przechowuj go w zmiennej środowiskowej lub pliku konfiguracyjnym zamiast osadzać bezpośrednio w kodzie źródłowym. Popularnym wzorcem jest odczytanie go z zmiennej środowiskowej przy starcie:
import com.ironsoftware.ironpdf.*;
// Read the license key from an environment variable
String licenseKey = System.getenv("IRONPDF_LICENSE_KEY");
if (licenseKey != null && !licenseKey.isEmpty()) {
License.setLicenseKey(licenseKey);
}
To podejście chroni klucz przed kontrolą wersji i ułatwia używanie różnych kluczy w różnych środowiskach: rozwojowym, staging i produkcyjnym.
Wywołaj License.setLicenseKey i Settings.setLogPath przed wywołaniem jakiejkolwiek metody renderowania lub manipulacji. Umieść je przy starcie aplikacji — najlepiej w bloku inicjalizującym statycznie lub w punkcie wejścia main.
Jak przekonwertować ciąg HTML na PDF?
PdfDocument.renderHtmlAsPdf akceptuje ciąg znaczników HTML i zwraca obiekt PdfDocument, który można zapisać, połączyć lub zmodyfikować przed zapisaniem na dysk. To główna metoda dla programowo generowanego HTML — na przykład raporty budowane przez łączenie wartości z bazy danych z szablonem HTML zdefiniowanym jako ciąg znaków w Java lub załadowanym z pliku.
import com.ironsoftware.ironpdf.*;
// Simple one-liner: convert an HTML string to a PDF
PdfDocument pdf = PdfDocument.renderHtmlAsPdf("<h1>Hello from IronPDF!</h1>");
pdf.saveAs("htmlstring_to_pdf.pdf");
Silnik renderowania rozwiązuje względne ścieżki zasobów (obrazy, arkusze stylów, skrypty) względem opcjonalnego drugiego argumentu — ścieżki bazowej. Gdy podana jest ścieżka bazowa, silnik traktuje ją jako korzeń, z którego rozwiązywane są względne URL-e. To pozwala na poprawne renderowanie HTML, który odwołuje się do lokalnych plików CSS i obrazów, bez żadnych manipulacji ścieżkami w źródłowym markerze.
import com.ironsoftware.ironpdf.*;
// HTML references assets in a local "assets" subfolder
String html = "<html>" +
"<head><link rel='stylesheet' href='assets/style.css'></head>" +
"<body><h1>Invoice</h1><img src='assets/logo.png' /></body>" +
"</html>";
// Pass the base path so IronPDF resolves relative asset URLs
PdfDocument pdf = PdfDocument.renderHtmlAsPdf(html, "C:/my-project/templates");
pdf.saveAs("invoice.pdf");
Metoda saveAs akceptuje ścieżkę absolutną lub względną. Biblioteka tworzy plik, jeśli jeszcze nie istnieje i nadpisuje go, jeśli istnieje. Podczas zapisywania w katalogu, który aplikacja mogła jeszcze nie utworzyć, najpierw utwórz katalog przy użyciu Files.createDirectories(Paths.get("output")) przed wywołaniem saveAs.
IronPDF obsługuje pełen zestaw funkcji HTML5 i CSS3, jak zaimplementowano w Chromium. Niestandardowe czcionki wczytywane za pomocą @font-face w CSS renderują się poprawnie, gdy pliki czcionek są dostępne w ścieżce bazowej. Elementy SVG oraz elementy <canvas> renderowane przez JavaScript również pojawiają się w wyjściu PDF.
Jak przekonwertować URL na PDF w Java?
PdfDocument.renderUrlAsPdf pobiera stronę pod podanym adresem URL, czeka na wykonanie JavaScript i załadowanie dynamicznych treści, a następnie konwertuje w pełni renderowany DOM do PDF.
import com.ironsoftware.ironpdf.*;
// Convert a live web page to PDF
PdfDocument pdf = PdfDocument.renderUrlAsPdf("https://en.wikipedia.org/wiki/PDF");
pdf.saveAs("wikipedia_pdf_article.pdf");
Silnik obsługuje nagłówki autoryzacji, ciasteczka i aplikacje jednostronicowe bogate w JavaScript. Dla stron wymagających logowania lub niestandardowych nagłówków żądań użyj klasy ChromePdfRenderOptions do skonfigurowania parametrów żądania przed wywołaniem renderUrlAsPdf.
Ta metoda konwersji jest przydatna do archiwizacji stron internetowych, generowania migawki zgodności i produkcji raportów dla klientów z wewnętrznych pulpitów. Strony generowane przez serwer, do których dostęp można uzyskać przez lokalną sieć, są w pełni obsługiwane — przekaż http://localhost:8080/report/123 w taki sam sposób, jak publiczny URL. IronPDF będzie czekać na pełne załadowanie strony przed renderowaniem, więc pulpity bazujące na asynchronicznych pobraniach danych zostaną wyrenderowane z wypełnionymi danymi zamiast z pustymi wykresami.
Dla stron za HTTP podstawowym uwierzytelnianiem przekazuj dane uwierzytelniające w URL używając formatu http://user:password@host/path. Dla stron chronionych przez ciasteczka sesji, skonfiguruj słoik ciasteczek na obiekcie ChromePdfRenderOptions przed przekazaniem go do renderUrlAsPdf. Zobacz dokumentację IronPDF for Java dla szczegółów dotyczących konfigurowania nagłówków żądań i zarządzania ciasteczkami dla uwierzytelnionych URL.
Jak przekonwertować lokalny plik HTML na PDF?
PdfDocument.renderHtmlFileAsPdf odczytuje plik HTML z systemu plików i renderuje go do PDF. Wszystkie powiązane zasoby (CSS, JavaScript, obrazy) odwoływane przez względne ścieżki w pliku są rozwiązywane względem katalogu własnego pliku HTML.
import com.ironsoftware.ironpdf.*;
// Convert a local HTML file — assets resolve relative to its directory
PdfDocument pdf = PdfDocument.renderHtmlFileAsPdf("C:/invoices/TestInvoice1.html");
pdf.saveAs("htmlfile_to_pdf.pdf");
To podejście jest najbardziej dokładne do konwersji złożonych dokumentów HTML. Ponieważ silnik renderowania operuje na ścieżce systemu plików, a nie na ciągu w pamięci, względne odwołania do wielopoziomowych katalogów zasobów rozwiązują się bez dodatkowej konfiguracji. Szablon, który polega na style.css i script.js w tym samym folderze, będzie się renderować prawidłowo bez żadnych dostosowań ścieżki.
Ta metoda jest szczególnie dobrze dostosowana do generowania faktur, produkcji umów i każdego przepływu pracy, gdzie projektant utrzymuje szablon HTML niezależnie od aplikacji Java. Zespół deweloperów traktuje szablon jako plik danych, przechowuje go obok aplikacji i wywołuje renderHtmlFileAsPdf z ścieżką. Gdy projektant zaktualizuje szablon, zmieniając branding lub układ, nie są wymagane żadne zmiany w kodzie Java.
Jak ustawić opcje generowania PDF?
ChromePdfRenderOptions kontroluje zachowanie renderowania: rozmiar papieru, marginesy, poziom przybliżenia, typ mediów do druku, czas oczekiwania JavaScript i więcej. Utwórz instancję, skonfiguruj pożądane właściwości i przekaż ją jako drugi argument do dowolnej metody render*AsPdf.
import com.ironsoftware.ironpdf.*;
import com.ironsoftware.ironpdf.render.*;
ChromePdfRenderOptions options = new ChromePdfRenderOptions();
// Render the page using the print media type (uses @media print CSS rules)
options.setCssMediaType(CssMediaType.PRINT);
// Wait up to 5 seconds for JavaScript to finish executing
options.setJavascriptTimeout(5000);
// Apply a 1.5x zoom level to scale content to fit the page
options.setZoom(150);
// Render at 150 DPI for sharper images in print output
options.setDpi(150);
PdfDocument pdf = PdfDocument.renderHtmlAsPdf(
"<h1>Styled Report</h1>",
options
);
pdf.saveAs("styled_report.pdf");
Ustawienie CssMediaType.PRINT informuje silnik, aby zastosował reguły CSS @media print, które wiele szablonów HTML używa do ukrywania pasków nawigacyjnych oraz stosowania układów specyficznych dla druku. Metoda setJavaScriptTimeout jest ważna dla stron używających JavaScriptowych bibliotek do tworzenia diagramów (D3.js, Chart.js) lub do leniwego ładowania treści — jeśli czas oczekiwania jest zbyt krótki, PDF uchwyci stronę zanim JavaScript skończy renderować, co spowoduje puste wykresy lub brakujące sekcje. Zwiększ limit czasu, jeśli renderowany PDF nie zawiera oczekiwanych treści.
Metoda setDpi kontroluje rozdzielczość obrazu w wyjściu. Domyślnie (96 DPI) jest odpowiednie dla dokumentów ekranowych. Dla PDF-ów, które będą drukowane lub wyświetlane na ekranach o dużej gęstości DPI, użyj 150 lub 300 DPI. Wyższe wartości DPI zwiększają rozmiar pliku proporcjonalnie. Zobacz przykład kodu z ustawieniami generowania PDF, aby uzyskać pełną listę konfigurowalnych właściwości.
Jak dodać nagłówki i stopki?
IronPDF obsługuje zarówno oparte na tekście, jak i oparte na HTML nagłówki i stopki. Nagłówki tekstowe używają obiektu TextHeaderFooter z tokenami formatującymi ({page}, {total-pages}, {date}), które rozwiązują się automatycznie podczas renderowania.
import com.ironsoftware.ironpdf.*;
import com.ironsoftware.ironpdf.headerfooter.*;
// Create a text-based header and footer
TextHeaderFooter header = new TextHeaderFooter();
header.setCenterText("Confidential — {date}");
header.setFontSize(10);
TextHeaderFooter footer = new TextHeaderFooter();
footer.setLeftText("My Company, Inc.");
footer.setRightText("Page {page} of {total-pages}");
footer.setFontSize(9);
PdfDocument pdf = PdfDocument.renderHtmlAsPdf("<h1>Annual Report</h1>");
pdf.addTextHeaders(header);
pdf.addTextFooters(footer);
pdf.saveAs("report_with_headers.pdf");
Tokeny {page} i {total-pages} produkują wartości jak "3 z 12" w stopce i aktualizują się automatycznie przy zmianie liczby stron, więc nie ma potrzeby znać ostatecznej liczby stron przed renderowaniem. Token {date} wstawia bieżącą datę przy użyciu lokalizacji systemowej. Inne dostępne tokeny to {time}, {document-title} i {url}.
Nagłówki i stopki dodane z addTextHeaders i addTextFooters stosują się domyślnie do każdej strony w dokumencie. Przekaż opcjonalny parametr zakresu stron, aby ograniczyć je do określonych stron — na przykład, aby pominąć nagłówek na stronie tytułowej.
Dla stylizowanych nagłówków wymagających logotypów, kolorów marki lub niestandardowych układów używaj zamiast tego HtmlHeaderFooter – akceptuje pełen ciąg HTML i renderuje go tak samo, jak ciało strony. Zobacz przykład niestandardowych nagłówków i stopek dla pełnego wzorca nagłówka HTML.
Jak ustawić marginesy strony i rozmiar papieru?
Przekaż instancję ChromePdfRenderOptions z skonfigurowanymi wartościami marginesów i rozmiaru papieru przed wywołaniem jakiejkolwiek metody render*AsPdf.
import com.ironsoftware.ironpdf.*;
import com.ironsoftware.ironpdf.render.*;
import com.ironsoftware.ironpdf.page.*;
ChromePdfRenderOptions options = new ChromePdfRenderOptions();
// Set uniform margins in millimeters
options.setMarginTop(20);
options.setMarginBottom(20);
options.setMarginLeft(15);
options.setMarginRight(15);
// Use A4 paper (default is Letter)
options.setPaperSize(PaperSize.A4);
PdfDocument pdf = PdfDocument.renderHtmlAsPdf("<p>Page content here.</p>", options);
pdf.saveAs("a4_with_margins.pdf");
Wartości marginesu są podane w milimetrach. Enum PaperSize obejmuje standardowe rozmiary (A4, Letter, Legal, A3 i inne). Deweloperzy, którzy potrzebują niestandardowych wymiarów, mogą ustawić niestandardową szerokość i wysokość przy użyciu options.setCustomPaperWidth i options.setCustomPaperHeight. Przykład niestandardowego rozmiaru papieru i przykład niestandardowych marginesów pokazują pełne wzorce konfiguracji.
Jak nałożyć znak wodny na PDF?
Znak wodny w IronPDF to HTML nadrukowany na każdej stronie przy konfigurowalnej przezroczystości. To podejście daje deweloperom pełną kontrolę nad wyglądem znaku wodnego — każdy element HTML, obraz czy stylizowany tekst może służyć jako pieczątka.
import com.ironsoftware.ironpdf.*;
PdfDocument pdf = PdfDocument.renderHtmlAsPdf("<h1>Confidential Report</h1><p>Internal use only.</p>");
// Define the watermark using an HTML string
String watermarkHtml = "<h1 style='color:rgba(200,0,0,0.3); transform:rotate(-45deg);'>DRAFT</h1>";
// Stamp the watermark on all pages at 50% opacity
pdf.applyStamp(watermarkHtml);
pdf.saveAs("draft_watermark.pdf");
Metoda applyStamp akceptuje parametr HtmlStampOptions dla precyzyjnego pozycjonowania — centrum, górny lewy, niestandardowe przesunięcia pikselowe i z-indeks (pierwszy plan lub tło). Umieszczenie pieczątki jako tła powoduje, że znajduje się za tekstem, dzięki czemu dokument pozostaje czytelny. Ustawienie jej jako pierwszego planu umieszcza ją na wierzchu, co jest trudniejsze do ukrycia podczas drukowania.
Zobacz poradnik o niestandardowych znakach wodnych z przykładami obejmującymi tła wodne, wzory kafelkowe i usuwanie znaków wodnych przez uaktualnienie licencji.
Jak połączyć wiele plików PDF w jeden?
PdfDocument.merge łączy dwa lub więcej obiektów PdfDocument w kolejności i zwraca jeden nowy dokument. Jest to preferowane podejście do składania raportów z sekcji składowych, dodawania okładek lub łączenia sekcji używanych przez użytkowników w pracy masowej.
import com.ironsoftware.ironpdf.*;
import java.util.Arrays;
import java.util.List;
// Render two separate HTML documents into PDFs
PdfDocument cover = PdfDocument.renderHtmlAsPdf("<h1>Cover Page</h1>");
PdfDocument body = PdfDocument.renderHtmlAsPdf("<h1>Report Body</h1><p>Section one...</p>");
PdfDocument appendix = PdfDocument.renderHtmlAsPdf("<h2>Appendix A</h2>");
// Merge all three into a single PDF in the specified order
List<PdfDocument> parts = Arrays.asList(cover, body, appendix);
PdfDocument merged = PdfDocument.merge(parts);
merged.saveAs("full_report.pdf");
Strony z każdego dokumentu źródłowego pojawiają się w wyniku połączenia w kolejności określonej przez listę źródeł. Scalony dokument nie dziedziczy żadnych metadanych z żadnego indywidualnego źródła — zaktualizuj meta.title i inne właściwości dokumentu za pomocą PdfDocument.getPdfMetaData() po scaleniu, jeśli te pola mają znaczenie dla odbiorcy końcowego.
Metoda merge ma również przeciążenie z dwoma argumentami, które akceptuje dokładnie dwie instancje PdfDocument. Dla masowych połączeń wielu dokumentów, użyj przeciążenia listy — jest bardziej wydajne niż łączenie wielu wywołań z dwoma argumentami, ponieważ przetwarza wszystkie źródła w jednym przejściu.
Każde źródło PdfDocument na liście scalania pozostaje ważne i niezmienione po wywołaniu. Instancja merged jest nowym, niezależnym dokumentem. Zwolnij dokumenty źródłowe ich metodą close(), gdy nie są już potrzebne, aby zwolnić powiązane zasoby natywne.
Jak dodać lub usunąć strony z PDF?
Poszczególne strony można skopiować z jednego dokumentu do innego lub usunąć całkowicie przy użyciu metod PdfDocument.copyPage, PdfDocument.copyPages i PdfDocument.removePages.
import com.ironsoftware.ironpdf.*;
import java.util.Arrays;
// Generate a multi-page document using CSS page breaks
PdfDocument report = PdfDocument.renderHtmlAsPdf(
"<p>Page 1 content</p>" +
"<div style='page-break-after:always;'></div>" +
"<p>Page 2 content</p>" +
"<div style='page-break-after:always;'></div>" +
"<p>Page 3 content</p>"
);
// Remove page 2 (zero-indexed — page index 1)
report.removePages(Arrays.asList(1));
// Save the two-page result
report.saveAs("two_page_report.pdf");
Indeksy stron w IronPDF są oparte na zerze. Podczas usuwania wielu stron, przekaż wszystkie indeksy w jednym wywołaniu removePages zamiast wywoływać ją wielokrotnie w pętli, ponieważ każde usunięcie przesuwa indeksy kolejnych stron. Przekazanie pełnej listy naraz unika przesunięcia indeksów. Na przykład, aby usunąć strony 2 i 4 z dokumentu pięciostronicowego, przekaż Arrays.asList(1, 3) — nie dwa oddzielne wywołania.
Aby wstawić strony z zewnętrznego PDF — na przykład, dołączyć prawne zastrzeżenie ze statycznego szablonu — użyj PdfDocument.insertPdf do wstawienia zewnętrznego dokumentu w określone miejsce. Liczba stron dokumentu odbiorczego aktualizuje się natychmiast po wstawieniu.
Właściwość CSS css page-break-after:always jest standardowym sposobem wymuszania przełączeń stron w HTML, który będzie renderowany do PDF. IronPDF obsługuje również nowszą właściwość CSS break-after: page. Oba podejścia zapewniają przewidywalne podziały stron bez potrzeby stosowania specjalnego kodu Java.
Jak zabezpieczyć hasłem PDF w Java?
IronPDF obsługuje dwa różne hasła na PDF: hasło właściciela, które kontroluje uprawnienia do edycji, drukowania i kopiowania oraz hasło użytkownika, które kontroluje otwieranie dokumentu. Obie są ustawiane za pośrednictwem klasy SecurityOptions.
import com.ironsoftware.ironpdf.*;
import com.ironsoftware.ironpdf.security.*;
PdfDocument pdf = PdfDocument.renderHtmlAsPdf("<h1>Secure Document</h1>");
SecurityOptions security = new SecurityOptions();
// Require a password to open the document
security.setUserPassword("user123");
// Require a separate password to edit, print, or copy content
security.setOwnerPassword("owner456");
// Restrict printing to prevent unauthorized reproduction
security.setAllowUserPrinting(PrintOptions.FullPrintQuality);
PdfSecurityManager securityManager = new PdfSecurityManager(pdf);
securityManager.setSecurityOptions(security);
pdf.saveAs("secure_document.pdf");
Ustawienie AllowUserPrinting akceptuje enum PrintOptions: FullPrintQuality, LowQualityPrint lub NoPrint. Gdy ustawione jest hasło właściciela, ale hasło użytkownika jest puste, dokument otwiera się bez hasła, ale edycja i inne operacje wymagają hasła właściciela w edytorze PDF.
Jak przekształcić szablon HTML z dynamicznymi danymi?
Generowanie PDF-ów z szablonu HTML napędzanego danymi jest jednym z najczęstszych przypadków użycia produkcji dla IronPDF. Standardowym podejściem jest budowanie ciągu HTML w Javie za pomocą biblioteki szablonów lub operacji na ciągach, a następnie przekazanie gotowego ciągu do renderHtmlAsPdf.
import com.ironsoftware.ironpdf.*;
// Simulate data from a database or service layer
String customerName = "Acme Corp";
String invoiceNumber = "INV-20240501";
String totalAmount = "$1,250.00";
String dueDate = "2024-06-01";
// Build the HTML template with real data injected
String html = "<!DOCTYPE html><html><head>" +
"<style>body{font-family:Arial,sans-serif;margin:40px;}" +
"table{width:100%;border-collapse:collapse;}" +
"th,td{border:1px solid #ccc;padding:8px;text-align:left;}" +
"th{background:#f4f4f4;}</style></head><body>" +
"<h1>Invoice</h1>" +
"<p><strong>Customer:</strong> " + customerName + "</p>" +
"<p><strong>Invoice #:</strong> " + invoiceNumber + "</p>" +
"<table><tr><th>Description</th><th>Amount</th></tr>" +
"<tr><td>Professional Services</td><td>" + totalAmount + "</td></tr>" +
"</table>" +
"<p><strong>Due Date:</strong> " + dueDate + "</p>" +
"</body></html>";
PdfDocument pdf = PdfDocument.renderHtmlAsPdf(html);
pdf.saveAs(invoiceNumber + ".pdf");
W przypadku większych projektów rozważ użycie biblioteki szablonów Java, takiej jak Thymeleaf lub Freemarker, aby zarządzać szablonami HTML jako oddzielnymi plikami, wprowadzać dane za pomocą obiektu kontekstu i utrzymać czystość składni szablonu w porównaniu do łączenia ciągów. Obie biblioteki generują zwykły ciąg HTML, który jest przekazywany bezpośrednio do renderHtmlAsPdf.
Podczas generowania PDF-ów w zadaniu wsadowym — na przykład, jednego rachunku dla każdego klienta — utwórz instancję ChromePdfRenderOptions przed pętlą i użyj tej samej instancji dla każdego wywołania renderowania. Tworzenie nowego obiektu opcji na wywołanie dodaje niepotrzebny narzut związany z alokacją obiektu.)}]
Jak wyodrębnić tekst z PDF w Javie?
PdfDocument.extractAllText odczytuje całą treść tekstową z każdej strony w PDF i zwraca ją jako jeden ciąg. To jest przydatne do indeksowania wyszukiwania, ekstrakcji danych i weryfikacji zawartości po renderowaniu.
import com.ironsoftware.ironpdf.*;
import java.nio.file.Paths;
// Open an existing PDF (or use the result of a render call)
PdfDocument pdf = PdfDocument.fromFile(Paths.get("output.pdf"));
// Extract all text content as a plain string
String text = pdf.extractAllText();
System.out.println(text);
Zwrócony ciąg zachowuje kolejność odczytu tekstu na każdej stronie, ale nie zawiera formatowania. Spacje między kolumnami a komórkami tabel są reprezentowane jako spacje. Dla plików PDF zawierających wiele sekcji logicznych, extractTextFromPage(int pageIndex) izoluje tekst z pojedynczej strony, co jest bardziej wydajne przy przetwarzaniu dużych dokumentów po jednej stronie na raz.
Ekstrakcja tekstu działa tylko na PDF-ach, gdzie tekst jest przechowywany jako rzeczywiste obiekty tekstowe w strukturze PDF — PDF-y generowane przez renderHtmlAsPdf zawsze się kwalifikują. Skanowane dokumenty, gdzie strony to obrazy, wymagają OCR przed możliwością ekstrakcji tekstu. IronOCR jest uzupełniającą biblioteką Iron Software, która dodaje możliwości OCR do aplikacji Java i .NET.
Do ekstrakcji obrazów użyj pdf.extractAllImages(), która zwraca listę obiektów BufferedImage, po jednym na każdy znaleziony obraz w dokumencie. Zobacz przykład ekstrakcji tekstu z PDF i przykład ekstrakcji obrazów z PDF dla pełnych wzorców kodu.
Jak skompresować plik PDF?
PdfDocument.compressImages zmniejsza rozmiar pliku poprzez ponowne kodowanie osadzonych obrazów o niższej jakości. To jest szczególnie skuteczne dla PDF-ów, które zostały wygenerowane z stron internetowych zawierających duże zdjęcia lub obrazy banerowe.
import com.ironsoftware.ironpdf.*;
import java.nio.file.Paths;
PdfDocument pdf = PdfDocument.fromFile(Paths.get("large_report.pdf"));
// Compress embedded images to 60% quality (0–100 scale)
pdf.compressImages(60);
pdf.saveAs("compressed_report.pdf");
Wartości jakości między 50 a 75 zwykle zmniejszają rozmiar pliku o 40–70% przy akceptowalnej wierności wizualnej dla czytania na ekranie. Wartości poniżej 40 mogą wprowadzać widoczne artefakty na zdjęciach, chociaż mogą być akceptowalne dla diagramów i zrzutów ekranu z dużymi obszarami jednokolorowymi.
Przeciążona metoda compressImages(int quality, boolean scaleExistingImages) akceptuje również wartość logiczną dla tego, czy skalować obrazy większe od ich wyświetlanego rozmiaru w PDF. Ustawienie tego na true dodatkowo zmniejsza rozmiar pliku, eliminując nadmiarową rozdzielczość, która występuje, gdy obraz o wysokiej rozdzielczości jest osadzony, ale wyświetlany w znacznie mniejszym rozmiarze na stronie. Jest to powszechne w konwersjach web-to-PDF, gdzie obrazy są serwowane przy rozdzielczości 2x dla wyświetlaczy retina.
Przykład kompresji PDF demonstruje kompresję masową w wielu stronach dokumentów, w tym sposób weryfikacji zmniejszenia rozmiaru po kompresji.
Kolejne kroki
Ten samouczek obejmował trzy metody konwersji HTML na PDF, instalację, konfigurację licencji, opcje renderowania, nagłówki i stopki, ustawienia układu strony, ekstrakcję tekstu i kompresję plików.
Aby pójść dalej, eksploruj te zasoby w dokumentacji IronPDF dla Javy:
- Ustawienia generowania PDF — Konfiguruj DPI, powiększenie, limit czasu i typ mediów CSS dla precyzyjnej kontroli renderowania.
- Nagłówki i stopki — Dodaj nagłówki i stopki w HTML z logotypami marki i niestandardowymi układami.
- Układ strony — ustaw niestandardowe marginesy i wymiary papieru dla gotowego do druku wyniku.
- Znaki wodne — stosuj tło i pierwszoplanowe znaki wodne dla bezpieczeństwa dokumentu.
- Ekstrakcja treści — Wyciągaj tekst z PDF i wyciągaj obrazy do przetwarzania na dalszych etapach.
- Kompresja plików — Zmniejsz rozmiar pliku PDF dla przechowywania i wysyłki e-mail.
- Dokumentacja API — przeglądaj pełne dokumentację API IronPDF dla Javy dla każdej klasy i metody.
Rozpocznij bezpłatną wersję próbną, aby zacząć konwertować HTML na PDF w twojej aplikacji Java już dziś. Kiedy będziesz gotów do wdrożenia, zobacz opcje licencjonowania, aby znaleźć plan pasujący do twojego projektu.
Często Zadawane Pytania
Jak przekonwertować ciąg HTML na PDF w Java?
Wywołaj PdfDocument.renderHtmlAsPdf z twoim ciągiem HTML. Przekaż opcjonalną bazową ścieżkę jako drugi argument tak, aby względne referencje CSS, obrazków i skryptów były poprawnie rozwiązane. Wywołaj saveAs na zwróconym PdfDocument, aby zapisać plik.
Jak przekonwertować URL na PDF w Java?
Wywołaj PdfDocument.renderUrlAsPdf z pełnym URL. IronPDF pobiera stronę, czeka na wykonanie JavaScript, i renderuje w pełni załadowany DOM jako PDF.
Jak przekonwertować lokalny plik HTML na PDF w Java?
Wywołaj PdfDocument.renderHtmlFileAsPdf z pełną ścieżką pliku. Wszystkie względne odwołania do zasobów w pliku HTML są automatycznie rozwiązywane względem katalogu tego pliku.
Jak zainstalować IronPDF w projekcie Java, używając Maven?
Dodaj zależność IronPDF do pom.xml z groupId com.ironsoftware i artifactId ironpdf, następnie uruchom mvn install z poziomu katalogu głównego projektu.
Jak usunąć znak wodny z plików PDF generowanych przez IronPDF?
Wywołaj License.setLicenseKey z ważnym kluczem licencyjnym przed jakimkolwiek wywołaniem renderowania. Bez klucza licencyjnego IronPDF nakłada kafelkowany znak wodny na każdą stronę.
Jak dodać nagłówki i stopki do PDF w Java?
Utwórz instancję TextHeaderFooter, ustaw jej właściwości tekstowe, używając tokenów formatu, takich jak {page} i {total-pages}, następnie wywołaj pdf.addTextHeaders i pdf.addTextFooters. Dla stylizowanych nagłówków z logotypami, użyj HtmlHeaderFooter zamiast tego.
Jak ustawić marginesy stron PDF i rozmiar papieru w Java?
Utwórz instancję ChromePdfRenderOptions i wywołaj setMarginTop, setMarginBottom, setMarginLeft, setMarginRight (w milimetrach) i setPaperSize z wartością wyliczeniową PaperSize. Przekaż opcje do dowolnej metody renderowania.
Jak połączyć wiele plików PDF w jeden w Java?
Utwórz List
Jak zabezpieczyć hasłem plik PDF w Java?
Utwórz instancję SecurityOptions, wywołaj setUserPassword i setOwnerPassword, następnie zastosuj to za pomocą PdfSecurityManager przed zapisaniem dokumentu.
Jak wyodrębnić tekst z pliku PDF w Javie?
Wywołaj pdf.extractAllText() aby pozyskać całą zawartość tekstową jako pojedynczy ciąg znaków. Użyj extractTextFromPage(int pageIndex) do wyodrębnienia tekstu z konkretnej strony.
Why is my JavaScript-driven content not appearing in the PDF?
Enable JavaScript rendering by setting RenderingOptions.EnableJavaScript = true and add a render delay using RenderingOptions.WaitFor.RenderDelay to ensure dynamic content is fully loaded before conversion. See WaitFor guide →
What is the best method to add headers and footers to a PDF in C#?
Use the TextHeaderFooter class for simple text headers and footers, or the HtmlHeaderFooter class for more complex HTML content. You can include dynamic placeholders such as {page}, {total-pages}, and {date} for automatic content generation. See headers & footers guide →
How do I control page breaks, including stopping table rows from splitting across pages?
Control page breaks in your PDFs by using CSS properties like page-break-after: always and page-break-inside: avoid within a print media type CSS block. To keep table rows from splitting across pages, apply page-break-inside: avoid to the tr elements. See page breaks guide →
How do I set paper size and orientation, and why does my A4 output look the wrong size?
Set the paper size using RenderingOptions.PaperSize (options include A4, Letter, Legal, etc.) and the orientation with RenderingOptions.PaperOrientation for Portrait or Landscape. Custom sizes in millimeters or inches are also supported. If A4 output still looks off, check that a CSS @page size rule or fixed-width content isn't overriding PaperSize, and keep your CSS dimensions consistent with the paper size you set. See paper size guide →
Can I convert authenticated web pages to PDF?
Yes. IronPDF supports cookies, custom HTTP headers, and form-based authentication. Set cookies via ChromePdfRenderer.RenderingOptions.CustomCookies, or pass auth headers for token-based authentication. Windows NTLM and Kerberos authentication are also supported. See cookies guide →
Is it possible to secure my generated PDFs with a password?
Yes, you can use the SecuritySettings property to set user and owner passwords and configure permissions like printing and copying, with AES-128 encryption applied automatically. See encryption guide →
Can I generate PDF/A compliant documents from HTML?
Yes. IronPDF supports PDF/A-1b, PDF/A-2b, PDF/A-3b and PDF/UA standards for archival and accessibility compliance, which most HTML-to-PDF converters do not offer. See PDF/A guide →
How do I optimize performance for high-volume PDF generation and avoid timeouts on large jobs?
Optimize performance by using async methods like RenderHtmlAsPdfAsync for non-blocking operations. Reuse ChromePdfRenderer instances, process multiple PDFs concurrently using Task.WhenAll, and ensure you have adequate server resources on a 64-bit system. For large multipage documents, increase RenderingOptions.Timeout so long renders aren't cut short. See async guide →
Can I deploy IronPDF on Azure, AWS, or Docker?
Yes. IronPDF runs on Azure App Service, Azure Functions, AWS Lambda, and Docker containers on Linux. Dedicated setup guides and Docker images are available for each platform. See Azure guide → · See AWS guide → · See Docker guide →
Why does HTML-to-PDF fail in Docker or on Linux?
Missing Chrome native dependencies cause most container failures. Use the IronPdf.Linux NuGet package, and either install Chrome's shared libraries in your Dockerfile via apt-get and set LinuxAndDockerDependenciesAutoConfig = false, or set it to true and let IronPDF install them on first run. See Docker guide →
Why does IronPDF time out or run out of memory in AWS Lambda?
Chrome-based rendering is memory-intensive and Lambda's filesystem is read-only outside /tmp. Configure at least 512 MB of memory and a 60-second timeout, point Installation.TempFolderPath and Installation.CustomDeploymentDirectory to /tmp, and disable GPU acceleration with Installation.ChromeGpuMode. Cold starts add initialization time for the embedded engine. See AWS Lambda guide →
What is the best HTML to PDF library for .NET?
The best library should support accurate Chrome rendering, cross-platform deployment, and enterprise features. IronPDF covers all of these, running on Windows, Linux, macOS, and Docker, with support for security, signatures, compliance, and scalable .NET applications.
What are the free HTML to PDF options for .NET?
Open-source routes such as wkhtmltopdf, PuppeteerSharp, and Playwright convert HTML to PDF at no cost, but trade convenience for upkeep, such as older rendering engines, bundled browser binaries, or manual server configuration. IronPDF is commercial, with a free 30-day trial that has full features and no watermarks during development; production licenses start at $999. See pricing →
How does IronPDF compare with iTextSharp for HTML to PDF?
The free version of iTextSharp doesn't support native HTML to PDF conversion and has a complex low-level API. IronPDF provides seamless HTML conversion with an intuitive API, full CSS3/JavaScript support, and no AGPL licensing restrictions. See iTextSharp comparison →
How does IronPDF compare with Aspose.PDF and Syncfusion for HTML to PDF?
IronPDF's embedded Chromium engine produces pixel-accurate output for modern HTML, CSS, and JavaScript. In our Reddit homepage test, Aspose.PDF required downloading the HTML manually and missed most content sections, while Syncfusion rendered with sections and dynamic content missing without extra tuning. See Aspose comparison → · See Syncfusion comparison →
How does IronPDF compare with QuestPDF?
They solve different problems. QuestPDF is a code-first layout engine: you describe documents in fluent C#, and it renders no HTML, CSS, or JavaScript. IronPDF renders existing HTML, CSS, and JavaScript through embedded Chromium, so web templates convert directly. Choose QuestPDF for fully programmatic documents; choose IronPDF when your content already lives in HTML. See library comparison →
Does IronPDF support .NET 10?
Yes, IronPDF is fully compatible with .NET 10. According to IronPDF release notes, the library is day-one ready for .NET 10 projects, with zero extra configuration needed. Whether you're using web, console, desktop, or microservices applications, IronPDF works "out of the box" with .NET 10.
Is IronPDF free to use?
IronPDF offers a free 30-day trial with full functionality and no watermarks on development. Production use requires a commercial license starting at $999. Lite, Plus, Professional, and Enterprise tiers are available. See pricing →

Jacob Mellor jest Chief Technology Officer w Iron Software i wizjonerskim inżynierem, pionierem technologii C# PDF. Jako pierwotny deweloper głównej bazy kodowej Iron Software, kształtuje architekturę produktów firmy od jej początku, przekształcając ją wspólnie z CEO Cameron Rimington w firmę liczącą ponad 50 osób, obsługującą NASA, Teslę i światowe agencje rządowe.