精通字體替換與 GroupDocs.Conversion for Java
在本完整教學中,您將了解 將筆記轉換為 PDF,同時優雅地處理缺失字體。我們將逐步說明 Maven 設定、字體替換配置以及回退策略,確保您的 PDF 在各作業系統上外觀一致。完成後,您即可將此轉換流程嵌入任何 Java 服務或批次作業中。
快速解答
- 字體替換的主要目的為何? 它會將不可用的字體替換為您指定的字體,保持文件外觀一致。
- 哪個函式庫負責轉換?
GroupDocs.Conversion for Java。 - 生產環境是否需要授權? 是 – 必須擁有完整授權或臨時授權。
- 我可以為未知情況設定預設字體嗎? 當然可以,使用
NoteLoadOptions中的setDefaultFont()。 - 此功能是否相容於 JDK 8 及以上版本? 是,函式庫支援 Java 8+。
什麼是「將筆記轉換為 PDF」?
將筆記轉換為 PDF 是將筆記檔案格式(例如 .ONE、.ENEX)轉換為可在任何裝置上開啟且不需特殊軟體的 PDF 的過程。
此轉換常會遇到缺字體問題,因為來源筆記可能引用未在目標機器上安裝的字體。字體替換透過將缺失字體映射至可用字體,確保視覺一致性。
為何使用 GroupDocs.Conversion for Java?
GroupDocs.Conversion for Java 提供 自動字體處理,支援超過 50 種以上的輸入與輸出格式,且能在不將整個檔案載入記憶體的情況下處理數百頁的文件。此函式庫產生高保真度的 PDF 輸出,對於 300 頁的筆記僅消耗不到 150 MB 的堆積記憶體,且只需透過單一 Maven 依賴即可整合,是 Java 開發者的生產就緒選擇。
前置條件
- Java Development Kit (JDK) 版本 8 或以上。
- 如 IntelliJ IDEA 或 Eclipse 等 IDE。
- Maven 已安裝,用於相依管理。
- 具備 Java 基礎知識與文件轉換概念。
設定 GroupDocs.Conversion for Java
Add the GroupDocs repository and dependency to your pom.xml:
<repositories>
<repository>
<id>repository.groupdocs.com</id>
<name>GroupDocs Repository</name>
<url>https://releases.groupdocs.com/conversion/java/</url>
</repository>
</repositories>
<dependencies>
<dependency>
<groupId>com.groupdocs</groupId>
<artifactId>groupdocs-conversion</artifactId>
<version>25.2</version>
</dependency>
</dependencies>
取得授權
GroupDocs 提供 30 天免費試用與測試用臨時授權,亦可購買正式授權以供生產環境使用。
- 免費試用:Download from here.
- 臨時授權:Request one at this link.
- 購買:For long‑term solutions, purchase a license here.
如何在 將筆記轉換為 PDF 時替換字體
在轉換過程中替換字體,您必須建立並設定載入選項,將缺失的字體映射至可用的替代字體,並指定回退字體。這可確保即使系統未安裝原始字體,所有字元仍能正確呈現。
步驟 1:設定字體替換
NoteLoadOptions configures how a note file is loaded, including font substitution settings. Create a NoteLoadOptions object, define the font pairs you want to replace, and set a fallback font for any unmatched cases:
import com.groupdocs.conversion.Converter;
import com.groupdocs.conversion.options.convert.PdfConvertOptions;
import com.groupdocs.conversion.options.load.NoteLoadOptions;
import com.groupdocs.conversion.contracts.FontSubstitute;
// Create font substitution options
NoteLoadOptions loadOptions = new NoteLoadOptions();
List<FontSubstitute> fontSubstitutes = new ArrayList<>();
fontSubstitutes.add(FontSubstitute.create("Tahoma", "Arial")); // Substitute Tahoma with Arial
fontSubstitutes.add(FontSubstitute.create("Times New Roman", "Arial")); // Substitute Times New Roman with Arial
loadOptions.setFontSubstitutes(fontSubstitutes);
// Set the default font for unhandled substitutions
defaultFont = "YOUR_DOCUMENT_DIRECTORY/terminal-grotesque_open.otf";
NoteLoadOptions–NoteLoadOptions類別是設定筆記檔載入方式(包括字體替換設定)的入口點。FontSubstitute.create()–FontSubstitute.create()建立映射,告訴轉換器在原始字體缺失時使用哪個替代字體。setDefaultFont()–setDefaultFont()定義回退字體,當沒有明確映射時引擎會套用此字體,確保不會有字元未渲染。
步驟 2:將文件轉換為 PDF
Converter is the core component that performs the conversion using the provided load options. Pass the configured load options to the Converter and execute the conversion:
// Initialize Converter with specified load options
converter = new Converter("YOUR_DOCUMENT_DIRECTORY/sample_note_document", () -> loadOptions);
// Set PDF conversion options
pdfOptions = new PdfConvertOptions();
// Perform conversion
coder.convert("YOUR_OUTPUT_DIRECTORY/converted_note.pdf", pdfOptions);
Converter–Converter類別是 GroupDocs 的核心元件,使用提供的選項載入來源檔案並準備轉換。convert()–convert()方法將 PDF 檔寫入目標位置,套用您定義的所有字體替換規則。
將筆記文件轉換為 PDF(不使用自訂字體)
如果您僅需 將 Java 文件轉換為 PDF 而不使用自訂替換,步驟會更簡短:
// Initialize Converter for a given document
converter = new Converter("YOUR_DOCUMENT_DIRECTORY/sample_note_document");
pdfOptions = new PdfConvertOptions(); // Configure conversion options
converter.convert("YOUR_OUTPUT_DIRECTORY/converted_note.pdf", pdfOptions);
實務應用
- 文件分享 – 發送在 Windows、macOS 或 Linux 上外觀相同的 PDF。
- 檔案保存 – 為合規需求保留舊版筆記檔的視覺完整性。
- 跨平台相容性 – 確保所有利害關係人看到相同的字體,無論其安裝了哪些字型。
整合可能性
您可以將此轉換流程嵌入企業內容管理系統、處理上傳的微服務,或用於將舊版筆記檔案批次遷移至 PDF 的工作。
效能考量
- 記憶體管理 – 以串流方式處理大型檔案,避免完整載入記憶體。
- 快取 – 快取常用字體檔以減少重複磁碟 I/O。
- Java 最佳實踐 – 調校垃圾回收器,盡可能重複使用
Converter實例。
常見問題與解決方案
| 問題 | 可能原因 | 解決方案 |
|---|---|---|
| 轉換後缺少字體 | 未為該字體定義替換 | 新增 FontSubstitute 條目或設定適當的預設字體。 |
loadOptions 上的 NullPointerException | loadOptions 未傳遞給 Converter | 確保在建立 Converter 時使用 lambda () -> loadOptions。 |
| 大檔案轉換緩慢 | 整個文件載入記憶體 | 使用串流 API 或適當增加 JVM 堆積大小。 |
常見問答
Q: 我可以一次替換多個字體嗎?
A: 可以,將多個 FontSubstitute 條目加入 fontSubstitutes 清單即可。
Q: 若預設字體找不到會發生什麼事?
A: 轉換會回退至系統預設字體,可能在不同平台上有所差異。
Q: 如何排除轉換錯誤?
A: 核對檔案路徑,確保所有 Maven 相依已解析,並檢查主控台的堆疊追蹤。
Q: GroupDocs.Conversion 是否相容所有 Java 版本?
A: 它支援 JDK 8 及以上版本。
Q: 字體替換能否用於 Word 或 Excel 等其他格式?
A: 當然可以——相同的 FontSubstitute 機制適用於多種文件類型,包括 DOCX 與 XLSX。
資源
最後更新: 2026-07-29
測試環境: GroupDocs.Conversion 25.2 for Java
作者: GroupDocs