先声明一下,此处的打印非pos打印机打印和蓝牙打印机打印,如果想查找打印小票的pos打印机请进入下面的传送门,蓝牙打印目前没做过,有做过的请指教。

pos打印机传送门:

1. https://www.cnblogs.com/LIANQQ/p/4587637.html

2.https://www.ibm.com/developerworks/cn/java/j-lo-pos/index.html

目前要实现的功能是类似于电脑上的文档打印,pdf、word、excel、ppt等,下面的例子仅实现了pdf。

但是要注意一点,此种方案仅适用于android4.4以上版本,低于android4.4不支持。

并且如果系统版本低于android9.0需要安装支持所使用打印机的print Service才可以打印,而android9.0以上设备可以不用安装。

关于为什么要安装print service,请看传送门 https://juejin.im/post/5a24b18df265da432840afc9

其中安卓也提供了一些用于实现打印服务的接口类,传送门https://developer.android.google.cn/reference/android/printservice/package-summary,如果你足够厉害,也可以做一个print service来兼容多种打印机,其实有公司做过,不过随着时间推移很多都不与现在的打印机兼容来,有兴趣的可以试试PrintShare等软件,如果不理想,那就还是下载打印机官方提供的 print service吧。

由于目前的办公环境,我安装了两款打印服务插件,一个是惠普的,一个是佳能的。名称分别如图所示,我是从酷安下载的,当然你从别的地方下载也可以:

安装完成后到系统设置--打印--找到对应的服务,如图

点击对应的打印服务,有的可以直接扫描到局域网的打印机,直接添加,有的需要手动输入IP地址添加

添加完成后打印的服务就算是有了,然后就是代码实现了。

在所有打印机可以看到新添加的打印机:

如果不确定这个添加好的打印机能不能打印,可以先下载一个wps,然后随便创建一个文档进行打印测试以下。

wps打印按钮的位置如图

好了,如果你不是开发者,看到这里你就可以用wps打印pdf、word、excel、ppt之类的文件了。

但是作为开发者我们怎样才能在程序里调用这个系统打印服务呢?

有人写好了pdf的,我也只是搬一下砖,具体连接在此:https://blog.csdn.net/tangxl2008008/article/details/78424867

文章写的很详细了,但是文章中介绍的 Mopria PrintService 已经不能用了,我简单介绍下:

其实就是使用了安卓系统的PrintManager调用系统打印服务,不过传参数的时候有一个PrintDocumentAdapter需要自定义,这个adapter其实就是一个适配器抽象类,通过实现这个抽象类来达到打印不同格式的文档的目的(pdf、word、excel等)。具体这个类的使用方式见中文翻译:http://hukai.me/android-training-course-in-chinese/multimedia/printing/custom-docs.html

调用过程可以移植到代码里,如下:

 private void doPdfPrint(String filePath) {
PrintManager printManager = (PrintManager) getSystemService(Context.PRINT_SERVICE);
MyPrintPdfAdapter myPrintAdapter = new MyPrintPdfAdapter(filePath);
printManager.print("jobName", myPrintAdapter, null);
}

如果使用pdf打印的话可以直接使用这篇文章里的MyPrintPdfAdapter,如果想打印其他文档请自行继承PrintDocumentAdapter。

既然写完了,测试是什么样子呢?

点来打印后会直接出现下面的图,选择对应的打印机然后点那个绿色的打印按钮就可以了。

好了,先总结到这,时间紧迫,又该搬砖去了,有问题请留言。

更正一下,Mopria Print Service国内版搜索不可用,但是google play有对应版本,有能力上墙的请访问

https://play.google.com/store/apps/details?id=org.mopria.printplugin&hl=zh

更新

由于我们的程序不仅要实现pdf打印,可能还要实现doc、xls、ppt的打印,以上方法可能就不试用了。

下面的连接提供了几种方法,bitmap打印、view截图打印、webview内容打印,而我们显示doc等文档使用的是QQ的X5内核的webview,所以要打印文档,只需要支持webview显示即可。

https://www.jianshu.com/p/d82bd61b11a4

简单总结如下:

bitmap打印使用PrintHelper

PrintHelper photoPrinter = new PrintHelper(getActivity());
photoPrinter.setScaleMode(PrintHelper.SCALE_MODE_FIT);
Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.droids);
photoPrinter.printBitmap("droids.jpg - test print", bitmap);

webview打印使用PrintedPdfDocument

PrintAttributes attributes = new PrintAttributes.Builder()
.setMediaSize(PrintAttributes.MediaSize.ISO_A4)
.setResolution(new PrintAttributes.Resolution("id", Context.PRINT_SERVICE, 300, 300))
.setColorMode(PrintAttributes.COLOR_MODE_COLOR)
.setMinMargins(new PrintAttributes.Margins(0, 0, 0, 0))
.build();
PdfDocument document = new PrintedPdfDocument(context, attributes);
for (int i = 0; i < numberOfPages; i++) {
int webMarginTop = i * letterSizeHeight; PdfDocument.PageInfo pageInfo = new PdfDocument.PageInfo.Builder(webViewWidth, letterSizeHeight, i + 1).create();
PdfDocument.Page page = document.startPage(pageInfo);
page.getCanvas().translate(0, -webMarginTop);
webView.draw(page.getCanvas()); document.finishPage(page);
}
document.writeTo(getOutputStream());
document.close();

另外一种方式就是通过在线把office文件转pdf,然后通过webview加载pdf就可以实现office文件的浏览了,然后也可以通过转化成pdf来打印了

在线转pdf连接 https://www.cnblogs.com/woider/p/7003481.html

