android无线打印设置纸张和朝向

/**
 * 执行网络打印
 */
public void doNetWorkPrint(String reportUrl) {
        WebView printWebView = new WebView(this);
        printWebView.setWebChromeClient(new WebChromeClient());
        printWebView.setWebViewClient(new WebViewClient() {
            @Override
            public void onPageFinished(WebView view, String url) {
                printOrCreatePdfFromWebview(view,"打印标题");
                super.onPageFinished(view, url);
            }
        });

        WebSettings webSetting = printWebView.getSettings();
        webSetting.setDomStorageEnabled(true);
        webSetting.setCacheMode(WebSettings.LOAD_DEFAULT);
        webSetting.setDatabaseEnabled(true);
        webSetting.setJavaScriptEnabled(true);
        webSetting.setAllowFileAccess(true);
        webSetting.setAppCacheEnabled(true);

    // 允许从任何来源加载内容,即使起源是不安全的;
    //webview 从Lollipop(5.0)开始 webview默认不允许混合模式,https当中不能加载http资源,如果要加载,需单独设置开启
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
        webSetting.setMixedContentMode(android.webkit.WebSettings.MIXED_CONTENT_ALWAYS_ALLOW);
    }

   printWebView.loadUrl(reportUrl);
}

public PrintJob printOrCreatePdfFromWebview(WebView webview, String jobName) {
    Context context = webview.getContext();
    if (!(context instanceof Activity)) {
        return null;
    }
    PrintDocumentAdapter printAdapter;
    PrintManager printManager = (PrintManager) context.getSystemService(Context.PRINT_SERVICE);
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
        printAdapter = webview.createPrintDocumentAdapter(jobName);
    } else {
        printAdapter = webview.createPrintDocumentAdapter();
    }
    if (printManager != null) {
        if (((Activity) context).isFinishing()) {
            return null;
        }

     PrintAttributes.Builder builder = new PrintAttributes.Builder();
//设置A4纸
     builder.setMediaSize(PrintAttributes.MediaSize.ISO_A4);
//设置横向
     builder.setMediaSize(PrintAttributes.MediaSize.UNKNOWN_LANDSCAPE);
     return printManager.print(jobName, printAdapter, builder.build());
    }

    return null;
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 要实现在Android设备上通过无线网络进行打印,我们可以使用以下代码: 1.首先,确保在AndroidManifest.xml文件中添加网络权限和打印服务权限: <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.BLUETOOTH" /> <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" /> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> 2.在你的代码中,首先获取一个打印管理器的实例: PrintManager printManager = (PrintManager) getSystemService(Context.PRINT_SERVICE); 3.创建一个打印任务: PrintAttributes attributes = new PrintAttributes.Builder() .setMediaSize(PrintAttributes.MediaSize.ISO_A4) .setMinMargins(PrintAttributes.Margins.NO_MARGINS) .build(); printManager.print("Job Name", new PrintDocumentAdapter() { @Override public void onWrite(PageRange[] pages, ParcelFileDescriptor destination, CancellationSignal cancellationSignal, WriteResultCallback callback) { // 将打印内容写入到ParcelFileDescriptor // ... // 当打印完成时,调用callback.onWriteFinished() } @Override public void onLayout(PrintAttributes oldAttributes, PrintAttributes newAttributes, CancellationSignal cancellationSignal, LayoutResultCallback callback, Bundle extras) { if (cancellationSignal.isCanceled()) { callback.onLayoutCancelled(); return; } // 获取打印布局,并将其传递给callback.onLayoutFinished() // ... } }, attributes); 4.将打印内容写入到ParcelFileDescriptor的代码在onWrite()方法中实现。你可以将要打印的内容写入到一个PDF文件中,然后将该文件传递给打印系统。 5.上述代码中的打印布局获取和传递给callback.onLayoutFinished()方法的代码,在onLayout()方法中实现。你需要根据打印内容的尺寸和布局要求,计算打印布局,并传递给回调方法。 这就是通过无线网络在Android设备上进行打印的代码实现。你可以根据实际需求进行调整和扩展。 ### 回答2: 在Android中,可以使用BluetoothAdapter类来实现无线打印功能。下面是一个简单的示例代码: 1. 在AndroidManifest.xml文件中添加以下权限: ``` <uses-permission android:name="android.permission.BLUETOOTH"/> <uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/> ``` 2. 在需要打印的地方,首先获取BluetoothAdapter的实例,并启用蓝牙: ``` BluetoothAdapter bluetoothAdapter = BluetoothAdapter.getDefaultAdapter(); if (bluetoothAdapter != null && !bluetoothAdapter.isEnabled()) { Intent enableIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE); startActivityForResult(enableIntent, REQUEST_ENABLE_BT); } ``` 3. 查找可用的蓝牙设备,选择目标打印设备: ``` Set<BluetoothDevice> pairedDevices = bluetoothAdapter.getBondedDevices(); if (pairedDevices.size() > 0) { for (BluetoothDevice device : pairedDevices) { if (device.getName().equals("打印机设备名")) { // 这里替换为目标打印设备的名称 PrinterBluetoothService.ConnectThread connectThread = new PrinterBluetoothService.ConnectThread(device, bluetoothAdapter); connectThread.run(); break; } } } ``` 4. 将打印内容发送到目标设备: ``` PrinterBluetoothService sendData = new PrinterBluetoothService.SendDataThread("打印内容"); // 这里替换为实际需要打印的内容 sendData.run(); ``` 注意:上述示例中的"PrinterBluetoothService"是一个自定义的类,需要根据实际情况进行调整。这个类负责和蓝牙设备建立连接并进行数据的发送和接收。 综上所述,通过蓝牙适配器和相应的API,我们可以实现在Android设备上进行无线打印的功能。具体的实现方式可能会因为不同的打印机设备而有所差异,可以根据具体的设备和需求进行相应的调整。 ### 回答3: 在Android中,可以通过使用BluetoothAdapter和BluetoothDevice类打印无线代码。 首先,要打印无线代码,需要确保设备已经配对并连接到打印机。这可以通过以下步骤完成: 1. 获取BluetoothAdapter对象: ```java BluetoothAdapter bluetoothAdapter = BluetoothAdapter.getDefaultAdapter(); ``` 2. 检查设备是否支持蓝牙: ```java if (bluetoothAdapter == null) { // 设备不支持蓝牙 return; } ``` 3. 确保蓝牙已启用并尝试打开蓝牙: ```java if (!bluetoothAdapter.isEnabled()) { Intent enableBtIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE); startActivityForResult(enableBtIntent, REQUEST_ENABLE_BT); } ``` 4. 获取打印机的BluetoothDevice对象(需要根据打印机的名称或地址进行筛选): ```java Set<BluetoothDevice> pairedDevices = bluetoothAdapter.getBondedDevices(); for (BluetoothDevice device : pairedDevices) { if (device.getName().equals("打印机名称")) { // 找到打印机 // 执行打印代码 break; } } ``` 一旦找到了打印机,可以使用BluetoothSocket对象与其进行通信,发送打印指令或数据。这里给出一个简单的示例: ```java BluetoothSocket socket; try { socket = device.createRfcommSocketToServiceRecord(MY_UUID); // MY_UUID为UUID对象,可以在开发人员文档中找到 socket.connect(); OutputStream outputStream = socket.getOutputStream(); PrintWriter printWriter = new PrintWriter(outputStream); // 打印指令或数据 printWriter.println("打印内容"); printWriter.flush(); printWriter.close(); outputStream.close(); } catch (IOException e) { e.printStackTrace(); } ``` 需要注意的是,以上示例只是一个简单的框架,实际的打印指令和数据需要根据打印机的品牌和型号进行调整。具体的打印指令和数据格式可以参考打印机的技术文档。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值