android 调用系统打印
实现调用系统打印服务来打印PDF文件,直接上代码
注:必须android系统中存在打印服务才可调用
调用PrintManager
PrintManager printManager = (PrintManager) context.getSystemService(Context.PRINT_SERVICE);
//一些属性设置 PrintAttributes.Builder builder = new PrintAttributes.Builder(); builder.setColorMode(PrintAttributes.COLOR_MODE_MONOCHROME); builder.setMinMargins(new PrintAttributes.Margins(300, 200, 300, 200)); PrintAttributes.MediaSize temp = PrintAttributes.MediaSize.ISO_A4; temp.asLandscape(); builder.setMediaSize(temp);
//创建打印适配器 MyPrintPdfAdapter,MyPrintPdfAdapter为自定义,代码在下文
//path为文件路径
MyPrintPdfAdapter myPrintAdapter = new MyPrintPdfAdapter(context, path);
//调用print,会弹出系统打印预览页面,自己选择可用的打印机,再点击打印即可
printManager.print(path , myPrintAdapter, builder.build());
2、自定义MyPrintPdfAdapter继承PrintDocumentAdapter,并重写onLayout()和onWrite()方法,必须重写,否则打印窗口无法预览文件,也无法打印
直接贴代码
private class MyPrintPdfAdapter extends PrintDocumentAdapter {private final Context context;private final String mFilePath;MyPrintPdfAdapter(Context context, String file) {this.context = context;this.mFilePath = file;this.finishCallback = finishCallback;}@Overridepublic void onStart() {super.onStart();}@Overridepublic void onLayout(PrintAttributes oldAttributes, PrintAttributes newAttributes,CancellationSignal cancellationSignal,PrintDocumentAdapter.LayoutResultCallback callback, Bundle extras) {if (cancellationSignal.isCanceled()) {callback.onLayoutCancelled();return;}File file = new File(mFilePath);if (!file.exists()) {callback.onLayoutFailed("文档页数为0");return;}PrintDocumentInfo info = new PrintDocumentInfo.Builder("name").setContentType(PrintDocumentInfo.CONTENT_TYPE_DOCUMENT).build();callback.onLayoutFinished(info, true);}@Overridepublic void onWrite(PageRange[] pages, ParcelFileDescriptor destination,CancellationSignal cancellationSignal,WriteResultCallback callback) {InputStream input = null;OutputStream output = null;if (cancellationSignal.isCanceled()) {callback.onWriteCancelled();return;}try {input = new FileInputStream(mFilePath);output = new FileOutputStream(destination.getFileDescriptor());byte[] buf = new byte[1024];int bytesRead;while ((bytesRead = input.read(buf)) > 0) {output.write(buf, 0, bytesRead);}callback.onWriteFinished(new PageRange[]{PageRange.ALL_PAGES});} catch (Exception e) {e.printStackTrace();} finally {try {output.close();} catch (IOException e) {e.printStackTrace();}try {input.close();} catch (IOException e) {e.printStackTrace();}}}@Overridepublic void onFinish() {super.onFinish();//点击打印按钮会调用} }
3、有时还想获取当前打印机打印状态,通过查看源码,在
PrintJobInfo类中,定义了以下几种状态
PrintJobInfo.STATE_QUEUED、 PrintJobInfo.STATE_STARTED、 PrintJobInfo.STATE_BLOCKED、 PrintJobInfo.STATE_COMPLETED、 PrintJobInfo.STATE_FAILED、 PrintJobInfo.STATE_CANCELED、 PrintJobInfo.STATE_CREATED
具体说明,在自行在PrintJobInfo类中查看
android 调用系统打印相关推荐
- Android调用系统默认打印机并反射获取打印任务状态
Android4.4通过PrintManger调用系统默认打印服务的默认打印机进行打印任务,并通过反射调用PrintManager的getPrintJob方法获取打印任务状态.不说太多,直接上代码.第 ...
- android系统打印功能实现,Android实现系统打印功能
本文实例为大家分享了Android实现系统打印的具体代码,供大家参考,具体内容如下 一.打印图片 使用PrintHelper类,如: private void doPhotoPrint() { Pri ...
- Android通过系统打印功能实现PDF预览打印
一. 简介 Android4.4(KitKat,api-19)系统内置了打印框架,通过安装对应打印机的打印插件,就可以容易实现打印功能: 关于 图片.webview.layout及截屏相关的打 ...
- android 调用系统播放器
今天,简单讲讲android如何调用手机自带的播放器. 昨天,从服务器下载一个AVI的视频,下载后需要进行播放,所以想调用系统自带的播放器.但是由于很少用到,所以自己当时不知道怎么写,于是在网上查找资 ...
- linux 短信功能,Android调用系统短信功能发送短信
Android调用系统短信功能发送短信有两种方法: 第一种,设定发送的号码,和内容,界面没有联系人,群组组等按钮,如下图所示: 代码如下: Uri smsToUri = Uri.parse(" ...
- android 默认浏览器 视频播放 二维码,Android调用系统默认浏览器访问的方法
一.启动android默认浏览器 这样子,android就可以调用起手机默认的浏览器访问. 二.指定相应的浏览器访问 1.指定android自带的浏览器访问 ( "com.android.b ...
- android系统应用程序,Android调用系统应用程序
Android调用系统应用程序: 1.直接拨打电话: Intent callIntent = new Intent(Intent.ACTION_CALL, Uri .parse("tel:1 ...
- Android调用系统相机拍照并保存到指定位置
Android调用系统相机拍照并保存到指定位置 @Click(R.id.btn_takePhoto)void onclick() {Intent intent = new Intent(MediaSt ...
- android安装自动打开网页,Android调用系统自带浏览器打开网页的实现方法
Android调用系统自带浏览器打开网页的实现方法 在Android中可以调用自带的浏览器,或者指定一个浏览器来打开一个链接.只需要传入一个uri,可以是链接地址. 启动android默认浏览器 在A ...
最新文章
- 独家 | 经验教训分享:我的第一个机器学习项目
- 谈谈HTTP1.0,HTTP1.1和HTTP2.0区别
- 用Spring Web Flow和Terracotta搭建Web应用
- sam格式的结构和意义_SAM格式的学习
- iOS duplicate symbols for architecture x86_64 问题全面解析
- readlink()不能读取硬链接的目标
- 选择排序之python实现
- PowerBuilder制作纸牌游戏
- 【密码学】基于 SM3 算法的 HMAC 快速实现
- 浪潮服务器开启远程管理,最新浪潮服务器远程管理(27页)-原创力文档
- 【C语言】Linux 文件读写
- CMS 常见问题分析和解决方案
- Android动态底部导航
- 白魔法师-牛客小白月赛25
- CPU GPU设计工作原理
- javaweb项目发送邮件自定义发件人名称(javamail)
- GPIO输入输出各种模式(推挽、开漏、准双向端口)详解---重点双向开漏端口
- 在买了38台件米家智能家居后,告诉你米家什么不值得买
- Hadoop基础(安装与启动集群)
- 介绍几款常用的剪辑器,给刚入门学习Web前端的人!