2009-10-13 2 views
4

Un peu d'histoire. À l'époque où la saveur prédominante du presse-papiers vectoriel Mac était PICT, un programme pouvait insérer ses propres données dans le PICT. Le PICT pourrait être collé dans une autre application. À une date ultérieure, le même dessin pourrait être sélectionné et placé dans le presse-papiers, puis collé dans le programme d'origine. Le programme d'origine extrairait ses données personnalisées et régénérerait la sélection d'origine pour l'édition en direct.Comment un programme de dessin OS X doit-il stocker des données personnalisées dans sa saveur PDF PasteBoard?

Ces jours-ci, la saveur dominante de presse-papiers vectorisée est PDF, qui est un format fin, mais Apple ne fournit aucun moyen de mettre ses données personnalisées dans un PDF en utilisant les API de génération PDF d'Apple. (Si je me trompe à ce sujet, s'il vous plaît faites le moi savoir.) Juste des chaînes standard comme le titre, auteur, etc Et il semble que les nouvelles applications ne prennent pas la peine de remettre le graphique original dans le presse-papiers de l'original. En outre, les applications comme Word ne conservent que la première page des fichiers PDF collés.

Y a-t-il quelque chose que je puisse faire aujourd'hui pour obtenir une modification "aller-retour" de mon application à une autre application arbitraire? Baring this, quelle serait la solution idéale pour Apple et d'autres applications à soutenir? Devrait-il être comme PICT et être un blob de fournisseur personnalisé standard intégré au format PDF, ou devrait-il y avoir un type de tableau de distribution distinct que les applications gardent en parallèle avec le graphique visible? Si le premier, le blob doit-il être conservé au niveau du document ou de la page? Je préférerais ne pas essayer n'importe quoi hacky, comme jammer XML dans le champ d'auteur.

Répondre

0

Il semble qu'il y ait une nouvelle API qui deviendra disponible en 10.7 (et est déjà disponible en iOS) qui permet l'inclusion d'arbitraires (basé sur XML) métadonnées.

void CGPDFContextAddDocumentMetadata (CGContextRef context, CFDataRef metadata) CG_AVAILABLE_STARTING(__MAC_10_7, __IPHONE_4_0); 

Cela insérera un flux de métadonnées compressé référencé à partir du dictionnaire racine. Tout ce que j'ai à faire ici est l'appel d'API qui est apparu comme par magie dans le fichier d'en-tête CGPDFContext.h. Évidemment, cela ne m'aide pas à supporter les versions d'OS X antérieures à la version 10.7, mais il semble que ce soit la solution à long terme, et en attendant, nous pouvons bidouiller le PDF pour le faire correspondre.

Here's a blog entry I wrote up on the subject.

1

Y a-t-il une raison pour laquelle tout ce que votre application doit dessiner ne peut pas être exprimé au format PDF et caché? Bien qu'il y ait beaucoup de plaintes au sujet des limitations gênantes de PDF dans l'industrie de la prépresse, Apple n'a rien à voir avec elles, et le fait est que c'est vraiment bien de faire de jolies images sur les écrans et les feuilles de papier.

Quelle API regardez-vous?

+0

J'utilise l'API standard pour générer du contenu PDF sous OS X, tels que CGPDFContextCreate.Mon sentiment est que tout comme il existe maintenant une API pour ajouter un support de mot-clé en utilisant la balise kCGPDFContextKeywords, il devrait y avoir un moyen pour moi de fournir un morceau arbitrairement grand de XML pour me permettre de recréer la sélection originale. Je ne veux pas utiliser de hacks comme l'ajout de texte transparent avec mon XML. –

+0

Si c'est un hack alors certains des produits phares d'Adobe les plus vendus sont en difficulté. Créez un document Illustrator avec des objets non imprimables et voyez à quoi cela ressemble. –

2

Un autre hack serait d'utiliser le PDFKit pour ajouter des annotations avec vos données supplémentaires - je ne suis pas sûr que celles-ci seraient copiées/collées correctement par les programmes cibles, mais ça vaut le coup d'essayer.

Reference

Example Code

-W

+0

Salut Wil. Merci pour la réponse. Hope Delicious Library se vend toujours bien. Peu importe, je ne veux vraiment pas de piratage, mais il semble de plus en plus que j'en aurai besoin. Il ne semble pas qu'il y aura une méthode sanctionnée par Apple d'ici peu. Je me demande s'il serait un peu moins hacky à long terme de munge un PDF que je reçois des API Apple pour insérer ma propre ressource. Par exemple, je pourrais ajouter un commentaire au fichier PDF "% com.mycompany.MyData = blahblahblah" où blahblahblah serait un extrait XML correctement échappé, ou je pourrais l'ajouter d'une manière plus PDFish compatible avec le format. –

0

Vous avez besoin d'une API de niveau supérieur. L'API CGPDF de bas niveau ... vous sera probablement moins utile que l'utilisation directe de Cocoa. (Si vous n'utilisez pas Cocoa, Dieu vous aidera.) Vous pouvez faire tout ce que vous devez faire en utilisant le support PDF standard dans Cocoa, plus les listes déroulantes sélectionnées dans CoreGraphics directement pour l'efficacité. (Cocoa est génial, mais aspire au dessin graphique très efficace.)

+0

Pourriez-vous me donner un exemple? –

Questions connexes