本页内容
字体管理
ComPDFKit PDF SDK 支持读取您设备中已有的字族及其样式,并将其设置为注释、表单、水印、页眉页脚、贝茨码等多个功能的字体。这将帮助您设计出美观的 PDF 文件,或使用符合某些规范要求的字体调整和完善您的 PDF 文件。
在使用字体管理设置字体时,您需要:
- 取得系统中所有字族名称。
- 选择您需要的字体,取得字族的样式名称。
- 选择样式名称后,根据字族名称与样式名称取得字体的
CPDFFont
对象。 CPDFFont
对象即可用作设置字体。- 通过
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];
关于字族,样式名称
Font Family(字族):
Font Family 指的是字体的族群或系列名称,通常代表了一组字体,这些字体在设计上有相同的设计风格。
例如,Helvetica字体族拥有多种不同样式的字体,如Helvetica Regular、Helvetica Bold、Helvetica Italic等,它们都属于Helvetica字族。
Font Style(样式):
Font Style 指的是字体的具体样式或变体名称。它通常用于区分同一字族中不同的字体样式,例如粗体、斜体、正常体等。
以 Helvetica 字体族为例,Regular、Bold、Italic 等都是不同样式的名称。
导入字体
目前使用的字体是从设备系统中获取,且每个地区设备的字体集可能有所不同。您可以通过导入字体接口来丰富可用的字体样式。
导入字体,请按照以下步骤操作:
- 将所需的字体文件复制到指定的文件夹路径中。
- 使用
CPDFFont.setImportDir(path, isContainSysFont: true)
设置存放字体的目录。 - 初始化 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"];
}