Skip to content
DemoAPI 参考文档FAQ
全新发布

PDF SDK 与 AI 文档处理

在 GitHub 获取完整的私有化部署SDK 包及 AI 智能文档处理能力,一键部署,快速构建您的文档处理工作流。

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