精通 GroupDocs.Conversion for Java 的字体替换

在本综合教程中,您将了解如何使用 GroupDocs.Conversion for Java 将笔记转换为 PDF,并优雅地处理缺失字体。我们将逐步演示 Maven 设置、字体替换配置以及回退策略,确保您的 PDF 在所有操作系统上保持一致。完成后,您即可将此转换流程嵌入任何 Java 服务或批处理作业中。

快速答案

  • 字体替换的主要目的是什么? 它将不可用的字体替换为您指定的字体,保持文档外观一致。
  • 哪个库负责转换? GroupDocs.Conversion for Java
  • 生产环境是否需要许可证? 是的——需要完整许可证或临时许可证。
  • 我可以为未知情况设置默认字体吗? 当然,可以在 NoteLoadOptions 中使用 setDefaultFont()
  • 它是否兼容 JDK 8 及以上版本? 是的,该库支持 Java 8+。

什么是“将笔记转换为 PDF”?

将笔记转换为 PDF 是将笔记文件格式(例如 .ONE.ENEX)转换为 PDF 的过程,PDF 可在任何设备上打开,无需特殊软件。
在转换过程中常会遇到缺失字体的问题,因为源笔记可能引用了目标机器上未安装的字体。字体替换通过将缺失的字体映射到可用字体来解决此问题,确保视觉保真度。

为什么使用 GroupDocs.Conversion for Java?

GroupDocs.Conversion for Java 为超过 50 种输入和输出格式提供 自动字体处理,并且能够在不将整个文件加载到内存的情况下处理数百页的文档。该库能够生成高保真 PDF 输出,对 300 页的笔记仅消耗不到 150 MB 堆内存,并通过单一 Maven 依赖进行集成,是 Java 开发者的生产就绪选择。

前置条件

  • Java Development Kit (JDK) 版本 8 或更高。
  • IntelliJ IDEAEclipse 等 IDE。
  • 已安装用于依赖管理的 Maven
  • 具备 Java 基础和文档转换概念的知识。

设置 GroupDocs.Conversion for Java

pom.xml 中添加 GroupDocs 仓库和依赖:

<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 天试用和用于测试的临时许可证,亦可购买正式许可证用于生产环境。

  1. 免费试用:从 此处 下载。
  2. 临时许可证:在 此链接 申请。
  3. 购买:如需长期使用,请在 此处 购买许可证。

将笔记转换为 PDF 时如何替换字体

在转换过程中进行字体替换,需要创建并配置加载选项,将缺失的字体映射到可用的替代字体,并指定回退字体。这样即使系统中不存在原始字体,也能确保每个字符正确渲染。

步骤 1:配置字体替换

NoteLoadOptions 用于配置笔记文件的加载方式,包括字体替换设置。创建一个 NoteLoadOptions 对象,定义要替换的字体对,并为未匹配的情况设置回退字体:

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";
  • NoteLoadOptionsNoteLoadOptions 类是配置笔记文件加载方式(包括字体替换设置)的入口。
  • FontSubstitute.create()FontSubstitute.create() 构建映射,指示转换器在原始字体缺失时使用哪个替代字体。
  • setDefaultFont()setDefaultFont() 定义回退字体,当没有显式映射时引擎会使用该字体,确保没有字符未被渲染。

步骤 2:将文档转换为 PDF

Converter 是使用提供的加载选项执行转换的核心组件。将配置好的加载选项传递给 Converter 并执行转换:

// 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);
  • ConverterConverter 类是 GroupDocs 的核心组件,使用提供的选项加载源文件并准备进行转换。
  • convert()convert() 方法将 PDF 文件写入目标位置,并应用您定义的所有字体替换规则。

将笔记文档转换为 PDF(不使用自定义字体)

如果您只需 将文档转换为 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);

实际应用

  1. 文档共享 – 发送在 Windows、macOS 或 Linux 上外观完全相同的 PDF。
  2. 归档 – 为合规性保留旧版笔记文件的视觉保真度。
  3. 跨平台兼容性 – 确保所有利益相关者看到相同的字体,无论系统安装了何种字体。

集成可能性

您可以将此转换流程嵌入企业内容管理系统、处理上传的微服务,或迁移旧版笔记归档到 PDF 的批处理作业中。

性能考虑

  • 内存管理 – 对大文件使用流式处理,而不是完整加载到内存中。
  • 缓存 – 缓存经常使用的字体文件,避免重复磁盘 I/O。
  • Java 最佳实践 – 调整垃圾回收器,并在可能时复用 Converter 实例。

常见问题及解决方案

问题可能原因解决方案
转换后缺失字体未为该字体定义替换添加 FontSubstitute 条目或设置合适的默认字体。
loadOptions 上的 NullPointerExceptionloadOptions 未传递给 Converter确保在构造 Converter 时使用 lambda () -> loadOptions
大文件转换缓慢将整个文档加载到内存使用流式 API 或适当增加 JVM 堆大小。

常见问答

问:我可以一次替换多个字体吗?
答:可以,向 fontSubstitutes 列表中添加多个 FontSubstitute 条目。

问:如果未找到默认字体会怎样?
答:转换会回退到系统默认字体,不同平台可能会有所不同。

问:如何排查转换错误?
答:检查文件路径,确保所有 Maven 依赖已解析,并查看控制台的堆栈跟踪。

问:GroupDocs.Conversion 是否兼容所有 Java 版本?
答:它支持 JDK 8 及更高版本。

问:字体替换能用于 Word 或 Excel 等其他格式吗?
答:完全可以——相同的 FontSubstitute 机制适用于包括 DOCX 和 XLSX 在内的多种文档类型。

资源


最后更新: 2026-07-29
测试环境: GroupDocs.Conversion 25.2 for Java
作者: GroupDocs

相关教程