1

私はプロジェクトに取り組んでおり、PDF に独自のメタデータを作成して設定する必要があります (GUID をファイルに直接設定するため)。

現在、従来のメタデータ (作成者、キーワードなど) を設定できますが、カスタム フィールドを追加する方法がわかりません。

メタデータを設定する方法は次のとおりです。

CFMutableDictionaryRef auxInfo = CFDictionaryCreateMutable(kCFAllocatorDefault, 1, NULL, NULL);
CFDictionaryAddValue(auxInfo, kCGPDFContextCreator, CFSTR("John doo"));
CFDictionaryAddValue(auxInfo, kCGPDFContextAuthor, CFSTR("foo bar"));
CFDictionaryRef auxillaryInformation = CFDictionaryCreateCopy(kCFAllocatorDefault, auxInfo);
CFRelease(auxInfo);

// create a context to draw into
CGContextRef graphicContext = CGPDFContextCreate(PDFDataConsumer, &mediaRect, auxillaryInformation);
CFRelease(auxillaryInformation);
CGDataConsumerRelease(PDFDataConsumer);

kCGPDFContextThing をカスタム名に置き換えようとしましたが、メタデータを読み取ってもまったく表示されません。

私が使用したメタを読むために

CGPDFDictionaryRef dict = CGPDFDocumentGetInfo(*pdfDoc);
CGPDFDictionaryGetString(dict, "Creator", &objectValue);

また、メタを追加しようとします:

NSString* str= @"Hello World";
NSData* data=[str dataUsingEncoding:NSUTF8StringEncoding];
CFDataRef cfdata = CFDataCreate(NULL, [data bytes], [data length]);

CGPDFContextAddDocumentMetadata(graphicContext, cfdata);

しかし、どちらも機能していないようで、そこで何が行われているかを正しく理解しているかどうかはわかりません。

編集を支援するために PDFNet SDK も使用していますが、メタデータについては何の助けにもならないようなので、クォーツを使用しています。

ヘルプやアドバイスなどは大歓迎ですが、かなり迷っており、私はiOSの専門家ではありません!!!

4

1 に答える 1

2

PDFNet で PDF の低レベルの編集を行うことができます。簡単に言うと:

(ドキュメントのルートに) 新しいカスタム エントリを作成します。

Obj* cust_dict = [[myPDFDoc GetRoot] PutDict:@"_MyCustomData" ];
[cust_dict PutText:@"_myGUID" value:@"123-4567-890"];

カスタム エントリを読みます。

Obj* dict = [[myPDFDoc GetRoot] FindObj:@"_MyCustomData"];
DictIterator* itr = [dict Get:@"_myGUID"];
Obj* strObj = [itr Value];
NSString* str = [strObj GetAsPDFText];
NSLog(@"guid is %@", str);

カスタム エントリを削除します。

[[myPDFDoc GetRoot] EraseDictElementWithKey:@"_MyCustomData"];

ここで概説されているように、ページのルートまたはより標準的な場所にメタデータを配置することもできます: https://groups.google.com/d/msg/pdfnet-sdk/gtPjLZVbRSQ/Tv5DTb9pRXkJ

XMP メタデータの追加に関する具体的な情報については (タグが興味を示しているため)、PDFNet サポート フォーラムで XMP を検索してみてください: https://groups.google.com/forum/#!searchin/pdfnet-sdk/XMP

Quartz でこれを行う方法がわかりません。

開示:私はPDFNetのメーカーであるPDFTronで働いています。

于 2014-04-14T21:04:30.210 に答える