1. 背景
最近有一个需求,是一个自助发票打印的功能。顾客交易完成可以凭二维码自助开票发票打印。开票成功后会生成一个pdf文件(带签章)。
我们对接的打印机直接使用pdf文件进行打印会因为尺寸问题导致打印失败,所以将pdf文件转换成图片进行打印(主要是贪图这款打印机便宜,懂的都懂)。
这里就有一个问题,如果直接读取文件数据转换成图片,会把签章数据给搞丢,网上找了一下,没有找到解决方法,时间又有点紧迫,所以这里搞了些奇技淫巧:使用AndroidPdfViewer加载pdf文件,然后将控件的内容保存成bitmap,然后再将图片转化为黑色加深字体颜色进行打印。
2. 这里使用Java进行实现
下面为主要的实现代码
2.1 AndroidPdfViewer控件加载发票pdf文件
// invoucePdf为AndroidPdfViewer控件,com.github.barteksc.pdfviewer.PDFView
// 设置控件渲染内容保存到缓存中生成bitmap,下面这两个方法已经过时,有需要可以查看方法源码获取
invoicePdf.setDrawingCacheEnabled(true);
invoicePdf.setDrawingCacheQuality(View.DRAWING_CACHE_QUALITY_HIGH);
// 这里可以直接获取图片, 这里图片的宽高跟控件的宽高一样
Bitmap invoiceBitmap = invoicePdf.getDrawingCache();
// https://github.com/barteksc/AndroidPdfViewer
invoicePdf.fromFile(file)
.