我有一个MacOS PyObjC脚本,它获取PDF的文件名,并将其作为标题元数据添加到PDF本身。
我使用kCGPDFContextTitle和title的键/变量对,它放入元数据字典中。
如果我从sys.argv中将title定义为整个文件路径,那么这个值就会正确地出现在PDF的元数据中。
如果我将title定义为一个给定的字符串,它就可以工作。
如果我将title定义为os.path.basename(filename),那么它就不会出现在元数据中。
文件名中的空格不是一个因素。相关代码为:
def setMetadata(filename):
options = {}
title = os.path.basename(filename)
titleKey = Quartz.kCGPDFContextTitle
pdfURL = NSURL.fileURLWithPath_(filename)
pdfDoc = Quartz.PDFDocument.alloc().initWithURL_(pdfURL)
options[titleKey] = title
pdfDoc.writeToFile_withOptions_(filename, options)
if __name__ == "__main__":
for filename in sys.argv[1:]:
setMetadata(filename)如果我print() options字典,我看不到工作数据和非工作数据之间的结构差异。类型为string。包含其他密钥/对,并出现在元数据中,没有问题。
发布于 2019-01-26 17:00:17
奇怪的是,这是通过进一步的文本处理修复的。
在字符串声明的末尾使用capitalize()方法是可行的。
title = os.path.basename(filename).capitalize()或者,我也可以通过在声明title之后删除以os.path.splitext()结尾的文件来获得相同的结果。
title = os.path.basename(filename)
title = os.path.splitext(title)[0]不知道原始字符串出了什么问题,但是CoreGraphics的众神现在都满意了。
https://stackoverflow.com/questions/54365961
复制相似问题