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

Android:如何通过WebView打印带字体样式和大小的EditText内容

解决WebView打印EditText字体样式不生效的问题

问题核心在于:EditText的字体类型、大小等样式是以Spannable格式存储的,直接调用editText2.getText().toString()只会提取纯文本,丢失所有样式信息。哪怕改成text/html类型,没有对应的HTML标签,WebView也无法识别样式。

解决方案步骤:

  1. 将EditText的Spannable内容转换为带样式的HTML字符串
  2. 让WebView加载完整的HTML内容(包含样式标签)

修改后的代码示例:

void printFile(){
    WebView myWebView = new WebView(getApplicationContext());
    
    // 1. 将EditText的Spannable内容转为HTML
    SpannableStringBuilder spannableText = (SpannableStringBuilder) editText2.getText();
    // 根据API版本选择转换模式,API 24+用FROM_HTML_MODE_COMPACT,旧版本用默认转换逻辑
    String htmlContent;
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
        htmlContent = Html.toHtml(spannableText, Html.FROM_HTML_MODE_COMPACT);
    } else {
        htmlContent = Html.toHtml(spannableText);
    }

    // 2. 封装完整HTML结构(可选:如果有自定义字体,可添加<style>标签引入)
    String fullHtml = "<html><body>" + htmlContent + "</body></html>";
    
    // 加载HTML内容,指定MIME类型为text/html
    myWebView.loadData(fullHtml, "text/html", "UTF-8");

    myWebView.setWebViewClient(new WebViewClient() {
        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            return false;
        }
    });

    PrintManager printManager = (PrintManager) primaryBaseActivity.getSystemService(Context.PRINT_SERVICE);
    PrintDocumentAdapter printAdapter = myWebView.createPrintDocumentAdapter();
    String jobName = getString(R.string.app_name) + " Print";
    printManager.print(jobName, printAdapter, new PrintAttributes.Builder().build());
}

额外说明:

  • 如果EditText使用了自定义字体,需要在HTML中通过@font-face引入字体文件(将字体文件放在assets目录):
    String fullHtml = "<html><head>" +
            "<style>" +
            "@font-face {font-family: 'MyCustomFont'; src: url('file:///android_asset/myfont.ttf');}" +
            "body {font-family: 'MyCustomFont';}" +
            "</style>" +
            "</head><body>" + htmlContent + "</body></html>";
    
  • Html.toHtml()会自动将EditText中的样式(如字体大小、颜色、粗体等)转换为对应的HTML标签(<font>、<b>等),WebView加载后就能正确识别并打印这些样式。

内容的提问来源于stack exchange,提问作者Fisher

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 09:30:19