讲师中心 微信公众号
AI工具推荐 视频效率加速

如何将 Android ListView 中的数据导出为多页 PDF 文件

小辰小哥_9093

小辰小哥_9093

发布时间:2026-10-16 21:29:04

|

971人浏览过

|

来源于php中文网

原创

如何将 Android ListView 中的数据导出为多页 PDF 文件

本文介绍使用 Android PdfDocument API 将 ListView(或更推荐的 RecyclerView)中的条目逐页渲染并保存为标准 PDF 文件的完整实现方案,包含页面分页逻辑、字体适配与实际代码示例。

本文介绍使用 android `pdfdocument` api 将 listview(或更推荐的 recyclerview)中的条目逐页渲染并保存为标准 pdf 文件的完整实现方案,包含页面分页逻辑、字体适配与实际代码示例。

在 Android 开发中,直接将 ListView 内容“保存为 PDF”并非调用某个现成方法即可完成,而是需要手动将每个条目绘制到 PdfDocument.Page 的 Canvas 上,并合理处理分页、字体、行高与边距等排版细节。虽然你的代码尝试用 ObjectOutputStream 序列化列表数据(生成的是二进制 .txt 文件,非 PDF),但真正的 PDF 导出需借助系统原生的 android.graphics.pdf.PdfDocument 类——它自 Android 19(API 19)起可用,无需第三方依赖,生成标准、可读、跨平台兼容的 PDF。

⚠️ 注意:ListView 已属过时组件,官方推荐使用 RecyclerView 配合 LinearLayoutManager 实现更高效、灵活的列表管理。但若暂不重构 UI,你仍可基于其 Adapter 数据源(如 barcodelist)进行 PDF 渲染,不建议直接绘制 ListView 视图本身(因视图未完全测量/布局,易导致 NullPointerException 或尺寸异常)。

✅ 推荐做法:从数据源生成 PDF(而非视图)

以下是以你现有 barcodelist 为基础的 PDF 导出核心逻辑(适配 ListView 场景,已封装为可复用方法):

android-agent
android-agent

通过USB或网络使用GPT‑4o视觉控制真实Android手机,执行打开应用、输入、点击和自动化脚本等任务。

下载
private void exportToPdf() {
    // 1. 创建 PDF 文档
    PdfDocument pdfDocument = new PdfDocument();
    Paint paint = new Paint();
    paint.setColor(Color.BLACK);
    paint.setTextSize(14f);

    // 2. 定义页面尺寸(A4: 595×842 点)
    PdfDocument.PageInfo pageInfo = new PdfDocument.PageInfo.Builder(595, 842, 1).create();
    PdfDocument.Page page = pdfDocument.startPage(pageInfo);

    Canvas canvas = page.getCanvas();
    float margin = 50f;
    float y = margin;
    float lineHeight = 30f;

    // 3. 逐行绘制条目(支持自动换页)
    for (int i = 0; i < barcodelist.size(); i++) {
        String item = barcodelist.get(i);
        if (y + lineHeight > pageInfo.getPageHeight() - margin) {
            // 当前行超出页面,结束当前页,开启新页
            pdfDocument.finishPage(page);
            pageInfo = new PdfDocument.PageInfo.Builder(595, 842, pdfDocument.getPages().size() + 1).create();
            page = pdfDocument.startPage(pageInfo);
            canvas = page.getCanvas();
            y = margin;
        }
        canvas.drawText("Barcode " + (i + 1) + ": " + item, margin, y, paint);
        y += lineHeight;
    }

    // 4. 结束最后一页并保存
    pdfDocument.finishPage(page);

    // 5. 保存到外部存储(需运行时权限)
    File file = new File(getExternalFilesDir(null), "barcodes_export.pdf");
    try (FileOutputStream fos = new FileOutputStream(file)) {
        pdfDocument.writeTo(fos);
        Toast.makeText(this, "PDF saved to: " + file.getAbsolutePath(), Toast.LENGTH_LONG).show();
    } catch (IOException e) {
        e.printStackTrace();
        Toast.makeText(this, "Save failed: " + e.getMessage(), Toast.LENGTH_SHORT).show();
    } finally {
        pdfDocument.close();
    }
}

? 关键注意事项

  • 权限要求:Android 10+ 需声明 android.permission.READ_MEDIA_DOCUMENTS 或使用 getExternalFilesDir()(如上例)避免请求广泛存储权限;Android 6–9 需动态申请 WRITE_EXTERNAL_STORAGE。
  • 字体与样式:PdfDocument 不支持复杂字体嵌入,建议使用系统默认字体(如 Typeface.DEFAULT)并控制 setTextSize() 和 setColor() 保证可读性。
  • 性能优化:若条目极多(>1000),建议在后台线程(如 AsyncTask 或 Coroutine)执行导出,避免阻塞主线程。
  • 替代方案:如需更丰富功能(表格、图片、页眉页脚),可考虑轻量库如 iText7(免费版有限制)或 Apache PDFBox(需额外配置)。

