annotate tests/test_textbox.py @ 31:baeb8bdeff3a

Fortify sources using _FORTIFY_SOURCE=3 and also apply -fno-delete-null-pointer-checks. See: https://github.com/ossf/wg-best-practices-os-developers/issues/659.
author Franz Glasner <fzglas.hg@dom66.de>
date Sun, 21 Sep 2025 13:11:30 +0200
parents 1d09e1dec1d9
children a6bc019ac0b2
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 Fill a given text in a rectangle on some PDF page using
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3 1. TextWriter object
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4 2. Basic text output
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 Check text is indeed contained in given rectangle.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
7 """
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8 import pymupdf
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 # codespell:ignore-begin
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11 text = """Der Kleine Schwertwal (Pseudorca crassidens), auch bekannt als Unechter oder Schwarzer Schwertwal, ist eine Art der Delfine (Delphinidae) und der einzige rezente Vertreter der Gattung Pseudorca.
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 Er ähnelt dem Orca in Form und Proportionen, ist aber einfarbig schwarz und mit einer Maximallänge von etwa sechs Metern deutlich kleiner.
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 Kleine Schwertwale bilden Schulen von durchschnittlich zehn bis fünfzig Tieren, wobei sie sich auch mit anderen Delfinen vergesellschaften und sich meistens abseits der Küsten aufhalten.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17 Sie sind in allen Ozeanen gemäßigter, subtropischer und tropischer Breiten beheimatet, sind jedoch vor allem in wärmeren Jahreszeiten auch bis in die gemäßigte bis subpolare Zone südlich der Südspitze Südamerikas, vor Nordeuropa und bis vor Kanada anzutreffen."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18 # codespell:ignore-end
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 def test_textbox1():
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21 """Use TextWriter for text insertion."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22 doc = pymupdf.open()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23 page = doc.new_page()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24 rect = pymupdf.Rect(50, 50, 400, 400)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25 blue = (0, 0, 1)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
26 tw = pymupdf.TextWriter(page.rect, color=blue)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
27 tw.fill_textbox(
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
28 rect,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
29 text,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
30 align=pymupdf.TEXT_ALIGN_LEFT,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
31 fontsize=12,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
32 )
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
33 tw.write_text(page, morph=(rect.tl, pymupdf.Matrix(1, 1)))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
34 # check text containment
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
35 assert page.get_text() == page.get_text(clip=rect)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
36 page.write_text(writers=tw)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
37
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
38
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
39 def test_textbox2():
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
40 """Use basic text insertion."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
41 doc = pymupdf.open()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
42 ocg = doc.add_ocg("ocg1")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
43 page = doc.new_page()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
44 rect = pymupdf.Rect(50, 50, 400, 400)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
45 blue = pymupdf.utils.getColor("lightblue")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
46 red = pymupdf.utils.getColorHSV("red")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
47 page.insert_textbox(
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
48 rect,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
49 text,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
50 align=pymupdf.TEXT_ALIGN_LEFT,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
51 fontsize=12,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
52 color=blue,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
53 oc=ocg,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
54 )
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
55 # check text containment
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
56 assert page.get_text() == page.get_text(clip=rect)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
57
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
58
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
59 def test_textbox3():
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
60 """Use TextWriter for text insertion."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
61 doc = pymupdf.open()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
62 page = doc.new_page()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
63 font = pymupdf.Font("cjk")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
64 rect = pymupdf.Rect(50, 50, 400, 400)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
65 blue = (0, 0, 1)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
66 tw = pymupdf.TextWriter(page.rect, color=blue)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
67 tw.fill_textbox(
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
68 rect,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
69 text,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
70 align=pymupdf.TEXT_ALIGN_LEFT,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
71 font=font,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
72 fontsize=12,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
73 right_to_left=True,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
74 )
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
75 tw.write_text(page, morph=(rect.tl, pymupdf.Matrix(1, 1)))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
76 # check text containment
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
77 assert page.get_text() == page.get_text(clip=rect)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
78 doc.scrub()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
79 doc.subset_fonts()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
80
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
81
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
82 def test_textbox4():
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
83 """Use TextWriter for text insertion."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
84 doc = pymupdf.open()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
85 ocg = doc.add_ocg("ocg1")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
86 page = doc.new_page()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
87 rect = pymupdf.Rect(50, 50, 400, 600)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
88 blue = (0, 0, 1)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
89 tw = pymupdf.TextWriter(page.rect, color=blue)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
90 tw.fill_textbox(
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
91 rect,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
92 text,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
93 align=pymupdf.TEXT_ALIGN_LEFT,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
94 fontsize=12,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
95 font=pymupdf.Font("cour"),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
96 right_to_left=True,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
97 )
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
98 tw.write_text(page, oc=ocg, morph=(rect.tl, pymupdf.Matrix(1, 1)))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
99 # check text containment
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
100 assert page.get_text() == page.get_text(clip=rect)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
101
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
102
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
103 def test_textbox5():
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
104 """Using basic text insertion."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
105 small_glyph_heights0 = pymupdf.TOOLS.set_small_glyph_heights()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
106 pymupdf.TOOLS.set_small_glyph_heights(True)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
107 try:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
108 doc = pymupdf.open()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
109 page = doc.new_page()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
110 r = pymupdf.Rect(100, 100, 150, 150)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
111 text = "words and words and words and more words..."
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
112 rc = -1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
113 fontsize = 12
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
114 page.draw_rect(r)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
115 while rc < 0:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
116 rc = page.insert_textbox(
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
117 r,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
118 text,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
119 fontsize=fontsize,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
120 align=pymupdf.TEXT_ALIGN_JUSTIFY,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
121 )
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
122 fontsize -= 0.5
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
123
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
124 blocks = page.get_text("blocks")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
125 bbox = pymupdf.Rect(blocks[0][:4])
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
126 assert bbox in r
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
127 finally:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
128 # Must restore small_glyph_heights, otherwise other tests can fail.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
129 pymupdf.TOOLS.set_small_glyph_heights(small_glyph_heights0)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
130
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
131
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
132 def test_2637():
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
133 """Ensure correct calculation of fitting text."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
134 doc = pymupdf.open()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
135 page = doc.new_page()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
136 text = (
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
137 "The morning sun painted the sky with hues of orange and pink. "
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
138 "Birds chirped harmoniously, greeting the new day. "
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
139 "Nature awakened, filling the air with life and promise."
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
140 )
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
141 rect = pymupdf.Rect(50, 50, 500, 280)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
142 fontsize = 50
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
143 rc = -1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
144 while rc < 0: # look for largest font size that makes the text fit
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
145 rc = page.insert_textbox(rect, text, fontname="hebo", fontsize=fontsize)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
146 fontsize -= 1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
147
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
148 # confirm text won't lap outside rect
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
149 blocks = page.get_text("blocks")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
150 bbox = pymupdf.Rect(blocks[0][:4])
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
151 assert bbox in rect
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
152
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
153
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
154 def test_htmlbox1():
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
155 """Write HTML-styled text into a rect with different rotations.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
156
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
157 The text is styled and contains a link.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
158 Then extract the text again, and
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
159 - assert that text was written in the 4 different angles,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
160 - assert that text properties are correct (bold, italic, color),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
161 - assert that the link has been correctly inserted.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
162
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
163 We try to insert into a rectangle that is too small, setting
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
164 scale=False and confirming we have a negative return code.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
165 """
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
166 if not hasattr(pymupdf, "mupdf"):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
167 print("'test_htmlbox1' not executed in classic.")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
168 return
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
169
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
170 rect = pymupdf.Rect(100, 100, 200, 200) # this only works with scale=True
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
171
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
172 base_text = """Lorem ipsum dolor sit amet, consectetur adipisici elit, sed eiusmod tempor incidunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquid ex ea commodi consequat. Quis aute iure reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint obcaecat cupiditat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
173
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
174 text = """Lorem ipsum dolor sit amet, consectetur adipisici elit, sed eiusmod tempor incidunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation <b>ullamco</b> <i>laboris</i> nisi ut aliquid ex ea commodi consequat. Quis aute iure reprehenderit in <span style="color: #0f0;font-weight:bold;">voluptate</span> velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint obcaecat cupiditat non proident, sunt in culpa qui <a href="https://www.artifex.com">officia</a> deserunt mollit anim id est laborum."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
175
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
176 doc = pymupdf.Document()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
177
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
178 for rot in (0, 90, 180, 270):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
179 wdirs = ((1, 0), (0, -1), (-1, 0), (0, 1)) # all writing directions
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
180 page = doc.new_page()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
181 spare_height, scale = page.insert_htmlbox(rect, text, rotate=rot, scale_low=1)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
182 assert spare_height < 0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
183 assert scale == 1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
184 spare_height, scale = page.insert_htmlbox(rect, text, rotate=rot, scale_low=0)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
185 assert spare_height == 0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
186 assert 0 < scale < 1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
187 page = doc.reload_page(page)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
188 link = page.get_links()[0] # extracts the links on the page
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
189
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
190 assert link["uri"] == "https://www.artifex.com"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
191
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
192 # Assert plain text is complete.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
193 # We must remove line breaks and any ligatures for this.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
194 assert base_text == page.get_text(flags=0)[:-1].replace("\n", " ")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
195
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
196 encounters = 0 # counts the words with selected properties
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
197 for b in page.get_text("dict")["blocks"]:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
198 for l in b["lines"]:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
199 wdir = l["dir"] # writing direction
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
200 assert wdir == wdirs[page.number]
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
201 for s in l["spans"]:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
202 stext = s["text"]
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
203 color = pymupdf.sRGB_to_pdf(s["color"])
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
204 bold = bool(s["flags"] & 16)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
205 italic = bool(s["flags"] & 2)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
206 if stext in ("ullamco", "laboris", "voluptate"):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
207 encounters += 1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
208 if stext == "ullamco":
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
209 assert bold is True
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
210 assert italic is False
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
211 assert color == pymupdf.pdfcolor["black"]
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
212 elif stext == "laboris":
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
213 assert bold is False
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
214 assert italic is True
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
215 assert color == pymupdf.pdfcolor["black"]
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
216 elif stext == "voluptate":
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
217 assert bold is True
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
218 assert italic is False
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
219 assert color == pymupdf.pdfcolor["green"]
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
220 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
221 assert bold is False
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
222 assert italic is False
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
223 # all 3 special special words were encountered
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
224 assert encounters == 3
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
225
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
226
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
227 def test_htmlbox2():
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
228 """Test insertion without scaling"""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
229 if not hasattr(pymupdf, "mupdf"):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
230 print("'test_htmlbox2' not executed in classic.")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
231 return
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
232
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
233 doc = pymupdf.open()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
234 rect = pymupdf.Rect(100, 100, 200, 200) # large enough to hold text
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
235 page = doc.new_page()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
236 bottoms = set()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
237 for rot in (0, 90, 180, 270):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
238 spare_height, scale = page.insert_htmlbox(
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
239 rect, "Hello, World!", scale_low=1, rotate=rot
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
240 )
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
241 assert scale == 1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
242 assert 0 < spare_height < rect.height
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
243 bottoms.add(spare_height)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
244 assert len(bottoms) == 1 # same result for all rotations
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
245
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
246
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
247 def test_htmlbox3():
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
248 """Test insertion with opacity"""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
249 if not hasattr(pymupdf, "mupdf"):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
250 print("'test_htmlbox3' not executed in classic.")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
251 return
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
252
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
253 rect = pymupdf.Rect(100, 250, 300, 350)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
254 text = """<span style="color:red;font-size:20px;">Just some text.</span>"""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
255 doc = pymupdf.open()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
256 page = doc.new_page()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
257
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
258 # insert some text with opacity
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
259 page.insert_htmlbox(rect, text, opacity=0.5)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
260
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
261 # lowlevel-extract inserted text to access opacity
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
262 span = page.get_texttrace()[0]
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
263 assert span["opacity"] == 0.5
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
264
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
265
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
266 def test_3559():
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
267 doc = pymupdf.Document()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
268 page = doc.new_page()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
269 text_insert="""<body><h3></h3></body>"""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
270 rect = pymupdf.Rect(100, 100, 200, 200)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
271 page.insert_htmlbox(rect, text_insert)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
272
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
273
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
274 def test_3916():
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
275 doc = pymupdf.open()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
276 rect = pymupdf.Rect(100, 100, 101, 101) # Too small for the text.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
277 page = doc.new_page()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
278 spare_height, scale = page.insert_htmlbox(rect, "Hello, World!", scale_low=0.5)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
279 assert spare_height == -1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
280
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
281
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
282 def test_4400():
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
283 with pymupdf.open() as document:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
284 page = document.new_page()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
285 writer = pymupdf.TextWriter(page.rect)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
286 text = '111111111'
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
287 print(f'Calling writer.fill_textbox().', flush=1)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
288 writer.fill_textbox(rect=pymupdf.Rect(0, 0, 100, 20), pos=(80, 0), text=text, fontsize=8)