2017-06-14 40 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);