如何使用 IronPDF for Java 將 HTML 轉換為 PDF

Java 中的 HTML 轉 PDF

This article was translated from English: Does it need improvement?
Translated
View the article in English

IronPDF for Java 透過運行完整的 Chromium 渲染引擎(即驅動現代瀏覽器的同款引擎),將 HTML 內容轉換為 PDF 文件。 每個 CSS 屬性、字型、圖片以及由 JavaScript 生成的版面配置,皆會精確呈現為瀏覽器視窗中的樣貌,最終以像素級精準的 PDF 格式呈現於頁面。

本教學將逐步引導您了解三種核心轉換方法:HTML 字串轉 PDF、即時網址轉 PDF,以及本機 HTML 檔案轉 PDF。 內容亦涵蓋安裝、授權設定,以及開發人員最常使用的渲染選項。

此 Java 函式庫的 API 架構與 IronPDF for .NET 完全一致,因此同時使用這兩種執行環境的團隊將能輕鬆完成轉換。 本教學中所有範例的原始碼皆可於 GitHub 上取得。

快速入門:在 Java 中將 HTML 轉換為 PDF

將 IronPDF 加入您的 Maven pom.xml,然後呼叫單一方法即可產生 PDF:

//:path=/static-assets/pdf/content-code-examples/tutorials/html-to-pdf/quickstart.java
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");
//:path=/static-assets/pdf/content-code-examples/tutorials/html-to-pdf/quickstart.java
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");
JAVA

立即透過免費試用,在您的專案中開始使用 IronPDF。

第一步:
green arrow pointer

目錄


安裝 IronPDF for Java

IronPDF for Java 透過 Maven Central 發佈,並提供獨立 JAR 檔版本。 對於大多數專案,建議採用 Maven 方案,因為它能處理傳遞性依賴關係,並確保各開發者機器與 CI 管道間的函式庫版本保持一致。

選項 1:將 IronPDF 新增為 Maven 依賴項

開啟專案的 pom.xml 檔案,並在 <dependencies> 區塊中新增以下項目:

//:path=/static-assets/pdf/content-code-examples/tutorials/html-to-pdf/maven-dependency.xml
<dependencies>

    <dependency>
        <groupId>com.ironsoftware</groupId>
        <artifactId>ironpdf</artifactId>
        <version>[LATEST_VERSION]</version>
    </dependency>

    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-simple</artifactId>
        <version>[LATEST_VERSION]</version>
    </dependency>
</dependencies>
//:path=/static-assets/pdf/content-code-examples/tutorials/html-to-pdf/maven-dependency.xml
<dependencies>

    <dependency>
        <groupId>com.ironsoftware</groupId>
        <artifactId>ironpdf</artifactId>
        <version>[LATEST_VERSION]</version>
    </dependency>

    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-simple</artifactId>
        <version>[LATEST_VERSION]</version>
    </dependency>
</dependencies>
XML

第一個建置項目會導入最新的 IronPDF for Java 版本。 第二個組件會啟用 SLF4J 日誌記錄功能,以便 IronPDF 的渲染引擎能在執行期間寫入診斷訊息。 偏好使用 Logback 或 Log4j 的開發人員,可改用該日誌提供者。 日誌記錄依賴項為可選項目——若無需日誌記錄,請省略此項。

儲存檔案後,請從專案的根目錄執行 mvn install 以下載這兩套函式庫。 Maven 會自動解析完整的依賴關係圖,包含 IronPDF 所需的任何傳遞性依賴項。

對於 Gradle 專案,build.gradle 中對應的依賴項宣告為:

//:path=/static-assets/pdf/content-code-examples/tutorials/html-to-pdf/gradle-dependency.java
// build.gradle (Groovy DSL)
// dependencies {
//     implementation 'com.ironsoftware:ironpdf:[LATEST_VERSION]'
//     implementation 'org.slf4j:slf4j-simple:[LATEST_VERSION]'
// }
//:path=/static-assets/pdf/content-code-examples/tutorials/html-to-pdf/gradle-dependency.java
// build.gradle (Groovy DSL)
// dependencies {
//     implementation 'com.ironsoftware:ironpdf:[LATEST_VERSION]'
//     implementation 'org.slf4j:slf4j-simple:[LATEST_VERSION]'
// }
JAVA

請將 [LATEST_VERSION] 替換為 IronPDF 變更日誌或 Maven Central 頁面中該套件的版本號。

