实现调用系统打印服务来打印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 调用系统打印相关推荐

  1. Android调用系统默认打印机并反射获取打印任务状态

    Android4.4通过PrintManger调用系统默认打印服务的默认打印机进行打印任务,并通过反射调用PrintManager的getPrintJob方法获取打印任务状态.不说太多,直接上代码.第 ...

  2. android系统打印功能实现,Android实现系统打印功能

    本文实例为大家分享了Android实现系统打印的具体代码,供大家参考,具体内容如下 一.打印图片 使用PrintHelper类,如: private void doPhotoPrint() { Pri ...

  3. Android通过系统打印功能实现PDF预览打印

    一.     简介 Android4.4(KitKat,api-19)系统内置了打印框架,通过安装对应打印机的打印插件,就可以容易实现打印功能: 关于 图片.webview.layout及截屏相关的打 ...

  4. android 调用系统播放器

    今天,简单讲讲android如何调用手机自带的播放器. 昨天,从服务器下载一个AVI的视频,下载后需要进行播放,所以想调用系统自带的播放器.但是由于很少用到,所以自己当时不知道怎么写,于是在网上查找资 ...

  5. linux 短信功能,Android调用系统短信功能发送短信

    Android调用系统短信功能发送短信有两种方法: 第一种,设定发送的号码,和内容,界面没有联系人,群组组等按钮,如下图所示: 代码如下: Uri smsToUri = Uri.parse(" ...

  6. android 默认浏览器 视频播放 二维码,Android调用系统默认浏览器访问的方法

    一.启动android默认浏览器 这样子,android就可以调用起手机默认的浏览器访问. 二.指定相应的浏览器访问 1.指定android自带的浏览器访问 ( "com.android.b ...

  7. android系统应用程序,Android调用系统应用程序

    Android调用系统应用程序: 1.直接拨打电话: Intent callIntent = new Intent(Intent.ACTION_CALL, Uri .parse("tel:1 ...

  8. Android调用系统相机拍照并保存到指定位置

    Android调用系统相机拍照并保存到指定位置 @Click(R.id.btn_takePhoto)void onclick() {Intent intent = new Intent(MediaSt ...

  9. android安装自动打开网页,Android调用系统自带浏览器打开网页的实现方法

    Android调用系统自带浏览器打开网页的实现方法 在Android中可以调用自带的浏览器,或者指定一个浏览器来打开一个链接.只需要传入一个uri,可以是链接地址. 启动android默认浏览器 在A ...

最新文章

  1. 独家 | 经验教训分享:我的第一个机器学习项目
  2. 谈谈HTTP1.0,HTTP1.1和HTTP2.0区别
  3. 用Spring Web Flow和Terracotta搭建Web应用
  4. sam格式的结构和意义_SAM格式的学习
  5. iOS duplicate symbols for architecture x86_64 问题全面解析
  6. readlink()不能读取硬链接的目标
  7. 选择排序之python实现
  8. PowerBuilder制作纸牌游戏
  9. 【密码学】基于 SM3 算法的 HMAC 快速实现
  10. 浪潮服务器开启远程管理,最新浪潮服务器远程管理(27页)-原创力文档
  11. 【C语言】Linux 文件读写
  12. CMS 常见问题分析和解决方案
  13. Android动态底部导航
  14. 白魔法师-牛客小白月赛25
  15. CPU GPU设计工作原理
  16. javaweb项目发送邮件自定义发件人名称(javamail)
  17. GPIO输入输出各种模式(推挽、开漏、准双向端口)详解---重点双向开漏端口
  18. 在买了38台件米家智能家居后,告诉你米家什么不值得买
  19. Hadoop基础(安装与启动集群)
  20. 介绍几款常用的剪辑器,给刚入门学习Web前端的人!

热门文章

  1. 【Algorithm】Prim
  2. JavaScript 自执行函数(闭包)
  3. confluent-kafka-go依赖库编译体验优化
  4. java项目组成与理解
  5. 微软的软件测试工程师——《微软的软件测试之道》
  6. markdown之表格的使用
  7. js 中英文混合字符串 截取固定长度字节 方法封装
  8. Bootstrap系列之巨幕(Jumbotron)
  9. git切换分支、push或pull指定分支
  10. 行业分析| 视频监控——AI自动巡检