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);

我也尝试添加一个 meta :

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

CGPDFContextAddDocumentMetadata(graphicContext, cfdata);

但它似乎也不起作用,我不确定我是否正确理解那里做了什么。

我也在使用 PDFNet SDK 来帮助编辑,但它似乎没有提供关于元数据的任何帮助,所以我使用的是quartz。

任何帮助或建议或任何东西都会受到欢迎,我很迷茫,我根本不是 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 回答