選項 2:手動新增 JAR 檔案

請直接從 Maven Central 下載 IronPDF JAR 檔案,並將其加入專案的類別路徑中。 此方法無需建置工具即可運作,但需手動進行版本管理,因此最適合不使用 Maven 或 Gradle 的舊有專案,或網路外連受限的環境。

下載後,請透過 IDE 的專案設定將 JAR 檔案加入專案的類別路徑中。 在 IntelliJ IDEA 中,請在專案根目錄上按右鍵,選擇"開啟模組設定",導航至"依賴項",然後新增 JAR 檔案。在 Eclipse 中,請在專案上按右鍵,前往"屬性 > Java 建置路徑 > 函式庫",接著點擊"新增外部 JAR 檔案"。

請注意IronPDF JAR 檔案內含一個捆綁的 Chromium 引擎二進位檔。 在新的機器上首次執行渲染時,系統會將其提取至暫存目錄,此過程需數秒鐘。 後續呼叫將使用快取的二進位檔,並能立即啟動。 在容器化環境中,請將持久性卷掛載至提取路徑,以避免容器每次啟動時都重新提取。)}]

系統需求

IronPDF for Java 可在 JDK 8 或更高版本上運行。 它支援 Windows、Linux 及 macOS 系統,並兼容 x86-64 與 ARM64 架構。 無需安裝外部瀏覽器 — Chromium 二進位檔已內建於 JAR 檔案中。 在 Linux 系統上,請確保已安裝 Chromium 所需的標準共用函式庫。 IronPDF for Java 的文件中列出了常見 Linux 發行版所需的最低套件。


如何導入 IronPDF 並設定授權金鑰?

每個 IronPDF 類別皆位於 com.ironsoftware.ironpdf 套件中。 請將其導入任何會建立或處理 PDF 文件的原始檔案頂端。

//:path=/static-assets/pdf/content-code-examples/tutorials/html-to-pdf/import-and-license.java
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"));
//:path=/static-assets/pdf/content-code-examples/tutorials/html-to-pdf/import-and-license.java
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"));
JAVA

若未輸入授權金鑰,IronPDF 將以試用模式運行,並在每頁 PDF 上加蓋拼貼式浮水印。 設定金鑰可移除浮水印並解鎖所有功能。 立即開始免費試用,即可取得授權金鑰。

渲染後的 PDF 頁面中烙有 IronPDF 試用模式浮水印

授權金鑰是 Iron Software 在啟用試用授權或商業授權時所發行的字串。 請將其儲存於環境變數或設定檔中,而非直接硬編碼於原始碼中。 常見的做法是在啟動時從環境變數中讀取設定:

//:path=/static-assets/pdf/content-code-examples/tutorials/html-to-pdf/license-from-env.java
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);
}
//:path=/static-assets/pdf/content-code-examples/tutorials/html-to-pdf/license-from-env.java
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);
}
JAVA

此方法可將金鑰排除在版本控制之外,並使開發、測試及生產環境能輕鬆使用不同的金鑰。

重要事項License.setLicenseKeySettings.setLogPath 必須在任何渲染或處理方法之前被呼叫。 請將其置於應用程式啟動時執行——理想情況下應位於靜態初始化區塊或 main 入口點中。)}]


如何將 HTML 字串轉換為 PDF?

PdfDocument.renderHtmlAsPdf 接受一串 HTML 標記,並返回一個 PdfDocument 物件,該物件可在寫入磁碟前進行儲存、合併或修改。 這是程式化生成 HTML 的主要方法——例如,透過將資料庫值與定義為 Java 字串或從檔案載入的 HTML 範本結合,來建立報表。

//:path=/static-assets/pdf/content-code-examples/tutorials/html-to-pdf/html-string-to-pdf.java
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");
//:path=/static-assets/pdf/content-code-examples/tutorials/html-to-pdf/html-string-to-pdf.java
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");
JAVA

渲染引擎會根據可選的第二個參數(即基準路徑),解析相對資產路徑(圖片、樣式表、腳本)。 當提供基底路徑時,引擎會將其視為解析相對 URL 的根目錄。 這使得引用本地 CSS 和圖片檔案的 HTML 能夠正確渲染,無需在原始標記中進行任何路徑操作。