✅ 最终集成到按钮点击事件

替换你原有 btnok.setOnClickListener 中的序列化逻辑为:

btnok.setOnClickListener(v -> {
    if (barcodelist.isEmpty()) {
        Toast.makeText(MainActivity.this, "No barcodes to export", Toast.LENGTH_SHORT).show();
        return;
    }
    exportToPdf(); // 调用上方定义的方法
});

通过此方案,你将获得一个结构清晰、分页合理、符合 PDF 标准的文档,且完全基于 Android 原生 API,无额外包体积负担。如后续升级至 RecyclerView,只需将 barcodelist 替换为 adapter.getCurrentList() 即可无缝迁移。

相关文章

极轻PDF
极轻PDF

专业的在线PDF工具,支持PDF编辑、转换、合并、压缩等多种功能,操作简单,处理高效,满足日常办公与学习中的PDF处理需求。

下载

相关标签:

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
Loomy
Loomy Hot

一款AI工具,主要用于科大讯飞发布的桌面级 AI 助理,比 OpenClaw 更易用、更安全!,适合需要提升相关任务效率的用户。

AionClaw
AionClaw Hot

AionClaw是一款面向办公、创作和编程任务的AI桌面智能体。

咔片AIPPT

一款在线AI演示文稿制作工具,可根据主题和内容需求辅助生成PPT结构与页面,提高演示材料制作效率。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

UP简历
UP简历 Hot

一款AI办公效率工具,主要用于基于AI技术的免费在线简历制作工具,适合需要提升相关任务效率的用户。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

超级简历WonderCV

一款AI办公效率工具,主要用于免费求职简历模版下载制作,应届生职场人必备简历制作神器,适合需要提升相关任务效率的用户。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

切问学术

切问学术是一款AI论文写作工具,复旦大学NLP团队推出的AI学术智能体。

相关专题

更多
android开发三大框架
android开发三大框架

android开发三大框架是XUtil框架、volley框架、ImageLoader框架。本专题为大家提供android开发三大框架相关的各种文章、以及下载和课程。

902

2023.08.14

android是什么系统
android是什么系统

Android是一种功能强大、灵活可定制、应用丰富、多任务处理能力强、兼容性好、网络连接能力强的操作系统。本专题为大家提供android相关的文章、下载、课程内容,供大家免费下载体验。

2647

2023.08.22

android权限限制怎么解开
android权限限制怎么解开

android权限限制可以使用Root权限、第三方权限管理应用程序、ADB命令和Xposed框架解开。详细介绍:1、Root权限,通过获取Root权限,用户可以解锁所有权限,并对系统进行自定义和修改;2、第三方权限管理应用程序,用户可以轻松地控制和管理应用程序的权限;3、ADB命令,用户可以在设备上执行各种操作,包括解锁权限;4、Xposed框架,用户可以在不修改系统文件的情况下修改应用程序的行为和权限。

5037

2023.09.19

android重启应用的方法有哪些
android重启应用的方法有哪些

android重启应用有通过Intent、PendingIntent、系统服务、Runtime等方法。本专题为大家提供Android相关的文章、下载、课程内容,供大家免费下载体验。

645

2023.10.18

Android语音播放功能实现方法
Android语音播放功能实现方法

实现方法有使用MediaPlayer实现、使用SoundPool实现两种。可以根据具体的需求选择适合的方法进行实现。想了解更多语音播放的相关内容,可以阅读本专题下面的文章。

944

2024.03.01

Revel框架入门与安装配置
Revel框架入门与安装配置

本专题从Revel框架环境搭建讲起,系统介绍命令行工具安装、项目创建、目录结构、配置文件及热代码重载,帮助开发者快速完成首个Go Web应用。

0

2026.10.16

Linux 新手先学哪些命令
Linux 新手先学哪些命令

Linux新手命令专题汇集终端基础、文件目录操作、文本查看、软件安装和权限管理等入门文章,帮助按实际任务练习常用命令并建立命令行操作习惯。

0

2026.10.15

MySQL 忘记密码怎么办
MySQL 忘记密码怎么办

MySQL忘记密码专题汇集不同版本与系统下的root密码重置方法,覆盖MySQL 5.7、8.0、Mac、Linux及本地集成环境,并提示恢复权限与重新登录的检查步骤。

0

2026.10.15

Vue.js 中 ref 和 reactive 的区别
Vue.js 中 ref 和 reactive 的区别

Vue.js中ref和reactive的区别专题汇集两种响应式API的定义、访问方式、对象解构、侦听与性能取舍等文章,帮助结合实际状态类型选择合适写法。

0

2026.10.15

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Excel 教程
Excel 教程

共162课时 | 44.2万人学习

Java 教程
Java 教程

共578课时 | 191.4万人学习

Uniapp从零开始实现新闻资讯应用
Uniapp从零开始实现新闻资讯应用

共64课时 | 9.5万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn