UNPKG

@compdfkit_pdf_sdk/react_native

Version:

ComPDFKit for React Native is a comprehensive SDK that allows you to quickly add PDF functionality to Android, iOS, and React Native applications.

143 lines (131 loc) 5.44 kB
/** * Copyright © 2014-2026 PDF Technologies, Inc. All Rights Reserved. * * THIS SOURCE CODE AND ANY ACCOMPANYING DOCUMENTATION ARE PROTECTED BY INTERNATIONAL COPYRIGHT LAW * AND MAY NOT BE RESOLD OR REDISTRIBUTED. USAGE IS BOUND TO THE ComPDFKit LICENSE AGREEMENT. * UNAUTHORIZED REPRODUCTION OR DISTRIBUTION IS SUBJECT TO CIVIL AND CRIMINAL PENALTIES. * This notice may not be removed from this file. */ import { findNodeHandle, NativeModules } from "react-native"; import { CPDFTextRange } from "./CPDFTextRange"; import { CPDFSearchOptions } from "./CPDFSearchOptions"; const { CPDFViewManager } = NativeModules; export class CPDFTextSearcher { private _viewerRef: any; constructor(viewerRef: any) { this._viewerRef = viewerRef; } /** * Searches for the specified text in the current PDF document. * * This method performs a text search in the currently loaded PDF document * and returns an array of results. Each result is represented by a `CPDFTextRange` * object containing the page index, location, length, and internal range index. * * @param {string} searchText - The text string to search for in the document. * @param {CPDFSearchOptions} options - Optional search parameters such as * case sensitivity, whole word match, etc. * * @example * const textSearcher = pdfReaderRef.current?._pdfDocument.textSearcher(); * const results = await textSearcher.searchText("example", new CPDFSearchOptions()); * * if (results.length > 0) { * const resultText = await textSearcher.getText(results[0]); * } * * @returns {Promise<CPDFTextRange[]>} A promise that resolves to an array of * `CPDFTextRange` objects representing the matched text results. */ searchText = async (searchText: string, options : CPDFSearchOptions) : Promise<CPDFTextRange[]> => { const tag = findNodeHandle(this._viewerRef); if (tag) { try { const jsonArray = await CPDFViewManager.searchText(tag, searchText, options); return jsonArray.map((item: { pageIndex: number, location: number, length: number, textRangeIndex: number }) => ( new CPDFTextRange(item.pageIndex, item.location, item.length, item.textRangeIndex) )); } catch (e) { console.error("ComPDFKitRN", "searchText error:", e); } } return Promise.resolve([]); } /** * Selects a specific search result and highlights it in the PDF viewer. * * This method is typically used when a user taps on a search result or navigates * through search results using next/previous controls. * * @param {CPDFTextRange} range - The text range to select and highlight. * * @example * const results = await textSearcher.searchText("example", options); * if (results.length > 0) { * await textSearcher.selection(results[0]); * } * * @returns {Promise<void>} A promise that resolves once the selection is applied. */ selection = (range : CPDFTextRange): Promise<void> => { const tag = findNodeHandle(this._viewerRef); if (tag != null) { try { console.log('ComPDFKitRN', 'Setting selection:', range); return CPDFViewManager.selection(tag, range.toJson()); } catch (e) { // Handle error if necessary return Promise.resolve(); } } return Promise.resolve(); } /** * Clears all search results and removes any highlights from the PDF viewer. * * This is typically called when closing the search UI or performing a new search. * * @example * await textSearcher.clearSearch(); * * @returns {Promise<void>} A promise that resolves when the search state is cleared. */ clearSearch = (): Promise<void> => { const tag = findNodeHandle(this._viewerRef); if (tag != null) { try { return CPDFViewManager.clearSearch(tag); } catch (e) { // Handle error if necessary return Promise.resolve(); } } return Promise.resolve(); } /** * Retrieves the text content from a specific text range. * * Can be used to extract the original matched text or additional surrounding content * by using the `expanded()` method on a `CPDFTextRange`. * * @param {CPDFTextRange} range - The text range from which to extract text. * * @example * const results = await textSearcher.searchText("example", options); * const originalText = await textSearcher.getText(results[0]); * const expandedText = await textSearcher.getText(results[0].expanded(10, 10)); * * @returns {Promise<string>} A promise that resolves with the extracted text content. */ getText = (range : CPDFTextRange): Promise<string> => { const tag = findNodeHandle(this._viewerRef); if (tag != null) { try { return CPDFViewManager.getSearchText(tag, range.pageIndex, range.location, range.length); } catch (e) { return Promise.resolve(''); } } return Promise.resolve(''); } }