首页 文章

iOS - 如何在横向中生成PDF

提问于
浏览
1

我很难确定如何在横向上正确打印 . 这是一个自定义打印页面渲染器,我用作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度...如果这样做有效,将在以后更新 . 否则任何其他建议将不胜感激!

1 回答

  • 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);

相关问题