在Java中將HTML轉換為PDF Copy for LLMsCopy for LLMs Copy page as Markdown for LLMs
# 在Java中將HTML轉換為PDF
IronPDF for Java使用完整的Chromium渲染引擎將HTML內容轉換為PDF文件——這與現代瀏覽器使用的引擎相同。 每個CSS屬性、字體、圖像和由JavaScript生成的佈局都會像在瀏覽器窗口中一樣精確渲染,然後作為像素精確的PDF登陸頁面。
本教程介紹了三種核心轉換方法:HTML字串轉PDF、即時URL轉PDF和本地HTML文件轉PDF。 還涵蓋了安裝、授權配置以及開發者最常用的渲染選項。
Java函式庫模擬了[IronPDF for .NET](/tutorials/html-to-pdf/)的API,因此需要在兩個運行時間間切換的團隊會發現此過渡非常簡便。 [GitHub](https://github.com/iron-software/IronPdfJava.Examples/tree/main/tutorials/html-to-pdf)上提供了本教程中所有範例的源程式碼。
*as-heading:2(快速開始:在Java中將HTML轉換為PDF)*
將IronPDF新增到您的Maven `pom.xml`,然後調用一個方法即可生成PDF:
```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");
```
!!!--LIBRARY_START_TRIAL_BLOCK--!!!
*as-heading:2(目錄)*
- [Installing IronPDF for Java](#installing-ironpdf-for-java)
- [如何導入IronPDF並配置授權金鑰?](#how-do-i-import-ironpdf-and-configure-a-license-key)
- [如何將HTML字串轉換為PDF?](#how-do-i-convert-an-html-string-to-pdf)
- [如何在Java中將URL轉換為PDF?](#how-do-i-convert-a-url-to-pdf-in-java)
- [如何將本地HTML文件轉換為PDF?](#how-do-i-convert-a-local-html-file-to-pdf)
- [如何設置PDF生成選項?](#how-do-i-set-pdf-generation-options)
- [如何新增頁眉和頁脚?](#how-do-i-add-headers-and-footers)
- [如何設置頁面邊距和紙張尺寸?](#how-do-i-set-page-margins-and-paper-size)
- [如何將水印應用於PDF?](#how-do-i-apply-a-watermark-to-a-pdf)
- [如何將多個PDF合併為一個?](#how-do-i-merge-multiple-pdfs-into-one)
- [如何新增或刪除PDF中的頁面?](#how-do-i-add-or-remove-pages-from-a-pdf)
- [如何在Java中給PDF加密設置密碼保護?](#how-do-i-password-protect-a-pdf-in-java)
- [如何轉換帶有動態資料的HTML模板?](#how-do-i-convert-an-html-template-with-dynamic-data)
- [如何從PDF中提取文字?](#how-do-i-extract-text-from-a-pdf-in-java)
- [如何壓縮PDF文件?](#how-do-i-compress-a-pdf-file)
- [下一步](#next-steps)
---
## 安裝IronPDF for Java
IronPDF for Java通過[Maven Central](https://central.sonatype.com/artifact/com.ironsoftware/ironpdf)和獨立的JAR提供。 因為它處理遞歸依賴並保持程式庫版本在開發人員機器和CI管道中一致,所以對於大多數專案來說,推薦使用Maven方式。
### 選項1:將IronPDF作為Maven依賴新增
打開專案的`<dependencies>`塊中:
```xml
//: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>
```
第一個工件拉取了[最新的IronPDF for Java版本](/java/product-updates/changelog/)。 第二個工件啟用了SLF4J日誌記錄,使得IronPDF的渲染引擎在執行期間可以寫入診斷消息。 喜歡[Logback](https://logback.qos.ch/)或Log4J的開發者可以替換掉提供者。 日誌記錄依賴是可選的 - 如果不需要日誌可以省略。
保存文件後,從專案的根目錄運行`mvn install`,下載兩個程式庫。 Maven自動解析全依賴圖,包括IronPDF需要的任何遞歸依賴。
對於Gradle專案,等效的依賴宣告在`build.gradle`中:
```java
// build.gradle (Groovy DSL)
// dependencies {
// implementation 'com.ironsoftware:ironpdf:[LATEST_VERSION]'
// implementation 'org.slf4j:slf4j-simple:[LATEST_VERSION]'
// }
```
用[IronPDF變更記錄](/java/product-updates/changelog/)或工件的Maven Central頁面上的版本號替換`[LATEST_VERSION]`。
### 選項2:手動新增JAR文件
直接從[Maven Central](https://central.sonatype.com/artifact/com.ironsoftware/ironpdf)下載IronPDF JAR並將其新增到專案的類路徑中。 這種方法在沒有構建工具的情況下有效,但需要手動管理版本,因此最好適用於不使用Maven或Gradle的遺留項目,或限制出站網路存取的環境。
下載後,通過IDE的專案設定將JAR新增到專案的類路徑中。 在IntelliJ IDEA中,右鍵單擊專案的根目錄,選擇"打開模塊設定",導航至"依賴",然後新增JAR文件。在Eclipse中,右鍵點擊專案,進入"性質 > Java建構路徑 > 函式庫",然後點選"新增外部JARs"。
[[i:(IronPDF JAR中包括了一個捆綁的Chromium引擎二進制文件。 第一次在新的機器上進行渲染調用時,將其提取到一個臨時目錄,這需要幾秒鐘。 隨後的調用則使用快取的二進制文件,並立即開始。 在容器化環境中,將持續卷掛載在解壓路徑,避免在每次容器啟動時重新提取。)]]
### 系統需求
IronPDF for Java需要JDK 8或更高版本。 它支援Windows、Linux和macOS,適用於x86-64和ARM64架構。 不需要安裝外部瀏覽器——Chromium二進制文件已與JAR捆綁。 在Linux上,確保Chromium期望的標準共享程式庫已存在。 [IronPDF for Java文件](/java/docs/)列出了常見Linux版本所需的最小包。
---
## 如何導入IronPDF並配置授權金鑰?
每個IronPDF類都存在於`com.ironsoftware.ironpdf`包中。 在將建立或操作PDF文件的任何源文件的頂部進行導入。
```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"));
```
沒有授權金鑰,IronPDF運行在試用模式,並在每個PDF頁面上加蓋平鋪水印。 設置金鑰可以移除水印並解鎖所有功能。 [開始免費試用](trial-license)以立即獲取金鑰。

授權金鑰是一個字串,由激活試用或商業許可證時發放的Iron Software頒發。 將其儲存在環境變數或配置文件中,而不是在源程式碼中硬編碼。 一種常見模式是在啟動時從環境變數中讀取它:
```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);
}
```
這種方法將金鑰保存在版本控制之外,使得在開發、測試、和生產環境中使用不同的金鑰變得簡單易行。
[[n:(`Settings.setLogPath`必須在任何渲染或操縱方法之前都被調用。 將它們放在應用啟動時 - 最好在靜態初始化塊或`main`入口點中。)]]
---
## 如何將HTML字串轉換為PDF?
`PdfDocument`物件。 這是程式生成HTML的主要方法——例如,通過將資料庫值與作為Java字串定義或從文件載入的HTML模板組合來構建報告。
```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");
```
渲染引擎將相對資產路徑(圖像、樣式表、腳本)解析到可選的第二個參數——基礎路徑。 當提供基礎路徑時,該引擎將其視為從中解析相對URL的根。 這使得引用本地CSS和圖像文件的HTML可以在不對源標記語言進行路徑操作的情況下正確渲染。
```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");
```
`saveAs`方法接受絕對或相對路徑。 如果文件不存在,該庫將建立該文件,如果存在則覆蓋它。 在寫入可能未建立的目錄時,請在調用`Files.createDirectories(Paths.get("output"))`先建立目錄。
IronPDF支援Chromium實現的完整HTML5和CSS3功能集。 通過CSS中`@font-face`載入的自定義字型會在字型文件在基礎路徑可存取時正確渲染。 SVG元素和由JavaScript渲染的`<canvas>`元素也會出現在PDF輸出中。
[[t:(將HTML模板保存在專用目錄中,並將該目錄作為基礎路徑。 這種模式允許設計人員更新模板而不需接触任何Java程式碼。)]]
---
## 如何將 URL 轉換為 Java 中的 PDF?
`PdfDocument.renderUrlAsPdf`提取給定URL的頁面,等待JavaScript執行和動態內容載入,然後將完整渲染的DOM轉換為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");
```
引擎會處理身份驗證頭、Cookie和JavaScript繁重的單頁應用程式。 對於需要登入或自訂請求頭的頁面,使用`renderUrlAsPdf`之前配置請求參數。
這種轉換方法對於存檔網頁、生成合規性快照以及從內部儀表板生成面向客戶的報告很有用。 通過本地網路存取的伺服器生成頁面得到了完全支援——像公眾URL一樣通過`http://localhost:8080/report/123`。 IronPDF將等待頁面完全載入後進行渲染,因此依賴於非同步資料提取的儀錶板將以填充資料的狀態渲染,而不是呈現爲空白的圖表。
對於HTTP基本身份驗證背後的頁面,使用`http://user:password@host/path`格式將憑證傳遞到URL中。 對於由會話Cookie保護的頁面,在將`ChromePdfRenderOptions`物件之前,配置好Cookie罐。 查看[IronPDF for Java文件](/java/docs/)以瞭解有關配置請求頭和管理受驗證URL的Cookie的詳細資訊。
---
## 如何將本地HTML文件轉為PDF?
`PdfDocument.renderHtmlFileAsPdf`從本地文件系統讀取HTML文件並將其渲染成PDF。 由文件中相對路徑引用的所有連結資產(CSS、JavaScript、圖像)相對於HTML文件自己的目錄解析。
```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");
```
對於轉換複雜的HTML文件來說,這是最準確的方法。 因為渲染引擎在文件系統路徑上運行,而不是在記憶體中,所以多級資產目錄的相對引用會在沒有額外配置的情況下解析。 依賴於存放在同一文件夾中的`script.js`的模板將在不進行任何路徑調整的情況下正確渲染。
此方法特別適用於發票生成、合同生成以及任何設計人員獨立於Java應用程式維護HTML模板的工作流程。 開發團隊將模板視為資料文件,將其與應用一同儲存,然後使用路徑調用`renderHtmlFileAsPdf`。 當設計師更新模板以更改品牌或佈局時,不需要更改Java程式碼。
[[i:(IronPDF支援Chromium支援的所有現代HTML和CSS功能——Flexbox、CSS Grid、CSS變數、Web字型和媒體查询都將在輸出PDF中正確渲染。)]]
---
## 如何設置PDF生成選項?
`ChromePdfRenderOptions`控制渲染行為:紙張尺寸、邊距、縮放級別、列印媒介型別、JavaScript超時等。 建立一個實例,配置所需屬性,然後將其作為第二個參數傳遞給任何`render*AsPdf`方法。
```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");
```
`@media print` CSS規則,許多HTML模板使用這些規則隱藏導航欄並應用列印特定佈局。 `setJavaScriptTimeout`方法對於使用JavaScript圖表庫(D3.js,Chart.js)或懶惰載入內容的頁面很重要——如果超時太短,PDF將在JavaScript完成渲染之前抓取頁面,產生空圖表或缺失部分。 如果渲染的PDF缺少預期的內容,增加超時。
`setDpi`方法控制輸出中的圖像解析度。 預設(96 DPI)適合於螢幕顯示文件。 對於將要列印或顯示在高DPI顯示器上的PDF,請使用150或300 DPI。 較高的DPI值會成比例增加文件大小。 請參考[PDF生成設置程式碼範例](/java/examples/pdf-generation-settings/)以獲取全可配置屬性列表。
---
## 如何新增頁眉和頁脚?
IronPDF 支持基於文字和基於 HTML 的頁眉和頁腳。 文字頁眉使用`{date}`)。
```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");
```
`{total-pages}`代幣在頁脚中產生像"3 of 12"樣的值並隨頁數變化自動更新,因此在渲染之前不需要知道最終頁數。 `{date}`代幣使用系統地區設置插入當前日期。 其他可用代幣包括`{url}`。
預設情況下,使用`addTextFooters`新增的頁眉和頁腳應用於文件中的每一頁。 提供可選的頁範圍參數來限定特定頁面,例如跳過封面頁上的頁眉。
對於需要標誌、品牌色或自定義佈局的樣式化頁眉,請使用`HtmlHeaderFooter`代替——它接受完整的HTML字串並以與頁面主體相同的方式渲染它。 查看[自定義頁眉和頁脚範例](/java/examples/headers-and-footers/)以獲取完整的HTML頁眉模式。
---
## 如何設置頁面邊距和紙張尺寸?
在調用任何`ChromePdfRenderOptions`實例。
```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");
```
邊距值以毫米為單位。 `PaperSize`枚舉涵蓋了標準尺寸(A4,Letter,Legal,A3和其他)。 需要非標準尺寸的開發者可以使用`options.setCustomPaperHeight`設置自定義寬度和高度。 [自定義紙張尺寸範例](/java/examples/custom-pdf-paper-size/)和[自定義邊距範例](/java/examples/ironpdf-set-custom-margins/)顯示了完整的配置模式。
---
## 如何將水印應用於PDF?
IronPDF中的水印是以可配置的不透明度在每個頁面上加蓋的HTML。 這種方法讓開發者可以完全控制水印的外觀——任何HTML元素、圖像或樣式文字都可以作為印章。
```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");
```
`HtmlStampOptions`參數用於精確定位 - 中心、左上角、自定義像素偏移和z-index(前景或背景)。 將印章設置為背景會將其置於文字後面,使文件保持可讀。 將其設置為前景會將其置於頂部,這在列印時更難遮擋。
[[t:(要生成IronPDF本身在試用模式下應用的重複磚水印,在HTML印章串中渲染一個旋轉文字元素網格,並調整元素尺寸以填充整個頁面。)]]
查看[自定義水印指南](/java/how-to/custom-watermark/)以獲取有關背景水印,平鋪模式和通過升級許可證去除水印的範例。
---
## 如何將多個PDF合併為一個?
`PdfDocument`物件並返回一個新文件。 這是從組件部份組裝報告、附加封面頁和彩縫批處理作業的每個使用者部分的理想方法。
```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");
```
每個源文件的頁面按源列表指定的順序出現在合併輸出中。 合併文件不繼承任何單個源的元資料——合併後使用`meta.title`和其他文件屬性,如果這些字段對下游消費者很重要的話。
`PdfDocument`實例的雙參數重載。 對於大量文件的批次合併,請使用列表重載——它比連結多個雙參數調用更有效率,因為它在一次遍歷中處理所有源。
[[i:(合併列表中的每個源`PdfDocument`在調用後依然有效且不變。 `merged`實例是一個新的獨立文件。 當不再需要時,用`close()`方法釋放源文件以釋放相關的本機資源。)]]
---
## 如何新增或删除PDF中的頁面?
可以使用`PdfDocument.copyPage`, `PdfDocument.removePages`方法將個別頁面從一個文件中複製到另一個文件中,或直接删除。
```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");
```
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提供了文件上的兩個不同的密碼:擁有者密碼用於控制編輯、列印和複製權限,使用者密碼用於控制文件打開。 這兩者都是通過`SecurityOptions`類設置的。
```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");
```
`NoPrint`。 當設定擁有者密碼但未設置使用者密碼時,文件將在打開時不要求密碼,但編輯和其他操作需要在PDF編輯器中輸入擁有者密碼。
[[w:(PDF密碼保護對文件進行加密,但不是替代適當存取控制系統的方法。 具備專業工具的決心使用者可能會嘗試對弱密碼進行暴力破解。 對於需要真正安全的文件使用強大、隨機生成的密碼。)]]
---
## 如何轉換帶有動態資料的HTML模板?
從以資料為驅動的HTML模板生成PDF是IronPDF最常見的生產用例。 標準方法是在Java中使用模板庫或字串操作構建HTML字串,然後將完成的字串傳遞給`renderHtmlAsPdf`。
```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模板庫如[Thymeleaf](https://www.thymeleaf.org/)或[Freemarker](https://freemarker.apache.org/)來管理作為獨立文件的HTML模板,通過上下文物件注入資料,並保持模板語法比字串串接更乾淨。 這兩個庫都生成可以直接傳遞給`renderHtmlAsPdf`的普通HTML字串。
[[t:(在批量作業中生成PDF時 - 例如,為每個客戶生成一張發票 - 在迴圈之前實例化`ChromePdfRenderOptions`一次,然後在每個渲染調用中重用同一個實例。 每次調用建立一個新的選項物件會增加不必要的物件分配負荷。)]]
---
## 如何從 Java 中的 PDF 提取文字?
`PdfDocument.extractAllText`從PDF中的每一頁提取所有文字內容並將其返回為一個單一字串。 這對於搜尋索引、資料提取和渲染後的內容驗證非常有用。
```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);
```
返回的字串保留了每頁文字的閱讀順序,但不包括格式化。 行列和表格單元格之間的空白表示為空格。 對於包含多個邏輯部分的PDF,`extractTextFromPage(int pageIndex)`隔離單頁文字,這在處理大文件時逐頁處理效率更高。
只有在PDF結構中的文字以實際文字物件形式儲存時,文字提取才有效 - 通過`renderHtmlAsPdf`生成的PDF始終符合此條件。 需要先進行OCR才能從頁面是圖像的掃描文件中提取文字。 [IronOCR](https://ironsoftware.com/csharp/ocr/)是Iron Software的一個輔助庫,為Java和.NET應用程式增加OCR功能。
對於圖像提取,使用`BufferedImage`物件列表。 查看[從PDF中提取文字範例](/java/examples/extract-text-from-pdf/)和[從PDF中提取圖片範例](/java/examples/extract-image-from-pdfs/)以獲取完整程式碼模式。
---
## 如何壓縮 PDF 文件?
`PdfDocument.compressImages`通過以較低的質量重新編碼嵌入的圖像來減小文件大小。 這對於從包含大照片或橫幅圖片的網頁生成的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");
```
質量值在50到75之間通常可以將文件大小減少40-70%,同時保持對螢幕閱讀的可接受視覺保真度。 值低於40可能會在照片上引入可見的僞像,儘管這在有大色塊區域的圖示和截圖中可能是可以接受的。
重載的`compressImages(int quality, boolean scaleExistingImages)`方法還能接受是否縮放超過顯示尺寸的圖像這個布林值。 將此設為`true`可以通過消除嵌入的高解析度圖像但在頁面上顯示為更小尺寸時出現的多餘解析度進一步減少文件大小。 這在網頁轉PDF時很常見,那些圖片以2倍解析度呈現以配合視網膜顯示屏。
[PDF壓縮範例](/java/examples/pdf-compression/)演示跨多頁文件的批次壓縮,包括如何在壓縮後驗證文件的大小縮小。
---
## 下一步
本教程涵蓋了三種HTML轉PDF轉換方法、安裝、授權配置、渲染選項、頁眉和頁腳、頁面佈局選項、文字提取和文件壓縮。
若要進一步了解,請探索這些在[IronPDF for Java文件](/java/docs/)中的資源:
1. **PDF生成設置** - [配置DPI、縮放、超時和CSS媒體型別](/java/examples/pdf-generation-settings/)以獲得精確的渲染控制。
2. **頁眉和頁腳** - [新增HTML頁眉和頁腳](/java/examples/html-headers-and-footers/),包括品牌徽標和自定義佈局。
3. **頁面佈局** - 設定[自定義邊距](/java/examples/ironpdf-set-custom-margins/)和[紙張尺寸](/java/examples/custom-pdf-paper-size/)為列印準備。
4. **水印** - 應用[背景和前景水印](/java/how-to/custom-watermark/)以促進文件安全。
5. **内容提取** - [從PDF中提取文字](/java/examples/extract-text-from-pdf/)和[提取圖片](/java/examples/extract-image-from-pdfs/)以便早期使用。
6. **文件壓縮** - [縮小PDF文件大小](/java/examples/pdf-compression/)以便儲存和電子郵件發送。
7. **API參考** - 瀏覽全部[IronPDF Java API參考](/object-reference/api/)以獲取每個類和方法的資訊。
[開始免費試用](trial-license),立即開始將HTML轉換為您的Java應用程式中的PDF。 當您準備好部署時,[查看授權選項](licensing)以尋找符合您專案的計劃。
Ask ChatGPT about this page
Ask Gemini about this page
Ask Perplexity about this page
IronPDF for Java使用完整的Chromium渲染引擎將HTML內容轉換為PDF文件——這與現代瀏覽器使用的引擎相同。 每個CSS屬性、字體、圖像和由JavaScript生成的佈局都會像在瀏覽器窗口中一樣精確渲染,然後作為像素精確的PDF登陸頁面。
本教程介紹了三種核心轉換方法:HTML字串轉PDF、即時URL轉PDF和本地HTML文件轉PDF。 還涵蓋了安裝、授權配置以及開發者最常用的渲染選項。
Java函式庫模擬了IronPDF for .NET 的API,因此需要在兩個運行時間間切換的團隊會發現此過渡非常簡便。 GitHub 上提供了本教程中所有範例的源程式碼。
將IronPDF新增到您的Maven pom.xml,然後調用一個方法即可生成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" );
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
Start using IronPDF in your project today with a free trial.
安裝IronPDF for Java
IronPDF for Java通過Maven Central 和獨立的JAR提供。 因為它處理遞歸依賴並保持程式庫版本在開發人員機器和CI管道中一致,所以對於大多數專案來說,推薦使用Maven方式。
選項1:將IronPDF作為Maven依賴新增
打開專案的<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>
//: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>
XML
第一個工件拉取了最新的IronPDF for Java版本 。 第二個工件啟用了SLF4J日誌記錄,使得IronPDF的渲染引擎在執行期間可以寫入診斷消息。 喜歡Logback 或Log4J的開發者可以替換掉提供者。 日誌記錄依賴是可選的 - 如果不需要日誌可以省略。
保存文件後,從專案的根目錄運行mvn install,下載兩個程式庫。 Maven自動解析全依賴圖,包括IronPDF需要的任何遞歸依賴。
對於Gradle專案,等效的依賴宣告在build.gradle中:
// build.gradle (Groovy DSL)
// dependencies {
// implementation 'com.ironsoftware:ironpdf:[LATEST_VERSION]'
// implementation 'org.slf4j:slf4j-simple:[LATEST_VERSION]'
// }
// build.gradle (Groovy DSL)
// dependencies {
// implementation 'com.ironsoftware:ironpdf:[LATEST_VERSION]'
// implementation 'org.slf4j:slf4j-simple:[LATEST_VERSION]'
// }
Java
用IronPDF變更記錄 或工件的Maven Central頁面上的版本號替換[LATEST_VERSION]。
選項2:手動新增JAR文件
直接從Maven Central 下載IronPDF JAR並將其新增到專案的類路徑中。 這種方法在沒有構建工具的情況下有效,但需要手動管理版本,因此最好適用於不使用Maven或Gradle的遺留項目,或限制出站網路存取的環境。
下載後,通過IDE的專案設定將JAR新增到專案的類路徑中。 在IntelliJ IDEA中,右鍵單擊專案的根目錄,選擇"打開模塊設定",導航至"依賴",然後新增JAR文件。在Eclipse中,右鍵點擊專案,進入"性質 > Java建構路徑 > 函式庫",然後點選"新增外部JARs"。
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文件的任何源文件的頂部進行導入。
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" ));
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頁面上加蓋平鋪水印。 設置金鑰可以移除水印並解鎖所有功能。 開始免費試用 以立即獲取金鑰。
授權金鑰是一個字串,由激活試用或商業許可證時發放的Iron Software頒發。 將其儲存在環境變數或配置文件中,而不是在源程式碼中硬編碼。 一種常見模式是在啟動時從環境變數中讀取它:
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);
}
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
這種方法將金鑰保存在版本控制之外,使得在開發、測試、和生產環境中使用不同的金鑰變得簡單易行。
Settings.setLogPath必須在任何渲染或操縱方法之前都被調用。 將它們放在應用啟動時 - 最好在靜態初始化塊或main入口點中。
如何將HTML字串轉換為PDF?
PdfDocument物件。 這是程式生成HTML的主要方法——例如,通過將資料庫值與作為Java字串定義或從文件載入的HTML模板組合來構建報告。
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" );
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可以在不對源標記語言進行路徑操作的情況下正確渲染。
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" );
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"))先建立目錄。
IronPDF支援Chromium實現的完整HTML5和CSS3功能集。 通過CSS中@font-face載入的自定義字型會在字型文件在基礎路徑可存取時正確渲染。 SVG元素和由JavaScript渲染的<canvas>元素也會出現在PDF輸出中。
將HTML模板保存在專用目錄中,並將該目錄作為基礎路徑。 這種模式允許設計人員更新模板而不需接触任何Java程式碼。
如何將 URL 轉換為 Java 中的 PDF?
PdfDocument.renderUrlAsPdf提取給定URL的頁面,等待JavaScript執行和動態內容載入,然後將完整渲染的DOM轉換為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" );
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之前配置請求參數。
這種轉換方法對於存檔網頁、生成合規性快照以及從內部儀表板生成面向客戶的報告很有用。 通過本地網路存取的伺服器生成頁面得到了完全支援——像公眾URL一樣通過http://localhost:8080/report/123。 IronPDF將等待頁面完全載入後進行渲染,因此依賴於非同步資料提取的儀錶板將以填充資料的狀態渲染,而不是呈現爲空白的圖表。
對於HTTP基本身份驗證背後的頁面,使用http://user:password@host/path格式將憑證傳遞到URL中。 對於由會話Cookie保護的頁面,在將ChromePdfRenderOptions物件之前,配置好Cookie罐。 查看IronPDF for Java文件 以瞭解有關配置請求頭和管理受驗證URL的Cookie的詳細資訊。
如何將本地HTML文件轉為PDF?
PdfDocument.renderHtmlFileAsPdf從本地文件系統讀取HTML文件並將其渲染成PDF。 由文件中相對路徑引用的所有連結資產(CSS、JavaScript、圖像)相對於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" );
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文件來說,這是最準確的方法。 因為渲染引擎在文件系統路徑上運行,而不是在記憶體中,所以多級資產目錄的相對引用會在沒有額外配置的情況下解析。 依賴於存放在同一文件夾中的script.js的模板將在不進行任何路徑調整的情況下正確渲染。
此方法特別適用於發票生成、合同生成以及任何設計人員獨立於Java應用程式維護HTML模板的工作流程。 開發團隊將模板視為資料文件,將其與應用一同儲存,然後使用路徑調用renderHtmlFileAsPdf。 當設計師更新模板以更改品牌或佈局時,不需要更改Java程式碼。
IronPDF支援Chromium支援的所有現代HTML和CSS功能——Flexbox、CSS Grid、CSS變數、Web字型和媒體查询都將在輸出PDF中正確渲染。
如何設置PDF生成選項?
ChromePdfRenderOptions控制渲染行為:紙張尺寸、邊距、縮放級別、列印媒介型別、JavaScript超時等。 建立一個實例,配置所需屬性,然後將其作為第二個參數傳遞給任何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" );
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
@media print CSS規則,許多HTML模板使用這些規則隱藏導航欄並應用列印特定佈局。 setJavaScriptTimeout方法對於使用JavaScript圖表庫(D3.js,Chart.js)或懶惰載入內容的頁面很重要——如果超時太短,PDF將在JavaScript完成渲染之前抓取頁面,產生空圖表或缺失部分。 如果渲染的PDF缺少預期的內容,增加超時。
setDpi方法控制輸出中的圖像解析度。 預設(96 DPI)適合於螢幕顯示文件。 對於將要列印或顯示在高DPI顯示器上的PDF,請使用150或300 DPI。 較高的DPI值會成比例增加文件大小。 請參考PDF生成設置程式碼範例 以獲取全可配置屬性列表。
如何新增頁眉和頁脚?
IronPDF 支持基於文字和基於 HTML 的頁眉和頁腳。 文字頁眉使用{date})。
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" );
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
{total-pages}代幣在頁脚中產生像"3 of 12"樣的值並隨頁數變化自動更新,因此在渲染之前不需要知道最終頁數。 {date}代幣使用系統地區設置插入當前日期。 其他可用代幣包括{url}。
預設情況下,使用addTextFooters新增的頁眉和頁腳應用於文件中的每一頁。 提供可選的頁範圍參數來限定特定頁面,例如跳過封面頁上的頁眉。
對於需要標誌、品牌色或自定義佈局的樣式化頁眉,請使用HtmlHeaderFooter代替——它接受完整的HTML字串並以與頁面主體相同的方式渲染它。 查看自定義頁眉和頁脚範例 以獲取完整的HTML頁眉模式。
如何設置頁面邊距和紙張尺寸?
在調用任何ChromePdfRenderOptions實例。
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" );
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.setCustomPaperHeight設置自定義寬度和高度。 自定義紙張尺寸範例 和自定義邊距範例 顯示了完整的配置模式。
如何將水印應用於PDF?
IronPDF中的水印是以可配置的不透明度在每個頁面上加蓋的HTML。 這種方法讓開發者可以完全控制水印的外觀——任何HTML元素、圖像或樣式文字都可以作為印章。
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" );
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
HtmlStampOptions參數用於精確定位 - 中心、左上角、自定義像素偏移和z-index(前景或背景)。 將印章設置為背景會將其置於文字後面,使文件保持可讀。 將其設置為前景會將其置於頂部,這在列印時更難遮擋。
要生成IronPDF本身在試用模式下應用的重複磚水印,在HTML印章串中渲染一個旋轉文字元素網格,並調整元素尺寸以填充整個頁面。
查看自定義水印指南 以獲取有關背景水印,平鋪模式和通過升級許可證去除水印的範例。
如何將多個PDF合併為一個?
PdfDocument物件並返回一個新文件。 這是從組件部份組裝報告、附加封面頁和彩縫批處理作業的每個使用者部分的理想方法。
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" );
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
每個源文件的頁面按源列表指定的順序出現在合併輸出中。 合併文件不繼承任何單個源的元資料——合併後使用meta.title和其他文件屬性,如果這些字段對下游消費者很重要的話。
PdfDocument實例的雙參數重載。 對於大量文件的批次合併,請使用列表重載——它比連結多個雙參數調用更有效率,因為它在一次遍歷中處理所有源。
合併列表中的每個源PdfDocument在調用後依然有效且不變。 merged實例是一個新的獨立文件。 當不再需要時,用close()方法釋放源文件以釋放相關的本機資源。
如何新增或删除PDF中的頁面?
可以使用PdfDocument.copyPage, 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" );
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提供了文件上的兩個不同的密碼:擁有者密碼用於控制編輯、列印和複製權限,使用者密碼用於控制文件打開。 這兩者都是通過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" );
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
NoPrint。 當設定擁有者密碼但未設置使用者密碼時,文件將在打開時不要求密碼,但編輯和其他操作需要在PDF編輯器中輸入擁有者密碼。
PDF密碼保護對文件進行加密,但不是替代適當存取控制系統的方法。 具備專業工具的決心使用者可能會嘗試對弱密碼進行暴力破解。 對於需要真正安全的文件使用強大、隨機生成的密碼。
如何轉換帶有動態資料的HTML模板?
從以資料為驅動的HTML模板生成PDF是IronPDF最常見的生產用例。 標準方法是在Java中使用模板庫或字串操作構建HTML字串,然後將完成的字串傳遞給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" );
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
對於大型項目,考慮使用Java模板庫如Thymeleaf 或Freemarker 來管理作為獨立文件的HTML模板,通過上下文物件注入資料,並保持模板語法比字串串接更乾淨。 這兩個庫都生成可以直接傳遞給renderHtmlAsPdf的普通HTML字串。
在批量作業中生成PDF時 - 例如,為每個客戶生成一張發票 - 在迴圈之前實例化ChromePdfRenderOptions一次,然後在每個渲染調用中重用同一個實例。 每次調用建立一個新的選項物件會增加不必要的物件分配負荷。
如何從 Java 中的 PDF 提取文字?
PdfDocument.extractAllText從PDF中的每一頁提取所有文字內容並將其返回為一個單一字串。 這對於搜尋索引、資料提取和渲染後的內容驗證非常有用。
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);
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結構中的文字以實際文字物件形式儲存時,文字提取才有效 - 通過renderHtmlAsPdf生成的PDF始終符合此條件。 需要先進行OCR才能從頁面是圖像的掃描文件中提取文字。 IronOCR 是Iron Software的一個輔助庫,為Java和.NET應用程式增加OCR功能。
對於圖像提取,使用BufferedImage物件列表。 查看從PDF中提取文字範例 和從PDF中提取圖片範例 以獲取完整程式碼模式。
如何壓縮 PDF 文件?
PdfDocument.compressImages通過以較低的質量重新編碼嵌入的圖像來減小文件大小。 這對於從包含大照片或橫幅圖片的網頁生成的PDF尤其有效。
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" );
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)方法還能接受是否縮放超過顯示尺寸的圖像這個布林值。 將此設為true可以通過消除嵌入的高解析度圖像但在頁面上顯示為更小尺寸時出現的多餘解析度進一步減少文件大小。 這在網頁轉PDF時很常見,那些圖片以2倍解析度呈現以配合視網膜顯示屏。
PDF壓縮範例 演示跨多頁文件的批次壓縮,包括如何在壓縮後驗證文件的大小縮小。
下一步
本教程涵蓋了三種HTML轉PDF轉換方法、安裝、授權配置、渲染選項、頁眉和頁腳、頁面佈局選項、文字提取和文件壓縮。
若要進一步了解,請探索這些在IronPDF for Java文件 中的資源:
PDF生成設置 - 配置DPI、縮放、超時和CSS媒體型別 以獲得精確的渲染控制。
頁眉和頁腳 - 新增HTML頁眉和頁腳 ,包括品牌徽標和自定義佈局。
頁面佈局 - 設定自定義邊距 和紙張尺寸 為列印準備。
水印 - 應用背景和前景水印 以促進文件安全。
内容提取 - 從PDF中提取文字 和提取圖片 以便早期使用。
文件壓縮 - 縮小PDF文件大小 以便儲存和電子郵件發送。
API參考 - 瀏覽全部IronPDF Java API參考 以獲取每個類和方法的資訊。
開始免費試用 ,立即開始將HTML轉換為您的Java應用程式中的PDF。 當您準備好部署時,查看授權選項 以尋找符合您專案的計劃。
常見問題 使用您的HTML字串調用PdfDocument.renderHtmlAsPdf。將可選的基路徑作為第二個參數傳入,以便正確解析相對的CSS、圖像和腳本引用。在返回的PdfDocument上調用saveAs以寫入文件。
使用完整的URL調用PdfDocument.renderUrlAsPdf。IronPDF會抓取頁面,等到JavaScript執行完成並將完全載入的DOM渲染為PDF。
使用絕對檔案路徑調用PdfDocument.renderHtmlFileAsPdf。HTML檔案中的所有相對資產引用將自動相對於該文件的目錄解析。
將IronPDF依賴新增到pom.xml中,使用groupId com.ironsoftware和artifactId ironpdf,然後從項目根目錄運行mvn install。
在任何渲染呼叫之前調用License.setLicenseKey並提供有效的授權金鑰。沒有授權金鑰,IronPDF會在每個頁面上附加拼貼浮水印。
建立一個TextHeaderFooter實例,使用格式標記如{page}和{total-pages}設置其文字屬性,然後調用pdf.addTextHeaders和pdf.addTextFooters。若需帶有標誌的樣式化標頭,請改用HtmlHeaderFooter。
建立一個ChromePdfRenderOptions實例,並調用setMarginTop, setMarginBottom, setMarginLeft, setMarginRight(以毫米為單位)和setPaperSize,並傳入一個PaperSize枚舉值。將這些選項傳入任何渲染方法。
用所需順序建立一個List<PdfDocument>,並將其傳給PdfDocument.merge。方法會返回一個包含來自所有來源的所有頁面的新PdfDocument。
建立一個SecurityOptions實例,調用setUserPassword和setOwnerPassword,然後通過PdfSecurityManager在保存文件之前應用它。
調用pdf.extractAllText()以作為單一字串檢索所有文字內容。使用extractTextFromPage(int pageIndex)從特定頁面提取文字。
首席技術官
Jacob Mellor是Iron Software的首席技術官,一位在C# PDF技術上開創先河的遠見工程師。作為Iron Software核心程式碼庫的原開發者,他從創立以來就一直在塑造公司的產品架構,與首席執行官Cameron Rimington一起將公司轉變為服務於NASA、特斯拉和全球政府公司的50多名人員的公司。
...
閱讀更多