You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Android WebView中通过Java启用Print按钮实现页面打印

Android WebView 配置仅通过HTML按钮触发打印

1. 布局中添加WebView

先在你的布局文件(比如activity_main.xml)里加入WebView组件:

<WebView
    android:id="@+id/webView"
    android:layout_width="match_parent"
    android:layout_height="match_parent" />

2. Java代码初始化WebView并配置打印逻辑

在对应的Activity类中,完成WebView初始化、开启JavaScript支持,同时拦截HTML里的window.print()调用,触发系统打印流程:

import android.os.Bundle;
import android.print.PrintManager;
import android.webkit.WebChromeClient;
import android.webkit.WebSettings;
import android.webkit.WebView;
import androidx.appcompat.app.AppCompatActivity;

public class MainActivity extends AppCompatActivity {
    private WebView webView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        webView = findViewById(R.id.webView);
        WebSettings webSettings = webView.getSettings();
        
        // 必须启用JavaScript,因为HTML按钮靠JS触发打印
        webSettings.setJavaScriptEnabled(true);
        
        // 设置WebChromeClient拦截window.print()请求
        webView.setWebChromeClient(new WebChromeClient() {
            @Override
            public boolean onPrintRequested() {
                // 获取系统打印管理器
                PrintManager printManager = (PrintManager) getSystemService(PRINT_SERVICE);
                if (printManager != null) {
                    // 发起WebView内容打印
                    printManager.print("WebView页面打印", webView.createPrintDocumentAdapter(), null);
                    return true; // 标记请求已处理
                }
                return false;
            }
        });

        // 加载你的HTML页面(本地assets文件或远程URL都支持)
        // 示例:加载本地assets中的HTML文件
        webView.loadUrl("file:///android_asset/print_page.html");
        // 加载远程URL的话写:webView.loadUrl("https://你的域名/打印页面.html");
    }
}

3. 确保HTML打印按钮正常工作

你的HTML页面里的打印按钮要正确触发window.print(),代码示例:

<button onclick="window.print()">Print Page</button>
<!-- 其他页面内容 -->

注意事项

  • 仅允许HTML按钮触发:上述配置只会响应HTML按钮发起的window.print()调用。如果要彻底禁用其他打印途径(比如WebView长按弹出的系统菜单),可以加一行代码禁用长按菜单:
    webView.setOnLongClickListener(v -> true); // 禁用WebView长按菜单
    
  • 低版本Android兼容:onPrintRequested()是Android 5.0(API 21)才支持的方法,若需兼容更低版本,改用JS接口注入的方式:
    // 给WebView注入自定义JS接口
    webView.addJavascriptInterface(new Object() {
        @JavascriptInterface
        public void printPage() {
            PrintManager printManager = (PrintManager) getSystemService(PRINT_SERVICE);
            if (printManager != null) {
                printManager.print("WebView页面打印", webView.createPrintDocumentAdapter(), null);
            }
        }
    }, "AndroidPrint");
    
    同时修改HTML按钮的点击事件:
    <button onclick="AndroidPrint.printPage()">Print Page</button>
    

配置完成后,点击HTML里的Print按钮就会唤起系统打印界面,和你想要的效果一致。

内容的提问来源于stack exchange,提问作者iDibya.com

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 20:14:57