Какао PDF разделение страницы - PullRequest
6 голосов
/ 23 декабря 2011

В приложении, которое я создаю, я загружаю длинную страницу HTML в webView, а затем распечатываю ее в 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 v10.0 и позже. Объявлено в NSPrintInfo.h.

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

1 Ответ

11 голосов
/ 22 января 2012

Вы получаете файл с одной большой страницей, потому что метод + 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.
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...