在Python 3中使用pyobjc-framework-Quartz



我已经安装了'pyobjc-framework-Quartz'库

pip install pyobjc-framework-Quartz

在Python2中,以下行可以完美地工作:

provider = Quartz.CGDataProviderCreateWithFilename(input_file_path)
pdf = Quartz.CGPDFDocumentCreateWithProvider(provider)

但是在Python3中,我得到错误消息:

provider = Quartz.CGDataProviderCreateWithFilename(input_file_path)

ValueError: depythonization 'char', got 'str' of 1

我已经尝试转换为char*

from ctypes import *
path = c_char_p(input_file_path)

但似乎什么都不起作用。有人能解释一下这个错误吗?

谢谢,瑞安

我已经算出来了。问题是python3中的字符串input_file_path是一个Unicode字符串,需要在objc api中使用之前转换为二进制字符串。

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


(不过它只适用于带有标准"ascii"的文件名;范围#…)

最新更新