Skip to content

字体管理

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

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

  1. 取得系统中所有字族名称。
  2. 选择您需要的字体,取得字族的样式名称。
  3. 选择样式名称后,根据字族名称与样式名称取得字体的 CPDFFont 对象。
  4. CPDFFont 对象即可用作设置字体。
  5. 通过CPDFFont 对象设置应用端字体 UIFont。

以下是代码示例:

swift
// 取得系统中所有字族名称
let fonts: [String] = CPDFFont.familyNames

// 取得字族名对应的字体样式列表,选择字体样式
let fontStyles = CPDFFont.fontNames(forFamilyName: "familyName")

// 根据字族和字体样式,取得 `CPDFFont` 对象
let font =  CPDFFont(familyName: "familyName", fontStyle: "fontStyle")

// 将 `CPDFFont` 对象 名称应用到需要设置字体的功能中,具体设置属性方式见对应功能的文档
let anotation = CPDFLineAnnotation(document: document)
anotation.cFont = font

// 通过`CPDFFont` 对象设置应用端字体 UIFont
let appleFont = UIFont.init(name: CPDFFont.convertAppleFont(cFont ?? CPDFFont(familyName: "Helvetica", fontStyle: "")) ?? "Helvetica"
objective-c
// 取得系统中所有字族名称
NSArray *fonts = [CPDFFont familyNames];

// 取得字族名对应的字体样式列表,选择字体样式
NSArray *fontStyles = [CPDFFont fontNamesForFamilyName:@"familyName"];

// 根据字族和字体样式,取得 `CPDFFont` 对象
CPDFFont *font = [[CPDFFont alloc] initWithFamilyName:@"familyName" fontStyle:@"fontStyle"];

// 将 `CPDFFont` 对象 名称应用到需要设置字体的功能中,具体设置属性方式见对应功能的文档
CPDFLineAnnotation *anotation = [[CPDFLineAnnotation alloc] initWithDocument:document];
[anotation setCFont:font];
 
 // 通过`CPDFFont` 对象设置应用端字体 UIFont
 NSString *fontName = [CPDFFont convertAppleFont:cFont];
 UIFont *appleFont = [UIFont fontWithName:fontName size:18];

关于字族,样式名称

  1. Font Family(字族):

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

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

  2. Font Style(样式):

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

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

导入字体

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

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

  1. 将所需的字体文件复制到指定的文件夹路径中。
  2. 使用 CPDFFont.setImportDir(path, isContainSysFont: true) 设置存放字体的目录。
  3. 初始化 SDK。
swift
// 将 Bundle 目录中的字体复制到沙盒中
let dir = Bundle.main.path(forResource: "Font", ofType: nil) ?? ""
let fileManager = FileManager.default
let documentDirectory = fileManager.urls(for: .documentDirectory, in: .userDomainMask).first!
let destinationPath = documentDirectory.appendingPathComponent("Font")

do {
    if fileManager.fileExists(atPath: destinationPath.path) {
        try fileManager.removeItem(at: destinationPath)
    }

    try fileManager.copyItem(atPath: dir, toPath: destinationPath.path)
  
  	// 设置指定的字体文件夹
  	// isContainSysFont 确定是否添加系统字体
    CPDFFont.setImportDir(destinationPath.path, isContainSysFont: true)
  	
  	// 初始化 SDK
  	CPDFKit.verify(withKey: "Your license key")
} catch {
    print("Error copying Font directory: \(error)")
}
objective-c
// 将 Bundle 目录中的字体复制到沙盒中
NSString *dir = [[NSBundle mainBundle] pathForResource:@"Font" ofType:nil] ?: @"";
NSFileManager *fileManager = [NSFileManager defaultManager];
NSURL *documentDirectory = [[fileManager URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] firstObject];
NSURL *destinationPath = [documentDirectory URLByAppendingPathComponent:@"Font"];

NSError *error = nil;
if ([fileManager fileExistsAtPath:[destinationPath path]]) {
    if (![fileManager removeItemAtURL:destinationPath error:&error]) {
        NSLog(@"Error removing existing directory: %@", error);
    }
}

if (![fileManager copyItemAtPath:dir toPath:[destinationPath path] error:&error]) {
    NSLog(@"Error copying Font directory: %@", error);
} else {
  
  	// 设置指定的字体文件夹
  	// isContainSysFont 确定是否添加系统字体
    [CPDFFont setImportFontDir:[destinationPath path] isContainSysFont:YES];
  
  	// 初始化 SDK
    [CPDFKit verifyWithKey:@"Your license key"];
}