2011-12-23 3 views
5

В приложении я создаю, я загрузить длинную страницу HTML в WebView, а затем распечатать его в формате PDF, используя следующие:какао PDF страница расщепления

-(void)webView:(WebView *)sender didFinishLoadForFrame:(WebFrame *)frame 
{ 
    if ([frame isEqual:[[self doc] mainFrame]]) 
    { 
     NSMutableData *newData = [[NSMutableData alloc] init]; 
     NSPrintInfo *newInfo = [NSPrintInfo sharedPrintInfo]; 
     NSView *docView = [[[[self doc] mainFrame] frameView] documentView]; 

     NSPrintOperation *newPrintOp = [NSPrintOperation PDFOperationWithView:docView insideRect:docView.bounds toData:newData printInfo:newInfo]; 

     BOOL runPrint = [newPrintOp runOperation]; 
     if (!runPrint) 
     { 
      NSLog(@"Print Failed"); 
     } 
     PDFDocument *newDoc = [[PDFDocument alloc] initWithData:newData]; 
     [newData release]; 
     [self setPdf:newDoc]; 

     //Other code here 
     } 
    } 

Проблема заключается в том, что, когда я смотрю на newDoc, это огромный PDF одной страницы. Я бы предпочел бы, чтобы печать работала так же, как и в диалоговом окне «Сохранить как PDF ...», то есть разбивая PDF на несколько страниц с разумным размером.

Кто-нибудь знает, как это сделать?

я попытался вставить следующее после NSPrintInfo *newInfo = [NSPrintInfo sharedPrintInfo];

[newInfo setVerticalPagination:NSAutoPagination]; 
[newInfo setHorizontalPagination:NSAutoPagination]; 

NSAutoPagination описано в документации, как следующее:

NSAutoPagination Изображение делится на прямоугольники одинакового размера и помещали в одну колонку страниц. Доступен в Mac OS X версии 10.0 и выше. Объявлено в NSPrintInfo.h.

Это не повлияло на печатный PDF.

ответ

10

Вы получаете файл с одной большой страницей, потому что метод + PDFOperationWithView: не поддерживает разбиение на страницы вообще. По этой причине вызов - setVerticalPagination: или - setHoriziontalPagination: ничего не меняет.

Вы можете попробовать использовать «классический» метод + printOperationWithView:printInfo:, настроить его для сохранения PDF во временное местоположение, а затем создать PDFDocument с содержимым полученного файла. Надеюсь, что фрагмент кода ниже поможет.

NSMutableDictionary *dict = [[NSPrintInfo sharedPrintInfo] dictionary]; 
[dict setObject:NSPrintSaveJob forKey:NSPrintJobDisposition]; 
[dict setObject:temporaryFilePath forKey:NSPrintSavePath]; 
NSPrintInfo *pi = [[NSPrintInfo alloc] initWithDictionary:dict]; 
[pi setHorizontalPagination:NSAutoPagination]; 
[pi setVerticalPagination:NSAutoPagination]; 

NSPrintOperation *op = [NSPrintOperation printOperationWithView:[[[webView mainFrame] frameView] documentView] printInfo:pi]; 
[pi release]; 
[op setShowsPrintPanel:NO]; 
[op setShowsProgressPanel:NO]; 

if ([op runOperation]){ 
    PDFDocument *doc = [[[PDFDocument alloc] initWithURL:[NSURL fileURLWithPath: temporaryFilePath]] autorelease]; 
    // do with doc what you want, remove file, etc. 
} 
+0

Отличный ответ! Если никто другой не найдет лучшего ответа на следующий день, я вручу вам награду. Спасибо за вашу помощь. – Daniel

+0

Ну, я не собираюсь бодрствовать в конце щедрости, поэтому ты выигрываешь! – Daniel

+0

Это помогло мне. Хороший ответ. –

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