我的github地址:https://github.com/dongweiq/

欢迎关注,欢迎star o(∩_∩)o 。有什么问题请邮箱联系 dongweiqmail@gmail.com qq714094450

安卓打印实现打印pdf文档的更多相关文章

  1. 快速解决PDF文档加密不能打印问题_百度经验

    快速解决PDF文档加密不能打印问题_百度经验     快速解决PDF文档加密不能打印问题         |        浏览:182        |        更新:2014-01-06 1 ...

  2. C# 打印PDF文档的10种方法

    操作PDF文档时,打印是常见的需求之一.针对不同的打印需求,可分多种情况来进行,如设置静默打印.指定打印页码范围和打印纸张大小.双面打印.黑白打印等等.经过测试,下面将对常见的几种PDF打印需求做一些 ...

  3. Java 打印PDF文档的3种情况

    以下内容归纳了通过Java程序打印PDF文档时的3种情形.即: 静默打印 显示打印对话框打印 打印PDF时自定义纸张大小 使用工具:Spire.PDF for Java Jar导入: 方法1:通过官网 ...

  4. 一键批量打印EXCEL、WORD文档

    一键批量打印EXCEL.WORD文档,本方法也可以打印同一个文档N份,可以批量打印A3.A4文档,包括单.双面打印等.希望能帮到广大朋友.请大家注重原创版权,不得在未经许可的下转载.传播,或者用来对同 ...

  5. 利用Java动态生成 PDF 文档

    利用Java动态生成 PDF 文档,则需要开源的API.首先我们先想象需求,在企业应用中,客户会提出一些复杂的需求,比如会针对具体的业务,构建比较典型的具备文档性质的内容,一般会导出PDF进行存档.那 ...

  6. 一起学微软Power BI系列-官方文档-入门指南(7)发布与共享-终结篇+完整PDF文档

    接触Power BI的时间也只有几个月,虽然花的时间不多,但通过各种渠道了解收集,谈不上精通,但对一些重要概念和细节还是有所了解.在整理官方文档的过程中,也熟悉和了解了很多概念.所以从前到后把微软官方 ...

  7. 使用免费组件view pdf 文档

    “Is there any way to view PDF files in a Winforms tool?” 这个是我在技术论坛上发现的一个老外求助的帖子,然后看到别人回复的帖子中建议了一个免费的 ...

  8. 手机打开PDF文档中文英文支持(乱码问题)解决攻略

    电子书的优点很多,随时随地阅读,无论白天黑夜走路坐车都能阅读:想确认一下某句话是不是这本书里的,搜索一下就可以知道:搬家也不用发愁,几万本书带在身上,依然轻松步行.我买了一台平板主要动因就是为了看书, ...

  9. 将w3cplus网站中的文章页面提取并导出为pdf文档

    最近在看一些关于CSS3方面的知识,主要是平时看到网页中有很多用CSS3实现的很炫的效果,所以就打算系统的学习一下.在网上找到很多的文章,但都没有一个好的整理性,比较凌乱.昨天看到w3cplus网站中 ...

随机推荐

  1. 跨域资源共享CORS

    CORS是一个W3C标准,全称是"跨域资源共享"(Cross-origin resource sharing).它允许浏览器向跨源服务器,发出XMLHttpRequest请求,从而 ...

  2. jQuery插件实践之轮播练习(一)

    所有文章搬运自我的个人主页:sheilasun.me 因为从来没写过jQuery插件,所以本文要通过一个轮播的例子,练习jQuery插件的写法. 新建插件文件 在讨论细节之前,先新建插件文件(当然也可 ...

  3. 扩展BSGS算法

    求解A^x ≡ B mod P (P不一定是质数)的最小非负正整数解 先放几个同余定理: 一.判断如果B==1,那么x=0,算法结束 二.若gcd(A,P)不能整除 B,则 无解,算法结束 三.若gc ...

  4. Linux 关闭网络管理服务

    1 将NetworkManager 服务设置开机不启动 chkconfig NetworkManager off 2将NetwokManager服务关闭 service NetworkManager ...

  5. “教你如何玩转Web响应式布局” 的更多相关文章

    “教你如何玩转Web响应式布局” 的更多相关文章 网址:http://www.360doc.com/relevant/641896074_more.shtml

  6. request中获取post的json对象数据content-type=“text/plain”

    其实采用http://www.cnblogs.com/SimonHu1993/p/7295750.html中的方法一都能获取到,就是通过获取request中的流数据,拿到json数据,理论上应该适用各 ...

  7. .NET Core中使用Docker

    一.Docker简介 Docker是基于Linux容器技术(LXC),使用Go语言实现的开源项目,诞生于2013年,遵循Apache2.0协议.Docker自开源后,受到广泛的关注和讨论. Docke ...

  8. springboot mail+Thymeleaf模板

    compile 'org.springframework.boot:spring-boot-starter-thymeleaf' compile 'io.ratpack:ratpack-thymele ...

  9. [BZOJ2051]A Problem For Fun/[BZOJ2117]Crash的旅游计划/[BZOJ4317]Atm的树

    [BZOJ2051]A Problem For Fun/[BZOJ2117]Crash的旅游计划/[BZOJ4317]Atm的树 题目大意: 给出一个\(n(n\le10^5)\)个结点的树,每条边有 ...

  10. Loadrunner的参数化解析

    参数化的用法 例如 1.登录一个网站,我们可以有很多的不同的用户名和密码 2.创建客户时我们可以通过参数化使得客户编号,客户名称使用多种组合 等等.. 那么下面就为大家介绍参数化的用法 参数化有2种 ...