使用iOS在PDF上创建自定义元数据

时间:2014-04-10 13:50:05

标签: ios pdf metadata xmp

我正在开发一个项目,我需要在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专家!

1 个答案:

答案 0 :(得分: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。

披露:我为PDFT的制造商PDFTron工作。