//:path=/static-assets/pdf/content-code-examples/tutorials/html-to-pdf/html-string-with-assets.java
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");
//:path=/static-assets/pdf/content-code-examples/tutorials/html-to-pdf/html-string-with-assets.java
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");
JAVA

saveAs 方法接受絕對路徑或相對路徑。 若檔案不存在,該函式庫會建立檔案;若檔案已存在,則會覆寫該檔案。 若要寫入應用程式尚未建立的目錄,請先使用 Files.createDirectories(Paths.get("output")) 建立該目錄,再呼叫 saveAs

IronPDF 支援 Chromium 所實現的完整 HTML5 與 CSS3 功能集。 透過 CSS 中的 @font-face 載入的自訂字型,只要字型檔案位於基礎路徑下即可正確顯示。 PDF 輸出中亦會出現由 JavaScript 渲染的 SVG 元素及 <canvas> 元素。

提示將 HTML 範本存放於專用目錄中,並將該目錄作為基底路徑傳入。 此模式讓設計師無需觸碰任何 Java 程式碼即可更新範本。


如何在 Java 中將 URL 轉換為 PDF?

PdfDocument.renderUrlAsPdf 會從指定的 URL 擷取頁面,等待 JavaScript 執行並載入動態內容,然後將完全渲染的 DOM 轉換為 PDF。

//:path=/static-assets/pdf/content-code-examples/tutorials/html-to-pdf/url-to-pdf.java
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");
//:path=/static-assets/pdf/content-code-examples/tutorials/html-to-pdf/url-to-pdf.java
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");
JAVA

該引擎可處理驗證標頭、Cookie 以及大量使用 JavaScript 的單頁應用程式。 對於需要登入或自訂請求標頭的頁面,請在呼叫 renderUrlAsPdf 之前,使用 ChromePdfRenderOptions 類別來設定請求參數。

此轉換方法適用於網頁歸檔、生成合規快照,以及從內部儀表板製作面向客戶的報告。 完全支援透過區域網路存取的伺服器生成頁面 — 請以與公開 URL 相同的方式傳入 http://localhost:8080/report/123。 IronPDF 會在頁面完全載入後才進行渲染,因此依賴非同步資料擷取的儀表板,渲染時會顯示已填入資料的圖表,而非空白的圖表。

對於需要 HTTP 基本驗證的頁面,請使用 http://user:password@host/path 格式在 URL 中傳遞憑證。 對於受會話 Cookie 保護的頁面,請在將 ChromePdfRenderOptions 物件傳遞給 renderUrlAsPdf 之前,先設定該物件的 Cookie 儲存區。 有關配置請求標頭及管理經認證 URL 的 Cookie 的詳細資訊,請參閱 IronPDF for Java 文件


如何將本地的 HTML 檔案轉換為 PDF?

PdfDocument.renderHtmlFileAsPdf 從本機檔案系統讀取 HTML 檔案,並將其渲染為 PDF。 檔案中透過相對路徑引用的所有連結資源(CSS、JavaScript、圖片),皆會以 HTML 檔案所在目錄為基準進行解析。

//:path=/static-assets/pdf/content-code-examples/tutorials/html-to-pdf/html-file-to-pdf.java
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");
//:path=/static-assets/pdf/content-code-examples/tutorials/html-to-pdf/html-file-to-pdf.java
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");
JAVA

此方法是轉換複雜 HTML 文件最精確的方式。 由於渲染引擎是基於檔案系統路徑而非記憶體中的字串進行運作,因此對多層級資產目錄的相對路徑引用,無需任何額外設定即可解析。 若範本依賴位於同一資料夾內的 style.cssscript.js,則無需調整路徑即可正確渲染。

此方法特別適用於發票生成、合約製作,以及任何設計師能獨立於 Java 應用程式之外維護 HTML 範本的工作流程。 開發團隊將該範本視為資料檔案,與應用程式一同儲存,並透過傳遞路徑來呼叫 renderHtmlFileAsPdf。 當設計師更新範本以變更品牌標識或版面配置時,無需修改任何 Java 程式碼。

請注意IronPDF 支援 Chromium 所支援的所有現代 HTML 和 CSS 功能 — Flexbox、CSS Grid、CSS 變數、Web 字型以及媒體查詢,皆能在輸出 PDF 中正確呈現。


如何設定 PDF 產生選項?

