2017-05-25 60 views
0

的documentAttributes根據Apple's documentation CGPDFDocument有一個變種叫documentAttributes如何使用CGPDFDocument

var documentAttributes: [AnyHashable : Any]? { get set } 

我有看到如何在斯威夫特用這個要麼得到,或設置PDF文檔屬性麻煩。 Xcode不提供它作爲一個點後的自動完成,例如。 myPDF.documentAttributes

你如何使用它?我試圖獲取/設置文檔元數據,如作者,創作者,主題。

+0

這是一個詞典,其關鍵字都可以找到[這裏](https://developer.apple.com/reference/quartz/pdfdocument/document_attribute_keys)。你會做'let title = pdfDocument.documentAttributes [PDFDocumentTitleAttribute]' –

+0

'我得到'類型'CGPDFDocument'的值沒有成員'documentAttributes「。 – benwiggy

+0

鏈接中的文檔說明它在OS X 10.12+上可用。您定位的是哪個版本的OS X? –

回答

1

再次查看您提供的鏈接。這不是CGPDFDocument而是Quartz.PDFDocument。下面有一個方法可以訪問:

let pdfDoc = PDFDocument(url: URL(fileURLWithPath: "/path/to/file.pdf"))! 

if let attributes = pdfDoc.documentAttributes { 
    let keys = attributes.keys    // the set of keys differ from file to file 
    let firstKey = keys[keys.startIndex] // get the first key, whatever the turns out to be 
              // since Dictionaries are not ordered 

    print("\(firstKey): \(attributes[firstKey]!)") 
    print("Title: \(attributes["Title"])") 
} 

鍵列表從不同的文件到文件,所以你需要檢查每一個和處理nil時,關鍵是不可用的。


要更改屬性:

pdfDoc.documentAttributes?["Title"] = "Cheese" 
pdfDoc.write(to: URL(fileURLWithPath: "/path/to/file.pdf")) // save the PDF file 
+0

謝謝。爲什麼地球上有兩個完全獨立的PDFDocument API?多可笑。 – benwiggy

+0

雖然我看不出如何設置一個值。 'attributes [「Title」] =「Cheese」不起作用,'updateValue'也不起作用。 – benwiggy

+0

'attributes'包含'documentAttributes'的*副本,所以您的語句對PDF文檔沒有影響。看到我編輯的答案 –