UIPrintInteractionController в ландшафте - PullRequest
1 голос
/ 24 марта 2012

Я пытаюсь распечатать документ PDF, полученный с веб-сервера из моего приложения для iPad.Документ находится в альбомной ориентации (проверено с помощью Preview), но UiPrinterInteractionController печатает документ в портретном режиме.

Я установил printInfo.orientation = UiPrintInfoOrientationLandscape;, но это не помогло.

Я пытаюсь напечататьдокумент для симулятора принтера.Когда я захожу в папку, в которой сохраняются документы, я попадаю в документы.Один, оригинальный файл, другой - печатный.

Оригинальный файл в альбомной ориентации и ориентирован правильно.Но второй, вывод на печать, в портретной ориентации и границы обрезаны.

Есть идеи?Спасибо за помощь, Джулиан

1 Ответ

1 голос
/ 27 июня 2012

Салют,

Я думаю, мы можем вручную повернуть данные PDF перед отправкой на принтер.

Ниже приведен код (извините, на самом деле не проверенный), который, я надеюсь, может быть полезенне уверен, что это лучшее решение, но в любом случае).Убедитесь, что "QuartzCore / QuartzCore.h" импортирован.

- (NSData *) prepareForPrinting:(NSData *) data
{
    NSData *result = nil;
    CGDataProviderRef dataProvider = CGDataProviderCreateWithCFData((CFDataRef)data);
    CGPDFDocumentRef document = CGPDFDocumentCreateWithProvider(dataProvider);
    CGPDFPageRef page = CGPDFDocumentGetPage(document, 1);
    CGRect pageRect = CGPDFPageGetBoxRect(page, kCGPDFMediaBox);

    if (pageRect.size.width > pageRect.size.height) 
    {
        GLuint w = pageRect.size.width;
        GLuint h = pageRect.size.height;
        pageRect.size.width = h;
        pageRect.size.height = w;
        CFMutableDataRef mutableData = CFDataCreateMutable(NULL, 0);
        CGDataConsumerRef dataConsumer = CGDataConsumerCreateWithCFData(mutableData);
        CGContextRef pdfContext = CGPDFContextCreate(dataConsumer, &pageRect, NULL);
        int numPages = CGPDFDocumentGetNumberOfPages(document);

        if (numPages > 0)
        {   
            for (int i = 0; i < numPages; i++) 
            {
                page = CGPDFDocumentGetPage(document, i + 1);
                CGPDFContextBeginPage(pdfContext, NULL);
                CGContextRotateCTM(pdfContext, M_PI_2);
                CGContextTranslateCTM(pdfContext, 0, -pageRect.size.width);
                CGContextDrawPDFPage(pdfContext, page);
                CGPDFContextEndPage(pdfContext);
            }
        }
        else
        {
            NSLog(@"Invalid PDF");
        }
        CGContextRelease(pdfContext);
        result = [NSData dataWithData:(NSData *)mutableData];
        CGDataConsumerRelease(dataConsumer);
        CFRelease(mutableData);
    }
    else
    {
        result = data;
    }
    CGDataProviderRelease(dataProvider);
    CGPDFDocumentRelease(document);

    return result;
}
...