ChromePdfRenderOptions 控制渲染行為:紙張尺寸、邊距、Zoom 比例、列印媒體類型、JavaScript 超時設定等。 建立一個實例,設定所需的屬性,並將其作為第二個參數傳遞給任何 render*AsPdf 方法。

//:path=/static-assets/pdf/content-code-examples/tutorials/html-to-pdf/render-options.java
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");
//:path=/static-assets/pdf/content-code-examples/tutorials/html-to-pdf/render-options.java
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");
JAVA

CssMediaType.PRINT 設定會指示引擎套用 @media print CSS 規則,許多 HTML 範本會利用此規則來隱藏導覽列並套用專屬的 PRINT 版面配置。 對於使用 JavaScript 圖表庫(如 D3.js、Chart.js)或採用延遲載入內容的網頁,setJavaScriptTimeout 方法至關重要——若超時設定過短,PDF 將在 JavaScript 渲染完成前就擷取頁面,導致產生空白的圖表或缺失部分內容。 若渲染出的 PDF 缺少預期內容,請增加超時時間。

setDpi 方法用於控制輸出中的影像解析度。 預設值(96 DPI)適用於螢幕顯示的文件。 若 PDF 文件將被列印或顯示於高 DPI 螢幕上,請使用 150 或 300 DPI。 較高的 DPI 值會使檔案大小成比例增加。 請參閱 PDF 生成設定的程式碼範例,以查看可設定屬性的完整清單。


如何新增頁首和頁尾?

IronPDF 同時支援基於文字與基於 HTML 的頁首和頁尾。 文字標題使用 TextHeaderFooter 物件,其中包含格式標記 ({page}, {total-pages}, {date}),這些標記會在渲染時自動解析。

//:path=/static-assets/pdf/content-code-examples/tutorials/html-to-pdf/headers-footers.java
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");
//:path=/static-assets/pdf/content-code-examples/tutorials/html-to-pdf/headers-footers.java
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");
JAVA

{page}{total-pages} 標記會在頁尾產生如"第 3 頁,共 12 頁"的值,並會隨著頁數變化自動更新,因此無需在渲染前預先知道最終頁數。 {date} 標記會根據系統地區設定插入當前日期。 其他可用的標記包括 {document-title} 以及 {url}

預設情況下,使用 addTextHeadersaddTextFooters 添加的頁首與頁尾將套用至文件中的每一頁。 傳遞可選的頁碼範圍參數以限制特定頁面 — 例如,跳過封面頁的頁首。

若需在樣式化標題中加入標誌、品牌顏色或自訂版面配置,請改用 HtmlHeaderFooter —— 此標籤可接受完整的 HTML 字串,並以與頁面主體相同的方式呈現。 請參閱自訂頁首與頁尾範例,以了解完整的 HTML 頁首範式。


如何設定頁面邊距和紙張尺寸?

在呼叫任何 render*AsPdf 方法之前,請先傳入一個已設定邊距與紙張尺寸值的 ChromePdfRenderOptions 實例。

//:path=/static-assets/pdf/content-code-examples/tutorials/html-to-pdf/margins-paper-size.java
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");
//:path=/static-assets/pdf/content-code-examples/tutorials/html-to-pdf/margins-paper-size.java
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");
JAVA

邊距值以毫米為單位。 PaperSize 枚舉涵蓋標準尺寸(A4、Letter、Legal、A3 及其他)。 需要非標準尺寸的開發人員,可使用 options.setCustomPaperWidthoptions.setCustomPaperHeight 設定自訂寬度和高度。 自訂紙張尺寸範例與自訂邊距範例展示了完整的設定模式。


如何在 PDF 上添加浮水印?

IronPDF 中的浮水印是以 HTML 格式疊加在每頁上,其透明度可自行設定。 此方法讓開發人員能完全掌控浮水印的外觀——任何 HTML 元素、圖片或格式化文字皆可作為浮水印使用。

//:path=/static-assets/pdf/content-code-examples/tutorials/html-to-pdf/watermark.java
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");
//:path=/static-assets/pdf/content-code-examples/tutorials/html-to-pdf/watermark.java
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");
JAVA

applyStamp 方法接受 HtmlStampOptions 參數以進行精確定位 — 居中、左上角、自訂像素偏移量,以及 z-index(前景或背景)。 將水印設定為背景,可使其置於文字後方,確保文件內容仍清晰可讀。 將其設為前景可使其置於最上層,在PRINT時較不易被遮蔽。

