html – 打印纸张尺寸和内容插入

前端之家收集整理的这篇文章主要介绍了html – 打印纸张尺寸和内容插入前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在使用以下代码来打印包含文本和图像的HTML内容.
  1. if (![UIPrintInteractionController isPrintingAvailable]) {
  2. UIAlertView *alertView = [[[UIAlertView alloc]
  3. initWithTitle:NSLocalizedString(@"Printer Availability Error Title",@"")
  4. message:NSLocalizedString(@"Printer Availability Error Message",@"")
  5. delegate:nil
  6. cancelButtonTitle:NSLocalizedString(@"OK",@"OK")
  7. otherButtonTitles:nil] autorelease];
  8. [alertView show];
  9. return;
  10. }
  11.  
  12. UIPrintInteractionController *pic =
  13. [UIPrintInteractionController sharedPrintController];
  14.  
  15. if(!pic) {
  16. NSLog(@"Couldn't get shared UIPrintInteractionController!");
  17. return;
  18. }
  19.  
  20. pic.delegate = self;
  21.  
  22. UIPrintInfo *printInfo = [UIPrintInfo printInfo];
  23. printInfo.outputType = UIPrintInfoOutputGeneral;
  24. printInfo.jobName = @"Sample";
  25. pic.printInfo = printInfo;
  26.  
  27. NSString *htmlString = [self prepareHTMLText];
  28. UIMarkupTextPrintFormatter *htmlFormatter =
  29. [[UIMarkupTextPrintFormatter alloc] initWithMarkupText:htmlString];
  30. htmlFormatter.startPage = 0;
  31. // 1-inch margins on all sides
  32. htmlFormatter.contentInsets = UIEdgeInsetsMake(72.0,72.0,72.0);
  33. // printed content should be 6-inches wide within those margins
  34. htmlFormatter.maximumContentWidth = 6 * 72.0;
  35. pic.printFormatter = htmlFormatter;
  36. [htmlFormatter release];
  37.  
  38. pic.showsPageRange = YES;
  39.  
  40. void (^completionHandler)(UIPrintInteractionController *,BOOL,NSError *) =
  41. ^(UIPrintInteractionController *printController,BOOL completed,NSError *error) {
  42.  
  43. if (!completed && error) {
  44. NSLog(@"Printing could not complete because of error: %@",error);
  45. }
  46. };
  47.  
  48. if (UI_USER_INTERFACE_IdioM() == UIUserInterfaceIdiomPad) {
  49. [pic presentFromBarButtonItem:self.myPrintBarButton
  50. animated:YES
  51. completionHandler:completionHandler];
  52.  
  53. } else {
  54. [pic presentAnimated:YES completionHandler:completionHandler];
  55. }

请参阅附件中的结果(按比例缩小的版本可能不是很清楚,但希望你能得到图片).

这是我的问题:

>打印纸尺寸如何由AirPrint确定?如果我想专门为A4纸格式化和打印数据怎么办?
>使用上述代码并使用不同的模拟打印机(打印机模拟器)打印的结果是,在所有情况下,我在第一页的顶部获得1英寸的边距,但在连续页面上没有.为什么?
>使用上述代码并使用不同的模拟打印机(打印机模拟器)进行打印的结果是,在某些情况下,字体样式会丢失.结果,内容向下移动.为什么?

解决方法

>为了专门选择A4纸张尺寸,我实现了printInteractionController:selectPaper:< UIPrintInteractionControllerDelegate>的方法.如果打印机支持,则返回A4纸张大小(使用[UIPrintPaper bestPaperForPageSize:withPapersFromArray:]进行测试.请注意,此处未设置纵向/横向,而是通过UIPrintInfo属性方向设置.
>属性htmlFormatter.contentInsets仅在页面渲染器跨页面拆分之前设置整个内容的插入.通过UIPrintPageRenderer添加空白页眉和页脚,然后在HTML打印格式化程序的左侧和右侧添加1cm边距,我能够设置每页1cm的页边距:
  1. UIPrintPageRenderer *renderer = [[UIPrintPageRenderer alloc] init];
  2. renderer.headerHeight = 30.0f;
  3. renderer.footerHeight = 30.0f;
  4. pic.printPageRenderer = renderer;
  5. [renderer release];
  6.  
  7. UIMarkupTextPrintFormatter *htmlFormatter = [[UIMarkupTextPrintFormatter alloc] initWithMarkupText: htmlString];
  8. htmlFormatter.startPage = 0;
  9. htmlFormatter.contentInsets = UIEdgeInsetsMake(0.0f,30.0f,0.0f,30.0f);
  10. [renderer addPrintFormatter: htmlFormatter startingAtPageAtIndex: 0];
  11. [htmlFormatter release];

>对不起这个抱歉.

猜你在找的HTML相关文章