macOS端PDF生成文本不可见求助(iOS端正常)
macOS端PDF生成无文本的排查与修复方案
1. 修正坐标系差异
iOS与macOS默认坐标系原点不同:iOS以左上角为原点,macOS默认以左下角为原点。直接复用iOS绘制逻辑会导致文本被绘制到PDF可视区域外。
修复代码:
// macOS绘制前添加坐标系翻转 let pageBounds = CGRect(x: 0, y: 0, width: 612, height: 792) // A4尺寸示例 CGContextTranslateCTM(context, 0, pageBounds.size.height) CGContextScaleCTM(context, 1.0, -1.0)
2. 确认字体有效性
macOS字体查找逻辑与iOS不同,自定义字体或指定字体不存在会导致文本不渲染:
- 用
CTFontManagerCopyAvailableFontNames()打印系统可用字体列表,核对代码中使用的字体名是否存在 - 自定义字体需添加到macOS项目的
Fonts资源组,并在Info.plist中配置ATSApplicationFontsPath路径
3. 检查文本渲染配置
macOS PDF上下文默认设置可能导致文本不可见:
- 显式设置文本颜色,避免与背景色重合:
NSColor.black.set() // 或使用CGContext API CGContextSetFillColorWithColor(context, NSColor.black.CGColor)
- 确保文本绘制模式为填充:
CGContextSetTextDrawingMode(context, kCGTextFill)
4. 适配平台绘制API
iOS使用UIGraphics系列API,macOS需用NSGraphics对应方法,避免跨平台API混用:
// macOS 正确绘制文本示例 let content = "测试内容" let textAttrs: [NSAttributedString.Key: Any] = [ .font: NSFont.systemFont(ofSize: 14), .foregroundColor: NSColor.black ] content.draw(at: CGPoint(x: 20, y: 20), withAttributes: textAttrs)
5. 核对PDF上下文创建参数
macOS创建PDF上下文时参数错误会导致内容异常:
// macOS 标准PDF上下文创建流程 let outputURL = URL(fileURLWithPath: "/Users/xxx/Documents/test.pdf") var pageSize = CGSize(width: 612, height: 792) guard let pdfContext = CGContext(outputURL as CFURL, mediaBox: &pageSize, nil) else { print("创建PDF上下文失败") return } pdfContext.beginPDFPage(nil) // 此处执行坐标系翻转、内容绘制逻辑 pdfContext.endPDFPage() pdfContext.closePDF()
内容的提问来源于stack exchange,提问作者BouBal
相关产品推荐
相关产品推荐

