如何通过Pdfium获取Acrobat Reader中PDF页面的批注文本?
用Pdfium提取PDF批注文本的解决方案
核心逻辑:区分注释类型处理
HIGHLIGHT是高亮注释,本身不存储批注文本,批注内容通常关联在对应的POPUP注释中;POPUP注释的/Contents字段就是你要提取的批注文本。
具体实现步骤
1. 匹配HIGHLIGHT与对应的POPUP注释
每个HIGHLIGHT注释都带有/Popup关联项,指向对应的POPUP注释引用:
- 用
FPDFPage_GetAnnotCount获取当前页面的注释总数 - 循环调用
FPDFPage_GetAnnot遍历所有注释对象 - 对HIGHLIGHT类型的注释,调用
FPDFAnnot_GetString读取其/Popup字段,找到关联的POPUP注释对象
2. 从POPUP注释提取文本
找到目标POPUP注释后,调用FPDFAnnot_GetString(或Unicode版本FPDFAnnot_GetStringW)读取Contents关键字对应的值:
// C++示例代码 wchar_t contentBuffer[2048]; FPDFAnnot_GetStringW(popupAnnot, L"Contents", contentBuffer, sizeof(contentBuffer)/sizeof(wchar_t));
3. 处理特殊场景
- 如果
/Contents为空,检查POPUP注释是否有/RC字段(富文本内容),读取后剥离<>标签提取纯文本 - 若PDF加密,需先调用
FPDF_SetPassword完成解密,否则无法读取注释内容 - 调用
FPDFAnnot_IsValid验证注释对象有效性,避免无效指针操作
针对你提供的注释结构的补充检查
核对你给出的注释结构数据:
- 确认HIGHLIGHT注释的
/Popup条目指向正确的POPUP对象 - 检查POPUP注释的
/Contents字段是否存在且包含内容
内容的提问来源于stack exchange,提问作者OM PRAKASH SEERVI
相关产品推荐
相关产品推荐

