8打印 ios

2018-01-18 18:01:28 u012881779 阅读数 1858
[iOS]添加打印功能

最近又遇到了应用中添加打印功能的需求,上一次需求是打印订单信息小票,这一次需求是打印施工图。
首先,使用iPhone手机打印需要打印机支持AirPrint,我们公司只有普通打印机没法用真机测试,只用去官网下载打印机模拟器暂且使用。
模拟器下载地址:

#import "ViewController.h"

@interface ViewController () <UIPrintInteractionControllerDelegate>
@property (weak, nonatomic) IBOutlet UIWebView *webView;

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    NSString *path = @"https://www.baidu.com";
    NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:path]];
    [_webView loadRequest:request];
}

- (IBAction)printContent:(id)sender {
    UIPrintInteractionController *print = [UIPrintInteractionController sharedPrintController];
    NSMutableArray *tempMarr = [NSMutableArray new];
    // 打印PDF
    NSData *pdfData = [NSData dataWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"2017年高考真题——数学(理)(北京卷)+Word版含解析(参考版)" ofType:@"pdf"]];
    [tempMarr addObject:pdfData];
    // 打印图片,与PDF不能同时打印
    //[tempMarr addObject:UIImagePNGRepresentation([UIImage imageNamed:@"1231.jpg"])];
    //[tempMarr addObject:UIImagePNGRepresentation([UIImage imageNamed:@"3214.jpg"])];

    if (print) {
        UIPrintInfo *printInfo = [UIPrintInfo printInfo];
        // 打印输出类型
        printInfo.outputType = UIPrintInfoOutputPhoto;
        // 默认应用程序名称
        printInfo.jobName = @"jobName";
        // 双面打印信息,NONE为禁止双面
        printInfo.duplex = UIPrintInfoDuplexLongEdge;
        // 打印纵向还是横向
        printInfo.orientation = UIPrintInfoOrientationPortrait;
        print.printInfo = printInfo;

        print.delegate = self;
        print.showsPageRange = YES;
        print.printingItems = tempMarr;
        
        void (^completionHandler)(UIPrintInteractionController *, BOOL, NSError *) =
        ^(UIPrintInteractionController *pic, BOOL completed, NSError *error) {
            if (!completed && error) {
                // failed
            }
        };
        if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {
            [print presentFromRect:self.view.frame inView:self.view animated:YES completionHandler:completionHandler];
        } else {
            [print presentAnimated:YES completionHandler:completionHandler];
        }
    }
}

- (IBAction)printHTML:(id)sender {
    UIPrintInteractionController *print = [UIPrintInteractionController sharedPrintController];
    if (print) {
        UIPrintInfo *printInfo = [UIPrintInfo printInfo];
        printInfo.outputType = UIPrintInfoOutputGeneral;
        printInfo.jobName = @"jobName";
        printInfo.duplex = UIPrintInfoDuplexLongEdge;
        print.printInfo = printInfo;
        
        print.showsPageRange = YES;
        UIViewPrintFormatter *viewFormatter = [_webView viewPrintFormatter];
        viewFormatter.startPage = 0;
        print.printFormatter = viewFormatter;
        
        void (^completionHandler)(UIPrintInteractionController *, BOOL, NSError *) =
        ^(UIPrintInteractionController *printController, BOOL completed, NSError *error) {
            if(!completed && error){
                // failed
            }
        };
        if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {
            [print presentFromBarButtonItem:[[UIBarButtonItem alloc] initWithCustomView:sender] animated:YES completionHandler:completionHandler];
        } else {
            [print presentAnimated:YES completionHandler:completionHandler];
        }
    }
}

@end



示意图:
打印机模拟器下载
模拟器设置打印机参数

应用中点击打印弹出页面

应用中选择打印机

模拟器打印PDF效果

模拟器打印HTML效果

模拟器打印图片效果









2014-06-11 16:56:14 shencaifeixia1 阅读数 2092


ios打印系统字体

 NSMutableArray* mListFontName = [[NSMutableArray alloc] init];
    NSArray *familyNames = [UIFont familyNames];
    for( NSString *familyName in familyNames ){
        printf( "Family: %s \n", [familyName UTF8String] );
        NSArray *fontNames = [UIFont fontNamesForFamilyName:familyName];
        for( NSString *fontName in fontNames ){
            printf( "\tFont: %s \n", [fontName UTF8String] );
            [mListFontName addObject:fontName];
        }
    }


2016-11-11 15:54:27 ws1352864983 阅读数 3320

使用iOS AirPrint 让你的APP轻松实现打印功能

说在前面的话


最近在做的一个iOS项目有个打印 pdf的功能。查找资料发现苹果早在 iOS 4.2 就有了 AirPrint 功能。网上关于AirPrint 的资料不多,所以就写了这篇博文。 下面就和大家分享一下自己的学习收获。

内容


  • 1, 什么是AirPrint

    其实就是将iOS(iphone,ipad)上的内容,使用支持AirPrint的打印机打印出来。打印过程无线控制, 非常方便。

  • 2, 第一手资料

    学习iOS, 第一手资料肯定非苹果官方文档莫属.
    here。 (我下面叙述的内容基本上是对文档的总结, 英语可以的建议直接看文档。。。)

  • 3, Printer Simulator,使用打印模拟器进行测试

    既然涉及打印功能,那么就需要有一台支持AirPrint 功能的打印机进行测试喽,你没有?没关系!苹果已经为我们准备好了模拟器。 这个模拟器在Xcode中没有, 需要自己到官网下载:
    下载:Printer Simulator (需要先注册登录)

  • 4, 了解一下AirPrint可以打印的内容

    • an array of ready-to-print images and PDF documents: 一组图片文件和PDF文件。

    • a single image or PDF document: 一张图片或是一个pdf文件。、

    • an instance of any of the built-in print formatter classes: 打印格式化者- 的实例。(简单文本,html文档,某些View显示的内容)。

    • a custom page renderer: 自定义页渲染者。

注释: 1,2 很简单,就不详细解释了,3,4姑且这样翻译了,不懂没关系, 继续向下看。。。

详情见——⏬

坐上来 — ✈️✈️✈️✈️✈️✈️✈️✈️✈️✈️✈️✈️

2015-09-10 19:59:55 yutianguan 阅读数 837

iOS开发 Debug-发布时取消打印(NSLog)

iOS开发中我们经常需要在Debug模式小调试代码,主要是打印变量的值,然而在发布的时候为了性能我们有需要删掉NSLog()。为了方便我们可以创建.pch文件,在其中编写如下条件编译语句:

#ifndef DEBUG_MODE  
#define DLog( s, ... ) NSLog( @"<%p %@:(%d)> %@", self, [[NSString stringWithUTF8String:__FILE__] lastPathComponent], __LINE__, [NSString stringWithFormat:(s), ##__VA_ARGS__] )  
#else  
#define DLog( s, ... )   
#endif 

打印输出的时候调用DLog()就可以了。
这样只要在发布的时候把#ifndef DEBUG_MODE改成#ifdef DEBUG_MODE 就不会有打印了。

2016-10-10 16:42:08 Amydom 阅读数 1942

升级到 iOS10后,运行程序,打印台会出现许多乱码七糟的打印日志,在工程配置中可以将其去掉(每个工程都需要添加)

解决方法:
Xcode8里边 Edit Scheme... -> Run -> Arguments,(快捷键:shift + command + <) 在Environment Variables里边添加 OS_ACTIVITY_MODE = disable


ios 打印当前时间

阅读数 2838