Qt
Internal/Contributor docs for the Qt SDK. Note: These are NOT official API docs; those are found at https://doc.qt.io/
Loading...
Searching...
No Matches
fpdf_text.cpp
Go to the documentation of this file.
1// Copyright 2014 The PDFium Authors
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
6
7#include "public/fpdf_text.h"
8
9#include <algorithm>
10#include <memory>
11#include <vector>
12
13#include "build/build_config.h"
14#include "core/fpdfapi/font/cpdf_font.h"
15#include "core/fpdfapi/page/cpdf_page.h"
16#include "core/fpdfapi/page/cpdf_textobject.h"
17#include "core/fpdfdoc/cpdf_viewerpreferences.h"
18#include "core/fpdftext/cpdf_linkextract.h"
19#include "core/fpdftext/cpdf_textpage.h"
20#include "core/fpdftext/cpdf_textpagefind.h"
21#include "core/fxcrt/stl_util.h"
22#include "fpdfsdk/cpdfsdk_helpers.h"
23#include "third_party/base/check_op.h"
24#include "third_party/base/numerics/safe_conversions.h"
25
26namespace {
27
28constexpr size_t kBytesPerCharacter = sizeof(unsigned short);
29
30CPDF_TextPage* GetTextPageForValidIndex(FPDF_TEXTPAGE text_page, int index) {
31 if (!text_page || index < 0)
32 return nullptr;
33
35 return static_cast<size_t>(index) < textpage->size() ? textpage : nullptr;
36}
37
38} // namespace
39
40FPDF_EXPORT FPDF_TEXTPAGE FPDF_CALLCONV FPDFText_LoadPage(FPDF_PAGE page) {
41 CPDF_Page* pPDFPage = CPDFPageFromFPDFPage(page);
42 if (!pPDFPage)
43 return nullptr;
44
46 auto textpage =
47 std::make_unique<CPDF_TextPage>(pPDFPage, viewRef.IsDirectionR2L());
48
49 // Caller takes ownership.
50 return FPDFTextPageFromCPDFTextPage(textpage.release());
51}
52
53FPDF_EXPORT void FPDF_CALLCONV FPDFText_ClosePage(FPDF_TEXTPAGE text_page) {
54 // PDFium takes ownership.
55 std::unique_ptr<CPDF_TextPage> textpage_deleter(
56 CPDFTextPageFromFPDFTextPage(text_page));
57}
58
59FPDF_EXPORT int FPDF_CALLCONV FPDFText_CountChars(FPDF_TEXTPAGE text_page) {
61 return textpage ? textpage->CountChars() : -1;
62}
63
64FPDF_EXPORT unsigned int FPDF_CALLCONV
65FPDFText_GetUnicode(FPDF_TEXTPAGE text_page, int index) {
66 CPDF_TextPage* textpage = GetTextPageForValidIndex(text_page, index);
67 if (!textpage)
68 return 0;
69
70 const CPDF_TextPage::CharInfo& charinfo = textpage->GetCharInfo(index);
71 return charinfo.m_Unicode;
72}
73
75 int index) {
76 CPDF_TextPage* textpage = GetTextPageForValidIndex(text_page, index);
77 if (!textpage)
78 return -1;
79
80 const CPDF_TextPage::CharInfo& charinfo = textpage->GetCharInfo(index);
81 return charinfo.m_CharType == CPDF_TextPage::CharType::kGenerated ? 1 : 0;
82}
83
84FPDF_EXPORT int FPDF_CALLCONV FPDFText_IsHyphen(FPDF_TEXTPAGE text_page,
85 int index) {
86 CPDF_TextPage* textpage = GetTextPageForValidIndex(text_page, index);
87 if (!textpage) {
88 return -1;
89 }
90
91 const CPDF_TextPage::CharInfo& charinfo = textpage->GetCharInfo(index);
93}
94
96FPDFText_HasUnicodeMapError(FPDF_TEXTPAGE text_page, int index) {
97 CPDF_TextPage* textpage = GetTextPageForValidIndex(text_page, index);
98 if (!textpage)
99 return -1;
100
101 const CPDF_TextPage::CharInfo& charinfo = textpage->GetCharInfo(index);
103}
104
105FPDF_EXPORT double FPDF_CALLCONV FPDFText_GetFontSize(FPDF_TEXTPAGE text_page,
106 int index) {
107 CPDF_TextPage* textpage = GetTextPageForValidIndex(text_page, index);
108 if (!textpage)
109 return 0;
110
111 return textpage->GetCharFontSize(index);
112}
113
114FPDF_EXPORT unsigned long FPDF_CALLCONV
115FPDFText_GetFontInfo(FPDF_TEXTPAGE text_page,
116 int index,
117 void* buffer,
118 unsigned long buflen,
119 int* flags) {
120 CPDF_TextPage* textpage = GetTextPageForValidIndex(text_page, index);
121 if (!textpage)
122 return 0;
123
124 const CPDF_TextPage::CharInfo& charinfo = textpage->GetCharInfo(index);
125 if (!charinfo.m_pTextObj)
126 return 0;
127
128 RetainPtr<CPDF_Font> font = charinfo.m_pTextObj->GetFont();
129 if (flags)
130 *flags = font->GetFontFlags();
131
132 ByteString basefont = font->GetBaseFontName();
133 const unsigned long length =
134 pdfium::base::checked_cast<unsigned long>(basefont.GetLength() + 1);
135 if (buffer && buflen >= length)
136 memcpy(buffer, basefont.c_str(), length);
137
138 return length;
139}
140
142 int index) {
143 CPDF_TextPage* textpage = GetTextPageForValidIndex(text_page, index);
144 if (!textpage)
145 return -1;
146
147 const CPDF_TextPage::CharInfo& charinfo = textpage->GetCharInfo(index);
148 if (!charinfo.m_pTextObj)
149 return -1;
150
151 return charinfo.m_pTextObj->GetFont()->GetFontWeight();
152}
153
154FPDF_EXPORT FPDF_TEXT_RENDERMODE FPDF_CALLCONV
155FPDFText_GetTextRenderMode(FPDF_TEXTPAGE text_page, int index) {
156 CPDF_TextPage* textpage = GetTextPageForValidIndex(text_page, index);
157 if (!textpage)
158 return FPDF_TEXTRENDERMODE_UNKNOWN;
159
160 const CPDF_TextPage::CharInfo& charinfo = textpage->GetCharInfo(index);
161 if (!charinfo.m_pTextObj)
162 return FPDF_TEXTRENDERMODE_UNKNOWN;
163
164 return static_cast<FPDF_TEXT_RENDERMODE>(
165 charinfo.m_pTextObj->GetTextRenderMode());
166}
167
169FPDFText_GetFillColor(FPDF_TEXTPAGE text_page,
170 int index,
171 unsigned int* R,
172 unsigned int* G,
173 unsigned int* B,
174 unsigned int* A) {
175 CPDF_TextPage* textpage = GetTextPageForValidIndex(text_page, index);
176 if (!textpage || !R || !G || !B || !A)
177 return false;
178
179 const CPDF_TextPage::CharInfo& charinfo = textpage->GetCharInfo(index);
180 if (!charinfo.m_pTextObj)
181 return false;
182
183 FX_COLORREF fill_color = charinfo.m_pTextObj->color_state().GetFillColorRef();
184 *R = FXSYS_GetRValue(fill_color);
185 *G = FXSYS_GetGValue(fill_color);
186 *B = FXSYS_GetBValue(fill_color);
187 *A = FXSYS_GetUnsignedAlpha(
188 charinfo.m_pTextObj->general_state().GetFillAlpha());
189 return true;
190}
191
193FPDFText_GetStrokeColor(FPDF_TEXTPAGE text_page,
194 int index,
195 unsigned int* R,
196 unsigned int* G,
197 unsigned int* B,
198 unsigned int* A) {
199 CPDF_TextPage* textpage = GetTextPageForValidIndex(text_page, index);
200 if (!textpage || !R || !G || !B || !A)
201 return false;
202
203 const CPDF_TextPage::CharInfo& charinfo = textpage->GetCharInfo(index);
204 if (!charinfo.m_pTextObj)
205 return false;
206
207 FX_COLORREF stroke_color =
208 charinfo.m_pTextObj->color_state().GetStrokeColorRef();
209 *R = FXSYS_GetRValue(stroke_color);
210 *G = FXSYS_GetGValue(stroke_color);
211 *B = FXSYS_GetBValue(stroke_color);
212 *A = FXSYS_GetUnsignedAlpha(
213 charinfo.m_pTextObj->general_state().GetStrokeAlpha());
214 return true;
215}
216
217FPDF_EXPORT float FPDF_CALLCONV FPDFText_GetCharAngle(FPDF_TEXTPAGE text_page,
218 int index) {
219 CPDF_TextPage* textpage = GetTextPageForValidIndex(text_page, index);
220 if (!textpage)
221 return -1.0f;
222
223 const CPDF_TextPage::CharInfo& charinfo = textpage->GetCharInfo(index);
224 // On the left is our current Matrix and on the right a generic rotation
225 // matrix for our coordinate space.
226 // | a b 0 | | cos(t) -sin(t) 0 |
227 // | c d 0 | | sin(t) cos(t) 0 |
228 // | e f 1 | | 0 0 1 |
229 // Calculate the angle of the vector
230 float angle = atan2f(charinfo.m_Matrix.c, charinfo.m_Matrix.a);
231 if (angle < 0)
232 angle = 2 * FXSYS_PI + angle;
233
234 return angle;
235}
236
237FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV FPDFText_GetCharBox(FPDF_TEXTPAGE text_page,
238 int index,
239 double* left,
240 double* right,
241 double* bottom,
242 double* top) {
243 if (!left || !right || !bottom || !top)
244 return false;
245
246 CPDF_TextPage* textpage = GetTextPageForValidIndex(text_page, index);
247 if (!textpage)
248 return false;
249
250 const CPDF_TextPage::CharInfo& charinfo = textpage->GetCharInfo(index);
251 *left = charinfo.m_CharBox.left;
252 *right = charinfo.m_CharBox.right;
253 *bottom = charinfo.m_CharBox.bottom;
254 *top = charinfo.m_CharBox.top;
255 return true;
256}
257
259FPDFText_GetLooseCharBox(FPDF_TEXTPAGE text_page, int index, FS_RECTF* rect) {
260 if (!rect)
261 return false;
262
263 CPDF_TextPage* textpage = GetTextPageForValidIndex(text_page, index);
264 if (!textpage)
265 return false;
266
267 *rect = FSRectFFromCFXFloatRect(textpage->GetCharLooseBounds(index));
268 return true;
269}
270
271FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV FPDFText_GetMatrix(FPDF_TEXTPAGE text_page,
272 int index,
273 FS_MATRIX* matrix) {
274 if (!matrix)
275 return false;
276
277 CPDF_TextPage* textpage = GetTextPageForValidIndex(text_page, index);
278 if (!textpage)
279 return false;
280
281 const CPDF_TextPage::CharInfo& charinfo = textpage->GetCharInfo(index);
282 *matrix = FSMatrixFromCFXMatrix(charinfo.m_Matrix);
283 return true;
284}
285
287FPDFText_GetCharOrigin(FPDF_TEXTPAGE text_page,
288 int index,
289 double* x,
290 double* y) {
291 CPDF_TextPage* textpage = GetTextPageForValidIndex(text_page, index);
292 if (!textpage)
293 return false;
294
295 const CPDF_TextPage::CharInfo& charinfo = textpage->GetCharInfo(index);
296 *x = charinfo.m_Origin.x;
297 *y = charinfo.m_Origin.y;
298 return true;
299}
300
302FPDFText_GetCharIndexAtPos(FPDF_TEXTPAGE text_page,
303 double x,
304 double y,
305 double xTolerance,
306 double yTolerance) {
308 if (!textpage)
309 return -3;
310
311 return textpage->GetIndexAtPos(
312 CFX_PointF(static_cast<float>(x), static_cast<float>(y)),
313 CFX_SizeF(static_cast<float>(xTolerance),
314 static_cast<float>(yTolerance)));
315}
316
318 int start_index,
319 int char_count,
320 unsigned short* result) {
322 if (!textpage || start_index < 0 || char_count < 0 || !result)
323 return 0;
324
325 int char_available = textpage->CountChars() - start_index;
326 if (char_available <= 0)
327 return 0;
328
329 char_count = std::min(char_count, char_available);
330 if (char_count == 0) {
331 // Writing out "", which has a character count of 1 due to the NUL.
332 *result = '\0';
333 return 1;
334 }
335
336 WideString str = textpage->GetPageText(start_index, char_count);
337
338 if (str.GetLength() > static_cast<size_t>(char_count))
339 str = str.First(static_cast<size_t>(char_count));
340
341 ByteString byte_str = str.ToUTF16LE();
342 size_t byte_str_len = byte_str.GetLength();
343 size_t ret_count = byte_str_len / kBytesPerCharacter;
344
345 // +1 to account for the NUL terminator.
346 DCHECK_LE(ret_count, static_cast<size_t>(char_count) + 1);
347
348 memcpy(result, byte_str.c_str(), byte_str_len);
349 return pdfium::base::checked_cast<int>(ret_count);
350}
351
353 int start,
354 int count) {
356 return textpage ? textpage->CountRects(start, count) : 0;
357}
358
359FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV FPDFText_GetRect(FPDF_TEXTPAGE text_page,
360 int rect_index,
361 double* left,
362 double* top,
363 double* right,
364 double* bottom) {
366 if (!textpage)
367 return false;
368
369 CFX_FloatRect rect;
370 bool result = textpage->GetRect(rect_index, &rect);
371
372 *left = rect.left;
373 *top = rect.top;
374 *right = rect.right;
375 *bottom = rect.bottom;
376 return result;
377}
378
380 double left,
381 double top,
382 double right,
383 double bottom,
384 unsigned short* buffer,
385 int buflen) {
387 if (!textpage)
388 return 0;
389
390 CFX_FloatRect rect((float)left, (float)bottom, (float)right, (float)top);
391 WideString str = textpage->GetTextByRect(rect);
392
393 if (buflen <= 0 || !buffer)
394 return pdfium::base::checked_cast<int>(str.GetLength());
395
396 ByteString cbUTF16Str = str.ToUTF16LE();
397 int len = pdfium::base::checked_cast<int>(cbUTF16Str.GetLength()) /
398 sizeof(unsigned short);
399 int size = buflen > len ? len : buflen;
400 memcpy(buffer, cbUTF16Str.c_str(), size * sizeof(unsigned short));
401 cbUTF16Str.ReleaseBuffer(size * sizeof(unsigned short));
402 return size;
403}
404
405FPDF_EXPORT FPDF_SCHHANDLE FPDF_CALLCONV
406FPDFText_FindStart(FPDF_TEXTPAGE text_page,
407 FPDF_WIDESTRING findwhat,
408 unsigned long flags,
409 int start_index) {
411 if (!textpage)
412 return nullptr;
413
414 CPDF_TextPageFind::Options options;
415 options.bMatchCase = !!(flags & FPDF_MATCHCASE);
416 options.bMatchWholeWord = !!(flags & FPDF_MATCHWHOLEWORD);
417 options.bConsecutive = !!(flags & FPDF_CONSECUTIVE);
418 auto find = CPDF_TextPageFind::Create(
419 textpage, WideStringFromFPDFWideString(findwhat), options,
420 start_index >= 0 ? absl::optional<size_t>(start_index) : absl::nullopt);
421
422 // Caller takes ownership.
423 return FPDFSchHandleFromCPDFTextPageFind(find.release());
424}
425
426FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV FPDFText_FindNext(FPDF_SCHHANDLE handle) {
427 if (!handle)
428 return false;
429
431 return textpageFind->FindNext();
432}
433
434FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV FPDFText_FindPrev(FPDF_SCHHANDLE handle) {
435 if (!handle)
436 return false;
437
439 return textpageFind->FindPrev();
440}
441
443FPDFText_GetSchResultIndex(FPDF_SCHHANDLE handle) {
444 if (!handle)
445 return 0;
446
448 return textpageFind->GetCurOrder();
449}
450
452 if (!handle)
453 return 0;
454
456 return textpageFind->GetMatchedCount();
457}
458
459FPDF_EXPORT void FPDF_CALLCONV FPDFText_FindClose(FPDF_SCHHANDLE handle) {
460 if (!handle)
461 return;
462
463 // Take ownership back from caller and destroy.
464 std::unique_ptr<CPDF_TextPageFind> textpageFind(
465 CPDFTextPageFindFromFPDFSchHandle(handle));
466}
467
468// web link
469FPDF_EXPORT FPDF_PAGELINK FPDF_CALLCONV
470FPDFLink_LoadWebLinks(FPDF_TEXTPAGE text_page) {
472 if (!textpage)
473 return nullptr;
474
475 auto pagelink = std::make_unique<CPDF_LinkExtract>(textpage);
476 pagelink->ExtractLinks();
477
478 // Caller takes ownership.
479 return FPDFPageLinkFromCPDFLinkExtract(pagelink.release());
480}
481
483 if (!link_page)
484 return 0;
485
487 return pdfium::base::checked_cast<int>(pageLink->CountLinks());
488}
489
490FPDF_EXPORT int FPDF_CALLCONV FPDFLink_GetURL(FPDF_PAGELINK link_page,
491 int link_index,
492 unsigned short* buffer,
493 int buflen) {
494 WideString wsUrl(L"");
495 if (link_page && link_index >= 0) {
497 wsUrl = pageLink->GetURL(link_index);
498 }
499 ByteString cbUTF16URL = wsUrl.ToUTF16LE();
500 int required = pdfium::base::checked_cast<int>(cbUTF16URL.GetLength() /
501 sizeof(unsigned short));
502 if (!buffer || buflen <= 0)
503 return required;
504
505 int size = std::min(required, buflen);
506 if (size > 0) {
507 int buf_size = size * sizeof(unsigned short);
508 memcpy(buffer, cbUTF16URL.c_str(), buf_size);
509 }
510 return size;
511}
512
514 int link_index) {
515 if (!link_page || link_index < 0)
516 return 0;
517
519 return fxcrt::CollectionSize<int>(pageLink->GetRects(link_index));
520}
521
522FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV FPDFLink_GetRect(FPDF_PAGELINK link_page,
523 int link_index,
524 int rect_index,
525 double* left,
526 double* top,
527 double* right,
528 double* bottom) {
529 if (!link_page || link_index < 0 || rect_index < 0)
530 return false;
531
533 std::vector<CFX_FloatRect> rectArray = pageLink->GetRects(link_index);
534 if (rect_index >= fxcrt::CollectionSize<int>(rectArray))
535 return false;
536
537 *left = rectArray[rect_index].left;
538 *right = rectArray[rect_index].right;
539 *top = rectArray[rect_index].top;
540 *bottom = rectArray[rect_index].bottom;
541 return true;
542}
543
545FPDFLink_GetTextRange(FPDF_PAGELINK link_page,
546 int link_index,
547 int* start_char_index,
548 int* char_count) {
549 if (!link_page || link_index < 0)
550 return false;
551
553 auto maybe_range = page_link->GetTextRange(link_index);
554 if (!maybe_range.has_value())
555 return false;
556
557 *start_char_index =
558 pdfium::base::checked_cast<int>(maybe_range.value().m_Start);
559 *char_count = pdfium::base::checked_cast<int>(maybe_range.value().m_Count);
560 return true;
561}
562
563FPDF_EXPORT void FPDF_CALLCONV FPDFLink_CloseWebLinks(FPDF_PAGELINK link_page) {
564 delete CPDFLinkExtractFromFPDFPageLink(link_page);
565}
constexpr CFX_FloatRect(float l, float b, float r, float t)
CPDF_Document * GetDocument() const override
Definition cpdf_page.cpp:51
bool GetRect(int rectIndex, CFX_FloatRect *pRect) const
int CountChars() const
WideString GetTextByRect(const CFX_FloatRect &rect) const
int GetIndexAtPos(const CFX_PointF &point, const CFX_SizeF &tolerance) const
int CountRects(int start, int nCount)
WideString GetPageText(int start, int count) const
CPDF_ViewerPreferences(const CPDF_Document *pDoc)
const char * c_str() const
Definition bytestring.h:76
WideString(const wchar_t *ptr)
ByteString ToUTF16LE() const
CPDF_TextPageFind * CPDFTextPageFindFromFPDFSchHandle(FPDF_SCHHANDLE handle)
CPDF_TextPage * CPDFTextPageFromFPDFTextPage(FPDF_TEXTPAGE page)
FS_MATRIX FSMatrixFromCFXMatrix(const CFX_Matrix &matrix)
CPDF_Page * CPDFPageFromFPDFPage(FPDF_PAGE page)
CPDF_LinkExtract * CPDFLinkExtractFromFPDFPageLink(FPDF_PAGELINK link)
FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV FPDFText_GetStrokeColor(FPDF_TEXTPAGE text_page, int index, unsigned int *R, unsigned int *G, unsigned int *B, unsigned int *A)
FPDF_EXPORT int FPDF_CALLCONV FPDFText_GetSchResultIndex(FPDF_SCHHANDLE handle)
FPDF_EXPORT int FPDF_CALLCONV FPDFLink_GetURL(FPDF_PAGELINK link_page, int link_index, unsigned short *buffer, int buflen)
FPDF_EXPORT int FPDF_CALLCONV FPDFText_GetText(FPDF_TEXTPAGE page, int start_index, int char_count, unsigned short *result)
FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV FPDFLink_GetTextRange(FPDF_PAGELINK link_page, int link_index, int *start_char_index, int *char_count)
FPDF_EXPORT int FPDF_CALLCONV FPDFText_IsGenerated(FPDF_TEXTPAGE text_page, int index)
Definition fpdf_text.cpp:74
FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV FPDFText_GetCharOrigin(FPDF_TEXTPAGE text_page, int index, double *x, double *y)
FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV FPDFText_GetFillColor(FPDF_TEXTPAGE text_page, int index, unsigned int *R, unsigned int *G, unsigned int *B, unsigned int *A)
FPDF_EXPORT int FPDF_CALLCONV FPDFText_IsHyphen(FPDF_TEXTPAGE text_page, int index)
Definition fpdf_text.cpp:84
FPDF_EXPORT int FPDF_CALLCONV FPDFText_GetCharIndexAtPos(FPDF_TEXTPAGE text_page, double x, double y, double xTolerance, double yTolerance)
FPDF_EXPORT void FPDF_CALLCONV FPDFLink_CloseWebLinks(FPDF_PAGELINK link_page)
FPDF_EXPORT float FPDF_CALLCONV FPDFText_GetCharAngle(FPDF_TEXTPAGE text_page, int index)
FPDF_EXPORT int FPDF_CALLCONV FPDFText_HasUnicodeMapError(FPDF_TEXTPAGE text_page, int index)
Definition fpdf_text.cpp:96
FPDF_EXPORT int FPDF_CALLCONV FPDFText_GetBoundedText(FPDF_TEXTPAGE text_page, double left, double top, double right, double bottom, unsigned short *buffer, int buflen)
FPDF_EXPORT int FPDF_CALLCONV FPDFLink_CountRects(FPDF_PAGELINK link_page, int link_index)
FPDF_EXPORT int FPDF_CALLCONV FPDFText_GetFontWeight(FPDF_TEXTPAGE text_page, int index)
FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV FPDFText_GetLooseCharBox(FPDF_TEXTPAGE text_page, int index, FS_RECTF *rect)
FPDF_EXPORT double FPDF_CALLCONV FPDFText_GetFontSize(FPDF_TEXTPAGE text_page, int index)
FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV FPDFText_GetCharBox(FPDF_TEXTPAGE text_page, int index, double *left, double *right, double *bottom, double *top)
FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV FPDFLink_GetRect(FPDF_PAGELINK link_page, int link_index, int rect_index, double *left, double *top, double *right, double *bottom)
FPDF_EXPORT void FPDF_CALLCONV FPDFText_FindClose(FPDF_SCHHANDLE handle)
FPDF_EXPORT FPDF_TEXT_RENDERMODE FPDF_CALLCONV FPDFText_GetTextRenderMode(FPDF_TEXTPAGE text_page, int index)
FPDF_EXPORT int FPDF_CALLCONV FPDFText_CountRects(FPDF_TEXTPAGE text_page, int start, int count)
FPDF_EXPORT int FPDF_CALLCONV FPDFText_CountChars(FPDF_TEXTPAGE text_page)
Definition fpdf_text.cpp:59
FPDF_EXPORT FPDF_TEXTPAGE FPDF_CALLCONV FPDFText_LoadPage(FPDF_PAGE page)
Definition fpdf_text.cpp:40
FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV FPDFText_FindPrev(FPDF_SCHHANDLE handle)
FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV FPDFText_GetMatrix(FPDF_TEXTPAGE text_page, int index, FS_MATRIX *matrix)
FPDF_EXPORT void FPDF_CALLCONV FPDFText_ClosePage(FPDF_TEXTPAGE text_page)
Definition fpdf_text.cpp:53
FPDF_EXPORT FPDF_PAGELINK FPDF_CALLCONV FPDFLink_LoadWebLinks(FPDF_TEXTPAGE text_page)
FPDF_EXPORT unsigned long FPDF_CALLCONV FPDFText_GetFontInfo(FPDF_TEXTPAGE text_page, int index, void *buffer, unsigned long buflen, int *flags)
FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV FPDFText_GetRect(FPDF_TEXTPAGE text_page, int rect_index, double *left, double *top, double *right, double *bottom)
FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV FPDFText_FindNext(FPDF_SCHHANDLE handle)
FPDF_EXPORT FPDF_SCHHANDLE FPDF_CALLCONV FPDFText_FindStart(FPDF_TEXTPAGE text_page, FPDF_WIDESTRING findwhat, unsigned long flags, int start_index)
FPDF_EXPORT unsigned int FPDF_CALLCONV FPDFText_GetUnicode(FPDF_TEXTPAGE text_page, int index)
Definition fpdf_text.cpp:65
FPDF_EXPORT int FPDF_CALLCONV FPDFText_GetSchCount(FPDF_SCHHANDLE handle)
FPDF_EXPORT int FPDF_CALLCONV FPDFLink_CountWebLinks(FPDF_PAGELINK link_page)
#define FPDF_MATCHWHOLEWORD
Definition fpdf_text.h:487
#define FPDF_CONSECUTIVE
Definition fpdf_text.h:489
#define FPDF_MATCHCASE
Definition fpdf_text.h:485
#define FPDF_CALLCONV
Definition fpdfview.h:227
#define FPDF_EXPORT
Definition fpdfview.h:221
constexpr uint8_t FXSYS_GetRValue(uint32_t bgr)
Definition fx_dib.h:73
constexpr uint8_t FXSYS_GetGValue(uint32_t bgr)
Definition fx_dib.h:77
constexpr uint8_t FXSYS_GetBValue(uint32_t bgr)
Definition fx_dib.h:81
#define FXSYS_PI
Definition fx_system.h:43