我正试图从我的iPad应用程序打印从Web服务器中提取的PDF文档。 该文档是横向的(使用预览证明),但UiPrinterInteractionController以纵向模式打印文档。
我设置了printInfo.orientation = UiPrintInfoOrientationLandscape;
,但它似乎没有帮助。
我尝试将文档打印到打印机模拟器。当我进入保存文档的文件夹时,我得到了文档。一个是原始文件,一个是打印文件。
原始文件处于横向和正确的方向。但是第二个是打印输出,是纵向的,边框是切割的。
有什么想法吗? 谢谢你的帮助,Julian
答案 0 :(得分:1)
敬礼,
我想我们可以在将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;
}