0

デスクトップとハンドヘルドデバイスの間でドキュメントを送信していますが、次のようなメタデータヘッダーをPDFに追加したいと思います。

<CUSTOM_HEADER>\n
{"fileInfoEncodedInJson\":
   {"filename":"My Print Out",
   "filesize\":"630",
   "filedesc":"",}
   }\n
</CUSTOM_HEADER>\n
… file contents …

documentAttributesとメソッドを提供するPDFKitとPDFDocumentを使用していますsetDocumentAttributesが、これはカスタムヘッダーであるため、属性を設定してファイルを保存しても保持されないようです。

NSURL *path = [NSURL fileURLWithPath:@"/Users/username/Desktop/file.pdf"];
PDFDocument *document = [[PDFDocument alloc] initWithURL:path];

NSDictionary *docAttributes = [self.document documentAttributes];
NSMutableDictionary *newAttributes = [[NSMutableDictionary alloc] initWithDictionary:docAttributes];
[newAttributes setObject: @"Custom header contents" forKey:@"Custom header"];
docAttributes = [[NSDictionary alloc] initWithDictionary: newAttributes];

[document setDocumentAttributes: docAttributes];

//Here Custom Header is an entry in the dictionary

[self.document writeToFile:@"/Users/username/Desktop/UPDATEDfile.pdf"];

//Here the UPDATEDfile.pdf does not contain the custom header

私はあちこち見てきましたが、似たような質問がいくつか見つかりました(たとえば、ここcocoadevのように)が、答えはありません。カスタム(つまり、ドキュメント属性キーで提供される8つの事前定義された定数ではない)ヘッダーをPDFファイルに保存する方法を知っている人はいますか?

4

1 に答える 1

1

既存のヘッダーを実際に編集するのではなく、NSMutableDataオブジェクトを作成し、最初にテキストデータを追加し、次にPDFデータを追加してから、このデータを目的のパスに保存しました。

 NSString *header = [NSString stringWithFormat:@"<CUSTOM_HEADER>\n {\"fileInfoEncodedInJson\":  {\"filename\":\"My Print Out\", \"filesize\":\"630\",\"filedesc\":\"\",}  }\n </CUSTOM_HEADER>\n"];

// Append header to PDF data
NSMutableData *data = [NSMutableData dataWithData:[header dataUsingEncoding:NSWindowsCP1252StringEncoding]];
[data appendData:[doc dataRepresentation]];

[data writeToFile:@"/Users/username/Desktop/UPDATEDfile.pdf" atomically:NO];

これにより、Adobeで開くPDFファイルが作成され、表示時にヘッダーが表示されなくなります。

于 2012-06-19T15:27:42.727 に答える