如何使用 GroupDocs.Viewer Java 將 CHM 轉換為 HTML(以及其他格式)
將舊版說明檔編譯成現代格式是開發人員常見的需求。在本教學中,您將 將 CHM 轉換為 HTML,並學習如何使用 GroupDocs.Viewer for Java 將相同的 CHM 檔案渲染為 JPG、PNG,以及 將 CHM 轉換為 PDF。完成後,您將擁有一套可重複使用的模式,適用於任何 CHM 文件,無論是歸檔舊手冊還是將說明內容發布於網站入口。

使用 GroupDocs.Viewer for Java 渲染 CHM 檔案
快速解答
- 哪個函式庫負責 CHM 渲染? GroupDocs.Viewer for Java.
- 我可以將 HTML 輸出為單一檔案嗎? 可以,啟用
singlePage選項即可。 - PDF 轉換是否無失真? 此函式庫會保留版面配置、影像與超連結。
- 測試是否需要授權? 免費試用或臨時授權即可。
- 支援哪些格式? HTML、JPG、PNG、PDF,以及其他如 DOCX、XLSX 等。
什麼是 GroupDocs.Viewer for Java?
GroupDocs.Viewer for Java 是一個伺服器端 API,能將超過 70 種文件類型(包括 CHM)渲染成適合網頁的格式,且不需要 Microsoft Office 或 Adobe Acrobat。它可在任何 Java 8 以上的執行環境上運行,並能整合至 Web、桌面或微服務架構。欲了解更多資訊,請參閱 GroupDocs 文件。
為何將 CHM 轉換為 HTML?
GroupDocs.Viewer 支援 超過 50 種輸入與輸出格式,能在一般 2 GHz CPU 上於 2 秒內將 200 頁的 CHM 檔案轉換為單一 HTML 頁面,同時保持所有內部連結的功能。這樣的速度與格式廣度使其成為將舊版說明系統遷移至現代 Web 入口的理想選擇。
前置條件
- GroupDocs.Viewer Java 函式庫(版本 25.2 或更新)。
- 相容 Maven 的專案(IntelliJ IDEA、Eclipse 或類似環境)。
- 具備 Java 與 Maven 依賴管理的基本知識。
設定 GroupDocs.Viewer for Java
在 Java 專案中使用 GroupDocs.Viewer,請加入 Maven 依賴:
<dependency>
<groupId>com.groupdocs</groupId>
<artifactId>groupdocs-viewer</artifactId>
<version>25.2</version>
</dependency>
授權取得
GroupDocs 提供免費試用、供評估使用的臨時授權,以及商業使用的購買方案。請前往其 購買頁面 或 臨時授權說明 了解更多選項。
設定好函式庫後,讓我們在簡單的 Java 應用程式中初始化它:
Viewer viewer = new Viewer("path/to/your/file.chm", new ViewerConfig());
實作指南
如何將 CHM 轉換為 HTML?
載入 CHM 檔案,定義輸出資料夾,並呼叫 HTML 渲染選項。API 會自動提取嵌入的資源(CSS、影像),並可將所有內容合併為單一頁面。
String outputDir = "output/html";
HtmlViewOptions options = HtmlViewOptions.forEmbeddedResources(outputDir);
options.setSinglePage(true); // single‑page output
viewer.view(options);
HtmlViewOptions 類別是告訴檢視器如何產生 HTML 的設定物件。將 singlePage 設為 true 會將所有章節合併為一個 HTML 檔案,適合快速瀏覽。
如何將 CHM 轉換為 JPG?
將 CHM 頁面渲染為影像可用於縮圖或視覺預覽。您可以指定要渲染的頁面,以減少大型文件的處理時間。
String outputDir = "output/jpg";
JpgViewOptions options = JpgViewOptions.forDirectory(outputDir);
options.setPageNumbers(new int[]{1, 2}); // render only first two pages
viewer.view(options);
JpgViewOptions 類別讓您控制影像品質、DPI 與頁面選擇。僅渲染所需頁面可節省記憶體與 CPU 資源。
如何將 CHM 轉換為 PNG?
PNG 輸出保留無損品質且支援透明度,適合用於說明主題的高解析度螢幕截圖。
String outputDir = "output/png";
PngViewOptions options = PngViewOptions.forDirectory(outputDir);
options.setPageNumbers(new int[]{1}); // render the first page as PNG
viewer.view(options);
PngViewOptions 類別的運作方式與 JPG 類似,但會產生保留完整視覺忠實度的 PNG 檔案。
如何將 CHM 轉換為 PDF?
PDF 是最具可攜性的發佈格式。檢視器可一次呼叫即將整個 CHM 內容合併為單一 PDF 文件。
String outputPath = "output/chm-document.pdf";
PdfViewOptions options = PdfViewOptions.forFile(outputPath);
viewer.view(options);
PdfViewOptions 類別會自動處理分頁、字型嵌入與超連結保留。
實務應用
- 歸檔: 將舊版 CHM 檔案轉換為現代格式,以便更容易存取與長期保存。
- 網站入口: 將 CHM 文件發布為內部公司 Intranet 的 HTML 頁面。
- 行動應用程式: 在 Android 或 iOS 應用中捆綁 PDF 版說明檔,以供離線閱讀。
效能考量
在處理大量或多筆文件轉換時:
- 記憶體管理: 渲染為 PNG 或高解析度 JPG 可能佔用大量記憶體;請監控 JVM 堆積並考慮對大型批次使用
-Xmx2g。 - 平行處理: 使用 Java 的
ExecutorService同時轉換多個 CHM 檔案,但需限制執行緒數量以免 CPU 過度競爭。 - 批次大小: 對於龐大檔案庫,建議以 10‑20 個檔案為一組進行處理,以保持資源使用的可預測性。
常見問題與解決方案
- 缺少影像: 確認使用
HtmlViewOptions.forEmbeddedResources,以便在提取 HTML 時同時抽取影像。 - 頁面順序不正確: 檢查 CHM 檔案的內部目錄 (TOC) 是否完整;檢視器會遵循原始的導覽結構。
- 記憶體不足錯誤: 增加 JVM 堆積大小,或在較新 API 版本中使用
viewer.view(options, new Stream())轉為串流模式。
常見問答
Q: 我可以一次轉換整個 CHM 目錄嗎?
A: 可以,使用 Java 的 Files.list API 迭代資料夾,對每個檔案呼叫相同的渲染程式碼。
Q: 如何在不耗盡記憶體的情況下處理大型文件?
A: 增加 JVM 堆積 (-Xmx) 或以較低 DPI 渲染為影像格式;亦可將 CHM 拆分為多個章節分別處理。
Q: 是否可以進一步自訂輸出格式?
A: 可以,GroupDocs.Viewer 提供廣泛的 CSS 注入、頁面尺寸與影像品質設定。請參閱 API 參考文件 了解詳細設定。
Q: 函式庫在轉換為 PDF 時是否保留超連結?
A: 完全保留。所有 CHM 內部連結皆會轉換為可點擊的 PDF 註解。
Q: 我可以只渲染 CHM 的部分章節嗎?
A: 使用檢視選項的 setPageNumbers 方法,指定所需的頁碼或章節。
結論
您現在已擁有完整、可投入生產的工作流程,可使用 GroupDocs.Viewer for Java 將 CHM 轉換為 HTML、將 CHM 轉換為 PDF,以及產生影像表示。這些技術讓您能將舊版說明系統現代化、提升可存取性,並將文件整合至任何基於 Java 的解決方案中。
準備好進一步嗎?請查閱官方 GroupDocs 文件,了解進階客製化功能,如自訂 CSS 注入、浮水印,以及多執行緒批次處理。
最後更新: 2026-06-30
測試環境: GroupDocs.Viewer Java 25.2
作者: GroupDocs
<repositories>
<repository>
<id>repository.groupdocs.com</id>
<name>GroupDocs Repository</name>
<url>https://releases.groupdocs.com/viewer/java/</url>
</repository>
</repositories>
<dependencies>
<dependency>
<groupId>com.groupdocs</groupId>
<artifactId>groupdocs-viewer</artifactId>
<version>25.2</version>
</dependency>
</dependencies>
import com.groupdocs.viewer.Viewer;
public class ViewerSetup {
public static void main(String[] args) {
try (Viewer viewer = new Viewer("path/to/your/document.chm")) {
// Your document viewing and rendering logic goes here.
}
}
}
import java.nio.file.Path;
Path outputDirectory = TestFiles.getOutputDirectoryPath("RenderingChmFiles");
Path pageFilePathFormat = outputDirectory.resolve("chm_result_{0}.html");
import com.groupdocs.viewer.Viewer;
import com.groupdocs.viewer.options.HtmlViewOptions;
try (Viewer viewer = new Viewer(TestFiles.SAMPLE_CHM)) {
HtmlViewOptions options = HtmlViewOptions.forEmbeddedResources(pageFilePathFormat);
options.setRenderToSinglePage(true); // Optional: render into a single HTML page
viewer.view(options);
}
Path pageFilePathFormat = outputDirectory.resolve("chm_result_{0}.jpg");
import com.groupdocs.viewer.options.JpgViewOptions;
try (Viewer viewer = new Viewer(TestFiles.SAMPLE_CHM)) {
JpgViewOptions options = new JpgViewOptions(pageFilePathFormat);
viewer.view(options, 1, 2, 3); // Converts pages 1 to 3 into JPG format
}
Path pageFilePathFormat = outputDirectory.resolve("chm_result_{0}.png");
import com.groupdocs.viewer.options.PngViewOptions;
try (Viewer viewer = new Viewer(TestFiles.SAMPLE_CHM)) {
PngViewOptions options = new PngViewOptions(pageFilePathFormat);
viewer.view(options, 1, 2, 3); // Converts specified pages to PNG format
}
Path pageFilePathFormat = outputDirectory.resolve("chm_result.pdf");
import com.groupdocs.viewer.options.PdfViewOptions;
try (Viewer viewer = new Viewer(TestFiles.SAMPLE_CHM)) {
PdfViewOptions options = new PdfViewOptions(pageFilePathFormat);
viewer.view(options); // Generates a single PDF document from the CHM file
}