Skip to content

字体管理

ComPDFKit PDF SDK 支持读取您设备中已有的字族及其样式,并将其设置为注释、表单、水印、页眉页脚、贝茨码等多个功能的字体。这将帮助您设计出美观的 PDF 文件,或使用符合某些规范要求的字体调整和完善您的 PDF 文件。

获取字族

在使用字体管理设置字体时,您需要:

  1. 取得系统中所有字族名称。
  2. 选择您需要的字体,取得字体的CPDFFontName对象
  3. CPDFFontName对象中获取到样式集合
  4. 选择样式名称后,根据字族名称与样式名称取得PsName
  5. PsName 对象即可用作设置字体。

以下是代码示例:

java
// 取得系统中所有字族名称
List<CPDFFontName> list = CPDFFont.getOutFontName();

// 选取字族名获取到CPDFFontName对象
CPDFFontName cpdfFontName = list.get(index);
// 获取样式集合
List<String> fontStyles = cpdfFontName.getStyleName();

// 根据字族和字体样式,取得 `PsName` 对象
String psName = CPDFTextAttribute.FontNameHelper.obtainFontName(cpdfFontName.getFamilyName(), styleName);

// 将 `psName` 对象 名称应用到需要设置字体的功能中,具体设置属性方式见对应功能的文档
// 示例:设置FreeText注释字体
CPDFFreetextAnnotation freetextAnnotation = freetextAnnot.onGetAnnotation();
freetextAnnotation.setFreetextDa(new CPDFTextAttribute(psName, fontSize, fontColor));

// 示例:设置Form表单列表框字体
CPDFListboxWidget listBoxWidget = (CPDFListboxWidget) baseAnnotImpl;
listBoxWidget.setFontName(psName);
kotlin
// 取得系统中所有字族名称
val list : List<CPDFFontName> = CPDFFont.getOutFontName()

// 选取字族名获取到CPDFFontName对象
val cpdfFontName : CPDFFontName = list.get(index)
// 获取样式集合
val fontStyles : List<String> = cpdfFontName.getStyleName()

// 根据字族和字体样式,取得 `PsName` 对象
val psName : String = CPDFTextAttribute.FontNameHelper.obtainFontName(cpdfFontName.getFamilyName(), styleName)

// 将 `psName` 对象 名称应用到需要设置字体的功能中,具体设置属性方式见对应功能的文档
// 示例:设置FreeText注释字体
val freetextAnnotation = freetextAnnot.onGetAnnotation()
freetextAnnotation.setFreetextDa(CPDFTextAttribute(psName, fontSize, fontColor))

// 示例:设置Form表单列表框字体
CPDFListboxWidget listBoxWidget = (CPDFListboxWidget) baseAnnotImpl
listBoxWidget.setFontName(psName)

关于字族,样式名称

  1. Font Family(字族):

    Font Family 指的是字体的族群或系列名称,通常代表了一组字体,这些字体在设计上有相同的设计风格。

    例如,Helvetica字体族拥有多种不同样式的字体,如Helvetica Regular、Helvetica Bold、Helvetica Italic等,它们都属于Helvetica字族。

  2. Font Style(样式):

    Font Style 指的是字体的具体样式或变体名称。它通常用于区分同一字族中不同的字体样式,例如粗体、斜体、正常体等。

    以 Helvetica 字体族为例,Regular、Bold、Italic 等都是不同样式的名称。

导入字体

目前使用的字体是从设备系统中获取,且每个地区设备的字体集可能有所不同。您可以通过导入字体接口来丰富可用的字体样式。

导入字体,请按照以下步骤操作:

  1. 将所需的字体文件复制到指定的文件夹路径中。
  2. 使用 CPDFSdk.setImportFontDir() 设置存放字体的目录。
  3. 初始化 SDK。
java
// 将 assets 目录中的字体复制到存储中
String fontDir = new File(getFilesDir(), "extraFonts/").getAbsolutePath();
CFileUtils.copyAssetsDirToPhone(this, "extraFonts", getFilesDir().getAbsolutePath());

// 确定是否添加系统字体,这会影响 CPDFFont.getOutFontName() 中是否包含系统字体
boolean addSysFont = true;

// 设置指定的字体文件夹
CPDFSdk.setImportFontDir(savePath, addSysFont);

// 初始化 SDK
CPDFSdk.init(this, "your license key", true);
kotlin
// 将 assets 目录中的字体复制到存储中
val fontDir = File(filesDir, "extraFonts/").absolutePath
CFileUtils.copyAssetsDirToPhone(this, "extraFonts", filesDir.absolutePath)

// 确定是否添加系统字体,这会影响 CPDFFont.getOutFontName() 中是否包含系统字体
val addSysFont = true

// 设置指定的字体文件夹
CPDFSdk.setImportFontDir(savePath, addSysFont)

// 初始化 SDK
CPDFSdk.init(this, "your license key", true)

注意: 字体导入接口必须在初始化 SDK 之前进行配置。请确保移除 AndroidManifest.xml 中的 SDK 初始化配置,改为通过代码进行 SDK 初始化操作。