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

Python3使用pyobjc-framework-Quartz调用CGDataProviderCreateWithFilename报错如何解决

错误原因
  • Python2与Python3的默认字符串类型存在本质差异:Python2中的str类型是字节序列,刚好适配CGDataProviderCreateWithFilename底层C接口要求的char*类型,因此可以直接传参运行;Python3中的str类型为Unicode字符串,无法被PyObjC的类型转换逻辑识别为C字符类型,触发类型转换报错。
  • 采用ctypes的c_char_p转换路径不生效,是因为PyObjC框架有独立的Python-C类型映射规则,无法识别ctypes封装的指针对象,因此转换后仍然不符合接口传参要求。
解决方案

将路径字符串编码为UTF-8格式的字节串后传入即可,修改后的代码如下:

provider = Quartz.CGDataProviderCreateWithFilename(input_file_path.encode('utf-8'))
pdf = Quartz.CGPDFDocumentCreateWithProvider(provider)

如果路径包含非ASCII字符,只需保证input_file_path本身是合法的Unicode字符串,编码为UTF-8字节串后即可正常被底层接口识别。

内容的提问来源于stack exchange,提问作者Ryan Loggerythm

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 22:06:02