Android 实现系统打印机打印图片,文本,以及二维码生成与解析 您所在的位置:网站首页 艾滋病的全名叫什么 Android 实现系统打印机打印图片,文本,以及二维码生成与解析

Android 实现系统打印机打印图片,文本,以及二维码生成与解析

2023-07-31 08:31| 来源: 网络整理| 查看: 265

 

 

打码机:扫码,生成打印自定义标签  

 一、Android

打印机要支持,网络、WiFi ;手机与打印机在同一网络下才行,本文用WiFi连接 

打开系统打印服务: 设置--更多设置--打印--选择默认打印服务(或者应用商城下载 Mopria Print Service  )--开启

 

1、使用系统打印机打印图片:

/**系统打印机--打印图片*/ private void doPrintPictures(Bitmap bitmap) { PrintHelper photoPrinter = new PrintHelper(this); photoPrinter.setScaleMode(PrintHelper.SCALE_MODE_FIT); // Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.droids); //本地图片 photoPrinter.printBitmap("droids.jpg - test print", bitmap); }

2、打印自定义标签

将需要打印的内容,图片,文字 通过水印方式添加入一张图片中,再调用系统打印服务,打印出来

@Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (requestCode == 1111) { if (data != null) { content = data.getStringExtra(Constant.CODED_CONTENT); Log.i("扫描结果为:", content); scanFragment.onActivityResult(requestCode, resultCode, data); //生成的二维码 Bitmap bitmap = CodeCreator.createQRCode(content, 300, 300, null); if (bitmap != null) { //将内容水印方式生成一张图片 Bitmap waterMark = AddWatermark(bitmap); contentIv.setImageBitmap(waterMark); //保存入本地 QRCodeUtil.saveImageToGallery(getApplicationContext(), waterMark); //打印 图片 doPrintPictures(waterMark); } } } }

 3、AddWatermark

/** * 添加水印 * * @param mBitmap * @return mNewBitmap */ private Bitmap AddWatermark(Bitmap mBitmap) { //获取原始图片与水印图片的宽与高 int mBitmapWidth = mBitmap.getWidth(); int mBitmapHeight = mBitmap.getHeight(); //定义底片 大小 Bitmap mNewBitmap = Bitmap.createBitmap(800, 600, Bitmap.Config.ARGB_8888); //原始图片--底片 Canvas mCanvas = new Canvas(mNewBitmap); //向位图中开始画入MBitmap图片 二维码在底片中的位置 // mCanvas.drawBitmap(mBitmap,0,0,null); mCanvas.drawBitmap(mBitmap, 80, 150, null); //添加文字 Paint mPaint = new Paint(); mPaint.setColor(Color.BLACK); mPaint.setTextSize(25); //true为粗体,false为非粗体 mPaint.setFakeBoldText(true); //字体 String mTitl = "Title"; String mNam = "Name"; String mP = "P:1234567"; String mT = "T:2020061916"; String mV = "V:23563"; String mS = "S:1025698736125"; String mMdae = "MADE IN CHINA"; //根据底片大小--->水印的位置坐标 mCanvas.drawText(mTitl, 80, 130, mPaint); mCanvas.drawText(mNam, 400, 130, mPaint); mCanvas.drawText(mP, 400, (mBitmapHeight / 4) + 150, mPaint); mCanvas.drawText(mT, 400, (mBitmapHeight / 3) + 170, mPaint); mCanvas.drawText(mV, 400, (mBitmapHeight / 2) + 160, mPaint); mCanvas.drawText(mS, 400, (mBitmapHeight / 1) + 150, mPaint); mCanvas.drawText(mMdae, 100, 480, mPaint); mCanvas.save(); mCanvas.restore(); return mNewBitmap; }

4、系统打印:doPrintPictures

/** * 系统打印机--打印图片 */ private void doPrintPictures(Bitmap bitmap) { PrintHelper photoPrinter = new PrintHelper(this); photoPrinter.setScaleMode(PrintHelper.SCALE_MODE_FIT); // Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.droids); //本地图片 photoPrinter.printBitmap("droids.jpg - test print", bitmap); }

5、保存图片

/** * 将二维码图片保存到文件夹 * * @param context * @param bmp */ public static void saveImageToGallery(Context context, Bitmap bmp) { // 首先保存图片 String externalStorageState = Environment.getExternalStorageState(); //判断sd卡是否挂载 if (externalStorageState.equals(Environment.MEDIA_MOUNTED)) { /*外部存储可用,则保存到外部存储*/ //创建一个文件夹 File appDir = new File(Environment.getExternalStorageDirectory(), "Pictures"); //如果文件夹不存在 if (!appDir.exists()) { //则创建这个文件夹 appDir.mkdir(); } //将bitmap保存 saveImage(context, bmp, appDir); } else { //外部不可用,将图片保存到内部存储中,获取内部存储文件目录 File filesDir = context.getFilesDir(); //保存 saveImage(context, bmp, filesDir); } } private static void saveImage(Context context, Bitmap bmp, File appDir) { //命名文件名称 // SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");// HH:mm:ss SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); Date date = new Date(System.currentTimeMillis()); String format = dateFormat.format(date); String fileName = format + ".jpg"; // String fileName = "扫码知内容" + ".jpg"; //创建图片文件,传入文件夹和文件名 File imagePath = new File(appDir, fileName); try { //创建文件输出流,传入图片文件,用于输入bitmap FileOutputStream fos = new FileOutputStream(imagePath); //将bitmap压缩成png,并保存到相应的文件夹中 bmp.compress(Bitmap.CompressFormat.PNG, 100, fos); //冲刷流 fos.flush(); //关闭流 fos.close(); Toast.makeText(context,"保存完毕",Toast.LENGTH_SHORT).show(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } // 其次把文件插入到系统图库 try { MediaStore.Images.Media.insertImage(context.getContentResolver(), imagePath.getAbsolutePath(), fileName, null); } catch (FileNotFoundException e) { e.printStackTrace(); } // 最后通知图库更新 context.sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, Uri.parse("file://" + imagePath.getAbsolutePath()))); }

 6、关于二维码的生成参考文章:

Android超方便 集成 Zxing实现扫一扫,闪光灯,生成二维码图片,解析二维码(条码)等功能

二、Java

创建Maven项目  pom.xml中依赖 zxing得到 jar,添加入lib中  

附上lib下载地址:lib

附上Maven官网:ZXing Core

com.google.zxing core 3.3.0 com.google.zxing javase 3.3.0

1、生成二维码工具类

import java.awt.BasicStroke; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.Image; import java.awt.Shape; import java.awt.geom.RoundRectangle2D; import java.awt.image.BufferedImage; import java.io.File; import java.util.Hashtable; import javax.imageio.ImageIO; import com.google.zxing.BarcodeFormat; import com.google.zxing.BinaryBitmap; import com.google.zxing.DecodeHintType; import com.google.zxing.EncodeHintType; import com.google.zxing.MultiFormatReader; import com.google.zxing.MultiFormatWriter; import com.google.zxing.Result; import com.google.zxing.common.BitMatrix; import com.google.zxing.common.HybridBinarizer; import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel; public class QRCodeUtil { private static final String CHARSET = "utf-8"; private static final String FORMAT_NAME = "JPG"; // 二维码尺寸 private static final int QRCODE_SIZE = 200; //嵌入的logo宽度 private static final int WIDTH = 60; //嵌入的 logo高度 private static final int HEIGHT = 60; /** * 创建二维码图片 * @param content 包含的内容 * @param logo 嵌入的logo * @param compress true or false * @throws Exception */ @SuppressWarnings({ "rawtypes", "unchecked" }) private static BufferedImage createImage(String content, String logo, boolean compress) throws Exception { Hashtable hashtable = new Hashtable(); hashtable.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.H); hashtable.put(EncodeHintType.CHARACTER_SET, CHARSET); hashtable.put(EncodeHintType.MARGIN, 1); BitMatrix bitMatrix = new MultiFormatWriter().encode(content, BarcodeFormat.QR_CODE, QRCODE_SIZE, QRCODE_SIZE,hashtable); int width = bitMatrix.getWidth(); int height = bitMatrix.getHeight(); BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); for (int x = 0; x < width; x++) { for (int y = 0; y < height; y++) { image.setRGB(x, y, bitMatrix.get(x, y) ? 0xFF000000 : 0xFFFFFFFF); } } if (logo == null || "".equals(logo)) { return image; } // 插入图片 QRCodeUtil.insertImage(image, logo, compress); return image; } private static void insertImage(BufferedImage source, String logo, boolean compress) throws Exception { File file = new File(logo); if (!file.exists()) { System.err.println("" + logo + " 该文件不存在!"); return; } Image src = ImageIO.read(file); int width = src.getWidth(null); int height = src.getHeight(null); // 压缩LOGO if (compress) { if (width > WIDTH) { width = WIDTH; } if (height > HEIGHT) { height = HEIGHT; } Image image = src.getScaledInstance(width, height, Image.SCALE_SMOOTH); BufferedImage tag = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); Graphics g = tag.getGraphics(); g.drawImage(image, 0, 0, null); // 绘制缩小后的图 g.dispose(); src = image; } // 插入logo Graphics2D graphics2d = source.createGraphics(); int x = (QRCODE_SIZE - width) / 2; int y = (QRCODE_SIZE - height) / 2; graphics2d.drawImage(src, x, y, width, height, null); Shape shape = new RoundRectangle2D.Float(x, y, width, width, 6, 6); graphics2d.setStroke(new BasicStroke(3f)); graphics2d.draw(shape); graphics2d.dispose(); } /** * 创建二维码图片 * @param content 包含的内容 * @param logo 嵌入的logo * @param destPath 图片生成后的存储路径 * @param compress true or false 压缩 * @throws Exception */ public static void CreateQrCode(String content, String logo, String destPath, boolean compress) throws Exception { BufferedImage image = QRCodeUtil.createImage(content, logo, compress); mkdirs(destPath); ImageIO.write(image, FORMAT_NAME, new File(destPath)); } /* 创建文件路径*/ public static void mkdirs(String destPath) { File file = new File(destPath); // 当文件夹不存在时,创建文件 if (!file.exists() && !file.isDirectory()) { file.mkdirs(); } } /** * 解析二维码包含的内容 * @param Path 图片的存储路径 * @param resultStr 返回解析内容 * @throws Exception */ @SuppressWarnings({ "rawtypes", "unchecked" }) public static String decode(String path) throws Exception { File file = new File(path); BufferedImage image = ImageIO.read(file); if (image == null) { return null; } BufferedImageLuminanceSource source = new BufferedImageLuminanceSource(image); BinaryBitmap bitmap = new BinaryBitmap(new HybridBinarizer(source)); Hashtable hashtable = new Hashtable(); hashtable.put(DecodeHintType.CHARACTER_SET, CHARSET); Result result = new MultiFormatReader().decode(bitmap, hashtable); return result.getText().toString(); } }

2、调用添加水印 

import java.awt.Color; import java.awt.Font; import java.awt.Graphics2D; import java.awt.Image; import java.awt.image.BufferedImage; import java.io.FileOutputStream; import javax.imageio.ImageIO; import javax.swing.ImageIcon; import com.demo.QRCodeUtil; public class DrawPic { //字体 private static String mTitl = "Title"; private static String mNam = "Name"; private static String mP = "P:1234567"; private static String mT = "T:2020061916"; private static String mV = "V:23563"; private static String mS = "S:1025698736125"; private static String mMade = "MADE IN CHINA"; public static void main(String[] args) throws Exception { //创建二维码图片 createQrCodePic(); //得到图片缓冲区 //INT精确度达到一定,RGB三原色,高度440,宽度590 BufferedImage bufferimage = new BufferedImage(590,440,BufferedImage.TYPE_INT_RGB); //得到它的绘制环境(这张图片的笔) Graphics2D graphics = (Graphics2D) bufferimage.getGraphics(); //填充一个矩形 左上角坐标(0,0),宽590,高440;填充整张图片 (设置背景) graphics.fillRect(0,0,590,440); //设置背景颜色 ---此时生成一张59x44的白底图片,再向其中绘制你想要的图片文字 graphics.setColor(Color.WHITE); // graphics.setColor(Color.WHITE); //边框颜色 // graphics.drawRect(0,0,590-1,440-1); //画边框 //设置字体:字体、字号、大小 graphics.setFont(new Font("宋体",Font.BOLD,18)); //设置字体颜色 graphics.setColor(Color.BLACK); //向图片上写字符串 graphics.drawString(mTitl,30,110); graphics.drawString(mNam,350,110); graphics.drawString(mP,250,145); graphics.drawString(mT,250,195); graphics.drawString(mV,250,245); graphics.drawString(mS,250,295); graphics.drawString(mMade,40,340); // 向图片内印上 二维码图片 ImageIcon imgIcon = new ImageIcon("D:\\qrCode\\qrcode\\qrcode.jpg"); Image image = imgIcon.getImage(); //绘制图片位置 graphics.drawImage(image, 30, 120, null); //保存图片 JPEG表示保存格式 ImageIO.write(bufferimage,"JPEG",new File("D:\\qrCode\\创建一张白底+二维码水印的.jpg")); System.out.println("图片创建成功"); } //创建二维码图片 private static void createQrCodePic() throws Exception{ // TODO Auto-generated method stub // 存放在二维码中的内容 String text = "This is a QR code"; // 存放的logo路径 String logo = "D:/qrCode/qrcode/logo.jpg"; // 生成的二维码的路径及名称 String destPath = "D:/qrCode/qrcode/qrcode.jpg"; //生成二维码 // QRCodeUtil.CreateQrCode(text, logo, destPath, true); QRCodeUtil.CreateQrCode(text, null, destPath, true); // 解析二维码 String str = QRCodeUtil.decode(destPath); // 打印出解析出的内容 System.out.println(str); } }

3、结束



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有