PyMuPDF 1.24.11__cp38-abi3-win_amd64.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (99) hide show
  1. PyMuPDF-1.24.11.dist-info/COPYING +1 -0
  2. PyMuPDF-1.24.11.dist-info/METADATA +83 -0
  3. PyMuPDF-1.24.11.dist-info/README.md +60 -0
  4. PyMuPDF-1.24.11.dist-info/RECORD +99 -0
  5. PyMuPDF-1.24.11.dist-info/WHEEL +4 -0
  6. PyMuPDF-1.24.11.dist-info/entry_points.txt +3 -0
  7. fitz/__init__.py +11 -0
  8. fitz/table.py +2 -0
  9. fitz/utils.py +2 -0
  10. pymupdf/__init__.py +22122 -0
  11. pymupdf/__main__.py +1146 -0
  12. pymupdf/_apply_pages.py +253 -0
  13. pymupdf/_build.py +1 -0
  14. pymupdf/_extra.pyd +0 -0
  15. pymupdf/_mupdf.pyd +0 -0
  16. pymupdf/extra.py +214 -0
  17. pymupdf/mupdf-devel/include/mupdf/fitz/archive.h +444 -0
  18. pymupdf/mupdf-devel/include/mupdf/fitz/band-writer.h +117 -0
  19. pymupdf/mupdf-devel/include/mupdf/fitz/bidi.h +90 -0
  20. pymupdf/mupdf-devel/include/mupdf/fitz/bitmap.h +175 -0
  21. pymupdf/mupdf-devel/include/mupdf/fitz/buffer.h +250 -0
  22. pymupdf/mupdf-devel/include/mupdf/fitz/color.h +427 -0
  23. pymupdf/mupdf-devel/include/mupdf/fitz/compress.h +88 -0
  24. pymupdf/mupdf-devel/include/mupdf/fitz/compressed-buffer.h +185 -0
  25. pymupdf/mupdf-devel/include/mupdf/fitz/config.h +223 -0
  26. pymupdf/mupdf-devel/include/mupdf/fitz/context.h +1006 -0
  27. pymupdf/mupdf-devel/include/mupdf/fitz/crypt.h +270 -0
  28. pymupdf/mupdf-devel/include/mupdf/fitz/device.h +654 -0
  29. pymupdf/mupdf-devel/include/mupdf/fitz/display-list.h +142 -0
  30. pymupdf/mupdf-devel/include/mupdf/fitz/document.h +1108 -0
  31. pymupdf/mupdf-devel/include/mupdf/fitz/export.h +52 -0
  32. pymupdf/mupdf-devel/include/mupdf/fitz/filter.h +263 -0
  33. pymupdf/mupdf-devel/include/mupdf/fitz/font.h +815 -0
  34. pymupdf/mupdf-devel/include/mupdf/fitz/geometry.h +818 -0
  35. pymupdf/mupdf-devel/include/mupdf/fitz/getopt.h +128 -0
  36. pymupdf/mupdf-devel/include/mupdf/fitz/glyph-cache.h +96 -0
  37. pymupdf/mupdf-devel/include/mupdf/fitz/glyph.h +81 -0
  38. pymupdf/mupdf-devel/include/mupdf/fitz/hash.h +126 -0
  39. pymupdf/mupdf-devel/include/mupdf/fitz/heap-imp.h +163 -0
  40. pymupdf/mupdf-devel/include/mupdf/fitz/heap.h +140 -0
  41. pymupdf/mupdf-devel/include/mupdf/fitz/image.h +443 -0
  42. pymupdf/mupdf-devel/include/mupdf/fitz/link.h +130 -0
  43. pymupdf/mupdf-devel/include/mupdf/fitz/log.h +61 -0
  44. pymupdf/mupdf-devel/include/mupdf/fitz/outline.h +228 -0
  45. pymupdf/mupdf-devel/include/mupdf/fitz/output-svg.h +64 -0
  46. pymupdf/mupdf-devel/include/mupdf/fitz/output.h +415 -0
  47. pymupdf/mupdf-devel/include/mupdf/fitz/path.h +447 -0
  48. pymupdf/mupdf-devel/include/mupdf/fitz/pixmap.h +501 -0
  49. pymupdf/mupdf-devel/include/mupdf/fitz/pool.h +68 -0
  50. pymupdf/mupdf-devel/include/mupdf/fitz/separation.h +138 -0
  51. pymupdf/mupdf-devel/include/mupdf/fitz/shade.h +233 -0
  52. pymupdf/mupdf-devel/include/mupdf/fitz/store.h +456 -0
  53. pymupdf/mupdf-devel/include/mupdf/fitz/story-writer.h +209 -0
  54. pymupdf/mupdf-devel/include/mupdf/fitz/story.h +232 -0
  55. pymupdf/mupdf-devel/include/mupdf/fitz/stream.h +646 -0
  56. pymupdf/mupdf-devel/include/mupdf/fitz/string-util.h +286 -0
  57. pymupdf/mupdf-devel/include/mupdf/fitz/structured-text.h +365 -0
  58. pymupdf/mupdf-devel/include/mupdf/fitz/system.h +459 -0
  59. pymupdf/mupdf-devel/include/mupdf/fitz/text.h +209 -0
  60. pymupdf/mupdf-devel/include/mupdf/fitz/track-usage.h +57 -0
  61. pymupdf/mupdf-devel/include/mupdf/fitz/transition.h +76 -0
  62. pymupdf/mupdf-devel/include/mupdf/fitz/tree.h +62 -0
  63. pymupdf/mupdf-devel/include/mupdf/fitz/types.h +41 -0
  64. pymupdf/mupdf-devel/include/mupdf/fitz/util.h +151 -0
  65. pymupdf/mupdf-devel/include/mupdf/fitz/version.h +31 -0
  66. pymupdf/mupdf-devel/include/mupdf/fitz/write-pixmap.h +499 -0
  67. pymupdf/mupdf-devel/include/mupdf/fitz/writer.h +266 -0
  68. pymupdf/mupdf-devel/include/mupdf/fitz/xml.h +397 -0
  69. pymupdf/mupdf-devel/include/mupdf/fitz.h +97 -0
  70. pymupdf/mupdf-devel/include/mupdf/helpers/mu-office-lib.h +666 -0
  71. pymupdf/mupdf-devel/include/mupdf/helpers/mu-threads.h +280 -0
  72. pymupdf/mupdf-devel/include/mupdf/helpers/pkcs7-openssl.h +48 -0
  73. pymupdf/mupdf-devel/include/mupdf/html.h +53 -0
  74. pymupdf/mupdf-devel/include/mupdf/memento.h +423 -0
  75. pymupdf/mupdf-devel/include/mupdf/pdf/annot.h +965 -0
  76. pymupdf/mupdf-devel/include/mupdf/pdf/clean.h +48 -0
  77. pymupdf/mupdf-devel/include/mupdf/pdf/cmap.h +145 -0
  78. pymupdf/mupdf-devel/include/mupdf/pdf/crypt.h +107 -0
  79. pymupdf/mupdf-devel/include/mupdf/pdf/document.h +842 -0
  80. pymupdf/mupdf-devel/include/mupdf/pdf/event.h +167 -0
  81. pymupdf/mupdf-devel/include/mupdf/pdf/font.h +168 -0
  82. pymupdf/mupdf-devel/include/mupdf/pdf/form.h +380 -0
  83. pymupdf/mupdf-devel/include/mupdf/pdf/image-rewriter.h +78 -0
  84. pymupdf/mupdf-devel/include/mupdf/pdf/interpret.h +492 -0
  85. pymupdf/mupdf-devel/include/mupdf/pdf/javascript.h +43 -0
  86. pymupdf/mupdf-devel/include/mupdf/pdf/name-table.h +596 -0
  87. pymupdf/mupdf-devel/include/mupdf/pdf/object.h +435 -0
  88. pymupdf/mupdf-devel/include/mupdf/pdf/page.h +316 -0
  89. pymupdf/mupdf-devel/include/mupdf/pdf/parse.h +61 -0
  90. pymupdf/mupdf-devel/include/mupdf/pdf/resource.h +133 -0
  91. pymupdf/mupdf-devel/include/mupdf/pdf/xref.h +300 -0
  92. pymupdf/mupdf-devel/include/mupdf/pdf.h +57 -0
  93. pymupdf/mupdf-devel/include/mupdf/ucdn.h +452 -0
  94. pymupdf/mupdf-devel/lib/mupdfcpp64.lib +0 -0
  95. pymupdf/mupdf.py +58506 -0
  96. pymupdf/mupdfcpp64.dll +0 -0
  97. pymupdf/pymupdf.py +2 -0
  98. pymupdf/table.py +2355 -0
  99. pymupdf/utils.py +5880 -0
