我有一个MacOS PyObjC脚本,该脚本获取PDF的文件名,并将其作为“标题”元数据添加到PDF本身。
我使用{/ {1}}和kCGPDFContextTitle
的键/变量对,它们进入元数据字典。
如果我将title
定义为整个文件路径(取自title
),则该值正确显示在PDF的元数据中。
如果我将sys.argv
定义为给定的字符串,那么它将起作用。
如果我将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()
字典,我看不到工作数据和非工作数据之间的结构差异。类型是字符串。其他密钥/对也包括在内,并且不会出现在元数据中。
答案 0 :(得分:0)
很奇怪,此问题已通过进一步的文本处理得以解决。
在字符串声明的末尾使用capitalize()
方法有效。
title = os.path.basename(filename).capitalize()
或者,通过声明os.path.splitext()
后删除以title
结尾的文件,我也可以得到相同的结果。
title = os.path.basename(filename)
title = os.path.splitext(title)[0]
不知道原始字符串出了什么问题,但现在CoreGraphics的众神满意了。