html - iOS-如何在横向中生成PDF

标签 html ios objective-c pdf

我很难确定如何在横向上正确打印。这是我用作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;
}`

当前,这可以在纵向中很好地打印页面,但是由于其宽度很大,因此迫使其适合纵向宽度并缩小内容。如果我交换A4的高度/宽度尺寸,它不会再缩小内容,而是从右侧切掉约20%的内容(此处为球形)。

编辑:这将仅适用于单页文档。看一下如何在绘制PDF上下文之前对其进行转换。

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

最佳答案

搜索未找到任何内容后,我遇到了同样的问题。因此,我只是研究了自己的代码以进行一些修改。这是符合我期望的代码。

只需更换UIGraphicsBeginPDFContextToData(data, CGRectZero, nil);与以下UIGraphicsBeginPDFContextToData(data, CGRectMake(0, 0, A4PageHeight, A4PageWidth), nil);同时根据上下文生成pdf。

还可以如下更改CustomPrintPageRendererpaperRectCGRect pageFrame = CGRectMake(0.0, 0.0, self.A4PageHeight, self.A4PageWidth);

关于html - iOS-如何在横向中生成PDF,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44552853/

相关文章:

javascript - 在 HTML 表格的每个单元格中播放音频

html - 如何使一个div中的图像拉伸(stretch)到整个页面

html - 在手机上嵌入太小(bandcamp)

ios - 使用自定义加密系统覆盖 ATS 中使用的默认加密系统

iphone - Sleep 和 NSRunLoop runMode :beforeDate: 的区别

iphone - 将文本设置为自定义表格单元格标签时崩溃

javascript - indexedDB 的 GWT 库

iphone - 如何将 viewController 添加为 subview ?

ios - 带有自定义 UIToolbar xib 的 Storyboard 中的 UINavigationController 失败

ios - 模拟标签外观的按钮(有点)