annotate tests/test_textsearch.py @ 46:7ee69f120f19 default tip

>>>>> tag v1.26.5+1 for changeset b74429b0f5c4
author Franz Glasner <fzglas.hg@dom66.de>
date Sat, 11 Oct 2025 17:17:30 +0200
parents 1d09e1dec1d9
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1 """
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2 "test_search1":
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3 Search for some text on a PDF page, and compare content of returned hit
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4 rectangle with the searched text.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6 "test_search2":
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
7 Text search with 'clip' parameter - clip rectangle contains two occurrences
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8 of searched text. Confirm search locations are inside clip.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9 """
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11 import os
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13 import pymupdf
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
15 scriptdir = os.path.abspath(os.path.dirname(__file__))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16 filename1 = os.path.join(scriptdir, "resources", "2.pdf")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17 filename2 = os.path.join(scriptdir, "resources", "github_sample.pdf")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18 filename3 = os.path.join(scriptdir, "resources", "text-find-ligatures.pdf")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21 def test_search1():
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22 doc = pymupdf.open(filename1)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23 page = doc[0]
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24 needle = "mupdf"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25 rlist = page.search_for(needle)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
26 assert rlist != []
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
27 for rect in rlist:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
28 assert needle in page.get_textbox(rect).lower()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
29
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
30
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
31 def test_search2():
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
32 doc = pymupdf.open(filename2)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
33 page = doc[0]
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
34 needle = "the"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
35 clip = pymupdf.Rect(40.5, 228.31436157226562, 346.5226135253906, 239.5338592529297)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
36 rl = page.search_for(needle, clip=clip)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
37 assert len(rl) == 2
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
38 for r in rl:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
39 assert r in clip
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
40
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
41
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
42 def test_search3():
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
43 """Ensure we find text whether or not it contains ligatures."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
44 doc = pymupdf.open(filename3)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
45 page = doc[0]
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
46 needle = "flag"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
47 hits = page.search_for(needle, flags=pymupdf.TEXTFLAGS_SEARCH)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
48 assert len(hits) == 2 # all occurrences found
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
49 hits = page.search_for(
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
50 needle, flags=pymupdf.TEXTFLAGS_SEARCH | pymupdf.TEXT_PRESERVE_LIGATURES
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
51 )
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
52 assert len(hits) == 1 # only found text without ligatures