6

次の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"

これは正常に機能しているように見えますが(コンソールにエラーはありません)、ファイルのメタデータを調べると次のようになります。

PdfID0:
242b7e252f1d3fdd89b35751b3f72d3
PdfID1:
242b7e252f1d3fdd89b35751b3f72d3
NumberOfPages: 4

元のファイルには次のメタデータが含まれていました。

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

したがって、問題は、メタデータを追加しておらず、以前のメタデータ構造をクリアしていることです。これを機能させるには何をする必要がありますか?私の目的は、参照管理システムがインポートできるメタデータを追加することです。

4

2 に答える 2

6

マークは正しい方向に進んでいますが、説明しなければならないいくつかの特殊性があります。

まず、彼は正しいです。それpdfdoc.documentAttributesNSDictionary、ドキュメントのメタデータを含むものです。これを変更したいのですが、不変であるがdocumentAttributes得られることに注意してください。NSDictionary次のように変換する必要がありNSMutableDictionaryます。

attrs = NSMutableDictionary.alloc().initWithDictionary_(pdfDoc.documentAttributes())

これで、行ったように変更できattrsます。PDFDocument.PDFDocumentTitleAttributeマークが提案したように書く必要はありません。1つは機能せず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")
于 2010-11-12T23:12:27.477 に答える
2

免責事項:私はPythonにまったく慣れていませんが、PDFには古くからの手があります。

attrs既存のすべての属性を壊さないようにするにはpdfDoc.documentAttributes、ではなく、で始める必要があります{}。setDocumentAttributesは、ほぼ確実に、マージではなく上書きです(ここで出力を指定します)。

次に、すべてのPDFDocument*Attribute定数はの一部ですPDFDocument。私のPythonの無知は間違いなく示されていますが、それらを裸の変数としてではなく属性として参照するべきではありませんか?このような:

attrs[PDFDocument.PDFDocumentTitleAttribute] = "THIS IS THE TITLE"

PDFDocumentTitleAttributeに割り当てることができるということは、それが定数ではないと私に信じさせます。

私が正しければ、あなたの属性はnullキーに多数の値を割り当てようとします。私のPythonは弱いので、どうやってそれをチェックするのかわかりません。attrs電話をかける前に調べるpdfDoc.setDocumentAttributes_()と、明らかになるはずです。

于 2010-11-09T22:27:40.753 に答える