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

Android点击按钮加载Asset目录PDF后如何实现内容搜索功能

Android PDF内容搜索实现方案

你当前使用的PDF加载控件默认未内置搜索交互入口,也未默认开启文本解析能力,因此不会显示搜索图标,也无法响应系统搜索快捷键,可按以下步骤实现搜索功能,无需更换现有加载库:

  • 确认依赖版本:将你使用的PDF查看器库升级到3.2.0及以上版本,低版本不支持文本提取相关API,无法实现检索。
  • 补充搜索交互控件:在现有布局中自行添加搜索入口,比如在PDF区域上方放置搜索图标按钮、默认隐藏的文本输入框、搜索确认按钮、上/下匹配项切换按钮。不要尝试通过唤起系统软键盘用Ctrl+F触发搜索,PDFView本身不是可编辑文本组件,不会响应系统文本搜索快捷键。
  • 修改PDF加载配置:加载PDF时开启文本解析、注解渲染能力,同时监听PDF加载完成状态,加载完成前禁止触发搜索,避免空指针异常,核心加载代码修改如下:
public class Finish_Center extends AppCompatActivity {
    PDFView Sample;
    // 存储所有匹配关键词的页码、当前匹配项索引
    private List<Integer> matchPageList = new ArrayList<>();
    private int currentMatchPos = 0;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_Sample);
        Sample = (PDFView) findViewById(R.id.Sample);
        // 搜索按钮默认置灰,PDF加载完成后再启用
        findViewById(R.id.search_confirm).setEnabled(false);
        
        Sample.fromAsset("Book1.pdf")
                .enableSwipe(true)
                .enableDoubletap(true)
                // 核心配置:开启注解渲染和文本提取支持
                .enableAnnotationRendering(true)
                .onLoad(nbPages -> {
                    // PDF加载完成,启用搜索按钮
                    findViewById(R.id.search_confirm).setEnabled(true);
                })
                .load();

        // 绑定搜索确认事件
        findViewById(R.id.search_confirm).setOnClickListener(v -> {
            EditText searchInput = findViewById(R.id.search_input);
            String keyword = searchInput.getText().toString().trim();
            if (keyword.isEmpty()) return;
            
            matchPageList.clear();
            currentMatchPos = 0;
            // 遍历所有页面检索匹配关键词
            for (int pageIdx = 0; pageIdx < Sample.getPageCount(); pageIdx++) {
                String pageContent = Sample.getDocument().getPage(pageIdx).getText();
                if (pageContent.contains(keyword)) {
                    matchPageList.add(pageIdx);
                }
            }

            if (matchPageList.isEmpty()) {
                Toast.makeText(this, "未找到匹配内容", Toast.LENGTH_SHORT).show();
                return;
            }
            // 跳转到第一个匹配页
            Sample.jumpTo(matchPageList.get(currentMatchPos));
        });

        // 绑定下一个匹配项切换事件
        findViewById(R.id.next_match).setOnClickListener(v -> {
            if (matchPageList.isEmpty()) return;
            currentMatchPos = (currentMatchPos + 1) % matchPageList.size();
            Sample.jumpTo(matchPageList.get(currentMatchPos));
        });

        // 绑定上一个匹配项切换事件
        findViewById(R.id.pre_match).setOnClickListener(v -> {
            if (matchPageList.isEmpty()) return;
            currentMatchPos = (currentMatchPos - 1 + matchPageList.size()) % matchPageList.size();
            Sample.jumpTo(matchPageList.get(currentMatchPos));
        });
    }
}
  • 可选优化:如果需要高亮显示页面内的匹配文本,可以自定义绘制监听,在对应页面的Canvas上绘制半透明色块覆盖匹配文本位置即可。

注意:如果你的PDF是扫描件生成的纯图片格式(没有可复制的文本层),上述文本检索方案无法生效,需要先接入OCR能力识别图片内的文字,建立索引后再做搜索。普通可选中复制文本的PDF可直接使用上述方案。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.02 03:15:43