2017-06-14 38 views
1

我很难确定如何在风景中正确打印。这是我作为UIPrintPageRenderer的子类使用自定义打印页面渲染:iOS - 如何在风景中生成PDF

@implementation CustomPrintPageRenderer 

- (instancetype)init{ 
    self = [super init]; 
    if (self) { 
    self.A4PageWidth = 595.2; 
    self.A4PageHeight = 841.8; 
    CGRect pageFrame = CGRectMake(0.0, 0.0, self.A4PageWidth, self.A4PageHeight); 
    [self setValue:[NSValue valueWithCGRect:pageFrame] forKey:@"paperRect"]; 
    [self setValue:[NSValue valueWithCGRect:CGRectInset(pageFrame, 1.0, 1.0)] forKey:@"printableRect"]; 
    } 
    return self; 
} 

@end 

,这里是说需要HTML,生成PDF的代码,并返回文件路径(这是一个1024像素宽的形式必须是这个宽度为客户):

`-(NSString *) exportHTMLContentToPDF { 
    CustomPrintPageRenderer *cppr = [[CustomPrintPageRenderer alloc]init]; 
    UIMarkupTextPrintFormatter *printFormatter = [[UIMarkupTextPrintFormatter alloc]initWithMarkupText:self.finalHTML]; 
    [cppr addPrintFormatter:printFormatter startingAtPageAtIndex:0]; 
    NSData * pdfData = [self drawPDF:cppr]; 
    NSString *fileName = [NSString stringWithFormat:@"%@.pdf", self.ts.timesheetID]; 
    NSString *filePath = [NSTemporaryDirectory() stringByAppendingPathComponent:fileName]; 
    [pdfData writeToFile:filePath atomically:YES]; 
    return filePath; 
} 
-(NSData *)drawPDF:(CustomPrintPageRenderer *)cppr { 
    NSMutableData *data = [[NSMutableData alloc]init]; 
    UIGraphicsBeginPDFContextToData(data, CGRectZero, nil); 
    UIGraphicsBeginPDFPage(); 
    [cppr drawPageAtIndex:0 inRect:UIGraphicsGetPDFContextBounds()]; 
    UIGraphicsEndPDFContext(); 
    return data; 
}` 

目前打印在纵向页面精美,但由于其广泛的它迫使它适合纵向宽度和缩小的内容。如果我交换A4高度/宽度尺寸,它不再缩小内容,但是从右侧切掉大约20%(这里是眼球)。

编辑:这将只适用于单页文档。看看如何在绘制之前转换PDF上下文。

所以也许我在想这个错误。调整宽度/高度使其像横向布局一样,什么都不做。它仍然打印肖像。因此,我需要确定如何保留纵向尺寸,但在生成PDF数据之前将整个HTML页面向左旋转90度。如果此操作有效,将稍后更新。否则,任何其他建议将不胜感激!

+0

你有什么发现? –

回答

1

我有同样的问题,找不到任何发现后。所以我只是看着我自己的代码进行了一些修改。这是符合我的期望的代码。

只需更换
UIGraphicsBeginPDFContextToData(data, CGRectZero, nil);
与以下
UIGraphicsBeginPDFContextToData(data, CGRectMake(0, 0, A4PageHeight, A4PageWidth), nil);
而从上下文生成PDF。

也改变CustomPrintPageRendererpaperRect如下所示。
CGRect pageFrame = CGRectMake(0.0, 0.0, self.A4PageHeight, self.A4PageWidth);