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

Android中HTML字符串转PDF或图片的实现方法咨询

在Android中将HTML转换为PDF或图片的可行方案

当然有靠谱的实现方法!我之前做项目时刚好处理过类似需求,给你整理几个实用的方案:

一、将HTML转换为PDF

1. 利用Android原生PrintManager(推荐)

系统自带的打印框架就能实现HTML转PDF,不需要依赖第三方库,步骤也清晰:

  • 先创建一个WebView加载你的HTML内容;
  • 等WebView加载完成后,通过PrintManager创建打印任务,并指定输出为PDF文件。

简单的代码示例:

val webView = WebView(context)
webView.loadDataWithBaseURL(null, yourHtmlString, "text/html", "UTF-8", null)

webView.webViewClient = object : WebViewClient() {
    override fun onPageFinished(view: WebView?, url: String?) {
        super.onPageFinished(view, url)
        // 触发打印转PDF
        val printManager = context.getSystemService(Context.PRINT_SERVICE) as PrintManager
        val printAdapter = webView.createPrintDocumentAdapter("HTML_to_PDF")
        val printAttributes = PrintAttributes.Builder()
            .setMediaSize(PrintAttributes.MediaSize.ISO_A4)
            .setResolution(PrintAttributes.Resolution("pdf", "PDF", 600, 600))
            .setColorMode(PrintAttributes.COLOR_MODE_COLOR)
            .build()
        printManager.print("HTML转PDF任务", printAdapter, printAttributes)
    }
}

打印完成后,系统会让你选择保存路径,直接导出PDF即可。

2. 使用第三方库(如iText)

如果需要更自定义的PDF生成逻辑,可以用iText库,不过需要配合xmlworker来解析HTML。注意iText 7的API和旧版本差异较大,使用时要对应版本的依赖。

二、将HTML转换为图片

1. WebView截图(API 19+)

通过WebView加载HTML后,直接截取其内容生成Bitmap,再保存为图片文件:

webView.webViewClient = object : WebViewClient() {
    override fun onPageFinished(view: WebView?, url: String?) {
        super.onPageFinished(view, url)
        // 确保WebView已经完全渲染
        webView.post {
            val bitmap = Bitmap.createBitmap(webView.width, webView.height, Bitmap.Config.ARGB_8888)
            val canvas = Canvas(bitmap)
            webView.draw(canvas)
            // 保存Bitmap到文件
            val outputStream = FileOutputStream(File(context.filesDir, "html_image.png"))
            bitmap.compress(Bitmap.CompressFormat.PNG, 100, outputStream)
            outputStream.close()
        }
    }
}

注意:如果HTML内容很长,需要先计算WebView的实际高度,再创建对应大小的Bitmap,避免截取不全。

2. 使用第三方截图库

比如android-screenshot-library这类库,不过大多数场景下原生WebView截图已经足够。

一些注意事项

  • 确保WebView启用了JavaScript(如果HTML里有JS渲染的内容):webView.settings.javaScriptEnabled = true;
  • 处理HTML中的外部资源(如CSS、图片):可以把资源放在assets目录,用file:///android_asset/作为baseURL加载;
  • 申请存储权限:如果要保存到外部存储,需要动态申请WRITE_EXTERNAL_STORAGE权限(Android 10+用Scoped Storage)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 03:26:52