2011-10-28 6 views
3

Brad Miller @ Cocoa Dev Central написал учебное пособие по созданию PDF-файлов из Cocoa. Я попытался следовать учебнику, но, поскольку его довольно старый (2003), много кода было устаревшим. Я получил его для работы после некоторого fiddeling, но когда я пытаюсь экспортировать PDF-файл, отображается диалоговое окно печати, и оно не сохраняет PDF-файл в указанном файле.Экспорт Просмотр в формате PDF от Cocoa

NSPrintInfo *printInfo; 
NSPrintInfo *sharedInfo; 
NSPrintOperation *printOp; 
NSMutableDictionary *printInfoDict; 
NSMutableDictionary *sharedDict; 

sharedInfo = [NSPrintInfo sharedPrintInfo]; 
sharedDict = [sharedInfo dictionary]; 
printInfoDict = [NSMutableDictionary dictionaryWithDictionary: sharedDict]; 

[printInfoDict setObject:NSPrintSaveJob 
        forKey:NSPrintJobDisposition]; 

[printInfoDict setObject:[panel URL] forKey:NSPrintSavePath]; 

printInfo = [[NSPrintInfo alloc] initWithDictionary:printInfoDict]; 
[printInfo setHorizontalPagination: NSAutoPagination]; 
[printInfo setVerticalPagination: NSAutoPagination]; 
[printInfo setVerticallyCentered:NO]; 

printOp = [NSPrintOperation printOperationWithView:textView 
             printInfo:printInfo]; 

[printOp setShowsProgressPanel:NO]; 
[printOp runOperation]; 

Полный код для моей реализации экспорта PDF является here. Вышеприведенный код касается экспорта.

Был бы очень рад, если бы кто-то мог увидеть, что им делать неправильно здесь ...

ответ

1

На самом деле, я нашел ответ на мою проблему сам здесь, когда я снова прочел ее. Проблема с линией, содержащей:

[printInfoDict setObject:[panel URL] forKey:NSPrintSavePath]; 

Как вы можете видеть, файл URL подобран, но он должен быть путь вместо URL. Поэтому я сменил его на это:

[printInfoDict setObject:[[panel URL] path] forKey:NSPrintSavePath]; 

И, кстати, это работает!

+1

Просто быстрый FYI: ['NSPrintSavePath' устарел с 10.6] (https://developer.apple.com/library/mac/documentation/Cocoa/Reference/ApplicationKit/Classes/NSPrintInfo_Class/index.html#//apple_ref/doc/constant_group/Print_job_attributes) и заменен на «NSPrintJobSavingURL», который принимает экземпляр «NSURL», поэтому исходный '[URL-адрес панели] будет работать с этим! – Adam

Смежные вопросы