提示若要產生重複的拼貼水印(類似 IronPDF 試用模式中應用之效果),請在 HTML 水印字串中渲染一組旋轉的文字元素,並調整元素大小以填滿整頁。

請參閱自訂浮水印操作指南,其中包含背景浮水印、拼貼圖案,以及透過升級授權移除浮水印的範例。


如何將多個 PDF 合併為一個檔案?

PdfDocument.merge 會依序結合兩個或多個 PdfDocument 物件,並返回一個新的單一文件。 這是彙整組件區段報告、附加封面頁,或將批次工作中的使用者專屬區段拼接在一起的首選方法。

//:path=/static-assets/pdf/content-code-examples/tutorials/html-to-pdf/merge-pdfs.java
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");
//:path=/static-assets/pdf/content-code-examples/tutorials/html-to-pdf/merge-pdfs.java
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");
JAVA

各原始文件的頁面將依照原始清單所指定的順序,出現在合併後的輸出結果中。 合併後的文件不會繼承任何原始文件的元資料——若這些欄位對下游使用者至關重要,請在合併後使用 PdfDocument.getPdfMetaData() 更新 meta.title 及其他文件屬性。

merge 方法還有一種接受兩個 PdfDocument 實例作為參數的重載版本。 若需批量合併多份文件,請使用清單重載版本——由於它能在單次處理中處理所有來源文件,因此比串接多個雙參數呼叫更為高效。

請注意合併清單中的每個來源 PdfDocument 在呼叫後仍保持有效且未變更。 merged 實例是一份新的獨立文件。 當不再需要原始文件時,請透過其 close() 方法釋放相關的原生資源。)}]


如何在 PDF 中新增或刪除頁面?

您可以使用 PdfDocument.copyPagesPdfDocument.removePages 方法,將單一頁面從一個文件複製到另一個文件中,或直接刪除。

//:path=/static-assets/pdf/content-code-examples/tutorials/html-to-pdf/page-operations.java
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");
//:path=/static-assets/pdf/content-code-examples/tutorials/html-to-pdf/page-operations.java
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");
JAVA

IronPDF 中的頁面索引採用零起始計數。 在移除多頁內容時,請將所有索引值透過單次 removePages 呼叫傳入,而非在迴圈中多次呼叫,因為每次移除操作都會導致後續頁面的索引值發生位移。 一次傳遞完整清單可避免索引偏移。 例如,若要從五頁的文件中移除第 2 頁和第 4 頁,應傳入 Arrays.asList(1, 3) —— 而非分別進行兩次呼叫。

若要插入外部 PDF 中的頁面(例如,從靜態範本追加法律聲明),請使用 PdfDocument.insertPdf 將外部文件插入至特定位置。 插入後,接收文件的頁數會立即更新。

css page-break-after:always CSS 屬性是強制在將渲染為 PDF 的 HTML 頁面中插入分頁的標準方法。 IronPDF 亦支援較新的 break-after: page CSS 屬性。 這兩種方法都能產生可預期的分頁效果,且無需任何特殊的 Java 程式碼。


如何在 Java 中為 PDF 設定密碼保護?

IronPDF 支援 PDF 檔案中的兩種不同密碼:用於控制編輯、列印及複製權限的"擁有者密碼",以及用於控制文件開啟權限的"使用者密碼"。 兩者皆透過 SecurityOptions 類別進行設定。

//:path=/static-assets/pdf/content-code-examples/tutorials/html-to-pdf/password-protect.java
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");
//:path=/static-assets/pdf/content-code-examples/tutorials/html-to-pdf/password-protect.java
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");
JAVA

AllowUserPrinting 設定接受 PrintOptions 枚舉值:LowQualityPrintNoPrint。 當設定了擁有者密碼但使用者密碼留空時,文件可無需密碼開啟,但在 PDF 編輯器中進行編輯及其他操作時,則需輸入擁有者密碼。

警告PDF 密碼保護雖能加密檔案,但無法取代完善的存取控制系統。 若使用者擁有專業工具且決意已定,便可能對弱密碼發動暴力破解攻擊。 (對於需要真正安全防護的文件,請使用強效且隨機生成的密碼。)}]


如何轉換包含動態資料的 HTML 範本?

透過資料驅動的 HTML 範本產生 PDF 檔案,是 IronPDF 最常見的生產環境應用場景之一。 標準做法是在 Java 中使用模板庫或字串操作來建構 HTML 字串,然後將完成的字串傳遞給 renderHtmlAsPdf

