2017-05-25 2 views
0

Selon Apple's documentation CGPDFDocument a un var appelé documentAttributes:Comment utiliser documentAttributes de CGPDFDocument

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

Je vais avoir du mal à voir comment l'utiliser pour soit obtenir, ou définir des attributs de document d'un PDF à Swift . Xcode ne l'offre pas comme une auto-complétion suite à un point, par ex. myPDF.documentAttributes.

Comment l'utilisez-vous? J'essaie d'obtenir/définir les métadonnées du document telles que Auteur, Créateur, Sujet.

+0

Il est un dictionnaire dont les clés se trouvent [ici] (https://developer.apple.com/reference/quartz/pdfdocument/document_attribute_keys). Vous feriez quelque chose comme 'let title = pdfDocument.documentAttributes [PDFDocumentTitleAttribute]' –

+0

Je reçois "valeur de type 'CGPDFDocument' n'a aucun membre 'documentAttributes". – benwiggy

+0

La documentation de votre lien indique qu'il est disponible sous OS X 10.12+. Quelle version d'OS X ciblez-vous? –

Répondre

1

Nous avons passé en revue le lien que vous avez fourni. Ce n'est pas CGPDFDocument mais Quartz.PDFDocument. Heres une façon d'y accéder:

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"])") 
} 

La liste des clés diffèrent d'un fichier à de sorte que vous devez vérifier chacun et traiter nil lorsque la clé est disponible.


Pour modifier les attributs:

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

Merci. Pourquoi diable y a-t-il deux API PDFDocument complètement séparées? C'est ridicule. – benwiggy

+0

Je ne vois pas comment définir une valeur, cependant. 'attributes [" Title "] =" Cheese "' ne fonctionne pas, ni 'updateValue'. – benwiggy

+0

'attributes' contient une * copie * de' documentAttributes' pour que votre instruction n'ait aucun effet sur le document PDF. Voir ma réponse éditée –