Салют,
Я думаю, мы можем вручную повернуть данные 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;
}