//:path=/static-assets/pdf/content-code-examples/tutorials/html-to-pdf/dynamic-template.java
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");
//:path=/static-assets/pdf/content-code-examples/tutorials/html-to-pdf/dynamic-template.java
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");
JAVA

對於較大型的專案,建議考慮使用 ThymeleafFreemarker 等 Java 範本庫,將 HTML 範本作為獨立檔案管理,透過上下文物件注入資料,並使範本語法比字串拼接更為簡潔。 這兩套函式庫都會產生一個純文字 HTML 字串,該字串會直接傳遞給 renderHtmlAsPdf

提示在批次作業中產生 PDF 時 — 例如,為每位客戶生成一張發票 — 請在迴圈開始前先建立 ChromePdfRenderOptions 的實例一次,並在每次渲染呼叫時重複使用該實例。 每次呼叫都建立新的選項物件,會增加不必要的物件分配開銷。)]


如何在 Java 中從 PDF 檔案中擷取文字?

PdfDocument.extractAllText 會讀取 PDF 中每頁的所有文字內容,並將其匯總為單一字串。 這對於搜尋索引、資料擷取以及渲染後的內容驗證非常有用。

//:path=/static-assets/pdf/content-code-examples/tutorials/html-to-pdf/extract-text.java
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);
//:path=/static-assets/pdf/content-code-examples/tutorials/html-to-pdf/extract-text.java
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);
JAVA

回傳的字串保留了各頁面文字的閱讀順序,但不包含格式設定。 欄位與表格儲存格之間的空白以空格表示。 對於包含多個邏輯區段的 PDF 檔案,extractTextFromPage(int pageIndex) 會將單一頁面的文字隔離出來,這在逐頁處理大型文件時更為高效。

文字擷取功能僅適用於 PDF 檔案中文字以實際文字物件形式儲存於 PDF 結構內的檔案——由 renderHtmlAsPdf 生成的 PDF 檔案均符合此條件。 若為頁面為圖像的掃描文件,必須先進行 OCR 處理,才能進行文字擷取。 IronOCR 是 Iron Software 旗下的一款輔助程式庫,可為 Java 和 .NET 應用程式增添 OCR 功能。

若要擷取圖片,請使用 pdf.extractAllImages(),該方法會傳回一個 BufferedImage 物件清單,清單中每個物件對應文件中找到的一張圖片。 請參閱"從 PDF 擷取文字"範例及"從 PDF 擷取圖片"範例,以了解完整的程式碼範例。


如何壓縮 PDF 檔案?

PdfDocument.compressImages 透過以較低品質重新編碼嵌入的圖片來縮小檔案大小。 這對於由包含大型照片或橫幅圖片的網頁所生成的 PDF 檔案特別有效。

//:path=/static-assets/pdf/content-code-examples/tutorials/html-to-pdf/compress-pdf.java
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");
//:path=/static-assets/pdf/content-code-examples/tutorials/html-to-pdf/compress-pdf.java
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");
JAVA

品質值設定在 50 至 75 之間時,通常可將檔案大小縮小 40–70%,同時在螢幕閱讀時仍能保持可接受的視覺保真度。 若數值低於 40,照片上可能會出現明顯的偽影,但對於含有大面積單色區域的圖表和螢幕截圖而言,此數值尚可接受。

該重載的 compressImages(int quality, boolean scaleExistingImages) 方法亦接受一個布林值,用以決定是否縮放那些尺寸大於 PDF 中顯示尺寸的圖片。 將此設定為 true 可進一步縮小檔案大小,因為當高解析度圖片被嵌入但於頁面中以較小尺寸顯示時,此設定能消除因過高解析度所導致的冗餘空間。 這在網頁轉 PDF 的轉換中很常見,此時圖片會以 2 倍解析度提供,以支援視網膜顯示器。

PDF 壓縮範例展示了跨多頁文件的批次壓縮流程,並包含如何驗證壓縮後的檔案大小減少情況。


後續步驟

本教學涵蓋了三種 HTML 轉 PDF 的方法、安裝、授權設定、渲染選項、頁首與頁尾、頁面版面配置、文字擷取以及檔案壓縮。

