PDF 文本 (Text Page)
福昕 PDF SDK 提供 APIs 来提取,选择,搜索和检索 PDF 文档中的文本。PDF 文本内容存储在与特定页面相关的 TextPage
对象中。TextPage
类可用于检索 PDF 页面中文本的信息,例如单个字符,单个单词,指定字符范围或矩形内的文本内容等。它还可用于构造其他文本相关类的对象,用来对文本内容执行更多操作或从文本内容访问指定信息:
- 在 PDF 页面的文本内容中搜索文本,使用
TextPage
对象来构建TextSearch
对象。 - 访问类似超文本链接的文本,使用
TextPage
对象来构建PageTextLinks
对象。 - 高亮 PDF 页面上的选中文本,构建一个
TextPage
对象来计算选中文本区域。
如何通过选择获取页面上的文本区域
js
import { FoxitRDKNative } from 'foxit_rdk';
class TextPageUnit {
public getTextRectsBySelection(page: FoxitRDKNative.pdf.PDFPage, startPos: FoxitRDKNative.common.fxcrt.PointF,
endPos: FoxitRDKNative.common.fxcrt.PointF): Array<FoxitRDKNative.common.fxcrt.RectF> | null {
try {
if (!page.IsParsed()) {
class PauseCallBackImpl extends FoxitRDKNative.common.PauseCallback {
NeedToPauseNow(): boolean {
return false;
}
}
const progressive = page.StartParse(FoxitRDKNative.pdf.PDFPage.e_ParsePageNormal, new PauseCallBackImpl(), false)
let state = FoxitRDKNative.common.Progressive.e_ToBeContinued;
while (state == FoxitRDKNative.common.Progressive.e_ToBeContinued) {
state = progressive.Continue();
}
}
// 从解析的PDF页面创建一个text page
const textPage = new FoxitRDKNative.pdf.TextPage(page, FoxitRDKNative.pdf.TextPage.e_ParseTextNormal);
if (textPage == null || textPage.IsEmpty()) {
return null;
}
let startCharIndex = textPage.GetIndexAtPos(startPos.x, startPos.y, 5);
let endCharIndex = textPage.GetIndexAtPos(endPos.x, endPos.y, 5);
// getTextRectCount API 要求开始字符索引必须小于或等于结束字符索引
startCharIndex = startCharIndex < endCharIndex ? startCharIndex : endCharIndex;
endCharIndex = endCharIndex > startCharIndex ? endCharIndex : startCharIndex;
const count = textPage.GetTextRectCount(startCharIndex, endCharIndex - startCharIndex);
if (count > 0) {
const array: Array<FoxitRDKNative.common.fxcrt.RectF> = new Array();
for (let i = 0; i < count; i++) {
const rectF = textPage.GetTextRect(i);
if (rectF == null || rectF.IsEmpty()) {
continue;
}
array.push(rectF);
}
// 返回的矩形是以PDF单位表示的,如果调用者需要在屏幕上高亮显示这些文本矩形,那么首先应该将这些矩形转换为设备单位
return array;
}
} catch (e) {
console.error(e);
}
return null;
}
}