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

如何使用Pdfium获取PDF文档中带边界信息的文本内容?

获取PDF文本及对应边界信息的Pdfium实现方案

没错,FPDFText_GetText确实只能返回纯文本内容,没法直接拿到文本的位置边界。不过Pdfium其实提供了几个底层API,组合起来就能轻松实现你的需求,我给你分享两种常用的思路:

1. 逐字符精准获取边界

如果需要最精细的字符级边界信息,这个方法最合适:

  • 先用FPDFText_LoadPage加载目标页面的文本上下文
  • 调用FPDFText_CountChars拿到页面的总字符数
  • 循环遍历每个字符,通过FPDFText_GetCharBox获取该字符的左、右、上、下四个边界坐标
  • 搭配FPDFText_GetChar就能拿到对应的字符内容,把两者关联起来就行

给你一段伪代码参考:

FPDF_TEXTPAGE textPage = FPDFText_LoadPage(pdfPage);
int totalChars = FPDFText_CountChars(textPage);

for (int i = 0; i < totalChars; ++i) {
    double left, top, right, bottom;
    // 获取当前字符的边界框
    FPDFText_GetCharBox(textPage, i, &left, &top, &right, &bottom);
    // 获取当前字符
    wchar_t character = FPDFText_GetChar(textPage, i);
    
    // 这里可以把字符和边界信息存储到你的数据结构里
}

// 记得释放资源
FPDFText_ClosePage(textPage);

2. 按行/文本块获取整体边界

如果不需要字符级的精度,只需要行或者某段文本的整体边界,可以用这些API:

  • FPDFText_GetLineBounds:传入行索引,直接获取整行文本的边界框
  • FPDFText_GetTextBounds:指定文本的起始和结束字符索引,获取这段文本的整体边界

举个按行处理的例子:

FPDF_TEXTPAGE textPage = FPDFText_LoadPage(pdfPage);
int totalLines = FPDFText_CountLines(textPage);

for (int i = 0; i < totalLines; ++i) {
    double left, top, right, bottom;
    FPDFText_GetLineBounds(textPage, i, &left, &top, &right, &bottom);
    // 获取该行的文本内容
    wchar_t lineText[1024];
    FPDFText_GetText(textPage, FPDFText_GetLineStart(textPage, i), FPDFText_GetLineEnd(textPage, i), lineText, sizeof(lineText)/sizeof(wchar_t));
    
    // 关联行文本和边界信息
}

FPDFText_ClosePage(textPage);

注意事项

  • Pdfium的坐标原点在页面左下角,如果你习惯左上角为原点的坐标系,需要用页面高度 - 纵坐标来转换
  • 所有文本操作完成后,一定要调用FPDFText_ClosePage释放资源,避免内存泄漏

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 09:08:10