Guides
页面文本提取
ComPDF React Native SDK 提供页面文本接口,用于从指定 PDF 页面中提取文本内容。你可以获取整页文本、矩形区域内的文本、页面文本行集合,也可以根据某一行的位置信息获取对应行文本。
获取整页文本
使用 getAllText() 获取当前页面的全部文本。
tsx
const page = pdfReaderRef.current?._pdfDocument.pageAtIndex(0);
const text = await page?.getAllText();
console.log("Page text:", text);如果页面没有文本层,例如扫描件图片 PDF,结果通常为空字符串。
获取矩形区域内文本
使用 getTextInRect(rect) 获取页面指定矩形范围内的文本。
tsx
const page = pdfReaderRef.current?._pdfDocument.pageAtIndex(0);
const text = await page?.getTextInRect({
left: 40,
top: 120,
right: 300,
bottom: 180,
});
console.log("Text in rectangle:", text);rect 使用 CPDFRectF 结构,坐标为页面坐标:
ts
type CPDFRectF = {
left: number;
top: number;
right: number;
bottom: number;
};获取页面文本行
使用 getTextLines() 获取当前页面的文本行集合。
tsx
const page = pdfReaderRef.current?._pdfDocument.pageAtIndex(0);
const lines = await page?.getTextLines();
console.log("Line count:", lines?.length ?? 0);每个文本行使用 CPDFTextLine 表示:
ts
type CPDFTextLine = {
pageIndex: number;
lineIndex: number;
location: number;
length: number;
rect: CPDFRectF;
};字段说明:
| 字段 | 说明 |
|---|---|
pageIndex | 行所在页面索引,从 0 开始 |
lineIndex | 行在当前页面文本行集合中的索引,从 0 开始 |
location | 行文本在页面文本中的起始字符位置 |
length | 行文本字符长度 |
rect | 行在页面坐标系中的矩形范围 |
获取指定行文本
使用 getTextByLine(line) 获取某个文本行对应的实际文本。
tsx
const page = pdfReaderRef.current?._pdfDocument.pageAtIndex(0);
const lines = await page?.getTextLines();
if (page && lines && lines.length > 0) {
const firstLineText = await page.getTextByLine(lines[0]);
console.log("First line:", firstLineText);
}传入的 line 应来自同一页面的 getTextLines() 返回结果。如果将其他页面的 line 传给当前页面,接口会返回错误。
完整示例
下面示例演示如何一次性读取整页文本、矩形区域文本、页面行数量和第一行文本。
tsx
import { useRef } from "react";
import { Button } from "react-native";
import { CPDFReaderView } from "@compdfkit_pdf_sdk/react_native";
export default function PageTextExample() {
const pdfReaderRef = useRef<CPDFReaderView>(null);
const extractPageText = async () => {
const page = pdfReaderRef.current?._pdfDocument.pageAtIndex(0);
if (!page) {
return;
}
const allText = await page.getAllText();
const rectText = await page.getTextInRect({
left: 40,
top: 120,
right: 300,
bottom: 180,
});
const lines = await page.getTextLines();
const firstLineText =
lines.length > 0 ? await page.getTextByLine(lines[0]) : "";
console.log("All text length:", allText.length);
console.log("Rectangle text:", rectText);
console.log("Line count:", lines.length);
console.log("First line:", firstLineText);
};
return (
<>
<CPDFReaderView
ref={pdfReaderRef}
document="file:///path/to/sample.pdf"
style={{ flex: 1 }}
/>
<Button title="Extract Text" onPress={extractPageText} />
</>
);
}注意事项
- 页面文本接口依赖已挂载的
CPDFReaderView,请在文档加载完成后调用。 - 扫描件或无文本层 PDF 可能返回空字符串或空数组。
getTextInRect(rect)和CPDFTextLine.rect使用页面坐标,不是屏幕坐标。getTextByLine(line)应使用同一页面getTextLines()返回的 line。- 如果需要搜索关键词,请继续使用现有
CPDFTextSearcher。