文本搜索与提取
福昕 PDF SDK(Web)提供文档级和页面级文本能力,可用于全文搜索、区域取词、文本提取、搜索结果高亮、校对定位和自动化处理。
常用接口包括:
PDFDoc.searchText():在指定页面范围内搜索关键字。PDFDoc.getText():提取指定页面的文本内容。PDFPage.getText():提取单页全部文本。PDFPage.getTextInRect():提取指定区域中的文本。PDFPage.getCharCount()、PDFPage.getCharInfoByIndex():按字符索引读取文本信息。
在文档中搜索文本
PDFDoc.searchText(pages, words, options) 用于在指定页面中搜索一个或多个关键字。
javascript
const pdfDoc = pdfViewer.getCurrentPDFDoc();
const result = await pdfDoc.searchText(
[0, 1],
['Foxit', 'PDF'],
{
wholeWordsOnly: true,
caseSensitive: false
}
);
console.log(result);
返回结果按页面索引分组,每个匹配项通常包含匹配文本和对应的矩形区域。
javascript
{
0: [
{
word: 'Foxit',
rects: [
{ left: 100, right: 145, top: 720, bottom: 700 }
]
}
],
1: []
}
搜索选项
| 选项 | 说明 |
|---|---|
wholeWordsOnly | 是否只匹配完整单词。 |
caseSensitive | 是否区分大小写。 |
提取文档文本
PDFDoc.getText(pages) 用于提取指定页面范围的文本内容。
javascript
const text = await pdfDoc.getText([[0, 2]]);
console.log(text);
提示
PDFDoc.getText() 不支持 XFA 文档。如果需要处理 XFA 表单,请参考表单相关 API。
提取单页文本
javascript
const page = await pdfDoc.getPageByIndex(0);
const text = await page.getText();
console.log(text);
提取指定区域文本
PDFPage.getTextInRect(rect, type) 用于提取 PDF 坐标区域中的文本。
javascript
const page = await pdfDoc.getPageByIndex(0);
const text = await page.getTextInRect({
left: 100,
right: 300,
top: 720,
bottom: 680
});
注意
getTextInRect() 使用 PDF 坐标,和 Viewer 中的 device pixels 不同。PDF 坐标通常以页面左下角为原点。
按字符索引读取文本信息
从 11.1.0 起,PDFPage 提供了更细粒度的字符索引能力,适合用于校对、批注锚点、搜索结果联动等场景。
javascript
const page = await pdfDoc.getPageByIndex(0);
const charCount = await page.getCharCount();
for (let i = 0; i < charCount; i++) {
const charInfo = await page.getCharInfoByIndex(i);
console.log(charInfo);
}
也可以通过区域获取字符范围:
javascript
const charRange = await page.getCharRange({
left: 100,
right: 300,
top: 720,
bottom: 680
});
与 UI 搜索功能的关系
如果使用完整 Viewer,搜索面板通常已内置在 UI 中,用户可以直接通过工具栏打开搜索并浏览结果。本文中的 API 更适合用于自定义搜索面板、业务自动化、批量定位或与注释、密文脱敏等功能联动。
注意事项
- 页面索引从
0开始。 - 文本提取结果取决于 PDF 中是否包含可解析文本;扫描件通常需要 OCR 后才能获得可搜索文本。
- 大文档全文搜索可能耗时较长,建议限制页码范围或在 UI 中提供取消、加载状态。
- 区域取词使用 PDF 坐标,和截图、页面渲染使用的 device pixels 不同。