@@ -0,0 +1,253 @@
1
+ import multiprocessing
2
+ import os
3
+ import time
4
+
5
+ import pymupdf
6
+
7
+
8
+ # Support for concurrent processing of document pages.
9
+ #
10
+
11
+ class _worker_State:
12
+ pass
13
+ _worker_state = _worker_State()
14
+
15
+
16
+ def _worker_init(
17
+ path,
18
+ initfn,
19
+ initfn_args,
20
+ initfn_kwargs,
21
+ pagefn,
22
+ pagefn_args,
23
+ pagefn_kwargs,
24
+ stats,
25
+ ):
26
+ # pylint: disable=attribute-defined-outside-init
27
+ _worker_state.path = path
28
+ _worker_state.pagefn = pagefn
29
+ _worker_state.pagefn_args = pagefn_args
30
+ _worker_state.pagefn_kwargs = pagefn_kwargs
31
+ _worker_state.stats = stats
32
+ _worker_state.document = None
33
+ if initfn:
34
+ initfn(*initfn_args, **initfn_kwargs)
35
+
36
+
37
+ def _stats_write(t, label):
38
+ t = time.time() - t
39
+ if t >= 0.1:
40
+ pymupdf.log(f'{os.getpid()=}: {t:2f}s: {label}.')
41
+
42
+
43
+ def _worker_fn(page_number):
44
+ # Create Document from filename if we haven't already done so.
45
+ if not _worker_state.document:
46
+ if _worker_state.stats:
47
+ t = time.time()
48
+ _worker_state.document = pymupdf.Document(_worker_state.path) # pylint: disable=attribute-defined-outside-init
49
+ if _worker_state.stats:
50
+ _stats_write(t, 'pymupdf.Document()')
51
+
52
+ if _worker_state.stats:
53
+ t = time.time()
54
+ page = _worker_state.document[page_number]
55
+ if _worker_state.stats:
56
+ _stats_write(t, '_worker_state.document[page_number]')
57
+
58
+ if _worker_state.stats:
59
+ t = time.time()
60
+ ret = _worker_state.pagefn(
61
+ page,
62
+ *_worker_state.pagefn_args,
63
+ **_worker_state.pagefn_kwargs,
64
+ )
65
+ if _worker_state.stats:
66
+ _stats_write(t, '_worker_state.pagefn()')
67
+
68
+ return ret
69
+
70
+
71
+ def _multiprocessing(
72
+ path,
73
+ pages,
74
+ pagefn,
75
+ pagefn_args,
76
+ pagefn_kwargs,
77
+ initfn,
78
+ initfn_args,
79
+ initfn_kwargs,
80
+ concurrency,
81
+ stats,
82
+ ):
83
+ #print(f'_worker_mp(): {concurrency=}', flush=1)
84
+ with multiprocessing.Pool(
85
+ concurrency,
86
+ _worker_init,
87
+ (
88
+ path,
89
+ initfn, initfn_args, initfn_kwargs,
90
+ pagefn, pagefn_args, pagefn_kwargs,
91
+ stats,
92
+ ),
93
+ ) as pool:
94
+ result = pool.map_async(_worker_fn, pages)
95
+ return result.get()
96
+
97
+
98
+ def _fork(
99
+ path,
100
+ pages,
101
+ pagefn,
102
+ pagefn_args,
103
+ pagefn_kwargs,
104
+ initfn,
105
+ initfn_args,
106
+ initfn_kwargs,
107
+ concurrency,
108
+ stats,
109
+ ):
110
+ verbose = 0
111
+ if concurrency is None:
112
+ concurrency = multiprocessing.cpu_count()
113
+ # We write page numbers to `queue_down` and read `(page_num, text)` from
114
+ # `queue_up`. Workers each repeatedly read the next available page number
115
+ # from `queue_down`, extract the text and write it onto `queue_up`.
116
+ #
117
+ # This is better than pre-allocating a subset of pages to each worker
118
+ # because it ensures there will never be idle workers until we are near the
119
+ # end with fewer pages left than workers.
120
+ #
121
+ queue_down = multiprocessing.Queue()
122
+ queue_up = multiprocessing.Queue()
123
+ def childfn():
124
+ document = None
125
+ if verbose:
126
+ pymupdf.log(f'{os.getpid()=}: {initfn=} {initfn_args=}')
127
+ _worker_init(
128
+ path,
129
+ initfn,
130
+ initfn_args,
131
+ initfn_kwargs,
132
+ pagefn,
133
+ pagefn_args,
134
+ pagefn_kwargs,
135
+ stats,
136
+ )
137
+ while 1:
138
+ if verbose:
139
+ pymupdf.log(f'{os.getpid()=}: calling get().')
140
+ page_num = queue_down.get()
141
+ if verbose:
142
+ pymupdf.log(f'{os.getpid()=}: {page_num=}.')
143
+ if page_num is None:
144
+ break
145
+ try:
146
+ if not document:
147
+ if stats:
148
+ t = time.time()
149
+ document = pymupdf.Document(path)
150
+ if stats:
151
+ _stats_write(t, 'pymupdf.Document(path)')
152
+
153
+ if stats:
154
+ t = time.time()
155
+ page = document[page_num]
156
+ if stats:
157
+ _stats_write(t, 'document[page_num]')
158
+
159
+ if verbose:
160
+ pymupdf.log(f'{os.getpid()=}: {_worker_state=}')
161
+
162
+ if stats:
163
+ t = time.time()
164
+ ret = pagefn(
165
+ page,
166
+ *_worker_state.pagefn_args,
167
+ **_worker_state.pagefn_kwargs,
168
+ )
169
+ if stats:
170
+ _stats_write(t, f'{page_num=} pagefn()')
171
+ except Exception as e:
172
+ if verbose: pymupdf.log(f'{os.getpid()=}: exception {e=}')
173
+ ret = e
174
+ if verbose:
175
+ pymupdf.log(f'{os.getpid()=}: sending {page_num=} {ret=}')
176
+
177
+ queue_up.put( (page_num, ret) )
178
+
179
+ error = None
180
+
181
+ pids = list()
182
+ try:
183
+ # Start child processes.
184
+ if stats:
185
+ t = time.time()
186
+ for i in range(concurrency):
187
+ p = os.fork() # pylint: disable=no-member
188
+ if p == 0:
189
+ # Child process.
190
+ try:
191
+ try:
192
+ childfn()
193
+ except Exception as e:
194
+ pymupdf.log(f'{os.getpid()=}: childfn() => {e=}')
195
+ raise
196
+ finally:
197
+ if verbose:
198
+ pymupdf.log(f'{os.getpid()=}: calling os._exit(0)')
199
+ os._exit(0)
200
+ pids.append(p)
201
+ if stats:
202
+ _stats_write(t, 'create child processes')
203
+
204
+ # Send page numbers.
205
+ if stats:
206
+ t = time.time()
207
+ if verbose:
208
+ pymupdf.log(f'Sending page numbers.')
209
+ for page_num in range(len(pages)):
210
+ queue_down.put(page_num)
211
+ if stats:
212
+ _stats_write(t, 'Send page numbers')
213
+
214
+ # Collect results. We give up if any worker sends an exception instead
215
+ # of text, but this hasn't been tested.
216
+ ret = [None] * len(pages)
217
+ for i in range(len(pages)):
218
+ page_num, text = queue_up.get()
219
+ if verbose:
220
+ pymupdf.log(f'{page_num=} {len(text)=}')
221
+ assert ret[page_num] is None
222
+ if isinstance(text, Exception):
223
+ if not error:
224
+ error = text
225
+ break
226
+ ret[page_num] = text
227
+
228
+ # Close queue. This should cause exception in workers and terminate
229
+ # them, but on macos-arm64 this does not seem to happen, so we also
230
+ # send None, which makes workers terminate.
231
+ for i in range(concurrency):
232
+ queue_down.put(None)
233
+ if verbose: pymupdf.log(f'Closing queues.')
234
+ queue_down.close()
235
+
236
+ if error:
237
+ raise error
238
+ if verbose:
239
+ pymupdf.log(f'After concurrent, returning {len(ret)=}')
240
+ return ret
241
+
242
+ finally:
243
+ # Join all child processes.
244
+ if stats:
245
+ t = time.time()
246
+ for pid in pids:
247
+ if verbose:
248
+ pymupdf.log(f'waiting for {pid=}.')
249
+ e = os.waitpid(pid, 0)
250
+ if verbose:
251
+ pymupdf.log(f'{pid=} => {e=}')
252
+ if stats:
253
+ _stats_write(t, 'Join all child proceses')
pymupdf/_build.py ADDED
@@ -0,0 +1 @@
1
+ mupdf_location='https://mupdf.com/downloads/archive/mupdf-1.24.10-source.tar.gz'
pymupdf/_extra.pyd ADDED
Binary file
pymupdf/_mupdf.pyd ADDED
Binary file
pymupdf/extra.py ADDED
@@ -0,0 +1,214 @@
1
+ # This file was automatically generated by SWIG (https://www.swig.org).
2
+ # Version 4.2.1
3
+ #
4
+ # Do not make changes to this file unless you know what you are doing - modify
5
+ # the SWIG interface file instead.
6
+
7
+ from sys import version_info as _swig_python_version_info
8
+ # Import the low-level C/C++ module
9
+ if __package__ or "." in __name__:
10
+ from . import _extra
11
+ else:
12
+ import _extra
13
+
14
+ try:
15
+ import builtins as __builtin__
16
+ except ImportError:
17
+ import __builtin__
18
+
19
+ def _swig_repr(self):
20
+ try:
21
+ strthis = "proxy of " + self.this.__repr__()
22
+ except __builtin__.Exception:
23
+ strthis = ""
24
+ return "<%s.%s; %s >" % (self.__class__.__module__, self.__class__.__name__, strthis,)
25
+
26
+
27
+ def _swig_setattr_nondynamic_instance_variable(set):
28
+ def set_instance_attr(self, name, value):
29
+ if name == "this":
30
+ set(self, name, value)
31
+ elif name == "thisown":
32
+ self.this.own(value)
33
+ elif hasattr(self, name) and isinstance(getattr(type(self), name), property):
34
+ set(self, name, value)
35
+ else:
36
+ raise AttributeError("You cannot add instance attributes to %s" % self)
37
+ return set_instance_attr
38
+
39
+
40
+ def _swig_setattr_nondynamic_class_variable(set):
41
+ def set_class_attr(cls, name, value):
42
+ if hasattr(cls, name) and not isinstance(getattr(cls, name), property):
43
+ set(cls, name, value)
44
+ else:
45
+ raise AttributeError("You cannot add class attributes to %s" % cls)
46
+ return set_class_attr
47
+
48
+
49
+ def _swig_add_metaclass(metaclass):
50
+ """Class decorator for adding a metaclass to a SWIG wrapped class - a slimmed down version of six.add_metaclass"""
51
+ def wrapper(cls):
52
+ return metaclass(cls.__name__, cls.__bases__, cls.__dict__.copy())
53
+ return wrapper
54
+
55
+
56
+ class _SwigNonDynamicMeta(type):
57
+ """Meta class to enforce nondynamic attributes (no new attributes) for a class"""
58
+ __setattr__ = _swig_setattr_nondynamic_class_variable(type.__setattr__)
59
+
60
+
61
+
62
+ # pylint: disable=all
63
+
64
+
65
+ def page_merge(doc_des, doc_src, page_from, page_to, rotate, links, copy_annots, graft_map):
66
+ return _extra.page_merge(doc_des, doc_src, page_from, page_to, rotate, links, copy_annots, graft_map)
67
+
68
+ def JM_merge_range(doc_des, doc_src, spage, epage, apage, rotate, links, annots, show_progress, graft_map):
69
+ return _extra.JM_merge_range(doc_des, doc_src, spage, epage, apage, rotate, links, annots, show_progress, graft_map)
70
+
71
+ def FzDocument_insert_pdf(doc, src, from_page, to_page, start_at, rotate, links, annots, show_progress, final, graft_map):
72
+ return _extra.FzDocument_insert_pdf(doc, src, from_page, to_page, start_at, rotate, links, annots, show_progress, final, graft_map)
73
+
74
+ def page_xref(this_doc, pno):
75
+ return _extra.page_xref(this_doc, pno)
76
+
77
+ def _newPage(*args):
78
+ return _extra._newPage(*args)
79
+
80
+ def JM_add_annot_id(annot, stem):
81
+ return _extra.JM_add_annot_id(annot, stem)
82
+
83
+ def JM_get_annot_id_list(page):
84
+ return _extra.JM_get_annot_id_list(page)
85
+
86
+ def _add_caret_annot(*args):
87
+ return _extra._add_caret_annot(*args)
88
+
89
+ def Tools_parse_da(this_annot):
90
+ return _extra.Tools_parse_da(this_annot)
91
+
92
+ def Annot_getAP(annot):
93
+ return _extra.Annot_getAP(annot)
94
+
95
+ def Tools_update_da(this_annot, da_str):
96
+ return _extra.Tools_update_da(this_annot, da_str)
97
+
98
+ def JM_point_from_py(p):
99
+ return _extra.JM_point_from_py(p)
100
+
101
+ def Annot_rect(annot):
102
+ return _extra.Annot_rect(annot)
103
+
104
+ def util_transform_rect(rect, matrix):
105
+ return _extra.util_transform_rect(rect, matrix)
106
+
107
+ def Annot_rect3(annot):
108
+ return _extra.Annot_rect3(annot)
109
+
110
+ def Page_derotate_matrix(*args):
111
+ return _extra.Page_derotate_matrix(*args)
112
+
113
+ def JM_get_annot_xref_list(page_obj):
114
+ return _extra.JM_get_annot_xref_list(page_obj)
115
+
116
+ def xref_object(*args):
117
+ return _extra.xref_object(*args)
118
+
119
+ def Link_is_external(this_link):
120
+ return _extra.Link_is_external(this_link)
121
+
122
+ def Page_addAnnot_FromString(*args):
123
+ return _extra.Page_addAnnot_FromString(*args)
124
+
125
+ def Link_next(this_link):
126
+ return _extra.Link_next(this_link)
127
+
128
+ def page_count_fz2(document):
129
+ return _extra.page_count_fz2(document)
130
+
131
+ def page_count_fz(document):
132
+ return _extra.page_count_fz(document)
133
+
134
+ def page_count_pdf(pdf):
135
+ return _extra.page_count_pdf(pdf)
136
+
137
+ def page_count(*args):
138
+ return _extra.page_count(*args)
139
+
140
+ def page_annot_xrefs(*args):
141
+ return _extra.page_annot_xrefs(*args)
142
+
143
+ def Outline_is_external(outline):
144
+ return _extra.Outline_is_external(outline)
145
+
146
+ def Document_extend_toc_items(*args):
147
+ return _extra.Document_extend_toc_items(*args)
148
+
149
+ def ll_fz_absi(i):
150
+ return _extra.ll_fz_absi(i)
151
+
152
+ def JM_new_texttrace_device(out):
153
+ return _extra.JM_new_texttrace_device(out)
154
+
155
+ def JM_char_bbox(line, ch):
156
+ return _extra.JM_char_bbox(line, ch)
157
+
158
+ def JM_char_quad(line, ch):
159
+ return _extra.JM_char_quad(line, ch)
160
+
161
+ def JM_print_stext_page_as_text(res, page):
162
+ return _extra.JM_print_stext_page_as_text(res, page)
163
+
164
+ def set_skip_quad_corrections(on):
165
+ return _extra.set_skip_quad_corrections(on)
166
+
167
+ def set_subset_fontnames(on):
168
+ return _extra.set_subset_fontnames(on)
169
+
170
+ def set_small_glyph_heights(on):
171
+ return _extra.set_small_glyph_heights(on)
172
+
173
+ def JM_cropbox(page_obj):
174
+ return _extra.JM_cropbox(page_obj)
175
+
176
+ def get_cdrawings(page, extended=None, callback=None, method=None):
177
+ return _extra.get_cdrawings(page, extended, callback, method)
178
+
179
+ def JM_make_spanlist(line_dict, line, raw, buff, tp_rect):
180
+ return _extra.JM_make_spanlist(line_dict, line, raw, buff, tp_rect)
181
+
182
+ def extractWORDS(this_tpage, delimiters):
183
+ return _extra.extractWORDS(this_tpage, delimiters)
184
+
185
+ def extractBLOCKS(_self):
186
+ return _extra.extractBLOCKS(_self)
187
+
188
+ def link_uri(link):
189
+ return _extra.link_uri(link)
190
+
191
+ def page_get_textpage(_self, clip, flags, matrix):
192
+ return _extra.page_get_textpage(_self, clip, flags, matrix)
193
+
194
+ def JM_make_textpage_dict(tp, page_dict, raw):
195
+ return _extra.JM_make_textpage_dict(tp, page_dict, raw)
196
+
197
+ def pixmap_pixel(pm, x, y):
198
+ return _extra.pixmap_pixel(pm, x, y)
199
+
200
+ def pixmap_n(pixmap):
201
+ return _extra.pixmap_n(pixmap)
202
+
203
+ def JM_search_stext_page(page, needle):
204
+ return _extra.JM_search_stext_page(page, needle)
205
+
206
+ def set_pixel(pm, x, y, color):
207
+ return _extra.set_pixel(pm, x, y, color)
208
+
209
+ def fz_new_image_from_compressed_buffer(w, h, bpc, colorspace, xres, yres, interpolate, imagemask, buffer, mask):
210
+ return _extra.fz_new_image_from_compressed_buffer(w, h, bpc, colorspace, xres, yres, interpolate, imagemask, buffer, mask)
211
+
212
+ def rearrange_pages2(doc, new_pages):
213
+ return _extra.rearrange_pages2(doc, new_pages)
214
+