若需進一步了解,請參閱 IronPDF for Java 文件中的以下資源:

  1. PDF 生成設定設定 DPI、Zoom、超時及 CSS 媒體類型,以精確控制渲染效果。
  2. 頁首與頁尾加入包含品牌標誌及自訂版面的 HTML 頁首與頁尾
  3. 頁面版面配置 — 設定自訂邊距紙張尺寸,以產生可直接列印的輸出檔。
  4. 水印 — 為文件安全性添加背景與前景水印
  5. 內容擷取從 PDF 檔案中擷取文字,並擷取圖片以供後續處理。
  6. 檔案壓縮縮小 PDF 檔案大小,以利儲存及電子郵件傳送。
  7. API 參考 — 瀏覽完整的 IronPDF for Java API 參考,了解每個類別與方法。

立即開始免費試用,讓您的 Java 應用程式從今天起就能將 HTML 轉換為 PDF。 當您準備部署時,請查看授權方案,以找到最適合您專案的方案。

常見問題

如何在 Java 中將 HTML 字串轉換為 PDF?

呼叫 PdfDocument.renderHtmlAsPdf 並傳入您的 HTML 字串。可選地將基礎路徑作為第二個參數傳入,以便相對路徑的 CSS、圖片和腳本引用能正確解析。呼叫 saveAs 傳入回傳的 PdfDocument 來寫入檔案。

如何在 Java 中將 URL 轉換為 PDF?

呼叫 PdfDocument.renderUrlAsPdf 並傳入完整網址。IronPDF 會載入頁面、等待 JavaScript 執行完畢,並將完全載入的 DOM 渲染為 PDF。

如何在 Java 中將本機 HTML 檔案轉換為 PDF?

呼叫 PdfDocument.renderHtmlFileAsPdf 時,請傳入絕對檔案路徑。HTML 檔案中的所有相對資源參照,將自動以該檔案所在目錄為基準進行解析。

如何在 Java 專案中使用 Maven 安裝 IronPDF?

將 IronPDF 依賴項加入 pom.xml 並以 groupId com.ironsoftwareartifactId ironpdf,然後從專案根目錄執行 mvn install

如何移除由 IronPDF 生成的 PDF 檔案中的浮水印?

License.setLicenseKey 。若未提供有效授權金鑰,IronPDF 將在每頁添加拼接式浮水印。

如何在 Java 中為 PDF 文件添加頁首和頁尾?

建立一個 TextHeaderFooter 實例,並使用格式標記(例如 {page}{total-pages},然後呼叫 pdf.addTextHeaderspdf.addTextFooters。若要建立帶有標誌的樣式化標題,請改用 HtmlHeaderFooter

如何在 Java 中設定 PDF 頁邊距和紙張尺寸?

建立一個 ChromePdfRenderOptions 實例並呼叫 setMarginTop, setMarginBottom, setMarginLeft, setMarginRight (單位為公釐) 並 setPaperSize 並傳入 PaperSize 枚舉值。將選項傳遞給任何渲染方法。

如何在 Java 中將多個 PDF 合併為一個檔案?

建立一個 List<PdfDocument> 並將其傳遞給 PdfDocument.merge。該方法會傳回一個新的 PdfDocument ,其中包含來自所有來源的所有頁面。

如何在 Java 中為 PDF 設定密碼保護?

建立一個 SecurityOptions 實例,呼叫 setUserPasswordsetOwnerPassword,然後透過 PdfSecurityManager ,並透過

如何在 Java 中從 PDF 檔案中擷取文字?

呼叫 pdf.extractAllText() 以單一字串形式擷取所有文字內容。使用 extractTextFromPage(int pageIndex) 從特定頁面擷取文字。

Curtis Chau
技術撰稿人

Curtis Chau 擁有卡爾頓大學(Carleton University)的電腦科學學士學位,專精於前端開發,並精通 Node.js、TypeScript、JavaScript 及 React。他熱衷於打造直觀且美觀的用戶介面,喜歡運用現代框架,並創建結構完善、視覺上吸引人的手冊。

除了開發工作之外,Curtis 對物聯網(IoT)抱有濃厚興趣,致力於探索整合硬體與軟體的創新方法。閒暇時,他喜歡玩遊戲和開發 Discord 機器人,將對科技的熱愛與創意相結合。

準備開始了嗎?
版本: 2026.5 just released
Still Scrolling Icon

還在捲動嗎?

想要快速證明?
執行範例 觀看您的 HTML 變成 PDF。