当前位置: 首页 > wzjs >正文

张掖专业做网站的公司怎么建单位的网站

张掖专业做网站的公司,怎么建单位的网站,代运营电商机构,中小微企业纳税申报最近需要的需求需要Android调用系统打印机,并打印文件,类似如下的功能: Android 调用打印机 实现的逻辑如下: 因为我们这个是 pdf 文件,首先需要将 pdf转化为 Bitmap 位图,然后向调用打印机传递位图即可。 …

最近需要的需求需要Android调用系统打印机,并打印文件,类似如下的功能:

Android 调用打印机

实现的逻辑如下:
因为我们这个是 pdf 文件,首先需要将 pdf转化为 Bitmap 位图,然后向调用打印机传递位图即可。

首先我们需要创建 pdf 转 Bitmap 功能:

import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.pdf.PdfDocument;
import android.graphics.pdf.PdfRenderer;
import android.os.Bundle;
import android.os.ParcelFileDescriptor;
import android.print.PageRange;
import android.print.PrintAttributes;
import android.print.PrintDocumentAdapter;import android.os.CancellationSignal;
import android.print.PrintDocumentInfo;import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;public class BitmapPrintAdapter extends PrintDocumentAdapter {private Context context;private final String pdfPath;private PdfRenderer pdfRenderer;private PrintAttributes printAttributes;private final List<Bitmap> pagesBitmap = new ArrayList<>();public BitmapPrintAdapter(Context context, String pdfPath) {this.context = context;this.pdfPath = pdfPath;}@Overridepublic void onLayout(PrintAttributes oldAttributes,PrintAttributes newAttributes,CancellationSignal cancellationSignal,LayoutResultCallback callback,Bundle extras) {if (cancellationSignal.isCanceled()) {callback.onLayoutCancelled();return;}try {// 释放之前可能存在的资源if (pdfRenderer != null) {for (Bitmap bitmap : pagesBitmap) {if (bitmap != null && !bitmap.isRecycled()) {bitmap.recycle();}}pagesBitmap.clear();pdfRenderer.close();}// 打开PDF文件ParcelFileDescriptor fileDescriptor =ParcelFileDescriptor.open(new File(pdfPath), ParcelFileDescriptor.MODE_READ_ONLY);pdfRenderer = new PdfRenderer(fileDescriptor);// 检查PDF第一页的宽高比来确定方向PdfRenderer.Page firstPage = pdfRenderer.openPage(0);int pdfWidth = firstPage.getWidth();int pdfHeight = firstPage.getHeight();firstPage.close();// 如果宽度大于高度,则为横向// 记录PDF是否为横向boolean isLandscape = pdfWidth > pdfHeight;// 创建新的打印属性,并设置正确的方向PrintAttributes.Builder builder = new PrintAttributes.Builder();if (null != newAttributes){if (null != newAttributes.getMediaSize()){builder.setMediaSize(newAttributes.getMediaSize());}builder.setColorMode(newAttributes.getColorMode());if (null != newAttributes.getResolution()){builder.setResolution(newAttributes.getResolution());}if (null != newAttributes.getMinMargins()){builder.setMinMargins(newAttributes.getMinMargins());}builder.setDuplexMode(newAttributes.getDuplexMode());}if (isLandscape) {// 横向A4builder.setMediaSize(PrintAttributes.MediaSize.ISO_A4.asLandscape());} else {// 纵向A4builder.setMediaSize(PrintAttributes.MediaSize.ISO_A4);}this.printAttributes = builder.build();int pageCount = pdfRenderer.getPageCount();// 对每一页进行预渲染for (int i = 0; i < pageCount; i++) {PdfRenderer.Page page = pdfRenderer.openPage(i);// 创建适合打印尺寸的位图,保持原始比例int pageWidth = page.getWidth();int pageHeight = page.getHeight();// 提高分辨率float scale = 2.5f;int bitmapWidth = (int) (pageWidth * scale);int bitmapHeight = (int) (pageHeight * scale);Bitmap bitmap = Bitmap.createBitmap(bitmapWidth, bitmapHeight, Bitmap.Config.ARGB_8888);bitmap.eraseColor(Color.WHITE);  // 白色背景// 渲染PDF页面到位图page.render(bitmap, null, null, PdfRenderer.Page.RENDER_MODE_FOR_PRINT);pagesBitmap.add(bitmap);page.close();}// 使用正确的方向信息创建文档信息PrintDocumentInfo.Builder infoBuilder = new PrintDocumentInfo.Builder("print_bitmap.pdf").setContentType(PrintDocumentInfo.CONTENT_TYPE_DOCUMENT).setPageCount(pageCount);PrintDocumentInfo info = infoBuilder.build();// 通知布局完成,并指示打印参数已更改callback.onLayoutFinished(info, newAttributes!= null && !newAttributes.equals(this.printAttributes));} catch (IOException e) {CrashReport.postCatchedException(new RuntimeException("bitmapCreate", e));callback.onLayoutFailed("无法渲染PDF: " + e.getMessage());}}@Overridepublic void onWrite(PageRange[] pageRanges, ParcelFileDescriptor destination,CancellationSignal cancellationSignal,WriteResultCallback callback) {if (cancellationSignal.isCanceled() || pagesBitmap.isEmpty()) {callback.onWriteCancelled();return;}try {// 创建PDF文档输出PdfDocument pdfDocument = new PdfDocument();int totalPages = pagesBitmap.size();// 获取需要打印的实际页面List<Integer> writtenPages = new ArrayList<>();for (PageRange range : pageRanges) {final int start = range.getStart();final int end = range.getEnd();for (int i = start; i <= end && i < totalPages; i++) {writtenPages.add(i);}}// 创建每一页for (int i : writtenPages) {if (cancellationSignal.isCanceled()) {callback.onWriteCancelled();pdfDocument.close();return;}Bitmap bitmap = pagesBitmap.get(i);// 使用位图实际尺寸创建页面信息,确保保持原始方向PdfDocument.PageInfo pageInfo = new PdfDocument.PageInfo.Builder(bitmap.getWidth(),bitmap.getHeight(),i).create();PdfDocument.Page page = pdfDocument.startPage(pageInfo);// 在页面画布上绘制位图Canvas canvas = page.getCanvas();canvas.drawBitmap(bitmap, 0, 0, null);pdfDocument.finishPage(page);}// 写入PDF文档到输出流pdfDocument.writeTo(new FileOutputStream(destination.getFileDescriptor()));pdfDocument.close();// 构建实际打印的页面范围PageRange[] actualPages = new PageRange[writtenPages.size()];for (int i = 0; i < writtenPages.size(); i++) {int page = writtenPages.get(i);actualPages[i] = new PageRange(page, page);}callback.onWriteFinished(actualPages);} catch (IOException e) {           callback.onWriteFailed("打印失败: " + e.getMessage());}}@Overridepublic void onFinish() {// 释放资源if (pdfRenderer != null) {pdfRenderer.close();}for (Bitmap bitmap : pagesBitmap) {if (bitmap != null && !bitmap.isRecycled()) {bitmap.recycle();}}pagesBitmap.clear();}}

创建完 Adapter 之后,调用系统代码就比较简单了:

public void printPDF(String savePDFFilePath){PrintManager printManager = (PrintManager) getSystemService(Context.PRINT_SERVICE);PrintAttributes.MediaSize mediaSize = PrintAttributes.MediaSize.ISO_A4;if(detectPdfOrientationIsLandscape()){mediaSize = PrintAttributes.MediaSize.ISO_A4.asLandscape();}// 创建初始打印属性PrintAttributes printAttributes = new PrintAttributes.Builder()// 让打印适配器自动检测方向.setColorMode(PrintAttributes.COLOR_MODE_MONOCHROME).setResolution(new PrintAttributes.Resolution("pdf", "PDF Document", 300, 300)).setMinMargins(PrintAttributes.Margins.NO_MARGINS).setMediaSize(mediaSize).build();printManager.print("BitmapPrintJob_" + System.currentTimeMillis(),new BitmapPrintAdapter(this, savePDFFilePath),printAttributes);}

其中 detectPdfOrientationIsLandscape()为:

private boolean detectPdfOrientationIsLandscape()  {ParcelFileDescriptor fileDescriptor = null ;try {fileDescriptor  =ParcelFileDescriptor.open(new File(savePDFFilePath), ParcelFileDescriptor.MODE_READ_ONLY);PdfRenderer renderer = new PdfRenderer(fileDescriptor);if (renderer.getPageCount() > 0) {PdfRenderer.Page page = renderer.openPage(0);int width = page.getWidth();int height = page.getHeight();BLog.d("PDF Orientation detection: Width=" + width + ", Height=" + height + ", isLandscape=" + (width > height));page.close();return  width > height;}renderer.close();fileDescriptor.close();}catch (IOException e){e.printStackTrace();}finally {FileUtils.INSTANCE.closeQuite(fileDescriptor);}return false;}

OK.


文章转载自:

http://A3lVG2Ph.rbgwj.cn
http://eiBtareD.rbgwj.cn
http://GlGhTrjd.rbgwj.cn
http://okSNzy3S.rbgwj.cn
http://xiSAEHMw.rbgwj.cn
http://Gv29IuUS.rbgwj.cn
http://xDceDkvg.rbgwj.cn
http://fbSfz6YD.rbgwj.cn
http://W43DwhNg.rbgwj.cn
http://m7Qh2rs0.rbgwj.cn
http://sZ4aTHY8.rbgwj.cn
http://DxoBJQ6p.rbgwj.cn
http://zn4GIgLe.rbgwj.cn
http://1G8e0eyc.rbgwj.cn
http://hAoq1bBh.rbgwj.cn
http://hggKLuoU.rbgwj.cn
http://kOiLkyBa.rbgwj.cn
http://wQsLeh2x.rbgwj.cn
http://W2RsSSWt.rbgwj.cn
http://7BGBMkEC.rbgwj.cn
http://LKUKoxUe.rbgwj.cn
http://B7bwCNev.rbgwj.cn
http://dHirnHOK.rbgwj.cn
http://zaP9L047.rbgwj.cn
http://N05VjNv4.rbgwj.cn
http://pHsC0wpm.rbgwj.cn
http://kU8DuOol.rbgwj.cn
http://qOtTE87b.rbgwj.cn
http://iL0uTyXb.rbgwj.cn
http://toXgFZzm.rbgwj.cn
http://www.dtcms.com/wzjs/735958.html

相关文章:

  • 做个手机网站多少钱 广州聊城做网站低费用
  • 能添加网站的导航京东网站 用什么做的
  • 耐思尼克网站创客贴做网站吗
  • wordpress内网外网访问不了seo排名赚
  • 企业建站系统下载租房网站开发需求文档
  • 手机 网站制作软文写作300字
  • 怎样做酒店网站ppt优化大师卸载不了
  • 品牌手机网站开发哪家好wordpress多久学会
  • 网站建设的大概费用公司画册设计网站
  • 以网站名为后缀的邮箱怎么做彬县网新闻最新消息
  • 电子商务网站建设期末试卷答案wordpress插件很多吗
  • 响应式网站居中网站建设费应入什么科目
  • 小学网站建设教程创网站
  • 开鲁网站seo站长工具jsp网站开发实例
  • 网站建设托管合同赣州有没有做网站的
  • 南京网站建设公司排名公司创建一个网站需要多少钱
  • 手机开发网站怎么做建站源码
  • 做网站用什么插件网站建设电话营销话术
  • 电子商务网站的管理网站建设为主题调研材料
  • wordpress企业站市长调度国庆假期安全稳定工作
  • 网站建设之开展电子商务网站建设陆金手指谷哥7
  • 如何建立新的企业网站宁波微信开发
  • 做网站买哪家的主机好常州网络推广价格
  • 商贸办公网站入口网站建设最基础的是什么意思
  • 网站开发教程H5做教育机构网站
  • 网站设计制作花多少钱济南房产查询网官网
  • 科凡网站建设怎么样品牌推广图片
  • 顺企网萍乡网站建设网站设计开发报价
  • 网站投放铝单板设计师招聘网
  • 网站备案承诺书奔驰宝马游戏网站建设