使用pyobjc将元数据写入pdf

djq*_*djq 6 python pdf cocoa pyobjc pdfkit

我正在尝试使用以下python代码将元数据写入pdf文件:

from Foundation import *
from Quartz import *

url = NSURL.fileURLWithPath_("test.pdf")
pdfdoc = PDFDocument.alloc().initWithURL_(url)
assert pdfdoc, "failed to create document"

print "reading pdf file"

attrs = {}
attrs[PDFDocumentTitleAttribute] = "THIS IS THE TITLE"
attrs[PDFDocumentAuthorAttribute] = "A. Author and B. Author"

PDFDocumentTitleAttribute = "test"

pdfdoc.setDocumentAttributes_(attrs)
pdfdoc.writeToFile_("mynewfile.pdf")   

print "pdf made"
Run Code Online (Sandbox Code Playgroud)

这似乎工作正常(安慰没有错误),但是当我检查文件的元数据时,它如下:

PdfID0:
242b7e252f1d3fdd89b35751b3f72d3
PdfID1:
242b7e252f1d3fdd89b35751b3f72d3
NumberOfPages: 4
Run Code Online (Sandbox Code Playgroud)

原始文件具有以下元数据:

InfoKey: Creator
InfoValue: PScript5.dll Version 5.2.2
InfoKey: Title
InfoValue: Microsoft Word - PROGRESS  ON  THE  GABION  HOUSE Compressed.doc
InfoKey: Producer
InfoValue: GPL Ghostscript 8.15
InfoKey: Author
InfoValue: PWK
InfoKey: ModDate
InfoValue: D:20101021193627-05'00'
InfoKey: CreationDate
InfoValue: D:20101008152350Z
PdfID0: d5fd6d3960122ba72117db6c4d46cefa
PdfID1: 24bade63285c641b11a8248ada9f19
NumberOfPages: 4
Run Code Online (Sandbox Code Playgroud)

所以问题是,它没有附加元数据,而是清除以前的元数据结构.我需要做些什么才能让它发挥作用?我的目标是附加参考管理系统可以导入的元数据.

Tam*_*más 6

马克走在正确的道路上,但应该考虑一些特殊之处。

首先,他是正确pdfdoc.documentAttributesNSDictionary,其中包含文档元数据。您想对其进行修改,但是请注意,它documentAttributes为您提供了一个NSDictionary不变的。您必须将其转换NSMutableDictionary为以下内容:

attrs = NSMutableDictionary.alloc().initWithDictionary_(pdfDoc.documentAttributes())
Run Code Online (Sandbox Code Playgroud)

现在,您可以attrs像以前一样进行修改。不需要PDFDocument.PDFDocumentTitleAttribute像Mark所建议的那样写一个不会起作用PDFDocumentTitleAttribute的声明为模块级常量,因此就像在您自己的代码中所做的那样。

这是对我有用的完整代码:

from Foundation import *
from Quartz import *

url = NSURL.fileURLWithPath_("test.pdf")
pdfdoc = PDFDocument.alloc().initWithURL_(url)

attrs = NSMutableDictionary.alloc().initWithDictionary_(pdfdoc.documentAttributes())
attrs[PDFDocumentTitleAttribute] = "THIS IS THE TITLE"
attrs[PDFDocumentAuthorAttribute] = "A. Author and B. Author"

pdfdoc.setDocumentAttributes_(attrs)
pdfdoc.writeToFile_("mynewfile.pdf")
Run Code Online (Sandbox Code Playgroud)

  • 只需在Apple主页上的PDFKit文档中查找它们即可;您要查找的常量列表在此处(对较长的链接表示抱歉):http://developer.apple.com/library/mac/#documentation/GraphicsImaging/Reference/QuartzFramework/Classes/PDFDocument_Class/Reference/Reference.html %23 // apple_ref / doc / uid / TP40003873。在“常量”部分和“文档属性键”中查找。 (2认同)