我很难确定如何在横向上正确打印。这是一个自定义打印页面渲染器,我用作UIPrintPageRenderer的子类:
@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;
}`
目前,这可以在Portrait中打印精美页面,但由于它的宽度使其适合纵向宽度并缩小内容。如果我更换A4高度/宽度尺寸,它不再缩小内容,但会从右侧切断约20%(此处是眼球)。
编辑:这仅适用于单页文档。看看如何在绘制之前转换PDF上下文。
所以也许我在想这个错误。调整宽度/高度使其布局像风景一样。它仍然打印肖像。因此,我需要确定如何保持纵向尺寸,但在生成PDF数据之前将整个HTML页面向左旋转90度...如果这样做有效,将在以后更新。否则,我们将非常感谢任何其他建议!
答案 0 :(得分:2)
我遇到了同样的问题,没有找到任何发现。所以我只是查看了自己的代码进行了一些修改。这是符合我期望的代码。
只需更换
UIGraphicsBeginPDFContextToData(data, CGRectZero, nil);
以下
UIGraphicsBeginPDFContextToData(data, CGRectMake(0, 0, A4PageHeight, A4PageWidth), nil);
从上下文生成pdf。
也会更改CustomPrintPageRenderer
' paperRect
,如下所示
CGRect pageFrame = CGRectMake(0.0, 0.0, self.A4PageHeight, self.A4PageWidth);