You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 04:47:44