【发布时间】:2023-03-12 20:44:01
【问题描述】:
我有一个 MacOS PyObjC 脚本,它获取 PDF 的文件名并将其作为标题元数据添加到 PDF 本身。
我使用 kCGPDFContextTitle 和 title 的键/变量对,它进入元数据字典。
如果我将title 定义为从sys.argv 获取的整个文件路径,那么该值会正确显示在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 字典,我可以看到工作数据和非工作数据之间没有结构差异。类型是字符串。其他密钥/对也包括在内,并且毫无问题地出现在元数据中。
【问题讨论】:
-
你如何用参数调用你的脚本?
-
metadata.py filename1 filename2 .... -
完整文件名?喜欢
'/bin/user/whatever/myomy.pdf'?或者只是python metadata.py one.pdf two.pdf.. 如果是后者,请尝试更改为python metadata.py ./one.pdf ./two.pdf -
是的。如前所述,完整路径将出现在元数据中。但是如果我将它拆分为只获取没有路径的文件名,它就行不通了。
-
不,我使用的是完整路径:通过将文件从 Finder 拖到终端窗口中,或使用 Automator“运行 Shell 脚本”操作中的脚本。我在每个中得到相同的结果。如果我不使用 os.path,我会在 PDF 元数据中获得完整路径。如果我这样做,我什么也得不到。我已经确认拆分路径名实际上在字典中。
标签: python macos core-graphics pyobjc