annotate src/__init__.py @ 42:4621bd954a09

FIX: Need packaging at runtime to because of the parsing of mupdf_version into a tuple. In the merge it was removed erroneously.
author Franz Glasner <fzglas.hg@dom66.de>
date Sat, 11 Oct 2025 17:14:12 +0200
parents 71bcc18e306f
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 PyMuPDF implemented on top of MuPDF Python bindings.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4 License:
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 SPDX-License-Identifier: GPL-3.0-only
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
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9 # To reduce startup times, we don't import everything we require here.
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 atexit
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12 import binascii
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13 import collections
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14 import inspect
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
15 import io
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16 import math
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17 import os
42
4621bd954a09 FIX: Need packaging at runtime to because of the parsing of mupdf_version into a tuple.
Franz Glasner <fzglas.hg@dom66.de>
parents: 41
diff changeset
18 import packaging.version
1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19 import pathlib
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20 import glob
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21 import re
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22 import string
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23 import sys
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24 import tarfile
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25 import time
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
26 import typing
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
27 import warnings
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
28 import weakref
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
29 import zipfile
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 from . import extra
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
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
34 # Set up g_out_log and g_out_message from environment variables.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
35 #
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
36 # PYMUPDF_MESSAGE controls the destination of user messages (from function
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
37 # `pymupdf.message()`).
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 # PYMUPDF_LOG controls the destination of internal development logging (from
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
40 # function `pymupdf.log()`).
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 # For syntax, see _make_output()'s `text` arg.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
43 #
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
44
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
45 def _make_output(
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
46 *,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
47 text=None,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
48 fd=None,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
49 stream=None,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
50 path=None,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
51 path_append=None,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
52 pylogging=None,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
53 pylogging_logger=None,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
54 pylogging_level=None,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
55 pylogging_name=None,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
56 default=None,
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 Returns a stream that writes to a specified destination, which can be a
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
60 file descriptor, a file, an existing stream or Python's `logging' system.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
61
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
62 Args:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
63 text: text specification of destination.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
64 fd:<int> - write to file descriptor.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
65 path:<str> - write to file.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
66 path+:<str> - append to file.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
67 logging:<items> - write to Python `logging` module.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
68 items: comma-separated <name=value> pairs.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
69 level=<int>
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
70 name=<str>.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
71 Other names are ignored.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
72
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
73 fd: an int file descriptor.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
74 stream: something with methods .write(text) and .flush().
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
75 If specified we simply return <stream>.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
76 path: a file path.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
77 If specified we return a stream that writes to this file.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
78 path_append: a file path.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
79 If specified we return a stream that appends to this file.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
80 pylogging*:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
81 if any of these args is not None, we return a stream that writes to
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
82 Python's `logging` module.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
83
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
84 pylogging:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
85 Unused other than to activate use of logging module.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
86 pylogging_logger:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
87 A logging.Logger; If None, set from <pylogging_name>.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
88 pylogging_level:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
89 An int log level, if None we use
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
90 pylogging_logger.getEffectiveLevel().
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
91 pylogging_name:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
92 Only used if <pylogging_logger> is None:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
93 If <pylogging_name> is None, we set it to 'pymupdf'.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
94 Then we do: pylogging_logger = logging.getLogger(pylogging_name)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
95 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
96 if text is not None:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
97 # Textual specification, for example from from environment variable.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
98 if text.startswith('fd:'):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
99 fd = int(text[3:])
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
100 elif text.startswith('path:'):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
101 path = text[5:]
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
102 elif text.startswith('path+'):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
103 path_append = text[5:]
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
104 elif text.startswith('logging:'):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
105 pylogging = True
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
106 items_d = dict()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
107 items = text[8:].split(',')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
108 #items_d = {n: v for (n, v) in [item.split('=', 1) for item in items]}
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
109 for item in items:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
110 if not item:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
111 continue
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
112 nv = item.split('=', 1)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
113 assert len(nv) == 2, f'Need `=` in {item=}.'
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
114 n, v = nv
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
115 items_d[n] = v
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
116 pylogging_level = items_d.get('level')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
117 if pylogging_level is not None:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
118 pylogging_level = int(pylogging_level)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
119 pylogging_name = items_d.get('name', 'pymupdf')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
120 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
121 assert 0, f'Expected prefix `fd:`, `path:`. `path+:` or `logging:` in {text=}.'
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
122
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
123 if fd is not None:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
124 ret = open(fd, mode='w', closefd=False)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
125 elif stream is not None:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
126 assert hasattr(stream, 'write')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
127 assert hasattr(stream, 'flush')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
128 ret = stream
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
129 elif path is not None:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
130 ret = open(path, 'w')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
131 elif path_append is not None:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
132 ret = open(path_append, 'a')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
133 elif (0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
134 or pylogging is not None
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
135 or pylogging_logger is not None
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
136 or pylogging_level is not None
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
137 or pylogging_name is not None
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
138 ):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
139 import logging
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
140 if pylogging_logger is None:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
141 if pylogging_name is None:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
142 pylogging_name = 'pymupdf'
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
143 pylogging_logger = logging.getLogger(pylogging_name)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
144 assert isinstance(pylogging_logger, logging.Logger)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
145 if pylogging_level is None:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
146 pylogging_level = pylogging_logger.getEffectiveLevel()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
147 class Out:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
148 def write(self, text):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
149 # `logging` module appends newlines, but so does the `print()`
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
150 # functions in our caller message() and log() fns, so we need to
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
151 # remove them here.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
152 text = text.rstrip('\n')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
153 if text:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
154 pylogging_logger.log(pylogging_level, text)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
155 def flush(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
156 pass
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
157 ret = Out()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
158 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
159 ret = default
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
160 return ret
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
161
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
162 # Set steam used by PyMuPDF messaging.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
163 _g_out_message = _make_output(text=os.environ.get('PYMUPDF_MESSAGE'), default=sys.stdout)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
164
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
165 # Set steam used by PyMuPDF development/debugging logging.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
166 _g_out_log = _make_output(text=os.environ.get('PYMUPDF_LOG'), default=sys.stdout)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
167
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
168 # Things for testing logging.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
169 _g_log_items = list()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
170 _g_log_items_active = False
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 def _log_items():
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
173 return _g_log_items
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
174
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
175 def _log_items_active(active):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
176 global _g_log_items_active
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
177 _g_log_items_active = active
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
178
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
179 def _log_items_clear():
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
180 del _g_log_items[:]
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
181
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
182
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
183 def set_messages(
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
184 *,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
185 text=None,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
186 fd=None,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
187 stream=None,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
188 path=None,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
189 path_append=None,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
190 pylogging=None,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
191 pylogging_logger=None,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
192 pylogging_level=None,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
193 pylogging_name=None,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
194 ):
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 Sets destination of PyMuPDF messages. See _make_output() for details.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
197 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
198 global _g_out_message
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
199 _g_out_message = _make_output(
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
200 text=text,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
201 fd=fd,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
202 stream=stream,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
203 path=path,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
204 path_append=path_append,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
205 pylogging=pylogging,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
206 pylogging_logger=pylogging_logger,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
207 pylogging_level=pylogging_level,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
208 pylogging_name=pylogging_name,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
209 default=_g_out_message,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
210 )
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
211
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
212 def set_log(
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
213 *,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
214 text=None,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
215 fd=None,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
216 stream=None,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
217 path=None,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
218 path_append=None,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
219 pylogging=None,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
220 pylogging_logger=None,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
221 pylogging_level=None,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
222 pylogging_name=None,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
223 ):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
224 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
225 Sets destination of PyMuPDF development/debugging logging. See
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
226 _make_output() for details.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
227 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
228 global _g_out_log
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
229 _g_out_log = _make_output(
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
230 text=text,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
231 fd=fd,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
232 stream=stream,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
233 path=path,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
234 path_append=path_append,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
235 pylogging=pylogging,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
236 pylogging_logger=pylogging_logger,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
237 pylogging_level=pylogging_level,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
238 pylogging_name=pylogging_name,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
239 default=_g_out_log,
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
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
242 def log( text='', caller=1):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
243 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
244 For development/debugging diagnostics.
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 try:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
247 stack = inspect.stack(context=0)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
248 except StopIteration:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
249 pass
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
250 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
251 frame_record = stack[caller]
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
252 try:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
253 filename = os.path.relpath(frame_record.filename)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
254 except Exception: # Can fail on windows.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
255 filename = frame_record.filename
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
256 line = frame_record.lineno
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
257 function = frame_record.function
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
258 text = f'{filename}:{line}:{function}(): {text}'
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
259 if _g_log_items_active:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
260 _g_log_items.append(text)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
261 if _g_out_log:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
262 print(text, file=_g_out_log, flush=1)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
263
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 def message(text=''):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
266 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
267 For user messages.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
268 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
269 # It looks like `print()` does nothing if sys.stdout is None (without
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
270 # raising an exception), but we don't rely on this.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
271 if _g_out_message:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
272 print(text, file=_g_out_message, flush=1)
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
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
275 def exception_info():
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
276 import traceback
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
277 log(f'exception_info:')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
278 log(traceback.format_exc())
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
279
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 # PDF names must not contain these characters:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
282 INVALID_NAME_CHARS = set(string.whitespace + "()<>[]{}/%" + chr(0))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
283
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
284 def get_env_bool( name, default):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
285 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
286 Returns `True`, `False` or `default` depending on whether $<name> is '1',
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
287 '0' or unset. Otherwise assert-fails.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
288 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
289 v = os.environ.get( name)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
290 if v is None:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
291 ret = default
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
292 elif v == '1':
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
293 ret = True
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
294 elif v == '0':
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
295 ret = False
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
296 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
297 assert 0, f'Unrecognised value for {name}: {v!r}'
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
298 if ret != default:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
299 log(f'Using non-default setting from {name}: {v!r}')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
300 return ret
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
301
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
302 def get_env_int( name, default):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
303 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
304 Returns `True`, `False` or `default` depending on whether $<name> is '1',
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
305 '0' or unset. Otherwise assert-fails.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
306 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
307 v = os.environ.get( name)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
308 if v is None:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
309 ret = default
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
310 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
311 ret = int(v)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
312 if ret != default:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
313 log(f'Using non-default setting from {name}: {v}')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
314 return ret
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
315
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
316 # All our `except ...` blocks output diagnostics if `g_exceptions_verbose` is
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
317 # true.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
318 g_exceptions_verbose = get_env_int( 'PYMUPDF_EXCEPTIONS_VERBOSE', 1)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
319
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
320 # $PYMUPDF_USE_EXTRA overrides whether to use optimised C fns in `extra`.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
321 #
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
322 g_use_extra = get_env_bool( 'PYMUPDF_USE_EXTRA', True)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
323
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
324
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
325 # Global switches
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
326 #
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
327
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
328 class _Globals:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
329 def __init__(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
330 self.no_device_caching = 0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
331 self.small_glyph_heights = 0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
332 self.subset_fontnames = 0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
333 self.skip_quad_corrections = 0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
334
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
335 _globals = _Globals()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
336
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
337
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
338 # Optionally use MuPDF via cppyy bindings; experimental and not tested recently
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
339 # as of 2023-01-20 11:51:40
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
340 #
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
341 mupdf_cppyy = os.environ.get( 'MUPDF_CPPYY')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
342 if mupdf_cppyy is not None:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
343 # pylint: disable=all
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
344 log( f'{__file__}: $MUPDF_CPPYY={mupdf_cppyy!r} so attempting to import mupdf_cppyy.')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
345 log( f'{__file__}: $PYTHONPATH={os.environ["PYTHONPATH"]}')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
346 if mupdf_cppyy == '':
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
347 import mupdf_cppyy
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
348 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
349 import importlib
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
350 mupdf_cppyy = importlib.machinery.SourceFileLoader(
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
351 'mupdf_cppyy',
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
352 mupdf_cppyy
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
353 ).load_module()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
354 mupdf = mupdf_cppyy.cppyy.gbl.mupdf
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
355 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
356 # Use MuPDF Python SWIG bindings. We allow import from either our own
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
357 # directory for conventional wheel installs, or from separate place in case
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
358 # we are using a separately-installed system installation of mupdf.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
359 #
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
360 try:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
361 from . import mupdf
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
362 except Exception:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
363 import mupdf
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
364 if hasattr(mupdf, 'internal_check_ndebug'):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
365 mupdf.internal_check_ndebug()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
366 mupdf.reinit_singlethreaded()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
367
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
368 def _int_rc(text):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
369 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
370 Converts string to int, ignoring trailing 'rc...'.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
371 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
372 rc = text.find('rc')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
373 if rc >= 0:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
374 text = text[:rc]
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
375 return int(text)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
376
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
377 # Basic version information.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
378 #
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
379 # (We use `noqa F401` to avoid flake8 errors such as `F401
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
380 # '._build.mupdf_location' imported but unused`.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
381 #
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
382 from ._build import mupdf_location # noqa F401
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
383 from ._build import pymupdf_git_branch # noqa F401
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
384 from ._build import pymupdf_git_diff # noqa F401
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
385 from ._build import pymupdf_git_sha # noqa F401
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
386 from ._build import pymupdf_version # noqa F401
39
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
387 from ._build import pymupdf_version_tuple # noqa F401
1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
388 from ._build import swig_version # noqa F401
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
389 from ._build import swig_version_tuple # noqa F401
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
390
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
391 mupdf_version = mupdf.FZ_VERSION
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
392
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
393 # Removed in PyMuPDF-1.26.1.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
394 pymupdf_date = None
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
395
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
396 # Versions as tuples; useful when comparing versions.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
397 #
23
3b13504f9d89 Use the official packaging.version.Version to parse version strings.
Franz Glasner <fzglas.hg@dom66.de>
parents: 22
diff changeset
398 mupdf_version_tuple = packaging.version.Version(mupdf_version).release
1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
399
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
400 assert mupdf_version_tuple == (mupdf.FZ_VERSION_MAJOR, mupdf.FZ_VERSION_MINOR, mupdf.FZ_VERSION_PATCH), \
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
401 f'Inconsistent MuPDF version numbers: {mupdf_version_tuple=} != {(mupdf.FZ_VERSION_MAJOR, mupdf.FZ_VERSION_MINOR, mupdf.FZ_VERSION_PATCH)=}'
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
402
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
403 # Legacy version information.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
404 #
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
405 version = (pymupdf_version, mupdf_version, None)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
406 VersionFitz = mupdf_version
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
407 VersionBind = pymupdf_version
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
408 VersionDate = None
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
409
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
410
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
411 # String formatting.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
412
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
413 def _format_g(value, *, fmt='%g'):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
414 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
415 Returns `value` formatted with mupdf.fz_format_double() if available,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
416 otherwise with Python's `%`.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
417
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
418 If `value` is a list or tuple, we return a space-separated string of
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
419 formatted values.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
420 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
421 if isinstance(value, (list, tuple)):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
422 ret = ''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
423 for v in value:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
424 if ret:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
425 ret += ' '
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
426 ret += _format_g(v, fmt=fmt)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
427 return ret
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
428 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
429 return mupdf.fz_format_double(fmt, value)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
430
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
431 format_g = _format_g
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
432
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
433 # ByteString is gone from typing in 3.14.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
434 # collections.abc.Buffer available from 3.12 only
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
435 try:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
436 ByteString = typing.ByteString
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
437 except AttributeError:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
438 ByteString = bytes | bytearray | memoryview
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
439
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
440 # Names required by class method typing annotations.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
441 OptBytes = typing.Optional[ByteString]
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
442 OptDict = typing.Optional[dict]
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
443 OptFloat = typing.Optional[float]
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
444 OptInt = typing.Union[int, None]
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
445 OptSeq = typing.Optional[typing.Sequence]
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
446 OptStr = typing.Optional[str]
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
447
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
448 Page = 'Page_forward_decl'
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
449 Point = 'Point_forward_decl'
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
450
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
451 matrix_like = 'matrix_like'
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
452 point_like = 'point_like'
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
453 quad_like = 'quad_like'
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
454 rect_like = 'rect_like'
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
455
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
456
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
457 def _as_fz_document(document):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
458 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
459 Returns document as a mupdf.FzDocument, upcasting as required. Raises
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
460 'document closed' exception if closed.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
461 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
462 if isinstance(document, Document):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
463 if document.is_closed:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
464 raise ValueError('document closed')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
465 document = document.this
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
466 if isinstance(document, mupdf.FzDocument):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
467 return document
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
468 elif isinstance(document, mupdf.PdfDocument):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
469 return document.super()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
470 elif document is None:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
471 assert 0, f'document is None'
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
472 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
473 assert 0, f'Unrecognised {type(document)=}'
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
474
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
475 def _as_pdf_document(document, required=True):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
476 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
477 Returns `document` downcast to a mupdf.PdfDocument. If downcast fails (i.e.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
478 `document` is not actually a `PdfDocument`) then we assert-fail if `required`
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
479 is true (the default) else return a `mupdf.PdfDocument` with `.m_internal`
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
480 false.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
481 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
482 if isinstance(document, Document):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
483 if document.is_closed:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
484 raise ValueError('document closed')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
485 document = document.this
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
486 if isinstance(document, mupdf.PdfDocument):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
487 return document
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
488 elif isinstance(document, mupdf.FzDocument):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
489 ret = mupdf.PdfDocument(document)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
490 if required:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
491 assert ret.m_internal
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
492 return ret
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
493 elif document is None:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
494 assert 0, f'document is None'
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
495 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
496 assert 0, f'Unrecognised {type(document)=}'
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
497
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
498 def _as_fz_page(page):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
499 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
500 Returns page as a mupdf.FzPage, upcasting as required.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
501 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
502 if isinstance(page, Page):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
503 page = page.this
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
504 if isinstance(page, mupdf.PdfPage):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
505 return page.super()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
506 elif isinstance(page, mupdf.FzPage):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
507 return page
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
508 elif page is None:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
509 assert 0, f'page is None'
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
510 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
511 assert 0, f'Unrecognised {type(page)=}'
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
512
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
513 def _as_pdf_page(page, required=True):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
514 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
515 Returns `page` downcast to a mupdf.PdfPage. If downcast fails (i.e. `page`
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
516 is not actually a `PdfPage`) then we assert-fail if `required` is true (the
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
517 default) else return a `mupdf.PdfPage` with `.m_internal` false.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
518 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
519 if isinstance(page, Page):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
520 page = page.this
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
521 if isinstance(page, mupdf.PdfPage):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
522 return page
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
523 elif isinstance(page, mupdf.FzPage):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
524 ret = mupdf.pdf_page_from_fz_page(page)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
525 if required:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
526 assert ret.m_internal
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
527 return ret
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
528 elif page is None:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
529 assert 0, f'page is None'
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
530 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
531 assert 0, f'Unrecognised {type(page)=}'
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
532
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
533
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
534 def _pdf_annot_page(annot):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
535 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
536 Wrapper for mupdf.pdf_annot_page() which raises an exception if <annot>
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
537 is not bound to a page instead of returning a mupdf.PdfPage with
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
538 `.m_internal=None`.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
539
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
540 [Some other MuPDF functions such as pdf_update_annot()` already raise a
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
541 similar exception if a pdf_annot's .page field is null.]
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
542 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
543 page = mupdf.pdf_annot_page(annot)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
544 if not page.m_internal:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
545 raise RuntimeError('Annot is not bound to a page')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
546 return page
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
547
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
548
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
549 # Fixme: we don't support JM_MEMORY=1.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
550 JM_MEMORY = 0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
551
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
552 # Classes
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
553 #
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
554
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
555 class Annot:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
556
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
557 def __init__(self, annot):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
558 assert isinstance( annot, mupdf.PdfAnnot)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
559 self.this = annot
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
560
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
561 def __repr__(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
562 parent = getattr(self, 'parent', '<>')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
563 return "'%s' annotation on %s" % (self.type[1], str(parent))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
564
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
565 def __str__(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
566 return self.__repr__()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
567
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
568 def _erase(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
569 if getattr(self, "thisown", False):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
570 self.thisown = False
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
571
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
572 def _get_redact_values(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
573 annot = self.this
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
574 if mupdf.pdf_annot_type(annot) != mupdf.PDF_ANNOT_REDACT:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
575 return
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
576
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
577 values = dict()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
578 try:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
579 obj = mupdf.pdf_dict_gets(mupdf.pdf_annot_obj(annot), "RO")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
580 if obj.m_internal:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
581 message_warning("Ignoring redaction key '/RO'.")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
582 xref = mupdf.pdf_to_num(obj)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
583 values[dictkey_xref] = xref
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
584 obj = mupdf.pdf_dict_gets(mupdf.pdf_annot_obj(annot), "OverlayText")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
585 if obj.m_internal:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
586 text = mupdf.pdf_to_text_string(obj)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
587 values[dictkey_text] = JM_UnicodeFromStr(text)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
588 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
589 values[dictkey_text] = ''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
590 obj = mupdf.pdf_dict_get(mupdf.pdf_annot_obj(annot), PDF_NAME('Q'))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
591 align = 0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
592 if obj.m_internal:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
593 align = mupdf.pdf_to_int(obj)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
594 values[dictkey_align] = align
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
595 except Exception:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
596 if g_exceptions_verbose: exception_info()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
597 return
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
598 val = values
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
599
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
600 if not val:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
601 return val
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
602 val["rect"] = self.rect
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
603 text_color, fontname, fontsize = TOOLS._parse_da(self)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
604 val["text_color"] = text_color
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
605 val["fontname"] = fontname
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
606 val["fontsize"] = fontsize
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
607 fill = self.colors["fill"]
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
608 val["fill"] = fill
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
609 return val
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
610
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
611 def _getAP(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
612 if g_use_extra:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
613 assert isinstance( self.this, mupdf.PdfAnnot)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
614 ret = extra.Annot_getAP(self.this)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
615 assert isinstance( ret, bytes)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
616 return ret
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
617 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
618 r = None
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
619 res = None
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
620 annot = self.this
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
621 assert isinstance( annot, mupdf.PdfAnnot)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
622 annot_obj = mupdf.pdf_annot_obj( annot)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
623 ap = mupdf.pdf_dict_getl( annot_obj, PDF_NAME('AP'), PDF_NAME('N'))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
624 if mupdf.pdf_is_stream( ap):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
625 res = mupdf.pdf_load_stream( ap)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
626 if res and res.m_internal:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
627 r = JM_BinFromBuffer(res)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
628 return r
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
629
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
630 def _setAP(self, buffer_, rect=0):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
631 try:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
632 annot = self.this
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
633 annot_obj = mupdf.pdf_annot_obj( annot)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
634 page = _pdf_annot_page(annot)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
635 apobj = mupdf.pdf_dict_getl( annot_obj, PDF_NAME('AP'), PDF_NAME('N'))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
636 if not apobj.m_internal:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
637 raise RuntimeError( MSG_BAD_APN)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
638 if not mupdf.pdf_is_stream( apobj):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
639 raise RuntimeError( MSG_BAD_APN)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
640 res = JM_BufferFromBytes( buffer_)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
641 if not res.m_internal:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
642 raise ValueError( MSG_BAD_BUFFER)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
643 JM_update_stream( page.doc(), apobj, res, 1)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
644 if rect:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
645 bbox = mupdf.pdf_dict_get_rect( annot_obj, PDF_NAME('Rect'))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
646 mupdf.pdf_dict_put_rect( apobj, PDF_NAME('BBox'), bbox)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
647 except Exception:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
648 if g_exceptions_verbose: exception_info()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
649
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
650 def _update_appearance(self, opacity=-1, blend_mode=None, fill_color=None, rotate=-1):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
651 annot = self.this
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
652 assert annot.m_internal
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
653 annot_obj = mupdf.pdf_annot_obj( annot)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
654 page = _pdf_annot_page(annot)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
655 pdf = page.doc()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
656 type_ = mupdf.pdf_annot_type( annot)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
657 nfcol, fcol = JM_color_FromSequence(fill_color)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
658
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
659 try:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
660 # remove fill color from unsupported annots
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
661 # or if so requested
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
662 if nfcol == 0 or type_ not in (
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
663 mupdf.PDF_ANNOT_SQUARE,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
664 mupdf.PDF_ANNOT_CIRCLE,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
665 mupdf.PDF_ANNOT_LINE,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
666 mupdf.PDF_ANNOT_POLY_LINE,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
667 mupdf.PDF_ANNOT_POLYGON
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
668 ):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
669 mupdf.pdf_dict_del( annot_obj, PDF_NAME('IC'))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
670 elif nfcol > 0:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
671 mupdf.pdf_set_annot_interior_color( annot, fcol[:nfcol])
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
672
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
673 insert_rot = 1 if rotate >= 0 else 0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
674 if type_ not in (
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
675 mupdf.PDF_ANNOT_CARET,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
676 mupdf.PDF_ANNOT_CIRCLE,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
677 mupdf.PDF_ANNOT_FREE_TEXT,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
678 mupdf.PDF_ANNOT_FILE_ATTACHMENT,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
679 mupdf.PDF_ANNOT_INK,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
680 mupdf.PDF_ANNOT_LINE,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
681 mupdf.PDF_ANNOT_POLY_LINE,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
682 mupdf.PDF_ANNOT_POLYGON,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
683 mupdf.PDF_ANNOT_SQUARE,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
684 mupdf.PDF_ANNOT_STAMP,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
685 mupdf.PDF_ANNOT_TEXT,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
686 ):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
687 insert_rot = 0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
688
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
689 if insert_rot:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
690 mupdf.pdf_dict_put_int(annot_obj, PDF_NAME('Rotate'), rotate)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
691
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
692 # insert fill color
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
693 if type_ == mupdf.PDF_ANNOT_FREE_TEXT:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
694 if nfcol > 0:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
695 mupdf.pdf_set_annot_color(annot, fcol[:nfcol])
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
696 elif nfcol > 0:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
697 col = mupdf.pdf_new_array(page.doc(), nfcol)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
698 for i in range( nfcol):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
699 mupdf.pdf_array_push_real(col, fcol[i])
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
700 mupdf.pdf_dict_put(annot_obj, PDF_NAME('IC'), col)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
701 mupdf.pdf_dirty_annot(annot)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
702 mupdf.pdf_update_annot(annot) # let MuPDF update
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
703 pdf.resynth_required = 0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
704 except Exception as e:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
705 if g_exceptions_verbose:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
706 exception_info()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
707 message( f'cannot update annot: {e}')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
708 raise
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
709
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
710 if (opacity < 0 or opacity >= 1) and not blend_mode: # no opacity, no blend_mode
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
711 return True
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
712
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
713 try: # create or update /ExtGState
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
714 ap = mupdf.pdf_dict_getl(
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
715 mupdf.pdf_annot_obj(annot),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
716 PDF_NAME('AP'),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
717 PDF_NAME('N')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
718 )
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
719 if not ap.m_internal: # should never happen
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
720 raise RuntimeError( MSG_BAD_APN)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
721
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
722 resources = mupdf.pdf_dict_get( ap, PDF_NAME('Resources'))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
723 if not resources.m_internal: # no Resources yet: make one
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
724 resources = mupdf.pdf_dict_put_dict( ap, PDF_NAME('Resources'), 2)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
725
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
726 alp0 = mupdf.pdf_new_dict( page.doc(), 3)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
727 if opacity >= 0 and opacity < 1:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
728 mupdf.pdf_dict_put_real( alp0, PDF_NAME('CA'), opacity)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
729 mupdf.pdf_dict_put_real( alp0, PDF_NAME('ca'), opacity)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
730 mupdf.pdf_dict_put_real( annot_obj, PDF_NAME('CA'), opacity)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
731
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
732 if blend_mode:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
733 mupdf.pdf_dict_put_name( alp0, PDF_NAME('BM'), blend_mode)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
734 mupdf.pdf_dict_put_name( annot_obj, PDF_NAME('BM'), blend_mode)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
735
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
736 extg = mupdf.pdf_dict_get( resources, PDF_NAME('ExtGState'))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
737 if not extg.m_internal: # no ExtGState yet: make one
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
738 extg = mupdf.pdf_dict_put_dict( resources, PDF_NAME('ExtGState'), 2)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
739
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
740 mupdf.pdf_dict_put( extg, PDF_NAME('H'), alp0)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
741
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
742 except Exception as e:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
743 if g_exceptions_verbose: exception_info()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
744 message( f'cannot set opacity or blend mode\n: {e}')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
745 raise
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
746
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
747 return True
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
748
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
749 @property
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
750 def apn_bbox(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
751 """annotation appearance bbox"""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
752 CheckParent(self)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
753 annot = self.this
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
754 annot_obj = mupdf.pdf_annot_obj(annot)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
755 ap = mupdf.pdf_dict_getl(annot_obj, PDF_NAME('AP'), PDF_NAME('N'))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
756 if not ap.m_internal:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
757 val = JM_py_from_rect(mupdf.FzRect(mupdf.FzRect.Fixed_INFINITE))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
758 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
759 rect = mupdf.pdf_dict_get_rect(ap, PDF_NAME('BBox'))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
760 val = JM_py_from_rect(rect)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
761
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
762 val = Rect(val) * self.get_parent().transformation_matrix
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
763 val *= self.get_parent().derotation_matrix
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
764 return val
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
765
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
766 @property
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
767 def apn_matrix(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
768 """annotation appearance matrix"""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
769 try:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
770 CheckParent(self)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
771 annot = self.this
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
772 assert isinstance(annot, mupdf.PdfAnnot)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
773 ap = mupdf.pdf_dict_getl(
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
774 mupdf.pdf_annot_obj(annot),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
775 mupdf.PDF_ENUM_NAME_AP,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
776 mupdf.PDF_ENUM_NAME_N
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
777 )
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
778 if not ap.m_internal:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
779 return JM_py_from_matrix(mupdf.FzMatrix())
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
780 mat = mupdf.pdf_dict_get_matrix(ap, mupdf.PDF_ENUM_NAME_Matrix)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
781 val = JM_py_from_matrix(mat)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
782
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
783 val = Matrix(val)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
784
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
785 return val
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
786 except Exception:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
787 if g_exceptions_verbose: exception_info()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
788 raise
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
789
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
790 @property
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
791 def blendmode(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
792 """annotation BlendMode"""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
793 CheckParent(self)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
794 annot = self.this
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
795 annot_obj = mupdf.pdf_annot_obj(annot)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
796 obj = mupdf.pdf_dict_get(annot_obj, PDF_NAME('BM'))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
797 blend_mode = None
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
798 if obj.m_internal:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
799 blend_mode = JM_UnicodeFromStr(mupdf.pdf_to_name(obj))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
800 return blend_mode
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
801 # loop through the /AP/N/Resources/ExtGState objects
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
802 obj = mupdf.pdf_dict_getl(
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
803 annot_obj,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
804 PDF_NAME('AP'),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
805 PDF_NAME('N'),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
806 PDF_NAME('Resources'),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
807 PDF_NAME('ExtGState'),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
808 )
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
809 if mupdf.pdf_is_dict(obj):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
810 n = mupdf.pdf_dict_len(obj)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
811 for i in range(n):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
812 obj1 = mupdf.pdf_dict_get_val(obj, i)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
813 if mupdf.pdf_is_dict(obj1):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
814 m = mupdf.pdf_dict_len(obj1)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
815 for j in range(m):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
816 obj2 = mupdf.pdf_dict_get_key(obj1, j)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
817 if mupdf.pdf_objcmp(obj2, PDF_NAME('BM')) == 0:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
818 blend_mode = JM_UnicodeFromStr(mupdf.pdf_to_name(mupdf.pdf_dict_get_val(obj1, j)))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
819 return blend_mode
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
820 return blend_mode
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
821
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
822 @property
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
823 def border(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
824 """Border information."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
825 CheckParent(self)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
826 atype = self.type[0]
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
827 if atype not in (
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
828 mupdf.PDF_ANNOT_CIRCLE,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
829 mupdf.PDF_ANNOT_FREE_TEXT,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
830 mupdf.PDF_ANNOT_INK,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
831 mupdf.PDF_ANNOT_LINE,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
832 mupdf.PDF_ANNOT_POLY_LINE,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
833 mupdf.PDF_ANNOT_POLYGON,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
834 mupdf.PDF_ANNOT_SQUARE,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
835 ):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
836 return dict()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
837 ao = mupdf.pdf_annot_obj(self.this)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
838 ret = JM_annot_border(ao)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
839 return ret
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
840
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
841 def clean_contents(self, sanitize=1):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
842 """Clean appearance contents stream."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
843 CheckParent(self)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
844 annot = self.this
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
845 pdf = mupdf.pdf_get_bound_document(mupdf.pdf_annot_obj(annot))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
846 filter_ = _make_PdfFilterOptions(recurse=1, instance_forms=0, ascii=0, sanitize=sanitize)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
847 mupdf.pdf_filter_annot_contents(pdf, annot, filter_)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
848
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
849 @property
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
850 def colors(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
851 """Color definitions."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
852 try:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
853 CheckParent(self)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
854 annot = self.this
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
855 assert isinstance(annot, mupdf.PdfAnnot)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
856 return JM_annot_colors(mupdf.pdf_annot_obj(annot))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
857 except Exception:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
858 if g_exceptions_verbose: exception_info()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
859 raise
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
860
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
861 def delete_responses(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
862 """Delete 'Popup' and responding annotations."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
863 CheckParent(self)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
864 annot = self.this
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
865 annot_obj = mupdf.pdf_annot_obj(annot)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
866 page = _pdf_annot_page(annot)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
867 while 1:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
868 irt_annot = JM_find_annot_irt(annot)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
869 if not irt_annot:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
870 break
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
871 mupdf.pdf_delete_annot(page, irt_annot)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
872 mupdf.pdf_dict_del(annot_obj, PDF_NAME('Popup'))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
873
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
874 annots = mupdf.pdf_dict_get(page.obj(), PDF_NAME('Annots'))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
875 n = mupdf.pdf_array_len(annots)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
876 found = 0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
877 for i in range(n-1, -1, -1):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
878 o = mupdf.pdf_array_get(annots, i)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
879 p = mupdf.pdf_dict_get(o, PDF_NAME('Parent'))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
880 if not o.m_internal:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
881 continue
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
882 if not mupdf.pdf_objcmp(p, annot_obj):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
883 mupdf.pdf_array_delete(annots, i)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
884 found = 1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
885 if found:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
886 mupdf.pdf_dict_put(page.obj(), PDF_NAME('Annots'), annots)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
887
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
888 @property
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
889 def file_info(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
890 """Attached file information."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
891 CheckParent(self)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
892 res = dict()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
893 length = -1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
894 size = -1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
895 desc = None
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
896 annot = self.this
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
897 annot_obj = mupdf.pdf_annot_obj(annot)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
898 type_ = mupdf.pdf_annot_type(annot)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
899 if type_ != mupdf.PDF_ANNOT_FILE_ATTACHMENT:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
900 raise TypeError( MSG_BAD_ANNOT_TYPE)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
901 stream = mupdf.pdf_dict_getl(
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
902 annot_obj,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
903 PDF_NAME('FS'),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
904 PDF_NAME('EF'),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
905 PDF_NAME('F'),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
906 )
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
907 if not stream.m_internal:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
908 RAISEPY( "bad PDF: file entry not found", JM_Exc_FileDataError)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
909
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
910 fs = mupdf.pdf_dict_get(annot_obj, PDF_NAME('FS'))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
911
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
912 o = mupdf.pdf_dict_get(fs, PDF_NAME('UF'))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
913 if o.m_internal:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
914 filename = mupdf.pdf_to_text_string(o)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
915 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
916 o = mupdf.pdf_dict_get(fs, PDF_NAME('F'))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
917 if o.m_internal:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
918 filename = mupdf.pdf_to_text_string(o)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
919
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
920 o = mupdf.pdf_dict_get(fs, PDF_NAME('Desc'))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
921 if o.m_internal:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
922 desc = mupdf.pdf_to_text_string(o)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
923
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
924 o = mupdf.pdf_dict_get(stream, PDF_NAME('Length'))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
925 if o.m_internal:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
926 length = mupdf.pdf_to_int(o)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
927
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
928 o = mupdf.pdf_dict_getl(stream, PDF_NAME('Params'), PDF_NAME('Size'))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
929 if o.m_internal:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
930 size = mupdf.pdf_to_int(o)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
931
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
932 res[ dictkey_filename] = JM_EscapeStrFromStr(filename)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
933 res[ dictkey_descr] = JM_UnicodeFromStr(desc)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
934 res[ dictkey_length] = length
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
935 res[ dictkey_size] = size
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
936 return res
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
937
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
938 @property
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
939 def flags(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
940 """Flags field."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
941 CheckParent(self)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
942 annot = self.this
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
943 return mupdf.pdf_annot_flags(annot)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
944
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
945 def get_file(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
946 """Retrieve attached file content."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
947 CheckParent(self)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
948 annot = self.this
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
949 annot_obj = mupdf.pdf_annot_obj(annot)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
950 type = mupdf.pdf_annot_type(annot)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
951 if type != mupdf.PDF_ANNOT_FILE_ATTACHMENT:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
952 raise TypeError( MSG_BAD_ANNOT_TYPE)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
953 stream = mupdf.pdf_dict_getl(annot_obj, PDF_NAME('FS'), PDF_NAME('EF'), PDF_NAME('F'))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
954 if not stream.m_internal:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
955 RAISEPY( "bad PDF: file entry not found", JM_Exc_FileDataError)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
956 buf = mupdf.pdf_load_stream(stream)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
957 res = JM_BinFromBuffer(buf)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
958 return res
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
959
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
960 def get_oc(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
961 """Get annotation optional content reference."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
962 CheckParent(self)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
963 oc = 0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
964 annot = self.this
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
965 annot_obj = mupdf.pdf_annot_obj(annot)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
966 obj = mupdf.pdf_dict_get(annot_obj, PDF_NAME('OC'))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
967 if obj.m_internal:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
968 oc = mupdf.pdf_to_num(obj)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
969 return oc
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
970
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
971 # PyMuPDF doesn't seem to have this .parent member, but removing it breaks
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
972 # 11 tests...?
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
973 #@property
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
974 def get_parent(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
975 try:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
976 ret = getattr( self, 'parent')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
977 except AttributeError:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
978 page = _pdf_annot_page(self.this)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
979 assert isinstance( page, mupdf.PdfPage)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
980 document = Document( page.doc()) if page.m_internal else None
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
981 ret = Page(page, document)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
982 #self.parent = weakref.proxy( ret)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
983 self.parent = ret
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
984 #log(f'No attribute .parent: {type(self)=} {id(self)=}: have set {id(self.parent)=}.')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
985 #log( f'Have set self.parent')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
986 return ret
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
987
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
988 def get_pixmap(self, matrix=None, dpi=None, colorspace=None, alpha=0):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
989 """annotation Pixmap"""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
990
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
991 CheckParent(self)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
992 cspaces = {"gray": csGRAY, "rgb": csRGB, "cmyk": csCMYK}
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
993 if type(colorspace) is str:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
994 colorspace = cspaces.get(colorspace.lower(), None)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
995 if dpi:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
996 matrix = Matrix(dpi / 72, dpi / 72)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
997 ctm = JM_matrix_from_py(matrix)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
998 cs = colorspace
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
999 if not cs:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1000 cs = mupdf.fz_device_rgb()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1001
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1002 pix = mupdf.pdf_new_pixmap_from_annot(self.this, ctm, cs, mupdf.FzSeparations(0), alpha)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1003 ret = Pixmap(pix)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1004 if dpi:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1005 ret.set_dpi(dpi, dpi)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1006 return ret
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1007
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1008 def get_sound(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1009 """Retrieve sound stream."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1010 CheckParent(self)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1011 annot = self.this
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1012 annot_obj = mupdf.pdf_annot_obj(annot)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1013 type = mupdf.pdf_annot_type(annot)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1014 sound = mupdf.pdf_dict_get(annot_obj, PDF_NAME('Sound'))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1015 if type != mupdf.PDF_ANNOT_SOUND or not sound.m_internal:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1016 raise TypeError( MSG_BAD_ANNOT_TYPE)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1017 if mupdf.pdf_dict_get(sound, PDF_NAME('F')).m_internal:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1018 RAISEPY( "unsupported sound stream", JM_Exc_FileDataError)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1019 res = dict()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1020 obj = mupdf.pdf_dict_get(sound, PDF_NAME('R'))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1021 if obj.m_internal:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1022 res['rate'] = mupdf.pdf_to_real(obj)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1023 obj = mupdf.pdf_dict_get(sound, PDF_NAME('C'))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1024 if obj.m_internal:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1025 res['channels'] = mupdf.pdf_to_int(obj)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1026 obj = mupdf.pdf_dict_get(sound, PDF_NAME('B'))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1027 if obj.m_internal:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1028 res['bps'] = mupdf.pdf_to_int(obj)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1029 obj = mupdf.pdf_dict_get(sound, PDF_NAME('E'))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1030 if obj.m_internal:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1031 res['encoding'] = mupdf.pdf_to_name(obj)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1032 obj = mupdf.pdf_dict_gets(sound, "CO")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1033 if obj.m_internal:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1034 res['compression'] = mupdf.pdf_to_name(obj)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1035 buf = mupdf.pdf_load_stream(sound)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1036 stream = JM_BinFromBuffer(buf)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1037 res['stream'] = stream
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1038 return res
39
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
1039
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
1040 def get_text(self, *args, **kwargs):
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
1041 return utils.get_text(self, *args, **kwargs)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
1042
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
1043 def get_textbox(self, *args, **kwargs):
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
1044 return utils.get_textbox(self, *args, **kwargs)
1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1045
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1046 def get_textpage(self, clip=None, flags=0):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1047 """Make annotation TextPage."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1048 CheckParent(self)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1049 options = mupdf.FzStextOptions(flags)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1050 if clip:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1051 assert hasattr(mupdf, 'FZ_STEXT_CLIP_RECT'), f'MuPDF-{mupdf_version} does not support FZ_STEXT_CLIP_RECT.'
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1052 clip2 = JM_rect_from_py(clip)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1053 options.clip = clip2.internal()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1054 options.flags |= mupdf.FZ_STEXT_CLIP_RECT
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1055 annot = self.this
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1056 stextpage = mupdf.FzStextPage(annot, options)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1057 ret = TextPage(stextpage)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1058 p = self.get_parent()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1059 if isinstance(p, weakref.ProxyType):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1060 ret.parent = p
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1061 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1062 ret.parent = weakref.proxy(p)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1063 return ret
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1064
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1065 @property
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1066 def has_popup(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1067 """Check if annotation has a Popup."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1068 CheckParent(self)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1069 annot = self.this
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1070 obj = mupdf.pdf_dict_get(mupdf.pdf_annot_obj(annot), PDF_NAME('Popup'))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1071 return True if obj.m_internal else False
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1072
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1073 @property
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1074 def info(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1075 """Various information details."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1076 CheckParent(self)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1077 annot = self.this
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1078 res = dict()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1079
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1080 res[dictkey_content] = JM_UnicodeFromStr(mupdf.pdf_annot_contents(annot))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1081
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1082 o = mupdf.pdf_dict_get(mupdf.pdf_annot_obj(annot), PDF_NAME('Name'))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1083 res[dictkey_name] = JM_UnicodeFromStr(mupdf.pdf_to_name(o))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1084
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1085 # Title (= author)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1086 o = mupdf.pdf_dict_get(mupdf.pdf_annot_obj(annot), PDF_NAME('T'))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1087 res[dictkey_title] = JM_UnicodeFromStr(mupdf.pdf_to_text_string(o))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1088
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1089 # CreationDate
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1090 o = mupdf.pdf_dict_gets(mupdf.pdf_annot_obj(annot), "CreationDate")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1091 res[dictkey_creationDate] = JM_UnicodeFromStr(mupdf.pdf_to_text_string(o))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1092
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1093 # ModDate
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1094 o = mupdf.pdf_dict_get(mupdf.pdf_annot_obj(annot), PDF_NAME('M'))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1095 res[dictkey_modDate] = JM_UnicodeFromStr(mupdf.pdf_to_text_string(o))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1096
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1097 # Subj
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1098 o = mupdf.pdf_dict_gets(mupdf.pdf_annot_obj(annot), "Subj")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1099 res[dictkey_subject] = mupdf.pdf_to_text_string(o)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1100
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1101 # Identification (PDF key /NM)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1102 o = mupdf.pdf_dict_gets(mupdf.pdf_annot_obj(annot), "NM")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1103 res[dictkey_id] = JM_UnicodeFromStr(mupdf.pdf_to_text_string(o))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1104
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1105 return res
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1106
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1107 @property
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1108 def irt_xref(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1109 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1110 annotation IRT xref
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1111 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1112 annot = self.this
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1113 annot_obj = mupdf.pdf_annot_obj( annot)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1114 irt = mupdf.pdf_dict_get( annot_obj, PDF_NAME('IRT'))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1115 if not irt.m_internal:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1116 return 0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1117 return mupdf.pdf_to_num( irt)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1118
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1119 @property
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1120 def is_open(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1121 """Get 'open' status of annotation or its Popup."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1122 CheckParent(self)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1123 return mupdf.pdf_annot_is_open(self.this)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1124
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1125 @property
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1126 def language(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1127 """annotation language"""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1128 this_annot = self.this
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1129 lang = mupdf.pdf_annot_language(this_annot)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1130 if lang == mupdf.FZ_LANG_UNSET:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1131 return
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1132 assert hasattr(mupdf, 'fz_string_from_text_language2')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1133 return mupdf.fz_string_from_text_language2(lang)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1134
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1135 @property
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1136 def line_ends(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1137 """Line end codes."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1138 CheckParent(self)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1139 annot = self.this
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1140 # return nothing for invalid annot types
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1141 if not mupdf.pdf_annot_has_line_ending_styles(annot):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1142 return
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1143 lstart = mupdf.pdf_annot_line_start_style(annot)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1144 lend = mupdf.pdf_annot_line_end_style(annot)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1145 return lstart, lend
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1146
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1147 @property
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1148 def next(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1149 """Next annotation."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1150 CheckParent(self)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1151 this_annot = self.this
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1152 assert isinstance(this_annot, mupdf.PdfAnnot)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1153 assert this_annot.m_internal
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1154 type_ = mupdf.pdf_annot_type(this_annot)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1155 if type_ != mupdf.PDF_ANNOT_WIDGET:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1156 annot = mupdf.pdf_next_annot(this_annot)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1157 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1158 annot = mupdf.pdf_next_widget(this_annot)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1159
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1160 val = Annot(annot) if annot.m_internal else None
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1161 if not val:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1162 return None
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1163 val.thisown = True
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1164 assert val.get_parent().this.m_internal_value() == self.get_parent().this.m_internal_value()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1165 val.parent._annot_refs[id(val)] = val
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1166
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1167 if val.type[0] == mupdf.PDF_ANNOT_WIDGET:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1168 widget = Widget()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1169 TOOLS._fill_widget(val, widget)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1170 val = widget
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1171 return val
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1172
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1173 @property
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1174 def opacity(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1175 """Opacity."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1176 CheckParent(self)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1177 annot = self.this
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1178 opy = -1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1179 ca = mupdf.pdf_dict_get( mupdf.pdf_annot_obj(annot), mupdf.PDF_ENUM_NAME_CA)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1180 if mupdf.pdf_is_number(ca):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1181 opy = mupdf.pdf_to_real(ca)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1182 return opy
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1183
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1184 @property
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1185 def popup_rect(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1186 """annotation 'Popup' rectangle"""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1187 CheckParent(self)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1188 rect = mupdf.FzRect(mupdf.FzRect.Fixed_INFINITE)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1189 annot = self.this
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1190 annot_obj = mupdf.pdf_annot_obj( annot)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1191 obj = mupdf.pdf_dict_get( annot_obj, PDF_NAME('Popup'))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1192 if obj.m_internal:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1193 rect = mupdf.pdf_dict_get_rect(obj, PDF_NAME('Rect'))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1194 #log( '{rect=}')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1195 val = JM_py_from_rect(rect)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1196 #log( '{val=}')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1197
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1198 val = Rect(val) * self.get_parent().transformation_matrix
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1199 val *= self.get_parent().derotation_matrix
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1200
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1201 return val
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1202
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1203 @property
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1204 def popup_xref(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1205 """annotation 'Popup' xref"""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1206 CheckParent(self)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1207 xref = 0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1208 annot = self.this
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1209 annot_obj = mupdf.pdf_annot_obj(annot)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1210 obj = mupdf.pdf_dict_get(annot_obj, PDF_NAME('Popup'))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1211 if obj.m_internal:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1212 xref = mupdf.pdf_to_num(obj)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1213 return xref
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1214
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1215 @property
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1216 def rect(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1217 """annotation rectangle"""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1218 if g_use_extra:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1219 val = extra.Annot_rect3( self.this)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1220 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1221 val = mupdf.pdf_bound_annot(self.this)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1222 val = Rect(val)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1223
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1224 # Caching self.parent_() reduces 1000x from 0.07 to 0.04.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1225 #
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1226 p = self.get_parent()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1227 #p = getattr( self, 'parent', None)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1228 #if p is None:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1229 # p = self.parent
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1230 # self.parent = p
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1231 #p = self.parent_()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1232 val *= p.derotation_matrix
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1233 return val
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1234
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1235 @property
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1236 def rect_delta(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1237 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1238 annotation delta values to rectangle
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1239 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1240 annot_obj = mupdf.pdf_annot_obj(self.this)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1241 arr = mupdf.pdf_dict_get( annot_obj, PDF_NAME('RD'))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1242 if mupdf.pdf_array_len( arr) == 4:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1243 return (
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1244 mupdf.pdf_to_real( mupdf.pdf_array_get( arr, 0)),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1245 mupdf.pdf_to_real( mupdf.pdf_array_get( arr, 1)),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1246 -mupdf.pdf_to_real( mupdf.pdf_array_get( arr, 2)),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1247 -mupdf.pdf_to_real( mupdf.pdf_array_get( arr, 3)),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1248 )
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1249
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1250 @property
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1251 def rotation(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1252 """annotation rotation"""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1253 CheckParent(self)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1254 annot = self.this
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1255 rotation = mupdf.pdf_dict_get( mupdf.pdf_annot_obj(annot), mupdf.PDF_ENUM_NAME_Rotate)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1256 if not rotation.m_internal:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1257 return -1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1258 return mupdf.pdf_to_int( rotation)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1259
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1260 def set_apn_bbox(self, bbox):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1261 """
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1262 Set annotation appearance bbox.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1263 """
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1264 CheckParent(self)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1265 page = self.get_parent()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1266 rot = page.rotation_matrix
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1267 mat = page.transformation_matrix
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1268 bbox *= rot * ~mat
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1269 annot = self.this
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1270 annot_obj = mupdf.pdf_annot_obj(annot)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1271 ap = mupdf.pdf_dict_getl(annot_obj, PDF_NAME('AP'), PDF_NAME('N'))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1272 if not ap.m_internal:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1273 raise RuntimeError( MSG_BAD_APN)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1274 rect = JM_rect_from_py(bbox)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1275 mupdf.pdf_dict_put_rect(ap, PDF_NAME('BBox'), rect)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1276
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1277 def set_apn_matrix(self, matrix):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1278 """Set annotation appearance matrix."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1279 CheckParent(self)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1280 annot = self.this
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1281 annot_obj = mupdf.pdf_annot_obj(annot)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1282 ap = mupdf.pdf_dict_getl(annot_obj, PDF_NAME('AP'), PDF_NAME('N'))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1283 if not ap.m_internal:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1284 raise RuntimeError( MSG_BAD_APN)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1285 mat = JM_matrix_from_py(matrix)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1286 mupdf.pdf_dict_put_matrix(ap, PDF_NAME('Matrix'), mat)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1287
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1288 def set_blendmode(self, blend_mode):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1289 """Set annotation BlendMode."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1290 CheckParent(self)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1291 annot = self.this
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1292 annot_obj = mupdf.pdf_annot_obj(annot)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1293 mupdf.pdf_dict_put_name(annot_obj, PDF_NAME('BM'), blend_mode)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1294
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1295 def set_border(self, border=None, width=-1, style=None, dashes=None, clouds=-1):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1296 """Set border properties.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1297
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1298 Either a dict, or direct arguments width, style, dashes or clouds."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1299 CheckParent(self)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1300 atype, atname = self.type[:2] # annotation type
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1301 if atype not in (
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1302 mupdf.PDF_ANNOT_CIRCLE,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1303 mupdf.PDF_ANNOT_FREE_TEXT,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1304 mupdf.PDF_ANNOT_INK,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1305 mupdf.PDF_ANNOT_LINE,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1306 mupdf.PDF_ANNOT_POLY_LINE,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1307 mupdf.PDF_ANNOT_POLYGON,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1308 mupdf.PDF_ANNOT_SQUARE,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1309 ):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1310 message(f"Cannot set border for '{atname}'.")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1311 return None
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1312 if atype not in (
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1313 mupdf.PDF_ANNOT_CIRCLE,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1314 mupdf.PDF_ANNOT_FREE_TEXT,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1315 mupdf.PDF_ANNOT_POLYGON,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1316 mupdf.PDF_ANNOT_SQUARE,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1317 ):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1318 if clouds > 0:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1319 message(f"Cannot set cloudy border for '{atname}'.")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1320 clouds = -1 # do not set border effect
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1321 if type(border) is not dict:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1322 border = {"width": width, "style": style, "dashes": dashes, "clouds": clouds}
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1323 border.setdefault("width", -1)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1324 border.setdefault("style", None)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1325 border.setdefault("dashes", None)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1326 border.setdefault("clouds", -1)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1327 if border["width"] is None:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1328 border["width"] = -1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1329 if border["clouds"] is None:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1330 border["clouds"] = -1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1331 if hasattr(border["dashes"], "__getitem__"): # ensure sequence items are integers
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1332 border["dashes"] = tuple(border["dashes"])
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1333 for item in border["dashes"]:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1334 if not isinstance(item, int):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1335 border["dashes"] = None
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1336 break
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1337 annot = self.this
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1338 annot_obj = mupdf.pdf_annot_obj( annot)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1339 pdf = mupdf.pdf_get_bound_document( annot_obj)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1340 return JM_annot_set_border( border, pdf, annot_obj)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1341
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1342 def set_colors(self, colors=None, stroke=None, fill=None):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1343 """Set 'stroke' and 'fill' colors.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1344
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1345 Use either a dict or the direct arguments.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1346 """
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1347 if self.type[0] == mupdf.PDF_ANNOT_FREE_TEXT:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1348 raise ValueError("cannot be used for FreeText annotations")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1349
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1350 CheckParent(self)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1351 doc = self.get_parent().parent
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1352 if type(colors) is not dict:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1353 colors = {"fill": fill, "stroke": stroke}
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1354 fill = colors.get("fill")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1355 stroke = colors.get("stroke")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1356
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1357 fill_annots = (mupdf.PDF_ANNOT_CIRCLE, mupdf.PDF_ANNOT_SQUARE, mupdf.PDF_ANNOT_LINE, mupdf.PDF_ANNOT_POLY_LINE, mupdf.PDF_ANNOT_POLYGON,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1358 mupdf.PDF_ANNOT_REDACT,)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1359
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1360 if stroke in ([], ()):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1361 doc.xref_set_key(self.xref, "C", "[]")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1362 elif stroke is not None:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1363 if hasattr(stroke, "__float__"):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1364 stroke = [float(stroke)]
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1365 CheckColor(stroke)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1366 assert len(stroke) in (1, 3, 4)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1367 s = f"[{_format_g(stroke)}]"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1368 doc.xref_set_key(self.xref, "C", s)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1369
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1370 if fill and self.type[0] not in fill_annots:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1371 message("Warning: fill color ignored for annot type '%s'." % self.type[1])
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1372 return
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1373 if fill in ([], ()):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1374 doc.xref_set_key(self.xref, "IC", "[]")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1375 elif fill is not None:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1376 if hasattr(fill, "__float__"):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1377 fill = [float(fill)]
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1378 CheckColor(fill)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1379 assert len(fill) in (1, 3, 4)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1380 s = f"[{_format_g(fill)}]"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1381 doc.xref_set_key(self.xref, "IC", s)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1382
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1383 def set_flags(self, flags):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1384 """Set annotation flags."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1385 CheckParent(self)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1386 annot = self.this
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1387 mupdf.pdf_set_annot_flags(annot, flags)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1388
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1389 def set_info(self, info=None, content=None, title=None, creationDate=None, modDate=None, subject=None):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1390 """Set various properties."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1391 CheckParent(self)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1392 if type(info) is dict: # build the args from the dictionary
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1393 content = info.get("content", None)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1394 title = info.get("title", None)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1395 creationDate = info.get("creationDate", None)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1396 modDate = info.get("modDate", None)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1397 subject = info.get("subject", None)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1398 info = None
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1399 annot = self.this
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1400 # use this to indicate a 'markup' annot type
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1401 is_markup = mupdf.pdf_annot_has_author(annot)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1402 # contents
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1403 if content:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1404 mupdf.pdf_set_annot_contents(annot, content)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1405 if is_markup:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1406 # title (= author)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1407 if title:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1408 mupdf.pdf_set_annot_author(annot, title)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1409 # creation date
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1410 if creationDate:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1411 mupdf.pdf_dict_put_text_string(mupdf.pdf_annot_obj(annot), PDF_NAME('CreationDate'), creationDate)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1412 # mod date
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1413 if modDate:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1414 mupdf.pdf_dict_put_text_string(mupdf.pdf_annot_obj(annot), PDF_NAME('M'), modDate)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1415 # subject
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1416 if subject:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1417 mupdf.pdf_dict_puts(mupdf.pdf_annot_obj(annot), "Subj", mupdf.pdf_new_text_string(subject))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1418
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1419 def set_irt_xref(self, xref):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1420 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1421 Set annotation IRT xref
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1422 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1423 annot = self.this
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1424 annot_obj = mupdf.pdf_annot_obj( annot)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1425 page = _pdf_annot_page(annot)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1426 if xref < 1 or xref >= mupdf.pdf_xref_len( page.doc()):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1427 raise ValueError( MSG_BAD_XREF)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1428 irt = mupdf.pdf_new_indirect( page.doc(), xref, 0)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1429 subt = mupdf.pdf_dict_get( irt, PDF_NAME('Subtype'))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1430 irt_subt = mupdf.pdf_annot_type_from_string( mupdf.pdf_to_name( subt))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1431 if irt_subt < 0:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1432 raise ValueError( MSG_IS_NO_ANNOT)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1433 mupdf.pdf_dict_put( annot_obj, PDF_NAME('IRT'), irt)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1434
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1435 def set_language(self, language=None):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1436 """Set annotation language."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1437 CheckParent(self)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1438 this_annot = self.this
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1439 if not language:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1440 lang = mupdf.FZ_LANG_UNSET
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1441 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1442 lang = mupdf.fz_text_language_from_string(language)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1443 mupdf.pdf_set_annot_language(this_annot, lang)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1444
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1445 def set_line_ends(self, start, end):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1446 """Set line end codes."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1447 CheckParent(self)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1448 annot = self.this
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1449 if mupdf.pdf_annot_has_line_ending_styles(annot):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1450 mupdf.pdf_set_annot_line_ending_styles(annot, start, end)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1451 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1452 message_warning("bad annot type for line ends")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1453
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1454 def set_name(self, name):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1455 """Set /Name (icon) of annotation."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1456 CheckParent(self)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1457 annot = self.this
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1458 annot_obj = mupdf.pdf_annot_obj(annot)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1459 mupdf.pdf_dict_put_name(annot_obj, PDF_NAME('Name'), name)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1460
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1461 def set_oc(self, oc=0):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1462 """Set / remove annotation OC xref."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1463 CheckParent(self)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1464 annot = self.this
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1465 annot_obj = mupdf.pdf_annot_obj(annot)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1466 if not oc:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1467 mupdf.pdf_dict_del(annot_obj, PDF_NAME('OC'))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1468 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1469 JM_add_oc_object(mupdf.pdf_get_bound_document(annot_obj), annot_obj, oc)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1470
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1471 def set_opacity(self, opacity):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1472 """Set opacity."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1473 CheckParent(self)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1474 annot = self.this
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1475 if not _INRANGE(opacity, 0.0, 1.0):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1476 mupdf.pdf_set_annot_opacity(annot, 1)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1477 return
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1478 mupdf.pdf_set_annot_opacity(annot, opacity)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1479 if opacity < 1.0:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1480 page = _pdf_annot_page(annot)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1481 page.transparency = 1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1482
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1483 def set_open(self, is_open):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1484 """Set 'open' status of annotation or its Popup."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1485 CheckParent(self)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1486 annot = self.this
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1487 mupdf.pdf_set_annot_is_open(annot, is_open)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1488
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1489 def set_popup(self, rect):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1490 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1491 Create annotation 'Popup' or update rectangle.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1492 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1493 CheckParent(self)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1494 annot = self.this
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1495 pdfpage = _pdf_annot_page(annot)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1496 rot = JM_rotate_page_matrix(pdfpage)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1497 r = mupdf.fz_transform_rect(JM_rect_from_py(rect), rot)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1498 mupdf.pdf_set_annot_popup(annot, r)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1499
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1500 def set_rect(self, rect):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1501 """Set annotation rectangle."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1502 CheckParent(self)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1503 annot = self.this
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1504
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1505 pdfpage = _pdf_annot_page(annot)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1506 rot = JM_rotate_page_matrix(pdfpage)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1507 r = mupdf.fz_transform_rect(JM_rect_from_py(rect), rot)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1508 if mupdf.fz_is_empty_rect(r) or mupdf.fz_is_infinite_rect(r):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1509 raise ValueError( MSG_BAD_RECT)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1510 try:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1511 mupdf.pdf_set_annot_rect(annot, r)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1512 except Exception as e:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1513 message(f'cannot set rect: {e}')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1514 return False
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1515
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1516 def set_rotation(self, rotate=0):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1517 """Set annotation rotation."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1518 CheckParent(self)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1519
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1520 annot = self.this
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1521 type = mupdf.pdf_annot_type(annot)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1522 if type not in (
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1523 mupdf.PDF_ANNOT_CARET,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1524 mupdf.PDF_ANNOT_CIRCLE,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1525 mupdf.PDF_ANNOT_FREE_TEXT,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1526 mupdf.PDF_ANNOT_FILE_ATTACHMENT,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1527 mupdf.PDF_ANNOT_INK,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1528 mupdf.PDF_ANNOT_LINE,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1529 mupdf.PDF_ANNOT_POLY_LINE,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1530 mupdf.PDF_ANNOT_POLYGON,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1531 mupdf.PDF_ANNOT_SQUARE,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1532 mupdf.PDF_ANNOT_STAMP,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1533 mupdf.PDF_ANNOT_TEXT,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1534 ):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1535 return
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1536 rot = rotate
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1537 while rot < 0:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1538 rot += 360
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1539 while rot >= 360:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1540 rot -= 360
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1541 if type == mupdf.PDF_ANNOT_FREE_TEXT and rot % 90 != 0:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1542 rot = 0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1543 annot_obj = mupdf.pdf_annot_obj(annot)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1544 mupdf.pdf_dict_put_int(annot_obj, PDF_NAME('Rotate'), rot)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1545
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1546 @property
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1547 def type(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1548 """annotation type"""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1549 CheckParent(self)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1550 if not self.this.m_internal:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1551 return 'null'
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1552 type_ = mupdf.pdf_annot_type(self.this)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1553 c = mupdf.pdf_string_from_annot_type(type_)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1554 o = mupdf.pdf_dict_gets( mupdf.pdf_annot_obj(self.this), 'IT')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1555 if not o.m_internal or mupdf.pdf_is_name(o):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1556 return (type_, c)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1557 it = mupdf.pdf_to_name(o)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1558 return (type_, c, it)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1559
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1560 def update(self,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1561 blend_mode: OptStr =None,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1562 opacity: OptFloat =None,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1563 fontsize: float =0,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1564 fontname: OptStr =None,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1565 text_color: OptSeq =None,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1566 border_color: OptSeq =None,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1567 fill_color: OptSeq =None,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1568 cross_out: bool =True,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1569 rotate: int =-1,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1570 ):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1571 """Update annot appearance.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1572
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1573 Notes:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1574 Depending on the annot type, some parameters make no sense,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1575 while others are only available in this method to achieve the
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1576 desired result. This is especially true for 'FreeText' annots.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1577 Args:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1578 blend_mode: set the blend mode, all annotations.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1579 opacity: set the opacity, all annotations.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1580 fontsize: set fontsize, 'FreeText' only.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1581 fontname: set the font, 'FreeText' only.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1582 border_color: set border color, 'FreeText' only.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1583 text_color: set text color, 'FreeText' only.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1584 fill_color: set fill color, all annotations.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1585 cross_out: draw diagonal lines, 'Redact' only.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1586 rotate: set rotation, 'FreeText' and some others.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1587 """
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1588 annot_obj = mupdf.pdf_annot_obj(self.this)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1589
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1590 if border_color:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1591 is_rich_text = mupdf.pdf_dict_get(annot_obj, PDF_NAME("RC"))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1592 if not is_rich_text:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1593 raise ValueError("cannot set border_color if rich_text is False")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1594 Annot.update_timing_test()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1595 CheckParent(self)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1596 def color_string(cs, code):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1597 """Return valid PDF color operator for a given color sequence.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1598 """
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1599 cc = ColorCode(cs, code)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1600 if not cc:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1601 return b""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1602 return (cc + "\n").encode()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1603
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1604 annot_type = self.type[0] # get the annot type
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1605
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1606 dt = self.border.get("dashes", None) # get the dashes spec
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1607 bwidth = self.border.get("width", -1) # get border line width
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1608 stroke = self.colors["stroke"] # get the stroke color
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1609 if fill_color is not None:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1610 fill = fill_color
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1611 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1612 fill = self.colors["fill"]
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1613 rect = None # self.rect # prevent MuPDF fiddling with it
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1614 apnmat = self.apn_matrix # prevent MuPDF fiddling with it
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1615 if rotate != -1: # sanitize rotation value
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1616 while rotate < 0:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1617 rotate += 360
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1618 while rotate >= 360:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1619 rotate -= 360
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1620 if annot_type == mupdf.PDF_ANNOT_FREE_TEXT and rotate % 90 != 0:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1621 rotate = 0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1622
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1623 #------------------------------------------------------------------
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1624 # handle opacity and blend mode
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1625 #------------------------------------------------------------------
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1626 if blend_mode is None:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1627 blend_mode = self.blendmode
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1628 if not hasattr(opacity, "__float__"):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1629 opacity = self.opacity
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1630
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1631 if 0 <= opacity < 1 or blend_mode:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1632 opa_code = "/H gs\n" # then we must reference this 'gs'
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1633 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1634 opa_code = ""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1635
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1636 if annot_type == mupdf.PDF_ANNOT_FREE_TEXT:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1637 CheckColor(text_color)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1638 CheckColor(fill_color)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1639 tcol, fname, fsize = TOOLS._parse_da(self)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1640
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1641 # read and update default appearance as necessary
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1642 if fsize <= 0:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1643 fsize = 12
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1644 if text_color:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1645 tcol = text_color
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1646 if fontname:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1647 fname = fontname
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1648 if fontsize > 0:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1649 fsize = fontsize
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1650 JM_make_annot_DA(self, len(tcol), tcol, fname, fsize)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1651 blend_mode = None # not supported for free text annotations!
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1652
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1653 #------------------------------------------------------------------
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1654 # now invoke MuPDF to update the annot appearance
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1655 #------------------------------------------------------------------
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1656 val = self._update_appearance(
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1657 opacity=opacity,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1658 blend_mode=blend_mode,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1659 fill_color=fill,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1660 rotate=rotate,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1661 )
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1662 if val is False:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1663 raise RuntimeError("Error updating annotation.")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1664
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1665 if annot_type == mupdf.PDF_ANNOT_FREE_TEXT:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1666 # in absence of previous opacity, we may need to modify the AP
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1667 ap = self._getAP()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1668 if 0 <= opacity < 1 and not ap.startswith(b"/H gs"):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1669 self._setAP(b"/H gs\n" + ap)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1670 return
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1671
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1672 bfill = color_string(fill, "f")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1673 bstroke = color_string(stroke, "c")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1674
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1675 p_ctm = self.get_parent().transformation_matrix
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1676 imat = ~p_ctm # inverse page transf. matrix
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1677
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1678 if dt:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1679 dashes = "[" + " ".join(map(str, dt)) + "] 0 d\n"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1680 dashes = dashes.encode("utf-8")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1681 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1682 dashes = None
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1683
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1684 if self.line_ends:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1685 line_end_le, line_end_ri = self.line_ends
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1686 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1687 line_end_le, line_end_ri = 0, 0 # init line end codes
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1688
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1689 # read contents as created by MuPDF
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1690 ap = self._getAP()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1691 ap_tab = ap.splitlines() # split in single lines
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1692 ap_updated = False # assume we did nothing
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1693
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1694 if annot_type == mupdf.PDF_ANNOT_REDACT:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1695 if cross_out: # create crossed-out rect
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1696 ap_updated = True
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1697 ap_tab = ap_tab[:-1]
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1698 _, LL, LR, UR, UL = ap_tab
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1699 ap_tab.append(LR)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1700 ap_tab.append(LL)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1701 ap_tab.append(UR)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1702 ap_tab.append(LL)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1703 ap_tab.append(UL)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1704 ap_tab.append(b"S")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1705
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1706 if bwidth > 0 or bstroke != b"":
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1707 ap_updated = True
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1708 ntab = [_format_g(bwidth).encode() + b" w"] if bwidth > 0 else []
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1709 for line in ap_tab:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1710 if line.endswith(b"w"):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1711 continue
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1712 if line.endswith(b"RG") and bstroke != b"":
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1713 line = bstroke[:-1]
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1714 ntab.append(line)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1715 ap_tab = ntab
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1716
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1717 ap = b"\n".join(ap_tab)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1718
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1719 if annot_type in (mupdf.PDF_ANNOT_POLYGON, mupdf.PDF_ANNOT_POLY_LINE):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1720 ap = b"\n".join(ap_tab[:-1]) + b"\n"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1721 ap_updated = True
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1722 if bfill != b"":
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1723 if annot_type == mupdf.PDF_ANNOT_POLYGON:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1724 ap = ap + bfill + b"b" # close, fill, and stroke
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1725 elif annot_type == mupdf.PDF_ANNOT_POLY_LINE:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1726 ap = ap + b"S" # stroke
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1727 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1728 if annot_type == mupdf.PDF_ANNOT_POLYGON:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1729 ap = ap + b"s" # close and stroke
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1730 elif annot_type == mupdf.PDF_ANNOT_POLY_LINE:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1731 ap = ap + b"S" # stroke
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1732
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1733 if dashes is not None: # handle dashes
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1734 ap = dashes + ap
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1735 # reset dashing - only applies for LINE annots with line ends given
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1736 ap = ap.replace(b"\nS\n", b"\nS\n[] 0 d\n", 1)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1737 ap_updated = True
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1738
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1739 if opa_code:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1740 ap = opa_code.encode("utf-8") + ap
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1741 ap_updated = True
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1742
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1743 ap = b"q\n" + ap + b"\nQ\n"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1744 #----------------------------------------------------------------------
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1745 # the following handles line end symbols for 'Polygon' and 'Polyline'
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1746 #----------------------------------------------------------------------
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1747 if line_end_le + line_end_ri > 0 and annot_type in (mupdf.PDF_ANNOT_POLYGON, mupdf.PDF_ANNOT_POLY_LINE):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1748
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1749 le_funcs = (None, TOOLS._le_square, TOOLS._le_circle,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1750 TOOLS._le_diamond, TOOLS._le_openarrow,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1751 TOOLS._le_closedarrow, TOOLS._le_butt,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1752 TOOLS._le_ropenarrow, TOOLS._le_rclosedarrow,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1753 TOOLS._le_slash)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1754 le_funcs_range = range(1, len(le_funcs))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1755 d = 2 * max(1, self.border["width"])
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1756 rect = self.rect + (-d, -d, d, d)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1757 ap_updated = True
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1758 points = self.vertices
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1759 if line_end_le in le_funcs_range:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1760 p1 = Point(points[0]) * imat
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1761 p2 = Point(points[1]) * imat
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1762 left = le_funcs[line_end_le](self, p1, p2, False, fill_color)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1763 ap += left.encode()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1764 if line_end_ri in le_funcs_range:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1765 p1 = Point(points[-2]) * imat
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1766 p2 = Point(points[-1]) * imat
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1767 left = le_funcs[line_end_ri](self, p1, p2, True, fill_color)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1768 ap += left.encode()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1769
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1770 if ap_updated:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1771 if rect: # rect modified here?
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1772 self.set_rect(rect)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1773 self._setAP(ap, rect=1)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1774 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1775 self._setAP(ap, rect=0)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1776
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1777 #-------------------------------
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1778 # handle annotation rotations
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1779 #-------------------------------
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1780 if annot_type not in ( # only these types are supported
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1781 mupdf.PDF_ANNOT_CARET,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1782 mupdf.PDF_ANNOT_CIRCLE,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1783 mupdf.PDF_ANNOT_FILE_ATTACHMENT,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1784 mupdf.PDF_ANNOT_INK,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1785 mupdf.PDF_ANNOT_LINE,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1786 mupdf.PDF_ANNOT_POLY_LINE,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1787 mupdf.PDF_ANNOT_POLYGON,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1788 mupdf.PDF_ANNOT_SQUARE,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1789 mupdf.PDF_ANNOT_STAMP,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1790 mupdf.PDF_ANNOT_TEXT,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1791 ):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1792 return
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1793
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1794 rot = self.rotation # get value from annot object
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1795 if rot == -1: # nothing to change
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1796 return
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1797
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1798 M = (self.rect.tl + self.rect.br) / 2 # center of annot rect
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1799
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1800 if rot == 0: # undo rotations
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1801 if abs(apnmat - Matrix(1, 1)) < 1e-5:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1802 return # matrix already is a no-op
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1803 quad = self.rect.morph(M, ~apnmat) # derotate rect
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1804 self.setRect(quad.rect)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1805 self.set_apn_matrix(Matrix(1, 1)) # appearance matrix = no-op
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1806 return
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1807
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1808 mat = Matrix(rot)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1809 quad = self.rect.morph(M, mat)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1810 self.set_rect(quad.rect)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1811 self.set_apn_matrix(apnmat * mat)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1812
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1813 def update_file(self, buffer_=None, filename=None, ufilename=None, desc=None):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1814 """Update attached file."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1815 CheckParent(self)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1816 annot = self.this
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1817 annot_obj = mupdf.pdf_annot_obj(annot)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1818 pdf = mupdf.pdf_get_bound_document(annot_obj) # the owning PDF
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1819 type = mupdf.pdf_annot_type(annot)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1820 if type != mupdf.PDF_ANNOT_FILE_ATTACHMENT:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1821 raise TypeError( MSG_BAD_ANNOT_TYPE)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1822 stream = mupdf.pdf_dict_getl(annot_obj, PDF_NAME('FS'), PDF_NAME('EF'), PDF_NAME('F'))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1823 # the object for file content
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1824 if not stream.m_internal:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1825 RAISEPY( "bad PDF: no /EF object", JM_Exc_FileDataError)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1826
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1827 fs = mupdf.pdf_dict_get(annot_obj, PDF_NAME('FS'))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1828
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1829 # file content given
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1830 res = JM_BufferFromBytes(buffer_)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1831 if buffer_ and not res.m_internal:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1832 raise ValueError( MSG_BAD_BUFFER)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1833 if res:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1834 JM_update_stream(pdf, stream, res, 1)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1835 # adjust /DL and /Size parameters
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1836 len, _ = mupdf.fz_buffer_storage(res)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1837 l = mupdf.pdf_new_int(len)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1838 mupdf.pdf_dict_put(stream, PDF_NAME('DL'), l)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1839 mupdf.pdf_dict_putl(stream, l, PDF_NAME('Params'), PDF_NAME('Size'))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1840
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1841 if filename:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1842 mupdf.pdf_dict_put_text_string(stream, PDF_NAME('F'), filename)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1843 mupdf.pdf_dict_put_text_string(fs, PDF_NAME('F'), filename)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1844 mupdf.pdf_dict_put_text_string(stream, PDF_NAME('UF'), filename)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1845 mupdf.pdf_dict_put_text_string(fs, PDF_NAME('UF'), filename)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1846 mupdf.pdf_dict_put_text_string(annot_obj, PDF_NAME('Contents'), filename)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1847
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1848 if ufilename:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1849 mupdf.pdf_dict_put_text_string(stream, PDF_NAME('UF'), ufilename)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1850 mupdf.pdf_dict_put_text_string(fs, PDF_NAME('UF'), ufilename)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1851
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1852 if desc:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1853 mupdf.pdf_dict_put_text_string(stream, PDF_NAME('Desc'), desc)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1854 mupdf.pdf_dict_put_text_string(fs, PDF_NAME('Desc'), desc)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1855
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1856 @staticmethod
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1857 def update_timing_test():
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1858 total = 0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1859 for i in range( 30*1000):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1860 total += i
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1861 return total
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1862
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1863 @property
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1864 def vertices(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1865 """annotation vertex points"""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1866 CheckParent(self)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1867 annot = self.this
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1868 assert isinstance(annot, mupdf.PdfAnnot)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1869 annot_obj = mupdf.pdf_annot_obj(annot)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1870 page = _pdf_annot_page(annot)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1871 page_ctm = mupdf.FzMatrix() # page transformation matrix
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1872 dummy = mupdf.FzRect() # Out-param for mupdf.pdf_page_transform().
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1873 mupdf.pdf_page_transform(page, dummy, page_ctm)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1874 derot = JM_derotate_page_matrix(page)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1875 page_ctm = mupdf.fz_concat(page_ctm, derot)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1876
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1877 #----------------------------------------------------------------
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1878 # The following objects occur in different annotation types.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1879 # So we are sure that (!o) occurs at most once.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1880 # Every pair of floats is one point, that needs to be separately
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1881 # transformed with the page transformation matrix.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1882 #----------------------------------------------------------------
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1883 o = mupdf.pdf_dict_get(annot_obj, PDF_NAME('Vertices'))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1884 if not o.m_internal: o = mupdf.pdf_dict_get(annot_obj, PDF_NAME('L'))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1885 if not o.m_internal: o = mupdf.pdf_dict_get(annot_obj, PDF_NAME('QuadPoints'))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1886 if not o.m_internal: o = mupdf.pdf_dict_gets(annot_obj, 'CL')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1887
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1888 if o.m_internal:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1889 # handle lists with 1-level depth
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1890 # weiter
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1891 res = []
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1892 for i in range(0, mupdf.pdf_array_len(o), 2):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1893 x = mupdf.pdf_to_real(mupdf.pdf_array_get(o, i))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1894 y = mupdf.pdf_to_real(mupdf.pdf_array_get(o, i+1))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1895 point = mupdf.FzPoint(x, y)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1896 point = mupdf.fz_transform_point(point, page_ctm)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1897 res.append( (point.x, point.y))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1898 return res
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1899
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1900 o = mupdf.pdf_dict_gets(annot_obj, 'InkList')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1901 if o.m_internal:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1902 # InkList has 2-level lists
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1903 #inklist:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1904 res = []
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1905 for i in range(mupdf.pdf_array_len(o)):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1906 res1 = []
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1907 o1 = mupdf.pdf_array_get(o, i)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1908 for j in range(0, mupdf.pdf_array_len(o1), 2):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1909 x = mupdf.pdf_to_real(mupdf.pdf_array_get(o1, j))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1910 y = mupdf.pdf_to_real(mupdf.pdf_array_get(o1, j+1))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1911 point = mupdf.FzPoint(x, y)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1912 point = mupdf.fz_transform_point(point, page_ctm)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1913 res1.append( (point.x, point.y))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1914 res.append(res1)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1915 return res
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1916
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1917 @property
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1918 def xref(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1919 """annotation xref number"""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1920 CheckParent(self)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1921 annot = self.this
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1922 return mupdf.pdf_to_num(mupdf.pdf_annot_obj(annot))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1923
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1924
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1925 class Archive:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1926 def __init__( self, *args):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1927 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1928 Archive(dirname [, path]) - from folder
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1929 Archive(file [, path]) - from file name or object
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1930 Archive(data, name) - from memory item
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1931 Archive() - empty archive
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1932 Archive(archive [, path]) - from archive
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1933 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1934 self._subarchives = list()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1935 self.this = mupdf.fz_new_multi_archive()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1936 if args:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1937 self.add( *args)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1938
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1939 def __repr__( self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1940 return f'Archive, sub-archives: {len(self._subarchives)}'
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1941
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1942 def _add_arch( self, subarch, path=None):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1943 mupdf.fz_mount_multi_archive( self.this, subarch, path)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1944
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1945 def _add_dir( self, folder, path=None):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1946 sub = mupdf.fz_open_directory( folder)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1947 mupdf.fz_mount_multi_archive( self.this, sub, path)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1948
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1949 def _add_treeitem( self, memory, name, path=None):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1950 buff = JM_BufferFromBytes( memory)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1951 sub = mupdf.fz_new_tree_archive( mupdf.FzTree())
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1952 mupdf.fz_tree_archive_add_buffer( sub, name, buff)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1953 mupdf.fz_mount_multi_archive( self.this, sub, path)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1954
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1955 def _add_ziptarfile( self, filepath, type_, path=None):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1956 if type_ == 1:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1957 sub = mupdf.fz_open_zip_archive( filepath)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1958 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1959 sub = mupdf.fz_open_tar_archive( filepath)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1960 mupdf.fz_mount_multi_archive( self.this, sub, path)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1961
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1962 def _add_ziptarmemory( self, memory, type_, path=None):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1963 buff = JM_BufferFromBytes( memory)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1964 stream = mupdf.fz_open_buffer( buff)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1965 if type_==1:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1966 sub = mupdf.fz_open_zip_archive_with_stream( stream)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1967 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1968 sub = mupdf.fz_open_tar_archive_with_stream( stream)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1969 mupdf.fz_mount_multi_archive( self.this, sub, path)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1970
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1971 def add( self, content, path=None):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1972 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1973 Add a sub-archive.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1974
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1975 Args:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1976 content:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1977 The content to be added. May be one of:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1978 `str` - must be path of directory or file.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1979 `bytes`, `bytearray`, `io.BytesIO` - raw data.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1980 `zipfile.Zipfile`.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1981 `tarfile.TarFile`.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1982 `pymupdf.Archive`.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1983 A two-item tuple `(data, name)`.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1984 List or tuple (but not tuple with length 2) of the above.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1985 path: (str) a "virtual" path name, under which the elements
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1986 of content can be retrieved. Use it to e.g. cope with
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1987 duplicate element names.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1988 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1989 def is_binary_data(x):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1990 return isinstance(x, (bytes, bytearray, io.BytesIO))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1991
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1992 def make_subarch(entries, mount, fmt):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1993 subarch = dict(fmt=fmt, entries=entries, path=mount)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1994 if fmt != "tree" or self._subarchives == []:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1995 self._subarchives.append(subarch)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1996 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1997 ltree = self._subarchives[-1]
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1998 if ltree["fmt"] != "tree" or ltree["path"] != subarch["path"]:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1999 self._subarchives.append(subarch)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2000 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2001 ltree["entries"].extend(subarch["entries"])
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2002 self._subarchives[-1] = ltree
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2003
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2004 if isinstance(content, pathlib.Path):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2005 content = str(content)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2006
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2007 if isinstance(content, str):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2008 if os.path.isdir(content):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2009 self._add_dir(content, path)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2010 return make_subarch(os.listdir(content), path, 'dir')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2011 elif os.path.isfile(content):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2012 assert isinstance(path, str) and path != '', \
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2013 f'Need name for binary content, but {path=}.'
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2014 with open(content) as f:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2015 ff = f.read()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2016 self._add_treeitem(ff, path)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2017 return make_subarch([path], None, 'tree')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2018 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2019 raise ValueError(f'Not a file or directory: {content!r}')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2020
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2021 elif is_binary_data(content):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2022 assert isinstance(path, str) and path != '' \
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2023 f'Need name for binary content, but {path=}.'
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2024 self._add_treeitem(content, path)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2025 return make_subarch([path], None, 'tree')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2026
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2027 elif isinstance(content, zipfile.ZipFile):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2028 filename = getattr(content, "filename", None)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2029 if filename is None:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2030 fp = content.fp.getvalue()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2031 self._add_ziptarmemory(fp, 1, path)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2032 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2033 self._add_ziptarfile(filename, 1, path)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2034 return make_subarch(content.namelist(), path, 'zip')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2035
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2036 elif isinstance(content, tarfile.TarFile):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2037 filename = getattr(content.fileobj, "name", None)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2038 if filename is None:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2039 fp = content.fileobj
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2040 if not isinstance(fp, io.BytesIO):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2041 fp = fp.fileobj
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2042 self._add_ziptarmemory(fp.getvalue(), 0, path)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2043 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2044 self._add_ziptarfile(filename, 0, path)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2045 return make_subarch(content.getnames(), path, 'tar')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2046
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2047 elif isinstance(content, Archive):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2048 self._add_arch(content, path)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2049 return make_subarch([], path, 'multi')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2050
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2051 if isinstance(content, tuple) and len(content) == 2:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2052 # covers the tree item plus path
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2053 data, name = content
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2054 assert isinstance(name, str), f'Unexpected {type(name)=}'
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2055 if is_binary_data(data):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2056 self._add_treeitem(data, name, path=path)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2057 elif isinstance(data, str):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2058 if os.path.isfile(data):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2059 with open(data, 'rb') as f:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2060 ff = f.read()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2061 self._add_treeitem(ff, name, path=path)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2062 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2063 assert 0, f'Unexpected {type(data)=}.'
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2064 return make_subarch([name], path, 'tree')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2065
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2066 elif hasattr(content, '__getitem__'):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2067 # Deal with sequence of disparate items.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2068 for item in content:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2069 self.add(item, path)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2070 return
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2071
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2072 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2073 raise TypeError(f'Unrecognised type {type(content)}.')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2074 assert 0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2075
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2076 @property
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2077 def entry_list( self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2078 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2079 List of sub archives.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2080 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2081 return self._subarchives
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2082
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2083 def has_entry( self, name):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2084 return mupdf.fz_has_archive_entry( self.this, name)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2085
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2086 def read_entry( self, name):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2087 buff = mupdf.fz_read_archive_entry( self.this, name)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2088 return JM_BinFromBuffer( buff)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2089
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2090
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2091 class Xml:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2092
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2093 def __enter__(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2094 return self
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2095
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2096 def __exit__(self, *args):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2097 pass
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2098
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2099 def __init__(self, rhs):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2100 if isinstance(rhs, mupdf.FzXml):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2101 self.this = rhs
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2102 elif isinstance(rhs, str):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2103 buff = mupdf.fz_new_buffer_from_copied_data(rhs)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2104 self.this = mupdf.fz_parse_xml_from_html5(buff)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2105 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2106 assert 0, f'Unsupported type for rhs: {type(rhs)}'
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2107
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2108 def _get_node_tree( self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2109 def show_node(node, items, shift):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2110 while node is not None:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2111 if node.is_text:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2112 items.append((shift, f'"{node.text}"'))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2113 node = node.next
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2114 continue
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2115 items.append((shift, f"({node.tagname}"))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2116 for k, v in node.get_attributes().items():
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2117 items.append((shift, f"={k} '{v}'"))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2118 child = node.first_child
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2119 if child:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2120 items = show_node(child, items, shift + 1)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2121 items.append((shift, f"){node.tagname}"))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2122 node = node.next
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2123 return items
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2124
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2125 shift = 0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2126 items = []
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2127 items = show_node(self, items, shift)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2128 return items
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2129
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2130 def add_bullet_list(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2131 """Add bulleted list ("ul" tag)"""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2132 child = self.create_element("ul")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2133 self.append_child(child)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2134 return child
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2135
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2136 def add_class(self, text):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2137 """Set some class via CSS. Replaces complete class spec."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2138 cls = self.get_attribute_value("class")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2139 if cls is not None and text in cls:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2140 return self
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2141 self.remove_attribute("class")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2142 if cls is None:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2143 cls = text
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2144 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2145 cls += " " + text
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2146 self.set_attribute("class", cls)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2147 return self
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2148
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2149 def add_code(self, text=None):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2150 """Add a "code" tag"""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2151 child = self.create_element("code")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2152 if type(text) is str:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2153 child.append_child(self.create_text_node(text))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2154 prev = self.span_bottom()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2155 if prev is None:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2156 prev = self
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2157 prev.append_child(child)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2158 return self
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2159
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2160 def add_codeblock(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2161 """Add monospaced lines ("pre" node)"""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2162 child = self.create_element("pre")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2163 self.append_child(child)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2164 return child
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2165
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2166 def add_description_list(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2167 """Add description list ("dl" tag)"""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2168 child = self.create_element("dl")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2169 self.append_child(child)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2170 return child
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2171
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2172 def add_division(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2173 """Add "div" tag"""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2174 child = self.create_element("div")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2175 self.append_child(child)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2176 return child
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2177
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2178 def add_header(self, level=1):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2179 """Add header tag"""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2180 if level not in range(1, 7):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2181 raise ValueError("Header level must be in [1, 6]")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2182 this_tag = self.tagname
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2183 new_tag = f"h{level}"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2184 child = self.create_element(new_tag)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2185 if this_tag not in ("h1", "h2", "h3", "h4", "h5", "h6", "p"):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2186 self.append_child(child)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2187 return child
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2188 self.parent.append_child(child)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2189 return child
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2190
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2191 def add_horizontal_line(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2192 """Add horizontal line ("hr" tag)"""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2193 child = self.create_element("hr")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2194 self.append_child(child)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2195 return child
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2196
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2197 def add_image(self, name, width=None, height=None, imgfloat=None, align=None):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2198 """Add image node (tag "img")."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2199 child = self.create_element("img")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2200 if width is not None:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2201 child.set_attribute("width", f"{width}")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2202 if height is not None:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2203 child.set_attribute("height", f"{height}")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2204 if imgfloat is not None:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2205 child.set_attribute("style", f"float: {imgfloat}")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2206 if align is not None:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2207 child.set_attribute("align", f"{align}")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2208 child.set_attribute("src", f"{name}")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2209 self.append_child(child)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2210 return child
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2211
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2212 def add_link(self, href, text=None):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2213 """Add a hyperlink ("a" tag)"""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2214 child = self.create_element("a")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2215 if not isinstance(text, str):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2216 text = href
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2217 child.set_attribute("href", href)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2218 child.append_child(self.create_text_node(text))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2219 prev = self.span_bottom()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2220 if prev is None:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2221 prev = self
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2222 prev.append_child(child)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2223 return self
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2224
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2225 def add_list_item(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2226 """Add item ("li" tag) under a (numbered or bulleted) list."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2227 if self.tagname not in ("ol", "ul"):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2228 raise ValueError("cannot add list item to", self.tagname)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2229 child = self.create_element("li")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2230 self.append_child(child)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2231 return child
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2232
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2233 def add_number_list(self, start=1, numtype=None):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2234 """Add numbered list ("ol" tag)"""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2235 child = self.create_element("ol")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2236 if start > 1:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2237 child.set_attribute("start", str(start))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2238 if numtype is not None:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2239 child.set_attribute("type", numtype)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2240 self.append_child(child)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2241 return child
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2242
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2243 def add_paragraph(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2244 """Add "p" tag"""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2245 child = self.create_element("p")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2246 if self.tagname != "p":
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2247 self.append_child(child)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2248 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2249 self.parent.append_child(child)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2250 return child
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2251
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2252 def add_span(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2253 child = self.create_element("span")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2254 self.append_child(child)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2255 return child
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2256
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2257 def add_style(self, text):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2258 """Set some style via CSS style. Replaces complete style spec."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2259 style = self.get_attribute_value("style")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2260 if style is not None and text in style:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2261 return self
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2262 self.remove_attribute("style")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2263 if style is None:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2264 style = text
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2265 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2266 style += ";" + text
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2267 self.set_attribute("style", style)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2268 return self
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2269
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2270 def add_subscript(self, text=None):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2271 """Add a subscript ("sub" tag)"""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2272 child = self.create_element("sub")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2273 if type(text) is str:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2274 child.append_child(self.create_text_node(text))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2275 prev = self.span_bottom()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2276 if prev is None:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2277 prev = self
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2278 prev.append_child(child)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2279 return self
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2280
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2281 def add_superscript(self, text=None):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2282 """Add a superscript ("sup" tag)"""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2283 child = self.create_element("sup")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2284 if type(text) is str:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2285 child.append_child(self.create_text_node(text))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2286 prev = self.span_bottom()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2287 if prev is None:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2288 prev = self
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2289 prev.append_child(child)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2290 return self
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2291
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2292 def add_text(self, text):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2293 """Add text. Line breaks are honored."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2294 lines = text.splitlines()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2295 line_count = len(lines)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2296 prev = self.span_bottom()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2297 if prev is None:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2298 prev = self
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2299
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2300 for i, line in enumerate(lines):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2301 prev.append_child(self.create_text_node(line))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2302 if i < line_count - 1:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2303 prev.append_child(self.create_element("br"))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2304 return self
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2305
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2306 def append_child( self, child):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2307 mupdf.fz_dom_append_child( self.this, child.this)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2308
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2309 def append_styled_span(self, style):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2310 span = self.create_element("span")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2311 span.add_style(style)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2312 prev = self.span_bottom()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2313 if prev is None:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2314 prev = self
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2315 prev.append_child(span)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2316 return prev
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2317
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2318 def bodytag( self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2319 return Xml( mupdf.fz_dom_body( self.this))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2320
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2321 def clone( self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2322 ret = mupdf.fz_dom_clone( self.this)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2323 return Xml( ret)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2324
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2325 @staticmethod
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2326 def color_text(color):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2327 if type(color) is str:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2328 return color
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2329 if type(color) is int:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2330 return f"rgb({sRGB_to_rgb(color)})"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2331 if type(color) in (tuple, list):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2332 return f"rgb{tuple(color)}"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2333 return color
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2334
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2335 def create_element( self, tag):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2336 return Xml( mupdf.fz_dom_create_element( self.this, tag))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2337
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2338 def create_text_node( self, text):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2339 return Xml( mupdf.fz_dom_create_text_node( self.this, text))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2340
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2341 def debug(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2342 """Print a list of the node tree below self."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2343 items = self._get_node_tree()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2344 for item in items:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2345 message(" " * item[0] + item[1].replace("\n", "\\n"))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2346
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2347 def find( self, tag, att, match):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2348 ret = mupdf.fz_dom_find( self.this, tag, att, match)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2349 if ret.m_internal:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2350 return Xml( ret)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2351
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2352 def find_next( self, tag, att, match):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2353 ret = mupdf.fz_dom_find_next( self.this, tag, att, match)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2354 if ret.m_internal:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2355 return Xml( ret)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2356
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2357 @property
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2358 def first_child( self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2359 if mupdf.fz_xml_text( self.this):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2360 # text node, has no child.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2361 return
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2362 ret = mupdf.fz_dom_first_child( self)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2363 if ret.m_internal:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2364 return Xml( ret)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2365
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2366 def get_attribute_value( self, key):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2367 assert key
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2368 return mupdf.fz_dom_attribute( self.this, key)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2369
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2370 def get_attributes( self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2371 if mupdf.fz_xml_text( self.this):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2372 # text node, has no attributes.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2373 return
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2374 result = dict()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2375 i = 0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2376 while 1:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2377 val, key = mupdf.fz_dom_get_attribute( self.this, i)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2378 if not val or not key:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2379 break
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2380 result[ key] = val
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2381 i += 1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2382 return result
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2383
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2384 def insert_after( self, node):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2385 mupdf.fz_dom_insert_after( self.this, node.this)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2386
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2387 def insert_before( self, node):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2388 mupdf.fz_dom_insert_before( self.this, node.this)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2389
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2390 def insert_text(self, text):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2391 lines = text.splitlines()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2392 line_count = len(lines)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2393 for i, line in enumerate(lines):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2394 self.append_child(self.create_text_node(line))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2395 if i < line_count - 1:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2396 self.append_child(self.create_element("br"))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2397 return self
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2398
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2399 @property
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2400 def is_text(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2401 """Check if this is a text node."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2402 return self.text is not None
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2403
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2404 @property
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2405 def last_child(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2406 """Return last child node."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2407 child = self.first_child
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2408 if child is None:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2409 return None
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2410 while True:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2411 next = child.next
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2412 if not next:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2413 return child
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2414 child = next
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2415
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2416 @property
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2417 def next( self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2418 ret = mupdf.fz_dom_next( self.this)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2419 if ret.m_internal:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2420 return Xml( ret)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2421
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2422 @property
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2423 def parent( self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2424 ret = mupdf.fz_dom_parent( self.this)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2425 if ret.m_internal:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2426 return Xml( ret)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2427
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2428 @property
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2429 def previous( self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2430 ret = mupdf.fz_dom_previous( self.this)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2431 if ret.m_internal:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2432 return Xml( ret)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2433
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2434 def remove( self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2435 mupdf.fz_dom_remove( self.this)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2436
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2437 def remove_attribute( self, key):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2438 assert key
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2439 mupdf.fz_dom_remove_attribute( self.this, key)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2440
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2441 @property
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2442 def root( self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2443 return Xml( mupdf.fz_xml_root( self.this))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2444
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2445 def set_align(self, align):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2446 """Set text alignment via CSS style"""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2447 text = "text-align: %s"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2448 if isinstance( align, str):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2449 t = align
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2450 elif align == TEXT_ALIGN_LEFT:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2451 t = "left"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2452 elif align == TEXT_ALIGN_CENTER:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2453 t = "center"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2454 elif align == TEXT_ALIGN_RIGHT:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2455 t = "right"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2456 elif align == TEXT_ALIGN_JUSTIFY:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2457 t = "justify"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2458 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2459 raise ValueError(f"Unrecognised {align=}")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2460 text = text % t
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2461 self.add_style(text)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2462 return self
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2463
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2464 def set_attribute( self, key, value):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2465 assert key
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2466 mupdf.fz_dom_add_attribute( self.this, key, value)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2467
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2468 def set_bgcolor(self, color):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2469 """Set background color via CSS style"""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2470 text = f"background-color: %s" % self.color_text(color)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2471 self.add_style(text) # does not work on span level
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2472 return self
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2473
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2474 def set_bold(self, val=True):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2475 """Set bold on / off via CSS style"""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2476 if val:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2477 val="bold"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2478 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2479 val="normal"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2480 text = "font-weight: %s" % val
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2481 self.append_styled_span(text)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2482 return self
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2483
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2484 def set_color(self, color):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2485 """Set text color via CSS style"""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2486 text = f"color: %s" % self.color_text(color)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2487 self.append_styled_span(text)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2488 return self
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2489
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2490 def set_columns(self, cols):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2491 """Set number of text columns via CSS style"""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2492 text = f"columns: {cols}"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2493 self.append_styled_span(text)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2494 return self
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2495
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2496 def set_font(self, font):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2497 """Set font-family name via CSS style"""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2498 text = "font-family: %s" % font
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2499 self.append_styled_span(text)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2500 return self
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2501
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2502 def set_fontsize(self, fontsize):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2503 """Set font size name via CSS style"""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2504 if type(fontsize) is str:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2505 px=""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2506 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2507 px="px"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2508 text = f"font-size: {fontsize}{px}"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2509 self.append_styled_span(text)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2510 return self
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2511
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2512 def set_id(self, unique):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2513 """Set a unique id."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2514 # check uniqueness
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2515 root = self.root
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2516 if root.find(None, "id", unique):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2517 raise ValueError(f"id '{unique}' already exists")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2518 self.set_attribute("id", unique)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2519 return self
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2520
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2521 def set_italic(self, val=True):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2522 """Set italic on / off via CSS style"""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2523 if val:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2524 val="italic"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2525 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2526 val="normal"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2527 text = "font-style: %s" % val
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2528 self.append_styled_span(text)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2529 return self
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2530
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2531 def set_leading(self, leading):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2532 """Set inter-line spacing value via CSS style - block-level only."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2533 text = f"-mupdf-leading: {leading}"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2534 self.add_style(text)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2535 return self
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2536
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2537 def set_letter_spacing(self, spacing):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2538 """Set inter-letter spacing value via CSS style"""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2539 text = f"letter-spacing: {spacing}"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2540 self.append_styled_span(text)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2541 return self
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2542
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2543 def set_lineheight(self, lineheight):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2544 """Set line height name via CSS style - block-level only."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2545 text = f"line-height: {lineheight}"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2546 self.add_style(text)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2547 return self
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2548
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2549 def set_margins(self, val):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2550 """Set margin values via CSS style"""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2551 text = "margins: %s" % val
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2552 self.append_styled_span(text)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2553 return self
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2554
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2555 def set_opacity(self, opacity):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2556 """Set opacity via CSS style"""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2557 text = f"opacity: {opacity}"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2558 self.append_styled_span(text)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2559 return self
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2560
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2561 def set_pagebreak_after(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2562 """Insert a page break after this node."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2563 text = "page-break-after: always"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2564 self.add_style(text)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2565 return self
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2566
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2567 def set_pagebreak_before(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2568 """Insert a page break before this node."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2569 text = "page-break-before: always"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2570 self.add_style(text)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2571 return self
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2572
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2573 def set_properties(
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2574 self,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2575 align=None,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2576 bgcolor=None,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2577 bold=None,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2578 color=None,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2579 columns=None,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2580 font=None,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2581 fontsize=None,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2582 indent=None,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2583 italic=None,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2584 leading=None,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2585 letter_spacing=None,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2586 lineheight=None,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2587 margins=None,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2588 pagebreak_after=None,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2589 pagebreak_before=None,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2590 word_spacing=None,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2591 unqid=None,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2592 cls=None,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2593 ):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2594 """Set any or all properties of a node.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2595
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2596 To be used for existing nodes preferably.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2597 """
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2598 root = self.root
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2599 temp = root.add_division()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2600 if align is not None:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2601 temp.set_align(align)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2602 if bgcolor is not None:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2603 temp.set_bgcolor(bgcolor)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2604 if bold is not None:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2605 temp.set_bold(bold)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2606 if color is not None:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2607 temp.set_color(color)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2608 if columns is not None:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2609 temp.set_columns(columns)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2610 if font is not None:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2611 temp.set_font(font)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2612 if fontsize is not None:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2613 temp.set_fontsize(fontsize)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2614 if indent is not None:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2615 temp.set_text_indent(indent)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2616 if italic is not None:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2617 temp.set_italic(italic)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2618 if leading is not None:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2619 temp.set_leading(leading)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2620 if letter_spacing is not None:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2621 temp.set_letter_spacing(letter_spacing)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2622 if lineheight is not None:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2623 temp.set_lineheight(lineheight)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2624 if margins is not None:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2625 temp.set_margins(margins)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2626 if pagebreak_after is not None:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2627 temp.set_pagebreak_after()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2628 if pagebreak_before is not None:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2629 temp.set_pagebreak_before()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2630 if word_spacing is not None:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2631 temp.set_word_spacing(word_spacing)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2632 if unqid is not None:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2633 self.set_id(unqid)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2634 if cls is not None:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2635 self.add_class(cls)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2636
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2637 styles = []
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2638 top_style = temp.get_attribute_value("style")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2639 if top_style is not None:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2640 styles.append(top_style)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2641 child = temp.first_child
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2642 while child:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2643 styles.append(child.get_attribute_value("style"))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2644 child = child.first_child
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2645 self.set_attribute("style", ";".join(styles))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2646 temp.remove()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2647 return self
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2648
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2649 def set_text_indent(self, indent):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2650 """Set text indentation name via CSS style - block-level only."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2651 text = f"text-indent: {indent}"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2652 self.add_style(text)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2653 return self
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2654
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2655 def set_underline(self, val="underline"):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2656 text = "text-decoration: %s" % val
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2657 self.append_styled_span(text)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2658 return self
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2659
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2660 def set_word_spacing(self, spacing):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2661 """Set inter-word spacing value via CSS style"""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2662 text = f"word-spacing: {spacing}"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2663 self.append_styled_span(text)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2664 return self
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2665
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2666 def span_bottom(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2667 """Find deepest level in stacked spans."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2668 parent = self
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2669 child = self.last_child
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2670 if child is None:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2671 return None
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2672 while child.is_text:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2673 child = child.previous
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2674 if child is None:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2675 break
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2676 if child is None or child.tagname != "span":
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2677 return None
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2678
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2679 while True:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2680 if child is None:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2681 return parent
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2682 if child.tagname in ("a", "sub","sup","body") or child.is_text:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2683 child = child.next
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2684 continue
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2685 if child.tagname == "span":
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2686 parent = child
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2687 child = child.first_child
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2688 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2689 return parent
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2690
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2691 @property
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2692 def tagname( self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2693 return mupdf.fz_xml_tag( self.this)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2694
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2695 @property
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2696 def text( self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2697 return mupdf.fz_xml_text( self.this)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2698
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2699 add_var = add_code
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2700 add_samp = add_code
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2701 add_kbd = add_code
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2702
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2703
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2704 class Colorspace:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2705
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2706 def __init__(self, type_):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2707 """Supported are GRAY, RGB and CMYK."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2708 if isinstance( type_, mupdf.FzColorspace):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2709 self.this = type_
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2710 elif type_ == CS_GRAY:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2711 self.this = mupdf.FzColorspace(mupdf.FzColorspace.Fixed_GRAY)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2712 elif type_ == CS_CMYK:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2713 self.this = mupdf.FzColorspace(mupdf.FzColorspace.Fixed_CMYK)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2714 elif type_ == CS_RGB:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2715 self.this = mupdf.FzColorspace(mupdf.FzColorspace.Fixed_RGB)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2716 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2717 self.this = mupdf.FzColorspace(mupdf.FzColorspace.Fixed_RGB)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2718
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2719 def __repr__(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2720 x = ("", "GRAY", "", "RGB", "CMYK")[self.n]
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2721 return "Colorspace(CS_%s) - %s" % (x, self.name)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2722
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2723 def _name(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2724 return mupdf.fz_colorspace_name(self.this)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2725
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2726 @property
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2727 def n(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2728 """Size of one pixel."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2729 return mupdf.fz_colorspace_n(self.this)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2730
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2731 @property
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2732 def name(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2733 """Name of the Colorspace."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2734 return self._name()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2735
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2736
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2737 class DeviceWrapper:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2738 def __init__(self, *args):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2739 if args_match( args, mupdf.FzDevice):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2740 device, = args
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2741 self.this = device
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2742 elif args_match( args, Pixmap, None):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2743 pm, clip = args
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2744 bbox = JM_irect_from_py( clip)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2745 if mupdf.fz_is_infinite_irect( bbox):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2746 self.this = mupdf.fz_new_draw_device( mupdf.FzMatrix(), pm)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2747 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2748 self.this = mupdf.fz_new_draw_device_with_bbox( mupdf.FzMatrix(), pm, bbox)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2749 elif args_match( args, mupdf.FzDisplayList):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2750 dl, = args
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2751 self.this = mupdf.fz_new_list_device( dl)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2752 elif args_match( args, mupdf.FzStextPage, None):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2753 tp, flags = args
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2754 opts = mupdf.FzStextOptions( flags)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2755 self.this = mupdf.fz_new_stext_device( tp, opts)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2756 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2757 raise Exception( f'Unrecognised args for DeviceWrapper: {args!r}')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2758
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2759
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2760 class DisplayList:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2761 def __del__(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2762 if not type(self) is DisplayList: return
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2763 self.thisown = False
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2764
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2765 def __init__(self, *args):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2766 if len(args) == 1 and isinstance(args[0], mupdf.FzRect):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2767 self.this = mupdf.FzDisplayList(args[0])
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2768 elif len(args) == 1 and isinstance(args[0], mupdf.FzDisplayList):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2769 self.this = args[0]
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2770 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2771 assert 0, f'Unrecognised {args=}'
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2772
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2773 def get_pixmap(self, matrix=None, colorspace=None, alpha=0, clip=None):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2774 if isinstance(colorspace, Colorspace):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2775 colorspace = colorspace.this
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2776 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2777 colorspace = mupdf.FzColorspace(mupdf.FzColorspace.Fixed_RGB)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2778 val = JM_pixmap_from_display_list(self.this, matrix, colorspace, alpha, clip, None)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2779 val.thisown = True
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2780 return val
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2781
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2782 def get_textpage(self, flags=3):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2783 """Make a TextPage from a DisplayList."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2784 stext_options = mupdf.FzStextOptions()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2785 stext_options.flags = flags
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2786 val = mupdf.FzStextPage(self.this, stext_options)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2787 val.thisown = True
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2788 return val
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2789
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2790 @property
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2791 def rect(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2792 val = JM_py_from_rect(mupdf.fz_bound_display_list(self.this))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2793 val = Rect(val)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2794 return val
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2795
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2796 def run(self, dw, m, area):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2797 mupdf.fz_run_display_list(
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2798 self.this,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2799 dw.device,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2800 JM_matrix_from_py(m),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2801 JM_rect_from_py(area),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2802 mupdf.FzCookie(),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2803 )
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2804
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2805 if g_use_extra:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2806 extra_FzDocument_insert_pdf = extra.FzDocument_insert_pdf
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2807
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2808
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2809 class Document:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2810
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2811 def __contains__(self, loc) -> bool:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2812 if type(loc) is int:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2813 if loc < self.page_count:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2814 return True
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2815 return False
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2816 if type(loc) not in (tuple, list) or len(loc) != 2:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2817 return False
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2818 chapter, pno = loc
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2819 if (0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2820 or not isinstance(chapter, int)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2821 or chapter < 0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2822 or chapter >= self.chapter_count
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2823 ):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2824 return False
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2825 if (0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2826 or not isinstance(pno, int)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2827 or pno < 0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2828 or pno >= self.chapter_page_count(chapter)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2829 ):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2830 return False
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2831 return True
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2832
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2833 def __delitem__(self, i)->None:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2834 if not self.is_pdf:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2835 raise ValueError("is no PDF")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2836 if type(i) is int:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2837 return self.delete_page(i)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2838 if type(i) in (list, tuple, range):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2839 return self.delete_pages(i)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2840 if type(i) is not slice:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2841 raise ValueError("bad argument type")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2842 pc = self.page_count
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2843 start = i.start if i.start else 0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2844 stop = i.stop if i.stop else pc
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2845 step = i.step if i.step else 1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2846 while start < 0:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2847 start += pc
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2848 if start >= pc:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2849 raise ValueError("bad page number(s)")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2850 while stop < 0:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2851 stop += pc
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2852 if stop > pc:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2853 raise ValueError("bad page number(s)")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2854 return self.delete_pages(range(start, stop, step))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2855
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2856 def __enter__(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2857 return self
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2858
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2859 def __exit__(self, *args):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2860 self.close()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2861
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2862 @typing.overload
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2863 def __getitem__(self, i: int = 0) -> Page:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2864 ...
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2865
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2866 if sys.version_info >= (3, 9):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2867 @typing.overload
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2868 def __getitem__(self, i: slice) -> list[Page]:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2869 ...
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2870
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2871 @typing.overload
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2872 def __getitem__(self, i: tuple[int, int]) -> Page:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2873 ...
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2874
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2875 def __getitem__(self, i=0):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2876 if isinstance(i, slice):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2877 return [self[j] for j in range(*i.indices(len(self)))]
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2878 assert isinstance(i, int) or (isinstance(i, tuple) and len(i) == 2 and all(isinstance(x, int) for x in i)), \
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2879 f'Invalid item number: {i=}.'
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2880 if i not in self:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2881 raise IndexError(f"page {i} not in document")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2882 return self.load_page(i)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2883
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2884 def __init__(self, filename=None, stream=None, filetype=None, rect=None, width=0, height=0, fontsize=11):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2885 """Creates a document. Use 'open' as a synonym.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2886
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2887 Notes:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2888 Basic usages:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2889 open() - new PDF document
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2890 open(filename) - string or pathlib.Path, must have supported
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2891 file extension.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2892 open(type, buffer) - type: valid extension, buffer: bytes object.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2893 open(stream=buffer, filetype=type) - keyword version of previous.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2894 open(filename, fileype=type) - filename with unrecognized extension.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2895 rect, width, height, fontsize: layout reflowable document
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2896 on open (e.g. EPUB). Ignored if n/a.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2897 """
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2898 # We temporarily set JM_mupdf_show_errors=0 while we are constructing,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2899 # then restore its original value in a `finally:` block.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2900 #
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2901 global JM_mupdf_show_errors
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2902 JM_mupdf_show_errors_old = JM_mupdf_show_errors
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2903 JM_mupdf_show_errors = 0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2904
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2905 try:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2906 self.is_closed = False
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2907 self.is_encrypted = False
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2908 self.is_encrypted = False
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2909 self.metadata = None
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2910 self.FontInfos = []
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2911 self.Graftmaps = {}
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2912 self.ShownPages = {}
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2913 self.InsertedImages = {}
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2914 self._page_refs = weakref.WeakValueDictionary()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2915 if isinstance(filename, mupdf.PdfDocument):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2916 pdf_document = filename
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2917 self.this = pdf_document
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2918 self.this_is_pdf = True
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2919 return
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2920
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2921 w = width
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2922 h = height
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2923 r = JM_rect_from_py(rect)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2924 if not mupdf.fz_is_infinite_rect(r):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2925 w = r.x1 - r.x0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2926 h = r.y1 - r.y0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2927
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2928 self._name = filename
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2929 self.stream = stream
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2930
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2931 if stream is not None:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2932 if filename is not None and filetype is None:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2933 # 2025-05-06: Use <filename> as the filetype. This is
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2934 # reversing precedence - we used to use <filename> if both
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2935 # were set.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2936 filetype = filename
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2937 if isinstance(stream, (bytes, memoryview)):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2938 pass
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2939 elif isinstance(stream, bytearray):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2940 stream = bytes(stream)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2941 elif isinstance(stream, io.BytesIO):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2942 stream = stream.getvalue()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2943 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2944 raise TypeError(f"bad stream: {type(stream)=}.")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2945 self.stream = stream
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2946
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2947 assert isinstance(stream, (bytes, memoryview))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2948 if len(stream) == 0:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2949 # MuPDF raise an exception for this but also generates
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2950 # warnings, which is not very helpful for us. So instead we
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2951 # raise a specific exception.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2952 raise EmptyFileError('Cannot open empty stream.')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2953
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2954 stream2 = mupdf.fz_open_memory(mupdf.python_buffer_data(stream), len(stream))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2955 try:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2956 doc = mupdf.fz_open_document_with_stream(filetype if filetype else '', stream2)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2957 except Exception as e:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2958 if g_exceptions_verbose > 1: exception_info()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2959 raise FileDataError('Failed to open stream') from e
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2960
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2961 elif filename:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2962 assert not stream
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2963 if isinstance(filename, str):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2964 pass
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2965 elif hasattr(filename, "absolute"):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2966 filename = str(filename)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2967 elif hasattr(filename, "name"):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2968 filename = filename.name
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2969 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2970 raise TypeError(f"bad filename: {type(filename)=} {filename=}.")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2971 self._name = filename
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2972
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2973 # Generate our own specific exceptions. This avoids MuPDF
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2974 # generating warnings etc.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2975 if not os.path.exists(filename):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2976 raise FileNotFoundError(f"no such file: '{filename}'")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2977 elif not os.path.isfile(filename):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2978 raise FileDataError(f"'{filename}' is no file")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2979 elif os.path.getsize(filename) == 0:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2980 raise EmptyFileError(f'Cannot open empty file: {filename=}.')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2981
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2982 if filetype:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2983 # Override the type implied by <filename>. MuPDF does not
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2984 # have a way to do this directly so we open via a stream.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2985 try:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2986 fz_stream = mupdf.fz_open_file(filename)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2987 doc = mupdf.fz_open_document_with_stream(filetype, fz_stream)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2988 except Exception as e:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2989 if g_exceptions_verbose > 1: exception_info()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2990 raise FileDataError(f'Failed to open file {filename!r} as type {filetype!r}.') from e
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2991 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2992 try:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2993 doc = mupdf.fz_open_document(filename)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2994 except Exception as e:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2995 if g_exceptions_verbose > 1: exception_info()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2996 raise FileDataError(f'Failed to open file {filename!r}.') from e
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2997
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2998 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2999 pdf = mupdf.PdfDocument()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3000 doc = mupdf.FzDocument(pdf)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3001
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3002 if w > 0 and h > 0:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3003 mupdf.fz_layout_document(doc, w, h, fontsize)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3004 elif mupdf.fz_is_document_reflowable(doc):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3005 mupdf.fz_layout_document(doc, 400, 600, 11)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3006
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3007 self.this = doc
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3008
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3009 # fixme: not sure where self.thisown gets initialised in PyMuPDF.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3010 #
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3011 self.thisown = True
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3012
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3013 if self.thisown:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3014 self._graft_id = TOOLS.gen_id()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3015 if self.needs_pass:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3016 self.is_encrypted = True
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3017 else: # we won't init until doc is decrypted
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3018 self.init_doc()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3019 # the following hack detects invalid/empty SVG files, which else may lead
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3020 # to interpreter crashes
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3021 if filename and filename.lower().endswith("svg") or filetype and "svg" in filetype.lower():
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3022 try:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3023 _ = self.convert_to_pdf() # this seems to always work
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3024 except Exception as e:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3025 if g_exceptions_verbose > 1: exception_info()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3026 raise FileDataError("cannot open broken document") from e
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3027
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3028 if g_use_extra:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3029 self.this_is_pdf = isinstance( self.this, mupdf.PdfDocument)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3030 if self.this_is_pdf:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3031 self.page_count2 = extra.page_count_pdf
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3032 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3033 self.page_count2 = extra.page_count_fz
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3034 finally:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3035 JM_mupdf_show_errors = JM_mupdf_show_errors_old
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3036
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3037 def __len__(self) -> int:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3038 return self.page_count
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3039
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3040 def __repr__(self) -> str:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3041 m = "closed " if self.is_closed else ""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3042 if self.stream is None:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3043 if self.name == "":
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3044 return m + "Document(<new PDF, doc# %i>)" % self._graft_id
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3045 return m + "Document('%s')" % (self.name,)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3046 return m + "Document('%s', <memory, doc# %i>)" % (self.name, self._graft_id)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3047
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3048 def _addFormFont(self, name, font):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3049 """Add new form font."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3050 if self.is_closed or self.is_encrypted:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3051 raise ValueError("document closed or encrypted")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3052 pdf = _as_pdf_document(self, required=0)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3053 if not pdf.m_internal:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3054 return
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3055 fonts = mupdf.pdf_dict_getl(
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3056 mupdf.pdf_trailer( pdf),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3057 PDF_NAME('Root'),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3058 PDF_NAME('AcroForm'),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3059 PDF_NAME('DR'),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3060 PDF_NAME('Font'),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3061 )
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3062 if not fonts.m_internal or not mupdf.pdf_is_dict( fonts):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3063 raise RuntimeError( "PDF has no form fonts yet")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3064 k = mupdf.pdf_new_name( name)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3065 v = JM_pdf_obj_from_str( pdf, font)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3066 mupdf.pdf_dict_put( fonts, k, v)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3067
39
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3068 def del_toc_item(
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3069 self,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3070 idx: int,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3071 ) -> None:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3072 """Delete TOC / bookmark item by index."""
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3073 xref = self.get_outline_xrefs()[idx]
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3074 self._remove_toc_item(xref)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3075
1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3076 def _delToC(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3077 """Delete the TOC."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3078 if self.is_closed or self.is_encrypted:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3079 raise ValueError("document closed or encrypted")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3080 xrefs = [] # create Python list
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3081 pdf = _as_pdf_document(self, required=0)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3082 if not pdf.m_internal:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3083 return xrefs # not a pdf
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3084 # get the main root
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3085 root = mupdf.pdf_dict_get(mupdf.pdf_trailer(pdf), PDF_NAME('Root'))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3086 # get the outline root
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3087 olroot = mupdf.pdf_dict_get(root, PDF_NAME('Outlines'))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3088 if not olroot.m_internal:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3089 return xrefs # no outlines or some problem
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3090
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3091 first = mupdf.pdf_dict_get(olroot, PDF_NAME('First')) # first outline
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3092
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3093 xrefs = JM_outline_xrefs(first, xrefs)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3094 xref_count = len(xrefs)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3095
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3096 olroot_xref = mupdf.pdf_to_num(olroot) # delete OL root
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3097 mupdf.pdf_delete_object(pdf, olroot_xref) # delete OL root
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3098 mupdf.pdf_dict_del(root, PDF_NAME('Outlines')) # delete OL root
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3099
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3100 for i in range(xref_count):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3101 _, xref = JM_INT_ITEM(xrefs, i)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3102 mupdf.pdf_delete_object(pdf, xref) # delete outline item
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3103 xrefs.append(olroot_xref)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3104 val = xrefs
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3105 self.init_doc()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3106 return val
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3107
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3108 def _delete_page(self, pno):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3109 pdf = _as_pdf_document(self)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3110 mupdf.pdf_delete_page( pdf, pno)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3111 if pdf.m_internal.rev_page_map:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3112 mupdf.ll_pdf_drop_page_tree( pdf.m_internal)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3113
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3114 def _deleteObject(self, xref):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3115 """Delete object."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3116 pdf = _as_pdf_document(self)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3117 if not _INRANGE(xref, 1, mupdf.pdf_xref_len(pdf)-1):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3118 raise ValueError( MSG_BAD_XREF)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3119 mupdf.pdf_delete_object(pdf, xref)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3120
39
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3121 def _do_links(
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3122 doc1: 'Document',
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3123 doc2: 'Document',
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3124 from_page: int = -1,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3125 to_page: int = -1,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3126 start_at: int = -1,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3127 ) -> None:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3128 """Insert links contained in copied page range into destination PDF.
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3129
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3130 Parameter values **must** equal those of method insert_pdf(), which must
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3131 have been previously executed.
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3132 """
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3133 #pymupdf.log( 'utils.do_links()')
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3134 # --------------------------------------------------------------------------
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3135 # internal function to create the actual "/Annots" object string
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3136 # --------------------------------------------------------------------------
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3137 def cre_annot(lnk, xref_dst, pno_src, ctm):
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3138 """Create annotation object string for a passed-in link."""
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3139
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3140 r = lnk["from"] * ctm # rect in PDF coordinates
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3141 rect = _format_g(tuple(r))
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3142 if lnk["kind"] == LINK_GOTO:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3143 txt = annot_skel["goto1"] # annot_goto
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3144 idx = pno_src.index(lnk["page"])
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3145 p = lnk["to"] * ctm # target point in PDF coordinates
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3146 annot = txt(xref_dst[idx], p.x, p.y, lnk["zoom"], rect)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3147
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3148 elif lnk["kind"] == LINK_GOTOR:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3149 if lnk["page"] >= 0:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3150 txt = annot_skel["gotor1"] # annot_gotor
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3151 pnt = lnk.get("to", Point(0, 0)) # destination point
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3152 if type(pnt) is not Point:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3153 pnt = Point(0, 0)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3154 annot = txt(
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3155 lnk["page"],
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3156 pnt.x,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3157 pnt.y,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3158 lnk["zoom"],
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3159 lnk["file"],
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3160 lnk["file"],
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3161 rect,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3162 )
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3163 else:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3164 txt = annot_skel["gotor2"] # annot_gotor_n
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3165 to = get_pdf_str(lnk["to"])
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3166 to = to[1:-1]
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3167 f = lnk["file"]
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3168 annot = txt(to, f, rect)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3169
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3170 elif lnk["kind"] == LINK_LAUNCH:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3171 txt = annot_skel["launch"] # annot_launch
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3172 annot = txt(lnk["file"], lnk["file"], rect)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3173
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3174 elif lnk["kind"] == LINK_URI:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3175 txt = annot_skel["uri"] # annot_uri
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3176 annot = txt(lnk["uri"], rect)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3177
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3178 else:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3179 annot = ""
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3180
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3181 return annot
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3182
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3183 # --------------------------------------------------------------------------
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3184
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3185 # validate & normalize parameters
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3186 if from_page < 0:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3187 fp = 0
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3188 elif from_page >= doc2.page_count:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3189 fp = doc2.page_count - 1
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3190 else:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3191 fp = from_page
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3192
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3193 if to_page < 0 or to_page >= doc2.page_count:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3194 tp = doc2.page_count - 1
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3195 else:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3196 tp = to_page
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3197
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3198 if start_at < 0:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3199 raise ValueError("'start_at' must be >= 0")
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3200 sa = start_at
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3201
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3202 incr = 1 if fp <= tp else -1 # page range could be reversed
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3203
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3204 # lists of source / destination page numbers
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3205 pno_src = list(range(fp, tp + incr, incr))
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3206 pno_dst = [sa + i for i in range(len(pno_src))]
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3207
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3208 # lists of source / destination page xrefs
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3209 xref_src = []
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3210 xref_dst = []
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3211 for i in range(len(pno_src)):
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3212 p_src = pno_src[i]
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3213 p_dst = pno_dst[i]
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3214 old_xref = doc2.page_xref(p_src)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3215 new_xref = doc1.page_xref(p_dst)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3216 xref_src.append(old_xref)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3217 xref_dst.append(new_xref)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3218
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3219 # create the links for each copied page in destination PDF
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3220 for i in range(len(xref_src)):
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3221 page_src = doc2[pno_src[i]] # load source page
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3222 links = page_src.get_links() # get all its links
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3223 #log( '{pno_src=}')
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3224 #log( '{type(page_src)=}')
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3225 #log( '{page_src=}')
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3226 #log( '{=i len(links)}')
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3227 if len(links) == 0: # no links there
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3228 page_src = None
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3229 continue
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3230 ctm = ~page_src.transformation_matrix # calc page transformation matrix
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3231 page_dst = doc1[pno_dst[i]] # load destination page
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3232 link_tab = [] # store all link definitions here
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3233 for l in links:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3234 if l["kind"] == LINK_GOTO and (l["page"] not in pno_src):
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3235 continue # GOTO link target not in copied pages
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3236 annot_text = cre_annot(l, xref_dst, pno_src, ctm)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3237 if annot_text:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3238 link_tab.append(annot_text)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3239 if link_tab != []:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3240 page_dst._addAnnot_FromString( tuple(link_tab))
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3241 #log( 'utils.do_links() returning.')
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3242
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3243 def _do_widgets(
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3244 tar: 'Document',
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3245 src: 'Document',
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3246 graftmap,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3247 from_page: int = -1,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3248 to_page: int = -1,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3249 start_at: int = -1,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3250 join_duplicates=0,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3251 ) -> None:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3252 """Insert widgets of copied page range into target PDF.
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3253
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3254 Parameter values **must** equal those of method insert_pdf() which
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3255 must have been previously executed.
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3256 """
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3257 if not src.is_form_pdf: # nothing to do: source PDF has no fields
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3258 return
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3259
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3260 def clean_kid_parents(acro_fields):
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3261 """ Make sure all kids have correct "Parent" pointers."""
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3262 for i in range(acro_fields.pdf_array_len()):
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3263 parent = acro_fields.pdf_array_get(i)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3264 kids = parent.pdf_dict_get(PDF_NAME("Kids"))
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3265 for j in range(kids.pdf_array_len()):
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3266 kid = kids.pdf_array_get(j)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3267 kid.pdf_dict_put(PDF_NAME("Parent"), parent)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3268
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3269 def join_widgets(pdf, acro_fields, xref1, xref2, name):
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3270 """Called for each pair of widgets having the same name.
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3271
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3272 Args:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3273 pdf: target MuPDF document
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3274 acro_fields: object Root/AcroForm/Fields
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3275 xref1, xref2: widget xrefs having same names
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3276 name: (str) the name
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3277
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3278 Result:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3279 Defined or updated widget parent that points to both widgets.
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3280 """
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3281
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3282 def re_target(pdf, acro_fields, xref1, kids1, xref2, kids2):
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3283 """Merge widget in xref2 into "Kids" list of widget xref1.
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3284
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3285 Args:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3286 xref1, kids1: target widget and its "Kids" array.
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3287 xref2, kids2: source wwidget and its "Kids" array (may be empty).
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3288 """
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3289 # make indirect objects from widgets
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3290 w1_ind = mupdf.pdf_new_indirect(pdf, xref1, 0)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3291 w2_ind = mupdf.pdf_new_indirect(pdf, xref2, 0)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3292 # find source widget in "Fields" array
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3293 idx = acro_fields.pdf_array_find(w2_ind)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3294 acro_fields.pdf_array_delete(idx)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3295
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3296 if not kids2.pdf_is_array(): # source widget has no kids
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3297 widget = mupdf.pdf_load_object(pdf, xref2)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3298
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3299 # delete name from widget and insert target as parent
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3300 widget.pdf_dict_del(PDF_NAME("T"))
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3301 widget.pdf_dict_put(PDF_NAME("Parent"), w1_ind)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3302
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3303 # put in target Kids
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3304 kids1.pdf_array_push(w2_ind)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3305 else: # copy source kids to target kids
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3306 for i in range(kids2.pdf_array_len()):
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3307 kid = kids2.pdf_array_get(i)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3308 kid.pdf_dict_put(PDF_NAME("Parent"), w1_ind)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3309 kid_ind = mupdf.pdf_new_indirect(pdf, kid.pdf_to_num(), 0)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3310 kids1.pdf_array_push(kid_ind)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3311
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3312 def new_target(pdf, acro_fields, xref1, w1, xref2, w2, name):
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3313 """Make new "Parent" for two widgets with same name.
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3314
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3315 Args:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3316 xref1, w1: first widget
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3317 xref2, w2: second widget
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3318 name: field name
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3319
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3320 Result:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3321 Both widgets have no "Kids". We create a new object with the
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3322 name and a "Kids" array containing the widgets.
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3323 Original widgets must be removed from AcroForm/Fields.
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3324 """
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3325 # make new "Parent" object
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3326 new = mupdf.pdf_new_dict(pdf, 5)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3327 new.pdf_dict_put_text_string(PDF_NAME("T"), name)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3328 kids = new.pdf_dict_put_array(PDF_NAME("Kids"), 2)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3329 new_obj = mupdf.pdf_add_object(pdf, new)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3330 new_obj_xref = new_obj.pdf_to_num()
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3331 new_ind = mupdf.pdf_new_indirect(pdf, new_obj_xref, 0)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3332
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3333 # copy over some required source widget properties
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3334 ft = w1.pdf_dict_get(PDF_NAME("FT"))
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3335 w1.pdf_dict_del(PDF_NAME("FT"))
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3336 new_obj.pdf_dict_put(PDF_NAME("FT"), ft)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3337
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3338 aa = w1.pdf_dict_get(PDF_NAME("AA"))
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3339 w1.pdf_dict_del(PDF_NAME("AA"))
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3340 new_obj.pdf_dict_put(PDF_NAME("AA"), aa)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3341
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3342 # remove name field, insert "Parent" field in source widgets
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3343 w1.pdf_dict_del(PDF_NAME("T"))
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3344 w1.pdf_dict_put(PDF_NAME("Parent"), new_ind)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3345 w2.pdf_dict_del(PDF_NAME("T"))
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3346 w2.pdf_dict_put(PDF_NAME("Parent"), new_ind)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3347
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3348 # put source widgets in "kids" array
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3349 ind1 = mupdf.pdf_new_indirect(pdf, xref1, 0)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3350 ind2 = mupdf.pdf_new_indirect(pdf, xref2, 0)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3351 kids.pdf_array_push(ind1)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3352 kids.pdf_array_push(ind2)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3353
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3354 # remove source widgets from "AcroForm/Fields"
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3355 idx = acro_fields.pdf_array_find(ind1)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3356 acro_fields.pdf_array_delete(idx)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3357 idx = acro_fields.pdf_array_find(ind2)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3358 acro_fields.pdf_array_delete(idx)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3359
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3360 acro_fields.pdf_array_push(new_ind)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3361
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3362 w1 = mupdf.pdf_load_object(pdf, xref1)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3363 w2 = mupdf.pdf_load_object(pdf, xref2)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3364 kids1 = w1.pdf_dict_get(PDF_NAME("Kids"))
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3365 kids2 = w2.pdf_dict_get(PDF_NAME("Kids"))
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3366
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3367 # check which widget has a suitable "Kids" array
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3368 if kids1.pdf_is_array():
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3369 re_target(pdf, acro_fields, xref1, kids1, xref2, kids2) # pylint: disable=arguments-out-of-order
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3370 elif kids2.pdf_is_array():
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3371 re_target(pdf, acro_fields, xref2, kids2, xref1, kids1) # pylint: disable=arguments-out-of-order
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3372 else:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3373 new_target(pdf, acro_fields, xref1, w1, xref2, w2, name) # pylint: disable=arguments-out-of-order
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3374
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3375 def get_kids(parent, kids_list):
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3376 """Return xref list of leaf kids for a parent.
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3377
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3378 Call with an empty list.
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3379 """
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3380 kids = mupdf.pdf_dict_get(parent, PDF_NAME("Kids"))
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3381 if not kids.pdf_is_array():
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3382 return kids_list
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3383 for i in range(kids.pdf_array_len()):
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3384 kid = kids.pdf_array_get(i)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3385 if mupdf.pdf_is_dict(mupdf.pdf_dict_get(kid, PDF_NAME("Kids"))):
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3386 kids_list = get_kids(kid, kids_list)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3387 else:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3388 kids_list.append(kid.pdf_to_num())
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3389 return kids_list
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3390
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3391 def kids_xrefs(widget):
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3392 """Get the xref of top "Parent" and the list of leaf widgets."""
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3393 kids_list = []
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3394 parent = mupdf.pdf_dict_get(widget, PDF_NAME("Parent"))
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3395 parent_xref = parent.pdf_to_num()
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3396 if parent_xref == 0:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3397 return parent_xref, kids_list
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3398 kids_list = get_kids(parent, kids_list)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3399 return parent_xref, kids_list
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3400
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3401 def deduplicate_names(pdf, acro_fields, join_duplicates=False):
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3402 """Handle any widget name duplicates caused by the merge."""
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3403 names = {} # key is a widget name, value a list of widgets having it.
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3404
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3405 # extract all names and widgets in "AcroForm/Fields"
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3406 for i in range(mupdf.pdf_array_len(acro_fields)):
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3407 wobject = mupdf.pdf_array_get(acro_fields, i)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3408 xref = wobject.pdf_to_num()
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3409
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3410 # extract widget name and collect widget(s) using it
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3411 T = mupdf.pdf_dict_get_text_string(wobject, PDF_NAME("T"))
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3412 xrefs = names.get(T, [])
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3413 xrefs.append(xref)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3414 names[T] = xrefs
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3415
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3416 for name, xrefs in names.items():
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3417 if len(xrefs) < 2:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3418 continue
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3419 xref0, xref1 = xrefs[:2] # only exactly 2 should occur!
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3420 if join_duplicates: # combine fields with equal names
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3421 join_widgets(pdf, acro_fields, xref0, xref1, name)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3422 else: # make field names unique
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3423 newname = name + f" [{xref1}]" # append this to the name
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3424 wobject = mupdf.pdf_load_object(pdf, xref1)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3425 wobject.pdf_dict_put_text_string(PDF_NAME("T"), newname)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3426
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3427 clean_kid_parents(acro_fields)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3428
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3429 def get_acroform(doc):
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3430 """Retrieve the AcroForm dictionary form a PDF."""
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3431 pdf = mupdf.pdf_document_from_fz_document(doc)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3432 # AcroForm (= central form field info)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3433 return mupdf.pdf_dict_getp(mupdf.pdf_trailer(pdf), "Root/AcroForm")
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3434
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3435 tarpdf = mupdf.pdf_document_from_fz_document(tar)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3436 srcpdf = mupdf.pdf_document_from_fz_document(src)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3437
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3438 if tar.is_form_pdf:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3439 # target is a Form PDF, so use it to include source fields
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3440 acro = get_acroform(tar)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3441 # Important arrays in AcroForm
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3442 acro_fields = acro.pdf_dict_get(PDF_NAME("Fields"))
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3443 tar_co = acro.pdf_dict_get(PDF_NAME("CO"))
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3444 if not tar_co.pdf_is_array():
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3445 tar_co = acro.pdf_dict_put_array(PDF_NAME("CO"), 5)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3446 else:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3447 # target is no Form PDF, so copy over source AcroForm
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3448 acro = mupdf.pdf_deep_copy_obj(get_acroform(src)) # make a copy
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3449
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3450 # Clear "Fields" and "CO" arrays: will be populated by page fields.
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3451 # This is required to avoid copying unneeded objects.
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3452 acro.pdf_dict_del(PDF_NAME("Fields"))
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3453 acro.pdf_dict_put_array(PDF_NAME("Fields"), 5)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3454 acro.pdf_dict_del(PDF_NAME("CO"))
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3455 acro.pdf_dict_put_array(PDF_NAME("CO"), 5)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3456
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3457 # Enrich AcroForm for copying to target
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3458 acro_graft = mupdf.pdf_graft_mapped_object(graftmap, acro)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3459
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3460 # Insert AcroForm into target PDF
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3461 acro_tar = mupdf.pdf_add_object(tarpdf, acro_graft)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3462 acro_fields = acro_tar.pdf_dict_get(PDF_NAME("Fields"))
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3463 tar_co = acro_tar.pdf_dict_get(PDF_NAME("CO"))
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3464
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3465 # get its xref and insert it into target catalog
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3466 tar_xref = acro_tar.pdf_to_num()
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3467 acro_tar_ind = mupdf.pdf_new_indirect(tarpdf, tar_xref, 0)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3468 root = mupdf.pdf_dict_get(mupdf.pdf_trailer(tarpdf), PDF_NAME("Root"))
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3469 root.pdf_dict_put(PDF_NAME("AcroForm"), acro_tar_ind)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3470
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3471 if from_page <= to_page:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3472 src_range = range(from_page, to_page + 1)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3473 else:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3474 src_range = range(from_page, to_page - 1, -1)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3475
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3476 parents = {} # information about widget parents
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3477
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3478 # remove "P" owning page reference from all widgets of all source pages
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3479 for i in src_range:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3480 src_page = src[i]
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3481 for xref in [
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3482 xref
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3483 for xref, wtype, _ in src_page.annot_xrefs()
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3484 if wtype == mupdf.PDF_ANNOT_WIDGET # pylint: disable=no-member
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3485 ]:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3486 w_obj = mupdf.pdf_load_object(srcpdf, xref)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3487 w_obj.pdf_dict_del(PDF_NAME("P"))
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3488
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3489 # get the widget's parent structure
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3490 parent_xref, old_kids = kids_xrefs(w_obj)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3491 if parent_xref:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3492 parents[parent_xref] = {
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3493 "new_xref": 0,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3494 "old_kids": old_kids,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3495 "new_kids": [],
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3496 }
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3497 # Copy over Parent widgets first - they are not page-dependent
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3498 for xref in parents.keys(): # pylint: disable=consider-using-dict-items
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3499 parent = mupdf.pdf_load_object(srcpdf, xref)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3500 parent_graft = mupdf.pdf_graft_mapped_object(graftmap, parent)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3501 parent_tar = mupdf.pdf_add_object(tarpdf, parent_graft)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3502 kids_xrefs_new = get_kids(parent_tar, [])
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3503 parent_xref_new = parent_tar.pdf_to_num()
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3504 parent_ind = mupdf.pdf_new_indirect(tarpdf, parent_xref_new, 0)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3505 acro_fields.pdf_array_push(parent_ind)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3506 parents[xref]["new_xref"] = parent_xref_new
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3507 parents[xref]["new_kids"] = kids_xrefs_new
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3508
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3509 for i in range(len(src_range)):
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3510 # read first copied over page in target
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3511 tar_page = tar[start_at + i]
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3512
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3513 # read the original page in the source PDF
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3514 src_page = src[src_range[i]]
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3515
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3516 # now walk through source page widgets and copy over
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3517 w_xrefs = [ # widget xrefs of the source page
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3518 xref
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3519 for xref, wtype, _ in src_page.annot_xrefs()
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3520 if wtype == mupdf.PDF_ANNOT_WIDGET # pylint: disable=no-member
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3521 ]
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3522 if not w_xrefs: # no widgets on this source page
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3523 continue
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3524
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3525 # convert to formal PDF page
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3526 tar_page_pdf = mupdf.pdf_page_from_fz_page(tar_page)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3527
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3528 # extract annotations array
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3529 tar_annots = mupdf.pdf_dict_get(tar_page_pdf.obj(), PDF_NAME("Annots"))
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3530 if not mupdf.pdf_is_array(tar_annots):
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3531 tar_annots = mupdf.pdf_dict_put_array(
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3532 tar_page_pdf.obj(), PDF_NAME("Annots"), 5
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3533 )
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3534
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3535 for xref in w_xrefs:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3536 w_obj = mupdf.pdf_load_object(srcpdf, xref)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3537
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3538 # check if field takes part in inter-field validations
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3539 is_aac = mupdf.pdf_is_dict(mupdf.pdf_dict_getp(w_obj, "AA/C"))
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3540
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3541 # check if parent of widget already in target
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3542 parent_xref = mupdf.pdf_to_num(
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3543 w_obj.pdf_dict_get(PDF_NAME("Parent"))
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3544 )
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3545 if parent_xref == 0: # parent not in target yet
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3546 try:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3547 w_obj_graft = mupdf.pdf_graft_mapped_object(graftmap, w_obj)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3548 except Exception as e:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3549 message_warning(f"cannot copy widget at {xref=}: {e}")
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3550 continue
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3551 w_obj_tar = mupdf.pdf_add_object(tarpdf, w_obj_graft)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3552 tar_xref = w_obj_tar.pdf_to_num()
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3553 w_obj_tar_ind = mupdf.pdf_new_indirect(tarpdf, tar_xref, 0)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3554 mupdf.pdf_array_push(tar_annots, w_obj_tar_ind)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3555 mupdf.pdf_array_push(acro_fields, w_obj_tar_ind)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3556 else:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3557 parent = parents[parent_xref]
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3558 idx = parent["old_kids"].index(xref) # search for xref in parent
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3559 tar_xref = parent["new_kids"][idx]
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3560 w_obj_tar_ind = mupdf.pdf_new_indirect(tarpdf, tar_xref, 0)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3561 mupdf.pdf_array_push(tar_annots, w_obj_tar_ind)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3562
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3563 # Into "AcroForm/CO" if a computation field.
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3564 if is_aac:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3565 mupdf.pdf_array_push(tar_co, w_obj_tar_ind)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3566
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3567 deduplicate_names(tarpdf, acro_fields, join_duplicates=join_duplicates)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
3568
1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3569 def _embeddedFileGet(self, idx):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3570 pdf = _as_pdf_document(self)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3571 names = mupdf.pdf_dict_getl(
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3572 mupdf.pdf_trailer(pdf),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3573 PDF_NAME('Root'),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3574 PDF_NAME('Names'),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3575 PDF_NAME('EmbeddedFiles'),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3576 PDF_NAME('Names'),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3577 )
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3578 entry = mupdf.pdf_array_get(names, 2*idx+1)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3579 filespec = mupdf.pdf_dict_getl(entry, PDF_NAME('EF'), PDF_NAME('F'))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3580 buf = mupdf.pdf_load_stream(filespec)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3581 cont = JM_BinFromBuffer(buf)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3582 return cont
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3583
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3584 def _embeddedFileIndex(self, item: typing.Union[int, str]) -> int:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3585 filenames = self.embfile_names()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3586 msg = "'%s' not in EmbeddedFiles array." % str(item)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3587 if item in filenames:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3588 idx = filenames.index(item)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3589 elif item in range(len(filenames)):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3590 idx = item
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3591 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3592 raise ValueError(msg)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3593 return idx
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3594
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3595 def _embfile_add(self, name, buffer_, filename=None, ufilename=None, desc=None):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3596 pdf = _as_pdf_document(self)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3597 data = JM_BufferFromBytes(buffer_)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3598 if not data.m_internal:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3599 raise TypeError( MSG_BAD_BUFFER)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3600
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3601 names = mupdf.pdf_dict_getl(
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3602 mupdf.pdf_trailer(pdf),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3603 PDF_NAME('Root'),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3604 PDF_NAME('Names'),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3605 PDF_NAME('EmbeddedFiles'),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3606 PDF_NAME('Names'),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3607 )
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3608 if not mupdf.pdf_is_array(names):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3609 root = mupdf.pdf_dict_get(mupdf.pdf_trailer(pdf), PDF_NAME('Root'))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3610 names = mupdf.pdf_new_array(pdf, 6) # an even number!
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3611 mupdf.pdf_dict_putl(
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3612 root,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3613 names,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3614 PDF_NAME('Names'),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3615 PDF_NAME('EmbeddedFiles'),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3616 PDF_NAME('Names'),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3617 )
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3618 fileentry = JM_embed_file(pdf, data, filename, ufilename, desc, 1)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3619 xref = mupdf.pdf_to_num(
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3620 mupdf.pdf_dict_getl(fileentry, PDF_NAME('EF'), PDF_NAME('F'))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3621 )
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3622 mupdf.pdf_array_push(names, mupdf.pdf_new_text_string(name))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3623 mupdf.pdf_array_push(names, fileentry)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3624 return xref
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3625
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3626 def _embfile_del(self, idx):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3627 pdf = _as_pdf_document(self)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3628 names = mupdf.pdf_dict_getl(
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3629 mupdf.pdf_trailer(pdf),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3630 PDF_NAME('Root'),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3631 PDF_NAME('Names'),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3632 PDF_NAME('EmbeddedFiles'),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3633 PDF_NAME('Names'),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3634 )
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3635 mupdf.pdf_array_delete(names, idx + 1)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3636 mupdf.pdf_array_delete(names, idx)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3637
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3638 def _embfile_info(self, idx, infodict):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3639 pdf = _as_pdf_document(self)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3640 xref = 0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3641 ci_xref=0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3642
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3643 trailer = mupdf.pdf_trailer(pdf)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3644
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3645 names = mupdf.pdf_dict_getl(
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3646 trailer,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3647 PDF_NAME('Root'),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3648 PDF_NAME('Names'),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3649 PDF_NAME('EmbeddedFiles'),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3650 PDF_NAME('Names'),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3651 )
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3652 o = mupdf.pdf_array_get(names, 2*idx+1)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3653 ci = mupdf.pdf_dict_get(o, PDF_NAME('CI'))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3654 if ci.m_internal:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3655 ci_xref = mupdf.pdf_to_num(ci)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3656 infodict["collection"] = ci_xref
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3657 name = mupdf.pdf_to_text_string(mupdf.pdf_dict_get(o, PDF_NAME('F')))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3658 infodict[dictkey_filename] = JM_EscapeStrFromStr(name)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3659
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3660 name = mupdf.pdf_to_text_string(mupdf.pdf_dict_get(o, PDF_NAME('UF')))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3661 infodict[dictkey_ufilename] = JM_EscapeStrFromStr(name)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3662
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3663 name = mupdf.pdf_to_text_string(mupdf.pdf_dict_get(o, PDF_NAME('Desc')))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3664 infodict[dictkey_descr] = JM_UnicodeFromStr(name)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3665
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3666 len_ = -1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3667 DL = -1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3668 fileentry = mupdf.pdf_dict_getl(o, PDF_NAME('EF'), PDF_NAME('F'))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3669 xref = mupdf.pdf_to_num(fileentry)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3670 o = mupdf.pdf_dict_get(fileentry, PDF_NAME('Length'))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3671 if o.m_internal:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3672 len_ = mupdf.pdf_to_int(o)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3673
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3674 o = mupdf.pdf_dict_get(fileentry, PDF_NAME('DL'))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3675 if o.m_internal:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3676 DL = mupdf.pdf_to_int(o)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3677 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3678 o = mupdf.pdf_dict_getl(fileentry, PDF_NAME('Params'), PDF_NAME('Size'))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3679 if o.m_internal:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3680 DL = mupdf.pdf_to_int(o)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3681 infodict[dictkey_size] = DL
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3682 infodict[dictkey_length] = len_
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3683 return xref
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3684
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3685 def _embfile_names(self, namelist):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3686 """Get list of embedded file names."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3687 pdf = _as_pdf_document(self)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3688 names = mupdf.pdf_dict_getl(
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3689 mupdf.pdf_trailer(pdf),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3690 PDF_NAME('Root'),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3691 PDF_NAME('Names'),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3692 PDF_NAME('EmbeddedFiles'),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3693 PDF_NAME('Names'),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3694 )
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3695 if mupdf.pdf_is_array(names):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3696 n = mupdf.pdf_array_len(names)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3697 for i in range(0, n, 2):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3698 val = JM_EscapeStrFromStr(
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3699 mupdf.pdf_to_text_string(
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3700 mupdf.pdf_array_get(names, i)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3701 )
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3702 )
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3703 namelist.append(val)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3704
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3705 def _embfile_upd(self, idx, buffer_=None, filename=None, ufilename=None, desc=None):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3706 pdf = _as_pdf_document(self)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3707 xref = 0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3708 names = mupdf.pdf_dict_getl(
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3709 mupdf.pdf_trailer(pdf),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3710 PDF_NAME('Root'),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3711 PDF_NAME('Names'),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3712 PDF_NAME('EmbeddedFiles'),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3713 PDF_NAME('Names'),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3714 )
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3715 entry = mupdf.pdf_array_get(names, 2*idx+1)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3716
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3717 filespec = mupdf.pdf_dict_getl(entry, PDF_NAME('EF'), PDF_NAME('F'))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3718 if not filespec.m_internal:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3719 RAISEPY( "bad PDF: no /EF object", JM_Exc_FileDataError)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3720 res = JM_BufferFromBytes(buffer_)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3721 if buffer_ and buffer_.m_internal and not res.m_internal:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3722 raise TypeError( MSG_BAD_BUFFER)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3723 if res.m_internal and buffer_ and buffer_.m_internal:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3724 JM_update_stream(pdf, filespec, res, 1)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3725 # adjust /DL and /Size parameters
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3726 len, _ = mupdf.fz_buffer_storage(res)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3727 l = mupdf.pdf_new_int(len)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3728 mupdf.pdf_dict_put(filespec, PDF_NAME('DL'), l)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3729 mupdf.pdf_dict_putl(filespec, l, PDF_NAME('Params'), PDF_NAME('Size'))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3730 xref = mupdf.pdf_to_num(filespec)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3731 if filename:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3732 mupdf.pdf_dict_put_text_string(entry, PDF_NAME('F'), filename)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3733
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3734 if ufilename:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3735 mupdf.pdf_dict_put_text_string(entry, PDF_NAME('UF'), ufilename)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3736
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3737 if desc:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3738 mupdf.pdf_dict_put_text_string(entry, PDF_NAME('Desc'), desc)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3739 return xref
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3740
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3741 def _extend_toc_items(self, items):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3742 """Add color info to all items of an extended TOC list."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3743 if self.is_closed:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3744 raise ValueError("document closed")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3745 if g_use_extra:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3746 return extra.Document_extend_toc_items( self.this, items)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3747 pdf = _as_pdf_document(self)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3748 zoom = "zoom"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3749 bold = "bold"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3750 italic = "italic"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3751 collapse = "collapse"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3752
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3753 root = mupdf.pdf_dict_get(mupdf.pdf_trailer(pdf), PDF_NAME('Root'))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3754 if not root.m_internal:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3755 return
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3756 olroot = mupdf.pdf_dict_get(root, PDF_NAME('Outlines'))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3757 if not olroot.m_internal:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3758 return
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3759 first = mupdf.pdf_dict_get(olroot, PDF_NAME('First'))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3760 if not first.m_internal:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3761 return
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3762 xrefs = []
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3763 xrefs = JM_outline_xrefs(first, xrefs)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3764 n = len(xrefs)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3765 m = len(items)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3766 if not n:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3767 return
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3768 if n != m:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3769 raise IndexError( "internal error finding outline xrefs")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3770
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3771 # update all TOC item dictionaries
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3772 for i in range(n):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3773 xref = int(xrefs[i])
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3774 item = items[i]
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3775 itemdict = item[3]
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3776 if not isinstance(itemdict, dict):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3777 raise ValueError( "need non-simple TOC format")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3778 itemdict[dictkey_xref] = xrefs[i]
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3779 bm = mupdf.pdf_load_object(pdf, xref)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3780 flags = mupdf.pdf_to_int( mupdf.pdf_dict_get(bm, PDF_NAME('F')))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3781 if flags == 1:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3782 itemdict[italic] = True
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3783 elif flags == 2:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3784 itemdict[bold] = True
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3785 elif flags == 3:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3786 itemdict[italic] = True
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3787 itemdict[bold] = True
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3788 count = mupdf.pdf_to_int( mupdf.pdf_dict_get(bm, PDF_NAME('Count')))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3789 if count < 0:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3790 itemdict[collapse] = True
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3791 elif count > 0:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3792 itemdict[collapse] = False
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3793 col = mupdf.pdf_dict_get(bm, PDF_NAME('C'))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3794 if mupdf.pdf_is_array(col) and mupdf.pdf_array_len(col) == 3:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3795 color = (
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3796 mupdf.pdf_to_real(mupdf.pdf_array_get(col, 0)),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3797 mupdf.pdf_to_real(mupdf.pdf_array_get(col, 1)),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3798 mupdf.pdf_to_real(mupdf.pdf_array_get(col, 2)),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3799 )
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3800 itemdict[dictkey_color] = color
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3801 z=0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3802 obj = mupdf.pdf_dict_get(bm, PDF_NAME('Dest'))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3803 if not obj.m_internal or not mupdf.pdf_is_array(obj):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3804 obj = mupdf.pdf_dict_getl(bm, PDF_NAME('A'), PDF_NAME('D'))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3805 if mupdf.pdf_is_array(obj) and mupdf.pdf_array_len(obj) == 5:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3806 z = mupdf.pdf_to_real(mupdf.pdf_array_get(obj, 4))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3807 itemdict[zoom] = float(z)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3808 item[3] = itemdict
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3809 items[i] = item
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3810
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3811 def _forget_page(self, page: Page):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3812 """Remove a page from document page dict."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3813 pid = id(page)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3814 if pid in self._page_refs:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3815 #self._page_refs[pid] = None
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3816 del self._page_refs[pid]
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3817
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3818 def _get_char_widths(self, xref: int, bfname: str, ext: str, ordering: int, limit: int, idx: int = 0):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3819 pdf = _as_pdf_document(self)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3820 mylimit = limit
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3821 if mylimit < 256:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3822 mylimit = 256
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3823 if ordering >= 0:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3824 data, size, index = mupdf.fz_lookup_cjk_font(ordering)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3825 font = mupdf.fz_new_font_from_memory(None, data, size, index, 0)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3826 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3827 data, size = mupdf.fz_lookup_base14_font(bfname)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3828 if data:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3829 font = mupdf.fz_new_font_from_memory(bfname, data, size, 0, 0)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3830 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3831 buf = JM_get_fontbuffer(pdf, xref)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3832 if not buf.m_internal:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3833 raise Exception("font at xref %d is not supported" % xref)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3834
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3835 font = mupdf.fz_new_font_from_buffer(None, buf, idx, 0)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3836 wlist = []
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3837 for i in range(mylimit):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3838 glyph = mupdf.fz_encode_character(font, i)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3839 adv = mupdf.fz_advance_glyph(font, glyph, 0)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3840 if ordering >= 0:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3841 glyph = i
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3842 if glyph > 0:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3843 wlist.append( (glyph, adv))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3844 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3845 wlist.append( (glyph, 0.0))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3846 return wlist
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3847
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3848 def _get_page_labels(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3849 pdf = _as_pdf_document(self)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3850 rc = []
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3851 pagelabels = mupdf.pdf_new_name("PageLabels")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3852 obj = mupdf.pdf_dict_getl( mupdf.pdf_trailer(pdf), PDF_NAME('Root'), pagelabels)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3853 if not obj.m_internal:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3854 return rc
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3855 # simple case: direct /Nums object
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3856 nums = mupdf.pdf_resolve_indirect( mupdf.pdf_dict_get( obj, PDF_NAME('Nums')))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3857 if nums.m_internal:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3858 JM_get_page_labels(rc, nums)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3859 return rc
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3860 # case: /Kids/Nums
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3861 nums = mupdf.pdf_resolve_indirect( mupdf.pdf_dict_getl(obj, PDF_NAME('Kids'), PDF_NAME('Nums')))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3862 if nums.m_internal:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3863 JM_get_page_labels(rc, nums)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3864 return rc
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3865 # case: /Kids is an array of multiple /Nums
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3866 kids = mupdf.pdf_resolve_indirect( mupdf.pdf_dict_get( obj, PDF_NAME('Kids')))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3867 if not kids.m_internal or not mupdf.pdf_is_array(kids):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3868 return rc
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3869 n = mupdf.pdf_array_len(kids)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3870 for i in range(n):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3871 nums = mupdf.pdf_resolve_indirect(
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3872 mupdf.pdf_dict_get(
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3873 mupdf.pdf_array_get(kids, i),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3874 PDF_NAME('Nums'),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3875 )
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3876 )
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3877 JM_get_page_labels(rc, nums)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3878 return rc
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3879
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3880 def _getMetadata(self, key):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3881 """Get metadata."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3882 try:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3883 return mupdf.fz_lookup_metadata2( self.this, key)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3884 except Exception:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3885 if g_exceptions_verbose > 2: exception_info()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3886 return ''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3887
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3888 def _getOLRootNumber(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3889 """Get xref of Outline Root, create it if missing."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3890 if self.is_closed or self.is_encrypted:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3891 raise ValueError("document closed or encrypted")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3892 pdf = _as_pdf_document(self)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3893 # get main root
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3894 root = mupdf.pdf_dict_get( mupdf.pdf_trailer( pdf), PDF_NAME('Root'))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3895 # get outline root
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3896 olroot = mupdf.pdf_dict_get( root, PDF_NAME('Outlines'))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3897 if not olroot.m_internal:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3898 olroot = mupdf.pdf_new_dict( pdf, 4)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3899 mupdf.pdf_dict_put( olroot, PDF_NAME('Type'), PDF_NAME('Outlines'))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3900 ind_obj = mupdf.pdf_add_object( pdf, olroot)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3901 mupdf.pdf_dict_put( root, PDF_NAME('Outlines'), ind_obj)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3902 olroot = mupdf.pdf_dict_get( root, PDF_NAME('Outlines'))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3903 return mupdf.pdf_to_num( olroot)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3904
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3905 def _getPDFfileid(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3906 """Get PDF file id."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3907 pdf = _as_pdf_document(self, required=0)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3908 if not pdf.m_internal:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3909 return
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3910 idlist = []
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3911 identity = mupdf.pdf_dict_get(mupdf.pdf_trailer(pdf), PDF_NAME('ID'))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3912 if identity.m_internal:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3913 n = mupdf.pdf_array_len(identity)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3914 for i in range(n):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3915 o = mupdf.pdf_array_get(identity, i)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3916 text = mupdf.pdf_to_text_string(o)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3917 hex_ = binascii.hexlify(text)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3918 idlist.append(hex_)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3919 return idlist
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3920
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3921 def _getPageInfo(self, pno, what):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3922 """List fonts, images, XObjects used on a page."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3923 if self.is_closed or self.is_encrypted:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3924 raise ValueError("document closed or encrypted")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3925 doc = self.this
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3926 pageCount = mupdf.pdf_count_pages(doc) if isinstance(doc, mupdf.PdfDocument) else mupdf.fz_count_pages(doc)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3927 n = pno # pno < 0 is allowed
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3928 while n < 0:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3929 n += pageCount # make it non-negative
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3930 if n >= pageCount:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3931 raise ValueError( MSG_BAD_PAGENO)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3932 pdf = _as_pdf_document(self)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3933 pageref = mupdf.pdf_lookup_page_obj(pdf, n)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3934 rsrc = mupdf.pdf_dict_get_inheritable(pageref, mupdf.PDF_ENUM_NAME_Resources)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3935 liste = []
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3936 tracer = []
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3937 if rsrc.m_internal:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3938 JM_scan_resources(pdf, rsrc, liste, what, 0, tracer)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3939 return liste
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3940
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3941 def _insert_font(self, fontfile=None, fontbuffer=None):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3942 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3943 Utility: insert font from file or binary.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3944 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3945 pdf = _as_pdf_document(self)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3946 if not fontfile and not fontbuffer:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3947 raise ValueError( MSG_FILE_OR_BUFFER)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3948 value = JM_insert_font(pdf, None, fontfile, fontbuffer, 0, 0, 0, 0, 0, -1)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3949 return value
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3950
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3951 def _loadOutline(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3952 """Load first outline."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3953 doc = self.this
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3954 assert isinstance( doc, mupdf.FzDocument)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3955 try:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3956 ol = mupdf.fz_load_outline( doc)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3957 except Exception:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3958 if g_exceptions_verbose > 1: exception_info()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3959 return
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3960 return Outline( ol)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3961
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3962 def _make_page_map(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3963 """Make an array page number -> page object."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3964 if self.is_closed:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3965 raise ValueError("document closed")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3966 assert 0, f'_make_page_map() is no-op'
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3967
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3968 def _move_copy_page(self, pno, nb, before, copy):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3969 """Move or copy a PDF page reference."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3970 pdf = _as_pdf_document(self)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3971 same = 0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3972 # get the two page objects -----------------------------------
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3973 # locate the /Kids arrays and indices in each
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3974
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3975 page1, parent1, i1 = pdf_lookup_page_loc( pdf, pno)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3976
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3977 kids1 = mupdf.pdf_dict_get( parent1, PDF_NAME('Kids'))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3978
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3979 page2, parent2, i2 = pdf_lookup_page_loc( pdf, nb)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3980 kids2 = mupdf.pdf_dict_get( parent2, PDF_NAME('Kids'))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3981 if before: # calc index of source page in target /Kids
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3982 pos = i2
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3983 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3984 pos = i2 + 1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3985
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3986 # same /Kids array? ------------------------------------------
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3987 same = mupdf.pdf_objcmp( kids1, kids2)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3988
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3989 # put source page in target /Kids array ----------------------
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3990 if not copy and same != 0: # update parent in page object
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3991 mupdf.pdf_dict_put( page1, PDF_NAME('Parent'), parent2)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3992 mupdf.pdf_array_insert( kids2, page1, pos)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3993
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3994 if same != 0: # different /Kids arrays ----------------------
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3995 parent = parent2
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3996 while parent.m_internal: # increase /Count objects in parents
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3997 count = mupdf.pdf_dict_get_int( parent, PDF_NAME('Count'))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3998 mupdf.pdf_dict_put_int( parent, PDF_NAME('Count'), count + 1)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3999 parent = mupdf.pdf_dict_get( parent, PDF_NAME('Parent'))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4000 if not copy: # delete original item
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4001 mupdf.pdf_array_delete( kids1, i1)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4002 parent = parent1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4003 while parent.m_internal: # decrease /Count objects in parents
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4004 count = mupdf.pdf_dict_get_int( parent, PDF_NAME('Count'))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4005 mupdf.pdf_dict_put_int( parent, PDF_NAME('Count'), count - 1)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4006 parent = mupdf.pdf_dict_get( parent, PDF_NAME('Parent'))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4007 else: # same /Kids array
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4008 if copy: # source page is copied
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4009 parent = parent2
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4010 while parent.m_internal: # increase /Count object in parents
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4011 count = mupdf.pdf_dict_get_int( parent, PDF_NAME('Count'))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4012 mupdf.pdf_dict_put_int( parent, PDF_NAME('Count'), count + 1)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4013 parent = mupdf.pdf_dict_get( parent, PDF_NAME('Parent'))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4014 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4015 if i1 < pos:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4016 mupdf.pdf_array_delete( kids1, i1)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4017 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4018 mupdf.pdf_array_delete( kids1, i1 + 1)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4019 if pdf.m_internal.rev_page_map: # page map no longer valid: drop it
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4020 mupdf.ll_pdf_drop_page_tree( pdf.m_internal)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4021
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4022 self._reset_page_refs()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4023
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4024 def _newPage(self, pno=-1, width=595, height=842):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4025 """Make a new PDF page."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4026 if self.is_closed or self.is_encrypted:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4027 raise ValueError("document closed or encrypted")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4028 if g_use_extra:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4029 extra._newPage( self.this, pno, width, height)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4030 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4031 pdf = _as_pdf_document(self)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4032 mediabox = mupdf.FzRect(mupdf.FzRect.Fixed_UNIT)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4033 mediabox.x1 = width
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4034 mediabox.y1 = height
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4035 contents = mupdf.FzBuffer()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4036 if pno < -1:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4037 raise ValueError( MSG_BAD_PAGENO)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4038 # create /Resources and /Contents objects
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4039 #resources = pdf.add_object(pdf.new_dict(1))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4040 resources = mupdf.pdf_add_new_dict(pdf, 1)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4041 page_obj = mupdf.pdf_add_page( pdf, mediabox, 0, resources, contents)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4042 mupdf.pdf_insert_page( pdf, pno, page_obj)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4043 # fixme: pdf->dirty = 1;
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4044
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4045 self._reset_page_refs()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4046 return self[pno]
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4047
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4048 def _remove_links_to(self, numbers):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4049 pdf = _as_pdf_document(self)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4050 _remove_dest_range(pdf, numbers)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4051
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4052 def _remove_toc_item(self, xref):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4053 # "remove" bookmark by letting it point to nowhere
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4054 pdf = _as_pdf_document(self)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4055 item = mupdf.pdf_new_indirect(pdf, xref, 0)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4056 mupdf.pdf_dict_del( item, PDF_NAME('Dest'))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4057 mupdf.pdf_dict_del( item, PDF_NAME('A'))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4058 color = mupdf.pdf_new_array( pdf, 3)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4059 for i in range(3):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4060 mupdf.pdf_array_push_real( color, 0.8)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4061 mupdf.pdf_dict_put( item, PDF_NAME('C'), color)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4062
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4063 def _reset_page_refs(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4064 """Invalidate all pages in document dictionary."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4065 if getattr(self, "is_closed", True):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4066 return
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4067 pages = [p for p in self._page_refs.values()]
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4068 for page in pages:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4069 if page:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4070 page._erase()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4071 page = None
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4072 self._page_refs.clear()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4073
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4074 def _set_page_labels(self, labels):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4075 pdf = _as_pdf_document(self)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4076 pagelabels = mupdf.pdf_new_name("PageLabels")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4077 root = mupdf.pdf_dict_get(mupdf.pdf_trailer(pdf), PDF_NAME('Root'))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4078 mupdf.pdf_dict_del(root, pagelabels)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4079 mupdf.pdf_dict_putl(root, mupdf.pdf_new_array(pdf, 0), pagelabels, PDF_NAME('Nums'))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4080
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4081 xref = self.pdf_catalog()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4082 text = self.xref_object(xref, compressed=True)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4083 text = text.replace("/Nums[]", "/Nums[%s]" % labels)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4084 self.update_object(xref, text)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4085
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4086 def _update_toc_item(self, xref, action=None, title=None, flags=0, collapse=None, color=None):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4087 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4088 "update" bookmark by letting it point to nowhere
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4089 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4090 pdf = _as_pdf_document(self)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4091 item = mupdf.pdf_new_indirect( pdf, xref, 0)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4092 if title:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4093 mupdf.pdf_dict_put_text_string( item, PDF_NAME('Title'), title)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4094 if action:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4095 mupdf.pdf_dict_del( item, PDF_NAME('Dest'))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4096 obj = JM_pdf_obj_from_str( pdf, action)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4097 mupdf.pdf_dict_put( item, PDF_NAME('A'), obj)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4098 mupdf.pdf_dict_put_int( item, PDF_NAME('F'), flags)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4099 if color:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4100 c = mupdf.pdf_new_array( pdf, 3)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4101 for i in range(3):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4102 f = color[i]
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4103 mupdf.pdf_array_push_real( c, f)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4104 mupdf.pdf_dict_put( item, PDF_NAME('C'), c)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4105 elif color is not None:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4106 mupdf.pdf_dict_del( item, PDF_NAME('C'))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4107 if collapse is not None:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4108 if mupdf.pdf_dict_get( item, PDF_NAME('Count')).m_internal:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4109 i = mupdf.pdf_dict_get_int( item, PDF_NAME('Count'))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4110 if (i < 0 and collapse is False) or (i > 0 and collapse is True):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4111 i = i * (-1)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4112 mupdf.pdf_dict_put_int( item, PDF_NAME('Count'), i)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4113
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4114 @property
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4115 def FormFonts(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4116 """Get list of field font resource names."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4117 pdf = _as_pdf_document(self, required=0)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4118 if not pdf.m_internal:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4119 return
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4120 fonts = mupdf.pdf_dict_getl(
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4121 mupdf.pdf_trailer(pdf),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4122 PDF_NAME('Root'),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4123 PDF_NAME('AcroForm'),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4124 PDF_NAME('DR'),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4125 PDF_NAME('Font'),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4126 )
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4127 liste = list()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4128 if fonts.m_internal and mupdf.pdf_is_dict(fonts): # fonts exist
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4129 n = mupdf.pdf_dict_len(fonts)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4130 for i in range(n):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4131 f = mupdf.pdf_dict_get_key(fonts, i)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4132 liste.append(JM_UnicodeFromStr(mupdf.pdf_to_name(f)))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4133 return liste
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4134
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4135 def add_layer(self, name, creator=None, on=None):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4136 """Add a new OC layer."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4137 pdf = _as_pdf_document(self)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4138 JM_add_layer_config( pdf, name, creator, on)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4139 mupdf.ll_pdf_read_ocg( pdf.m_internal)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4140
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4141 def add_ocg(self, name, config=-1, on=1, intent=None, usage=None):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4142 """Add new optional content group."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4143 xref = 0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4144 pdf = _as_pdf_document(self)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4145
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4146 # make the OCG
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4147 ocg = mupdf.pdf_add_new_dict(pdf, 3)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4148 mupdf.pdf_dict_put(ocg, PDF_NAME('Type'), PDF_NAME('OCG'))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4149 mupdf.pdf_dict_put_text_string(ocg, PDF_NAME('Name'), name)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4150 intents = mupdf.pdf_dict_put_array(ocg, PDF_NAME('Intent'), 2)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4151 if not intent:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4152 mupdf.pdf_array_push(intents, PDF_NAME('View'))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4153 elif not isinstance(intent, str):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4154 assert 0, f'fixme: intent is not a str. {type(intent)=} {type=}'
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4155 #n = len(intent)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4156 #for i in range(n):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4157 # item = intent[i]
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4158 # c = JM_StrAsChar(item);
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4159 # if (c) {
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4160 # pdf_array_push(gctx, intents, pdf_new_name(gctx, c));
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4161 # }
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4162 # Py_DECREF(item);
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4163 #}
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4164 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4165 mupdf.pdf_array_push(intents, mupdf.pdf_new_name(intent))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4166 use_for = mupdf.pdf_dict_put_dict(ocg, PDF_NAME('Usage'), 3)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4167 ci_name = mupdf.pdf_new_name("CreatorInfo")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4168 cre_info = mupdf.pdf_dict_put_dict(use_for, ci_name, 2)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4169 mupdf.pdf_dict_put_text_string(cre_info, PDF_NAME('Creator'), "PyMuPDF")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4170 if usage:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4171 mupdf.pdf_dict_put_name(cre_info, PDF_NAME('Subtype'), usage)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4172 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4173 mupdf.pdf_dict_put_name(cre_info, PDF_NAME('Subtype'), "Artwork")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4174 indocg = mupdf.pdf_add_object(pdf, ocg)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4175
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4176 # Insert OCG in the right config
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4177 ocp = JM_ensure_ocproperties(pdf)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4178 obj = mupdf.pdf_dict_get(ocp, PDF_NAME('OCGs'))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4179 mupdf.pdf_array_push(obj, indocg)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4180
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4181 if config > -1:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4182 obj = mupdf.pdf_dict_get(ocp, PDF_NAME('Configs'))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4183 if not mupdf.pdf_is_array(obj):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4184 raise ValueError( MSG_BAD_OC_CONFIG)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4185 cfg = mupdf.pdf_array_get(obj, config)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4186 if not cfg.m_internal:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4187 raise ValueError( MSG_BAD_OC_CONFIG)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4188 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4189 cfg = mupdf.pdf_dict_get(ocp, PDF_NAME('D'))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4190
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4191 obj = mupdf.pdf_dict_get(cfg, PDF_NAME('Order'))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4192 if not obj.m_internal:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4193 obj = mupdf.pdf_dict_put_array(cfg, PDF_NAME('Order'), 1)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4194 mupdf.pdf_array_push(obj, indocg)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4195 if on:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4196 obj = mupdf.pdf_dict_get(cfg, PDF_NAME('ON'))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4197 if not obj.m_internal:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4198 obj = mupdf.pdf_dict_put_array(cfg, PDF_NAME('ON'), 1)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4199 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4200 obj =mupdf.pdf_dict_get(cfg, PDF_NAME('OFF'))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4201 if not obj.m_internal:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4202 obj =mupdf.pdf_dict_put_array(cfg, PDF_NAME('OFF'), 1)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4203 mupdf.pdf_array_push(obj, indocg)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4204
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4205 # let MuPDF take note: re-read OCProperties
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4206 mupdf.ll_pdf_read_ocg(pdf.m_internal)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4207
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4208 xref = mupdf.pdf_to_num(indocg)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4209 return xref
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4210
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4211 def authenticate(self, password):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4212 """Decrypt document."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4213 if self.is_closed:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4214 raise ValueError("document closed")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4215 val = mupdf.fz_authenticate_password(self.this, password)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4216 if val: # the doc is decrypted successfully and we init the outline
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4217 self.is_encrypted = False
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4218 self.is_encrypted = False
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4219 self.init_doc()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4220 self.thisown = True
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4221 return val
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4222
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4223 def can_save_incrementally(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4224 """Check whether incremental saves are possible."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4225 pdf = _as_pdf_document(self, required=0)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4226 if not pdf.m_internal:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4227 return False
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4228 return mupdf.pdf_can_be_saved_incrementally(pdf)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4229
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4230 def bake(self, *, annots: bool = True, widgets: bool = True) -> None:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4231 """Convert annotations or fields to permanent content.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4232
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4233 Notes:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4234 Converts annotations or widgets to permanent page content, like
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4235 text and vector graphics, as appropriate.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4236 After execution, pages will still look the same, but no longer
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4237 have annotations, respectively no fields.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4238 If widgets are selected the PDF will no longer be a Form PDF.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4239
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4240 Args:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4241 annots: convert annotations
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4242 widgets: convert form fields
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4243
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4244 """
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4245 pdf = _as_pdf_document(self)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4246 mupdf.pdf_bake_document(pdf, int(annots), int(widgets))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4247
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4248 @property
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4249 def chapter_count(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4250 """Number of chapters."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4251 if self.is_closed:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4252 raise ValueError("document closed")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4253 return mupdf.fz_count_chapters( self.this)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4254
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4255 def chapter_page_count(self, chapter):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4256 """Page count of chapter."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4257 if self.is_closed:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4258 raise ValueError("document closed")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4259 chapters = mupdf.fz_count_chapters( self.this)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4260 if chapter < 0 or chapter >= chapters:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4261 raise ValueError( "bad chapter number")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4262 pages = mupdf.fz_count_chapter_pages( self.this, chapter)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4263 return pages
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4264
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4265 def close(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4266 """Close document."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4267 if getattr(self, "is_closed", True):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4268 raise ValueError("document closed")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4269 # self._cleanup()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4270 if hasattr(self, "_outline") and self._outline:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4271 self._outline = None
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4272 self._reset_page_refs()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4273 #self.metadata = None
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4274 #self.stream = None
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4275 self.is_closed = True
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4276 #self.FontInfos = []
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4277 self.Graftmaps = {} # Fixes test_3140().
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4278 #self.ShownPages = {}
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4279 #self.InsertedImages = {}
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4280 #self.this = None
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4281 self.this = None
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4282
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4283 def convert_to_pdf(self, from_page=0, to_page=-1, rotate=0):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4284 """Convert document to a PDF, selecting page range and optional rotation. Output bytes object."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4285 if self.is_closed or self.is_encrypted:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4286 raise ValueError("document closed or encrypted")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4287 fz_doc = self.this
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4288 fp = from_page
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4289 tp = to_page
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4290 srcCount = mupdf.fz_count_pages(fz_doc)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4291 if fp < 0:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4292 fp = 0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4293 if fp > srcCount - 1:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4294 fp = srcCount - 1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4295 if tp < 0:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4296 tp = srcCount - 1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4297 if tp > srcCount - 1:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4298 tp = srcCount - 1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4299 len0 = len(JM_mupdf_warnings_store)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4300 doc = JM_convert_to_pdf(fz_doc, fp, tp, rotate)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4301 len1 = len(JM_mupdf_warnings_store)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4302 for i in range(len0, len1):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4303 message(f'{JM_mupdf_warnings_store[i]}')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4304 return doc
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4305
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4306 def copy_page(self, pno: int, to: int =-1):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4307 """Copy a page within a PDF document.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4308
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4309 This will only create another reference of the same page object.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4310 Args:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4311 pno: source page number
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4312 to: put before this page, '-1' means after last page.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4313 """
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4314 if self.is_closed:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4315 raise ValueError("document closed")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4316
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4317 page_count = len(self)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4318 if (
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4319 pno not in range(page_count)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4320 or to not in range(-1, page_count)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4321 ):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4322 raise ValueError("bad page number(s)")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4323 before = 1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4324 copy = 1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4325 if to == -1:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4326 to = page_count - 1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4327 before = 0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4328
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4329 return self._move_copy_page(pno, to, before, copy)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4330
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4331 def del_xml_metadata(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4332 """Delete XML metadata."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4333 if self.is_closed or self.is_encrypted:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4334 raise ValueError("document closed or encrypted")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4335 pdf = _as_pdf_document(self)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4336 root = mupdf.pdf_dict_get( mupdf.pdf_trailer( pdf), PDF_NAME('Root'))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4337 if root.m_internal:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4338 mupdf.pdf_dict_del( root, PDF_NAME('Metadata'))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4339
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4340 def delete_page(self, pno: int =-1):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4341 """ Delete one page from a PDF.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4342 """
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4343 return self.delete_pages(pno)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4344
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4345 def delete_pages(self, *args, **kw):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4346 """Delete pages from a PDF.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4347
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4348 Args:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4349 Either keywords 'from_page'/'to_page', or two integers to
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4350 specify the first/last page to delete.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4351 Or a list/tuple/range object, which can contain arbitrary
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4352 page numbers.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4353 Or a single integer page number.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4354 """
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4355 if not self.is_pdf:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4356 raise ValueError("is no PDF")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4357 if self.is_closed:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4358 raise ValueError("document closed")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4359
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4360 page_count = self.page_count # page count of document
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4361 f = t = -1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4362 if kw: # check if keywords were used
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4363 if args: # then no positional args are allowed
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4364 raise ValueError("cannot mix keyword and positional argument")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4365 f = kw.get("from_page", -1) # first page to delete
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4366 t = kw.get("to_page", -1) # last page to delete
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4367 while f < 0:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4368 f += page_count
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4369 while t < 0:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4370 t += page_count
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4371 if not f <= t < page_count:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4372 raise ValueError("bad page number(s)")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4373 numbers = tuple(range(f, t + 1))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4374 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4375 if len(args) > 2 or args == []:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4376 raise ValueError("need 1 or 2 positional arguments")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4377 if len(args) == 2:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4378 f, t = args
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4379 if not (type(f) is int and type(t) is int):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4380 raise ValueError("both arguments must be int")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4381 if f > t:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4382 f, t = t, f
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4383 if not f <= t < page_count:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4384 raise ValueError("bad page number(s)")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4385 numbers = tuple(range(f, t + 1))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4386 elif isinstance(args[0], int):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4387 pno = args[0]
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4388 while pno < 0:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4389 pno += page_count
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4390 numbers = (pno,)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4391 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4392 numbers = tuple(args[0])
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4393
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4394 numbers = list(map(int, set(numbers))) # ensure unique integers
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4395 if numbers == []:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4396 message("nothing to delete")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4397 return
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4398 numbers.sort()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4399 if numbers[0] < 0 or numbers[-1] >= page_count:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4400 raise ValueError("bad page number(s)")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4401 frozen_numbers = frozenset(numbers)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4402 toc = self.get_toc()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4403 for i, xref in enumerate(self.get_outline_xrefs()):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4404 if toc[i][2] - 1 in frozen_numbers:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4405 self._remove_toc_item(xref) # remove target in PDF object
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4406
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4407 self._remove_links_to(frozen_numbers)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4408
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4409 for i in reversed(numbers): # delete pages, last to first
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4410 self._delete_page(i)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4411
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4412 self._reset_page_refs()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4413
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4414 def embfile_add(self,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4415 name: str,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4416 buffer_: ByteString,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4417 filename: OptStr =None,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4418 ufilename: OptStr =None,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4419 desc: OptStr =None,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4420 ) -> None:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4421 """Add an item to the EmbeddedFiles array.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4422
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4423 Args:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4424 name: name of the new item, must not already exist.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4425 buffer_: (binary data) the file content.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4426 filename: (str) the file name, default: the name
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4427 ufilename: (unicode) the file name, default: filename
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4428 desc: (str) the description.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4429 """
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4430 filenames = self.embfile_names()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4431 msg = "Name '%s' already exists." % str(name)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4432 if name in filenames:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4433 raise ValueError(msg)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4434
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4435 if filename is None:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4436 filename = name
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4437 if ufilename is None:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4438 ufilename = filename
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4439 if desc is None:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4440 desc = name
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4441 xref = self._embfile_add(
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4442 name,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4443 buffer_=buffer_,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4444 filename=filename,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4445 ufilename=ufilename,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4446 desc=desc,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4447 )
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4448 date = get_pdf_now()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4449 self.xref_set_key(xref, "Type", "/EmbeddedFile")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4450 self.xref_set_key(xref, "Params/CreationDate", get_pdf_str(date))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4451 self.xref_set_key(xref, "Params/ModDate", get_pdf_str(date))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4452 return xref
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4453
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4454 def embfile_count(self) -> int:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4455 """Get number of EmbeddedFiles."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4456 return len(self.embfile_names())
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4457
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4458 def embfile_del(self, item: typing.Union[int, str]):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4459 """Delete an entry from EmbeddedFiles.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4460
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4461 Notes:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4462 The argument must be name or index of an EmbeddedFiles item.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4463 Physical deletion of data will happen on save to a new
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4464 file with appropriate garbage option.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4465 Args:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4466 item: name or number of item.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4467 Returns:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4468 None
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4469 """
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4470 idx = self._embeddedFileIndex(item)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4471 return self._embfile_del(idx)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4472
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4473 def embfile_get(self, item: typing.Union[int, str]) -> bytes:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4474 """Get the content of an item in the EmbeddedFiles array.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4475
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4476 Args:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4477 item: number or name of item.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4478 Returns:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4479 (bytes) The file content.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4480 """
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4481 idx = self._embeddedFileIndex(item)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4482 return self._embeddedFileGet(idx)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4483
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4484 def embfile_info(self, item: typing.Union[int, str]) -> dict:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4485 """Get information of an item in the EmbeddedFiles array.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4486
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4487 Args:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4488 item: number or name of item.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4489 Returns:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4490 Information dictionary.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4491 """
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4492 idx = self._embeddedFileIndex(item)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4493 infodict = {"name": self.embfile_names()[idx]}
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4494 xref = self._embfile_info(idx, infodict)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4495 t, date = self.xref_get_key(xref, "Params/CreationDate")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4496 if t != "null":
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4497 infodict["creationDate"] = date
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4498 t, date = self.xref_get_key(xref, "Params/ModDate")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4499 if t != "null":
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4500 infodict["modDate"] = date
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4501 t, md5 = self.xref_get_key(xref, "Params/CheckSum")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4502 if t != "null":
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4503 infodict["checksum"] = binascii.hexlify(md5.encode()).decode()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4504 return infodict
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4505
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4506 def embfile_names(self) -> list:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4507 """Get list of names of EmbeddedFiles."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4508 filenames = []
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4509 self._embfile_names(filenames)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4510 return filenames
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4511
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4512 def embfile_upd(self,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4513 item: typing.Union[int, str],
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4514 buffer_: OptBytes =None,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4515 filename: OptStr =None,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4516 ufilename: OptStr =None,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4517 desc: OptStr =None,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4518 ) -> None:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4519 """Change an item of the EmbeddedFiles array.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4520
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4521 Notes:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4522 Only provided parameters are changed. If all are omitted,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4523 the method is a no-op.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4524 Args:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4525 item: number or name of item.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4526 buffer_: (binary data) the new file content.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4527 filename: (str) the new file name.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4528 ufilename: (unicode) the new filen ame.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4529 desc: (str) the new description.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4530 """
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4531 idx = self._embeddedFileIndex(item)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4532 xref = self._embfile_upd(
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4533 idx,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4534 buffer_=buffer_,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4535 filename=filename,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4536 ufilename=ufilename,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4537 desc=desc,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4538 )
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4539 date = get_pdf_now()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4540 self.xref_set_key(xref, "Params/ModDate", get_pdf_str(date))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4541 return xref
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4542
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4543 def extract_font(self, xref=0, info_only=0, named=None):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4544 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4545 Get a font by xref. Returns a tuple or dictionary.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4546 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4547 #log( '{=xref info_only}')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4548 pdf = _as_pdf_document(self)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4549 obj = mupdf.pdf_load_object(pdf, xref)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4550 type_ = mupdf.pdf_dict_get(obj, PDF_NAME('Type'))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4551 subtype = mupdf.pdf_dict_get(obj, PDF_NAME('Subtype'))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4552 if (mupdf.pdf_name_eq(type_, PDF_NAME('Font'))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4553 and not mupdf.pdf_to_name( subtype).startswith('CIDFontType')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4554 ):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4555 basefont = mupdf.pdf_dict_get(obj, PDF_NAME('BaseFont'))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4556 if not basefont.m_internal or mupdf.pdf_is_null(basefont):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4557 bname = mupdf.pdf_dict_get(obj, PDF_NAME('Name'))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4558 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4559 bname = basefont
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4560 ext = JM_get_fontextension(pdf, xref)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4561 if ext != 'n/a' and not info_only:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4562 buffer_ = JM_get_fontbuffer(pdf, xref)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4563 bytes_ = JM_BinFromBuffer(buffer_)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4564 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4565 bytes_ = b''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4566 if not named:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4567 rc = (
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4568 JM_EscapeStrFromStr(mupdf.pdf_to_name(bname)),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4569 JM_UnicodeFromStr(ext),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4570 JM_UnicodeFromStr(mupdf.pdf_to_name(subtype)),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4571 bytes_,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4572 )
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4573 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4574 rc = {
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4575 dictkey_name: JM_EscapeStrFromStr(mupdf.pdf_to_name(bname)),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4576 dictkey_ext: JM_UnicodeFromStr(ext),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4577 dictkey_type: JM_UnicodeFromStr(mupdf.pdf_to_name(subtype)),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4578 dictkey_content: bytes_,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4579 }
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4580 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4581 if not named:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4582 rc = '', '', '', b''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4583 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4584 rc = {
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4585 dictkey_name: '',
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4586 dictkey_ext: '',
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4587 dictkey_type: '',
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4588 dictkey_content: b'',
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4589 }
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4590 return rc
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4591
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4592 def extract_image(self, xref):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4593 """Get image by xref. Returns a dictionary."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4594 if self.is_closed or self.is_encrypted:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4595 raise ValueError("document closed or encrypted")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4596
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4597 pdf = _as_pdf_document(self)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4598
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4599 if not _INRANGE(xref, 1, mupdf.pdf_xref_len(pdf)-1):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4600 raise ValueError( MSG_BAD_XREF)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4601
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4602 obj = mupdf.pdf_new_indirect(pdf, xref, 0)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4603 subtype = mupdf.pdf_dict_get(obj, PDF_NAME('Subtype'))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4604
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4605 if not mupdf.pdf_name_eq(subtype, PDF_NAME('Image')):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4606 raise ValueError( "not an image")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4607
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4608 o = mupdf.pdf_dict_geta(obj, PDF_NAME('SMask'), PDF_NAME('Mask'))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4609 if o.m_internal:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4610 smask = mupdf.pdf_to_num(o)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4611 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4612 smask = 0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4613
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4614 # load the image
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4615 img = mupdf.pdf_load_image(pdf, obj)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4616 rc = dict()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4617 _make_image_dict(img, rc)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4618 rc[dictkey_smask] = smask
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4619 rc[dictkey_cs_name] = mupdf.fz_colorspace_name(img.colorspace())
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4620 return rc
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4621
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4622 def ez_save(
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4623 self,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4624 filename,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4625 garbage=3,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4626 clean=False,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4627 deflate=True,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4628 deflate_images=True,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4629 deflate_fonts=True,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4630 incremental=False,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4631 ascii=False,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4632 expand=False,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4633 linear=False,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4634 pretty=False,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4635 encryption=1,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4636 permissions=4095,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4637 owner_pw=None,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4638 user_pw=None,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4639 no_new_id=True,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4640 preserve_metadata=1,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4641 use_objstms=1,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4642 compression_effort=0,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4643 ):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4644 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4645 Save PDF using some different defaults
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4646 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4647 return self.save(
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4648 filename,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4649 garbage=garbage,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4650 clean=clean,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4651 deflate=deflate,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4652 deflate_images=deflate_images,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4653 deflate_fonts=deflate_fonts,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4654 incremental=incremental,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4655 ascii=ascii,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4656 expand=expand,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4657 linear=linear,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4658 pretty=pretty,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4659 encryption=encryption,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4660 permissions=permissions,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4661 owner_pw=owner_pw,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4662 user_pw=user_pw,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4663 no_new_id=no_new_id,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4664 preserve_metadata=preserve_metadata,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4665 use_objstms=use_objstms,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4666 compression_effort=compression_effort,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4667 )
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4668
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4669 def find_bookmark(self, bm):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4670 """Find new location after layouting a document."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4671 if self.is_closed or self.is_encrypted:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4672 raise ValueError("document closed or encrypted")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4673 location = mupdf.fz_lookup_bookmark2( self.this, bm)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4674 return location.chapter, location.page
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4675
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4676 def fullcopy_page(self, pno, to=-1):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4677 """Make a full page duplicate."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4678 pdf = _as_pdf_document(self)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4679 page_count = mupdf.pdf_count_pages( pdf)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4680 try:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4681 if (not _INRANGE(pno, 0, page_count - 1)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4682 or not _INRANGE(to, -1, page_count - 1)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4683 ):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4684 raise ValueError( MSG_BAD_PAGENO)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4685
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4686 page1 = mupdf.pdf_resolve_indirect( mupdf.pdf_lookup_page_obj( pdf, pno))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4687
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4688 page2 = mupdf.pdf_deep_copy_obj( page1)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4689 old_annots = mupdf.pdf_dict_get( page2, PDF_NAME('Annots'))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4690
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4691 # copy annotations, but remove Popup and IRT types
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4692 if old_annots.m_internal:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4693 n = mupdf.pdf_array_len( old_annots)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4694 new_annots = mupdf.pdf_new_array( pdf, n)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4695 for i in range(n):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4696 o = mupdf.pdf_array_get( old_annots, i)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4697 subtype = mupdf.pdf_dict_get( o, PDF_NAME('Subtype'))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4698 if mupdf.pdf_name_eq( subtype, PDF_NAME('Popup')):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4699 continue
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4700 if mupdf.pdf_dict_gets( o, "IRT").m_internal:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4701 continue
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4702 copy_o = mupdf.pdf_deep_copy_obj( mupdf.pdf_resolve_indirect( o))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4703 xref = mupdf.pdf_create_object( pdf)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4704 mupdf.pdf_update_object( pdf, xref, copy_o)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4705 copy_o = mupdf.pdf_new_indirect( pdf, xref, 0)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4706 mupdf.pdf_dict_del( copy_o, PDF_NAME('Popup'))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4707 mupdf.pdf_dict_del( copy_o, PDF_NAME('P'))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4708 mupdf.pdf_array_push( new_annots, copy_o)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4709 mupdf.pdf_dict_put( page2, PDF_NAME('Annots'), new_annots)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4710
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4711 # copy the old contents stream(s)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4712 res = JM_read_contents( page1)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4713
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4714 # create new /Contents object for page2
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4715 if res and res.m_internal:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4716 #contents = mupdf.pdf_add_stream( pdf, mupdf.fz_new_buffer_from_copied_data( b" ", 1), NULL, 0)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4717 contents = mupdf.pdf_add_stream( pdf, mupdf.fz_new_buffer_from_copied_data( b" "), mupdf.PdfObj(), 0)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4718 JM_update_stream( pdf, contents, res, 1)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4719 mupdf.pdf_dict_put( page2, PDF_NAME('Contents'), contents)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4720
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4721 # now insert target page, making sure it is an indirect object
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4722 xref = mupdf.pdf_create_object( pdf) # get new xref
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4723 mupdf.pdf_update_object( pdf, xref, page2) # store new page
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4724
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4725 page2 = mupdf.pdf_new_indirect( pdf, xref, 0) # reread object
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4726 mupdf.pdf_insert_page( pdf, to, page2) # and store the page
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4727 finally:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4728 mupdf.ll_pdf_drop_page_tree( pdf.m_internal)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4729
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4730 self._reset_page_refs()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4731
39
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
4732 def get_char_widths(
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
4733 doc: 'Document',
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
4734 xref: int,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
4735 limit: int = 256,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
4736 idx: int = 0,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
4737 fontdict: OptDict = None,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
4738 ) -> list:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
4739 """Get list of glyph information of a font.
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
4740
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
4741 Notes:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
4742 Must be provided by its XREF number. If we already dealt with the
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
4743 font, it will be recorded in doc.FontInfos. Otherwise we insert an
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
4744 entry there.
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
4745 Finally we return the glyphs for the font. This is a list of
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
4746 (glyph, width) where glyph is an integer controlling the char
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
4747 appearance, and width is a float controlling the char's spacing:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
4748 width * fontsize is the actual space.
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
4749 For 'simple' fonts, glyph == ord(char) will usually be true.
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
4750 Exceptions are 'Symbol' and 'ZapfDingbats'. We are providing data for these directly here.
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
4751 """
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
4752 fontinfo = CheckFontInfo(doc, xref)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
4753 if fontinfo is None: # not recorded yet: create it
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
4754 if fontdict is None:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
4755 name, ext, stype, asc, dsc = utils._get_font_properties(doc, xref)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
4756 fontdict = {
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
4757 "name": name,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
4758 "type": stype,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
4759 "ext": ext,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
4760 "ascender": asc,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
4761 "descender": dsc,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
4762 }
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
4763 else:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
4764 name = fontdict["name"]
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
4765 ext = fontdict["ext"]
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
4766 stype = fontdict["type"]
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
4767 ordering = fontdict["ordering"]
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
4768 simple = fontdict["simple"]
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
4769
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
4770 if ext == "":
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
4771 raise ValueError("xref is not a font")
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
4772
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
4773 # check for 'simple' fonts
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
4774 if stype in ("Type1", "MMType1", "TrueType"):
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
4775 simple = True
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
4776 else:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
4777 simple = False
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
4778
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
4779 # check for CJK fonts
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
4780 if name in ("Fangti", "Ming"):
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
4781 ordering = 0
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
4782 elif name in ("Heiti", "Song"):
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
4783 ordering = 1
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
4784 elif name in ("Gothic", "Mincho"):
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
4785 ordering = 2
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
4786 elif name in ("Dotum", "Batang"):
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
4787 ordering = 3
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
4788 else:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
4789 ordering = -1
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
4790
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
4791 fontdict["simple"] = simple
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
4792
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
4793 if name == "ZapfDingbats":
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
4794 glyphs = zapf_glyphs
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
4795 elif name == "Symbol":
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
4796 glyphs = symbol_glyphs
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
4797 else:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
4798 glyphs = None
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
4799
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
4800 fontdict["glyphs"] = glyphs
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
4801 fontdict["ordering"] = ordering
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
4802 fontinfo = [xref, fontdict]
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
4803 doc.FontInfos.append(fontinfo)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
4804 else:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
4805 fontdict = fontinfo[1]
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
4806 glyphs = fontdict["glyphs"]
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
4807 simple = fontdict["simple"]
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
4808 ordering = fontdict["ordering"]
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
4809
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
4810 if glyphs is None:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
4811 oldlimit = 0
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
4812 else:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
4813 oldlimit = len(glyphs)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
4814
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
4815 mylimit = max(256, limit)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
4816
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
4817 if mylimit <= oldlimit:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
4818 return glyphs
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
4819
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
4820 if ordering < 0: # not a CJK font
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
4821 glyphs = doc._get_char_widths(
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
4822 xref, fontdict["name"], fontdict["ext"], fontdict["ordering"], mylimit, idx
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
4823 )
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
4824 else: # CJK fonts use char codes and width = 1
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
4825 glyphs = None
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
4826
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
4827 fontdict["glyphs"] = glyphs
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
4828 fontinfo[1] = fontdict
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
4829 UpdateFontInfo(doc, fontinfo)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
4830
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
4831 return glyphs
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
4832
1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4833 def get_layer(self, config=-1):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4834 """Content of ON, OFF, RBGroups of an OC layer."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4835 pdf = _as_pdf_document(self)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4836 ocp = mupdf.pdf_dict_getl(
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4837 mupdf.pdf_trailer( pdf),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4838 PDF_NAME('Root'),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4839 PDF_NAME('OCProperties'),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4840 )
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4841 if not ocp.m_internal:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4842 return
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4843 if config == -1:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4844 obj = mupdf.pdf_dict_get( ocp, PDF_NAME('D'))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4845 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4846 obj = mupdf.pdf_array_get(
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4847 mupdf.pdf_dict_get( ocp, PDF_NAME('Configs')),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4848 config,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4849 )
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4850 if not obj.m_internal:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4851 raise ValueError( MSG_BAD_OC_CONFIG)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4852 rc = JM_get_ocg_arrays( obj)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4853 return rc
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4854
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4855 def get_layers(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4856 """Show optional OC layers."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4857 pdf = _as_pdf_document(self)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4858 n = mupdf.pdf_count_layer_configs( pdf)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4859 if n == 1:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4860 obj = mupdf.pdf_dict_getl(
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4861 mupdf.pdf_trailer( pdf),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4862 PDF_NAME('Root'),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4863 PDF_NAME('OCProperties'),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4864 PDF_NAME('Configs'),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4865 )
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4866 if not mupdf.pdf_is_array( obj):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4867 n = 0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4868 rc = []
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4869 info = mupdf.PdfLayerConfig()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4870 for i in range(n):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4871 mupdf.pdf_layer_config_info( pdf, i, info)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4872 item = {
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4873 "number": i,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4874 "name": info.name,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4875 "creator": info.creator,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4876 }
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4877 rc.append( item)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4878 return rc
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4879
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4880 def get_new_xref(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4881 """Make new xref."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4882 if self.is_closed or self.is_encrypted:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4883 raise ValueError("document closed or encrypted")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4884 pdf = _as_pdf_document(self)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4885 xref = 0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4886 ENSURE_OPERATION(pdf)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4887 xref = mupdf.pdf_create_object(pdf)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4888 return xref
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4889
39
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
4890 def get_oc(doc: 'Document', xref: int) -> int:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
4891 """Return optional content object xref for an image or form xobject.
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
4892
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
4893 Args:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
4894 xref: (int) xref number of an image or form xobject.
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
4895 """
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
4896 if doc.is_closed or doc.is_encrypted:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
4897 raise ValueError("document close or encrypted")
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
4898 t, name = doc.xref_get_key(xref, "Subtype")
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
4899 if t != "name" or name not in ("/Image", "/Form"):
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
4900 raise ValueError("bad object type at xref %i" % xref)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
4901 t, oc = doc.xref_get_key(xref, "OC")
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
4902 if t != "xref":
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
4903 return 0
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
4904 rc = int(oc.replace("0 R", ""))
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
4905 return rc
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
4906
1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4907 def get_ocgs(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4908 """Show existing optional content groups."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4909 ci = mupdf.pdf_new_name( "CreatorInfo")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4910 pdf = _as_pdf_document(self)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4911 ocgs = mupdf.pdf_dict_getl(
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4912 mupdf.pdf_dict_get( mupdf.pdf_trailer( pdf), PDF_NAME('Root')),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4913 PDF_NAME('OCProperties'),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4914 PDF_NAME('OCGs'),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4915 )
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4916 rc = dict()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4917 if not mupdf.pdf_is_array( ocgs):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4918 return rc
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4919 n = mupdf.pdf_array_len( ocgs)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4920 for i in range(n):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4921 ocg = mupdf.pdf_array_get( ocgs, i)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4922 xref = mupdf.pdf_to_num( ocg)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4923 name = mupdf.pdf_to_text_string( mupdf.pdf_dict_get( ocg, PDF_NAME('Name')))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4924 obj = mupdf.pdf_dict_getl( ocg, PDF_NAME('Usage'), ci, PDF_NAME('Subtype'))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4925 usage = None
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4926 if obj.m_internal:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4927 usage = mupdf.pdf_to_name( obj)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4928 intents = list()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4929 intent = mupdf.pdf_dict_get( ocg, PDF_NAME('Intent'))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4930 if intent.m_internal:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4931 if mupdf.pdf_is_name( intent):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4932 intents.append( mupdf.pdf_to_name( intent))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4933 elif mupdf.pdf_is_array( intent):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4934 m = mupdf.pdf_array_len( intent)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4935 for j in range(m):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4936 o = mupdf.pdf_array_get( intent, j)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4937 if mupdf.pdf_is_name( o):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4938 intents.append( mupdf.pdf_to_name( o))
39
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
4939 if mupdf_version_tuple >= (1, 27):
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
4940 resource_stack = mupdf.PdfResourceStack()
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
4941 hidden = mupdf.pdf_is_ocg_hidden( pdf, resource_stack, usage, ocg)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
4942 else:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
4943 hidden = mupdf.pdf_is_ocg_hidden( pdf, mupdf.PdfObj(), usage, ocg)
1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4944 item = {
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4945 "name": name,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4946 "intent": intents,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4947 "on": not hidden,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4948 "usage": usage,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4949 }
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4950 temp = xref
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4951 rc[ temp] = item
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4952 return rc
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4953
39
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
4954 def get_ocmd(doc: 'Document', xref: int) -> dict:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
4955 """Return the definition of an OCMD (optional content membership dictionary).
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
4956
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
4957 Recognizes PDF dict keys /OCGs (PDF array of OCGs), /P (policy string) and
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
4958 /VE (visibility expression, PDF array). Via string manipulation, this
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
4959 info is converted to a Python dictionary with keys "xref", "ocgs", "policy"
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
4960 and "ve" - ready to recycle as input for 'set_ocmd()'.
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
4961 """
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
4962
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
4963 if xref not in range(doc.xref_length()):
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
4964 raise ValueError("bad xref")
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
4965 text = doc.xref_object(xref, compressed=True)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
4966 if "/Type/OCMD" not in text:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
4967 raise ValueError("bad object type")
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
4968 textlen = len(text)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
4969
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
4970 p0 = text.find("/OCGs[") # look for /OCGs key
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
4971 p1 = text.find("]", p0)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
4972 if p0 < 0 or p1 < 0: # no OCGs found
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
4973 ocgs = None
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
4974 else:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
4975 ocgs = text[p0 + 6 : p1].replace("0 R", " ").split()
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
4976 ocgs = list(map(int, ocgs))
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
4977
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
4978 p0 = text.find("/P/") # look for /P policy key
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
4979 if p0 < 0:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
4980 policy = None
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
4981 else:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
4982 p1 = text.find("ff", p0)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
4983 if p1 < 0:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
4984 p1 = text.find("on", p0)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
4985 if p1 < 0: # some irregular syntax
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
4986 raise ValueError("bad object at xref")
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
4987 else:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
4988 policy = text[p0 + 3 : p1 + 2]
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
4989
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
4990 p0 = text.find("/VE[") # look for /VE visibility expression key
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
4991 if p0 < 0: # no visibility expression found
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
4992 ve = None
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
4993 else:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
4994 lp = rp = 0 # find end of /VE by finding last ']'.
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
4995 p1 = p0
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
4996 while lp < 1 or lp != rp:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
4997 p1 += 1
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
4998 if not p1 < textlen: # some irregular syntax
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
4999 raise ValueError("bad object at xref")
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
5000 if text[p1] == "[":
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
5001 lp += 1
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
5002 if text[p1] == "]":
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
5003 rp += 1
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
5004 # p1 now positioned at the last "]"
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
5005 ve = text[p0 + 3 : p1 + 1] # the PDF /VE array
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
5006 ve = (
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
5007 ve.replace("/And", '"and",')
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
5008 .replace("/Not", '"not",')
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
5009 .replace("/Or", '"or",')
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
5010 )
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
5011 ve = ve.replace(" 0 R]", "]").replace(" 0 R", ",").replace("][", "],[")
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
5012 import json
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
5013 try:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
5014 ve = json.loads(ve)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
5015 except Exception:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
5016 exception_info()
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
5017 message(f"bad /VE key: {ve!r}")
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
5018 raise
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
5019 return {"xref": xref, "ocgs": ocgs, "policy": policy, "ve": ve}
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
5020
1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5021 def get_outline_xrefs(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5022 """Get list of outline xref numbers."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5023 xrefs = []
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5024 pdf = _as_pdf_document(self, required=0)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5025 if not pdf.m_internal:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5026 return xrefs
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5027 root = mupdf.pdf_dict_get(mupdf.pdf_trailer(pdf), PDF_NAME('Root'))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5028 if not root.m_internal:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5029 return xrefs
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5030 olroot = mupdf.pdf_dict_get(root, PDF_NAME('Outlines'))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5031 if not olroot.m_internal:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5032 return xrefs
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5033 first = mupdf.pdf_dict_get(olroot, PDF_NAME('First'))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5034 if not first.m_internal:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5035 return xrefs
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5036 xrefs = JM_outline_xrefs(first, xrefs)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5037 return xrefs
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5038
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5039 def get_page_fonts(self, pno: int, full: bool =False) -> list:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5040 """Retrieve a list of fonts used on a page.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5041 """
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5042 if self.is_closed or self.is_encrypted:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5043 raise ValueError("document closed or encrypted")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5044 if not self.is_pdf:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5045 return ()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5046 if type(pno) is not int:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5047 try:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5048 pno = pno.number
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5049 except Exception:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5050 exception_info()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5051 raise ValueError("need a Page or page number")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5052 val = self._getPageInfo(pno, 1)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5053 if not full:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5054 return [v[:-1] for v in val]
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5055 return val
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5056
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5057 def get_page_images(self, pno: int, full: bool =False) -> list:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5058 """Retrieve a list of images used on a page.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5059 """
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5060 if self.is_closed or self.is_encrypted:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5061 raise ValueError("document closed or encrypted")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5062 if not self.is_pdf:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5063 return ()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5064 val = self._getPageInfo(pno, 2)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5065 if not full:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5066 return [v[:-1] for v in val]
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5067 return val
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5068
39
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
5069 def get_page_labels(self):
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
5070 """Return page label definitions in PDF document.
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
5071
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
5072 Returns:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
5073 A list of dictionaries with the following format:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
5074 {'startpage': int, 'prefix': str, 'style': str, 'firstpagenum': int}.
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
5075 """
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
5076 # Jorj McKie, 2021-01-10
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
5077 return [utils.rule_dict(item) for item in self._get_page_labels()]
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
5078
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
5079 def get_page_numbers(doc, label, only_one=False):
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
5080 """Return a list of page numbers with the given label.
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
5081
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
5082 Args:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
5083 doc: PDF document object (resp. 'self').
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
5084 label: (str) label.
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
5085 only_one: (bool) stop searching after first hit.
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
5086 Returns:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
5087 List of page numbers having this label.
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
5088 """
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
5089 # Jorj McKie, 2021-01-06
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
5090
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
5091 numbers = []
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
5092 if not label:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
5093 return numbers
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
5094 labels = doc._get_page_labels()
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
5095 if labels == []:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
5096 return numbers
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
5097 for i in range(doc.page_count):
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
5098 plabel = utils.get_label_pno(i, labels)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
5099 if plabel == label:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
5100 numbers.append(i)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
5101 if only_one:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
5102 break
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
5103 return numbers
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
5104
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
5105 def get_page_pixmap(
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
5106 doc: 'Document',
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
5107 pno: int,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
5108 *,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
5109 matrix: matrix_like = None,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
5110 dpi=None,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
5111 colorspace: Colorspace = None,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
5112 clip: rect_like = None,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
5113 alpha: bool = False,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
5114 annots: bool = True,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
5115 ) -> 'Pixmap':
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
5116 """Create pixmap of document page by page number.
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
5117
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
5118 Notes:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
5119 Convenience function calling page.get_pixmap.
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
5120 Args:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
5121 pno: (int) page number
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
5122 matrix: pymupdf.Matrix for transformation (default: pymupdf.Identity).
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
5123 colorspace: (str,pymupdf.Colorspace) rgb, rgb, gray - case ignored, default csRGB.
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
5124 clip: (irect-like) restrict rendering to this area.
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
5125 alpha: (bool) include alpha channel
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
5126 annots: (bool) also render annotations
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
5127 """
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
5128 if matrix is None:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
5129 matrix = Identity
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
5130 if colorspace is None:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
5131 colorspace = csRGB
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
5132 return doc[pno].get_pixmap(
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
5133 matrix=matrix,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
5134 dpi=dpi, colorspace=colorspace,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
5135 clip=clip,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
5136 alpha=alpha,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
5137 annots=annots
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
5138 )
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
5139
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
5140 def get_page_text(
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
5141 doc: 'Document',
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
5142 pno: int,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
5143 option: str = "text",
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
5144 clip: rect_like = None,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
5145 flags: OptInt = None,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
5146 textpage: 'TextPage' = None,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
5147 sort: bool = False,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
5148 ) -> typing.Any:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
5149 """Extract a document page's text by page number.
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
5150
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
5151 Notes:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
5152 Convenience function calling page.get_text().
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
5153 Args:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
5154 pno: page number
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
5155 option: (str) text, words, blocks, html, dict, json, rawdict, xhtml or xml.
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
5156 Returns:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
5157 output from page.TextPage().
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
5158 """
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
5159 return doc[pno].get_text(option, clip=clip, flags=flags, sort=sort)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
5160
1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5161 def get_page_xobjects(self, pno: int) -> list:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5162 """Retrieve a list of XObjects used on a page.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5163 """
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5164 if self.is_closed or self.is_encrypted:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5165 raise ValueError("document closed or encrypted")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5166 if not self.is_pdf:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5167 return ()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5168 val = self._getPageInfo(pno, 3)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5169 return val
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5170
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5171 def get_sigflags(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5172 """Get the /SigFlags value."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5173 pdf = _as_pdf_document(self, required=0)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5174 if not pdf.m_internal:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5175 return -1 # not a PDF
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5176 sigflags = mupdf.pdf_dict_getl(
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5177 mupdf.pdf_trailer(pdf),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5178 PDF_NAME('Root'),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5179 PDF_NAME('AcroForm'),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5180 PDF_NAME('SigFlags'),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5181 )
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5182 sigflag = -1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5183 if sigflags.m_internal:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5184 sigflag = mupdf.pdf_to_int(sigflags)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5185 return sigflag
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5186
39
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
5187 def get_toc(
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
5188 doc: 'Document',
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
5189 simple: bool = True,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
5190 ) -> list:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
5191 """Create a table of contents.
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
5192
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
5193 Args:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
5194 simple: a bool to control output. Returns a list, where each entry consists of outline level, title, page number and link destination (if simple = False). For details see PyMuPDF's documentation.
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
5195 """
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
5196 def recurse(olItem, liste, lvl):
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
5197 """Recursively follow the outline item chain and record item information in a list."""
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
5198 while olItem and olItem.this.m_internal:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
5199 if olItem.title:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
5200 title = olItem.title
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
5201 else:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
5202 title = " "
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
5203
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
5204 if not olItem.is_external:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
5205 if olItem.uri:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
5206 if olItem.page == -1:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
5207 resolve = doc.resolve_link(olItem.uri)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
5208 page = resolve[0] + 1
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
5209 else:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
5210 page = olItem.page + 1
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
5211 else:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
5212 page = -1
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
5213 else:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
5214 page = -1
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
5215
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
5216 if not simple:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
5217 link = utils.getLinkDict(olItem, doc)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
5218 liste.append([lvl, title, page, link])
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
5219 else:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
5220 liste.append([lvl, title, page])
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
5221
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
5222 if olItem.down:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
5223 liste = recurse(olItem.down, liste, lvl + 1)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
5224 olItem = olItem.next
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
5225 return liste
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
5226
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
5227 # ensure document is open
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
5228 if doc.is_closed:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
5229 raise ValueError("document closed")
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
5230 doc.init_doc()
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
5231 olItem = doc.outline
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
5232 if not olItem:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
5233 return []
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
5234 lvl = 1
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
5235 liste = []
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
5236 toc = recurse(olItem, liste, lvl)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
5237 if doc.is_pdf and not simple:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
5238 doc._extend_toc_items(toc)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
5239 return toc
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
5240
1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5241 def get_xml_metadata(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5242 """Get document XML metadata."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5243 xml = None
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5244 pdf = _as_pdf_document(self, required=0)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5245 if pdf.m_internal:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5246 xml = mupdf.pdf_dict_getl(
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5247 mupdf.pdf_trailer(pdf),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5248 PDF_NAME('Root'),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5249 PDF_NAME('Metadata'),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5250 )
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5251 if xml is not None and xml.m_internal:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5252 buff = mupdf.pdf_load_stream(xml)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5253 rc = JM_UnicodeFromBuffer(buff)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5254 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5255 rc = ''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5256 return rc
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5257
39
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
5258 def has_annots(doc: 'Document') -> bool:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
5259 """Check whether there are annotations on any page."""
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
5260 if doc.is_closed:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
5261 raise ValueError("document closed")
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
5262 if not doc.is_pdf:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
5263 raise ValueError("is no PDF")
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
5264 for i in range(doc.page_count):
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
5265 for item in doc.page_annot_xrefs(i):
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
5266 # pylint: disable=no-member
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
5267 if not (item[1] == mupdf.PDF_ANNOT_LINK or item[1] == mupdf.PDF_ANNOT_WIDGET): # pylint: disable=no-member
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
5268 return True
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
5269 return False
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
5270
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
5271 def has_links(doc: 'Document') -> bool:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
5272 """Check whether there are links on any page."""
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
5273 if doc.is_closed:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
5274 raise ValueError("document closed")
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
5275 if not doc.is_pdf:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
5276 raise ValueError("is no PDF")
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
5277 for i in range(doc.page_count):
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
5278 for item in doc.page_annot_xrefs(i):
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
5279 if item[1] == mupdf.PDF_ANNOT_LINK: # pylint: disable=no-member
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
5280 return True
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
5281 return False
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
5282
1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5283 def init_doc(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5284 if self.is_encrypted:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5285 raise ValueError("cannot initialize - document still encrypted")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5286 self._outline = self._loadOutline()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5287 self.metadata = dict(
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5288 [
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5289 (k,self._getMetadata(v)) for k,v in {
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5290 'format':'format',
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5291 'title':'info:Title',
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5292 'author':'info:Author',
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5293 'subject':'info:Subject',
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5294 'keywords':'info:Keywords',
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5295 'creator':'info:Creator',
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5296 'producer':'info:Producer',
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5297 'creationDate':'info:CreationDate',
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5298 'modDate':'info:ModDate',
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5299 'trapped':'info:Trapped'
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5300 }.items()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5301 ]
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5302 )
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5303 self.metadata['encryption'] = None if self._getMetadata('encryption')=='None' else self._getMetadata('encryption')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5304
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5305 def insert_file(self,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5306 infile,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5307 from_page=-1,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5308 to_page=-1,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5309 start_at=-1,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5310 rotate=-1,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5311 links=True,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5312 annots=True,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5313 show_progress=0,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5314 final=1,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5315 ):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5316 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5317 Insert an arbitrary supported document to an existing PDF.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5318
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5319 The infile may be given as a filename, a Document or a Pixmap. Other
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5320 parameters - where applicable - equal those of insert_pdf().
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5321 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5322 src = None
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5323 if isinstance(infile, Pixmap):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5324 if infile.colorspace.n > 3:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5325 infile = Pixmap(csRGB, infile)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5326 src = Document("png", infile.tobytes())
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5327 elif isinstance(infile, Document):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5328 src = infile
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5329 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5330 src = Document(infile)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5331 if not src:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5332 raise ValueError("bad infile parameter")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5333 if not src.is_pdf:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5334 pdfbytes = src.convert_to_pdf()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5335 src = Document("pdf", pdfbytes)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5336 return self.insert_pdf(
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5337 src,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5338 from_page=from_page,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5339 to_page=to_page,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5340 start_at=start_at,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5341 rotate=rotate,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5342 links=links,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5343 annots=annots,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5344 show_progress=show_progress,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5345 final=final,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5346 )
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5347
39
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
5348 def insert_page(
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
5349 doc: 'Document',
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
5350 pno: int,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
5351 text: typing.Union[str, list, None] = None,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
5352 fontsize: float = 11,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
5353 width: float = 595,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
5354 height: float = 842,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
5355 fontname: str = "helv",
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
5356 fontfile: OptStr = None,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
5357 color: OptSeq = (0,),
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
5358 ) -> int:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
5359 """Create a new PDF page and insert some text.
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
5360
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
5361 Notes:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
5362 Function combining pymupdf.Document.new_page() and pymupdf.Page.insert_text().
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
5363 For parameter details see these methods.
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
5364 """
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
5365 page = doc.new_page(pno=pno, width=width, height=height)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
5366 if not bool(text):
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
5367 return 0
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
5368 rc = page.insert_text(
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
5369 (50, 72),
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
5370 text,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
5371 fontsize=fontsize,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
5372 fontname=fontname,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
5373 fontfile=fontfile,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
5374 color=color,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
5375 )
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
5376 return rc
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
5377
1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5378 def insert_pdf(
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5379 self,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5380 docsrc,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5381 *,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5382 from_page=-1,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5383 to_page=-1,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5384 start_at=-1,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5385 rotate=-1,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5386 links=1,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5387 annots=1,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5388 widgets=1,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5389 join_duplicates=0,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5390 show_progress=0,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5391 final=1,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5392 _gmap=None,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5393 ):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5394 """Insert a page range from another PDF.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5395
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5396 Args:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5397 docsrc: PDF to copy from. Must be different object, but may be same file.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5398 from_page: (int) first source page to copy, 0-based, default 0.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5399 to_page: (int) last source page to copy, 0-based, default last page.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5400 start_at: (int) from_page will become this page number in target.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5401 rotate: (int) rotate copied pages, default -1 is no change.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5402 links: (int/bool) whether to also copy links.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5403 annots: (int/bool) whether to also copy annotations.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5404 widgets: (int/bool) whether to also copy form fields.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5405 join_duplicates: (int/bool) join or rename duplicate widget names.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5406 show_progress: (int) progress message interval, 0 is no messages.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5407 final: (bool) indicates last insertion from this source PDF.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5408 _gmap: internal use only
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5409
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5410 Copy sequence reversed if from_page > to_page."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5411
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5412 # Insert pages from a source PDF into this PDF.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5413 # For reconstructing the links (_do_links method), we must save the
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5414 # insertion point (start_at) if it was specified as -1.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5415 #log( 'insert_pdf(): start')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5416 if self.is_closed or self.is_encrypted:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5417 raise ValueError("document closed or encrypted")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5418 if self._graft_id == docsrc._graft_id:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5419 raise ValueError("source and target cannot be same object")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5420 sa = start_at
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5421 if sa < 0:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5422 sa = self.page_count
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5423 outCount = self.page_count
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5424 srcCount = docsrc.page_count
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5425
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5426 # local copies of page numbers
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5427 fp = from_page
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5428 tp = to_page
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5429 sa = start_at
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5430
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5431 # normalize page numbers
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5432 fp = max(fp, 0) # -1 = first page
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5433 fp = min(fp, srcCount - 1) # but do not exceed last page
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5434
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5435 if tp < 0:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5436 tp = srcCount - 1 # -1 = last page
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5437 tp = min(tp, srcCount - 1) # but do not exceed last page
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5438
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5439 if sa < 0:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5440 sa = outCount # -1 = behind last page
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5441 sa = min(sa, outCount) # but that is also the limit
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5442
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5443 if len(docsrc) > show_progress > 0:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5444 inname = os.path.basename(docsrc.name)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5445 if not inname:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5446 inname = "memory PDF"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5447 outname = os.path.basename(self.name)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5448 if not outname:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5449 outname = "memory PDF"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5450 message("Inserting '%s' at '%s'" % (inname, outname))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5451
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5452 # retrieve / make a Graftmap to avoid duplicate objects
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5453 #log( 'insert_pdf(): Graftmaps')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5454 isrt = docsrc._graft_id
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5455 _gmap = self.Graftmaps.get(isrt, None)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5456 if _gmap is None:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5457 #log( 'insert_pdf(): Graftmaps2')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5458 _gmap = Graftmap(self)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5459 self.Graftmaps[isrt] = _gmap
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5460
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5461 if g_use_extra:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5462 #log( 'insert_pdf(): calling extra_FzDocument_insert_pdf()')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5463 extra_FzDocument_insert_pdf(
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5464 self.this,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5465 docsrc.this,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5466 from_page,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5467 to_page,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5468 start_at,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5469 rotate,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5470 links,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5471 annots,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5472 show_progress,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5473 final,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5474 _gmap,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5475 )
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5476 #log( 'insert_pdf(): extra_FzDocument_insert_pdf() returned.')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5477 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5478 pdfout = _as_pdf_document(self)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5479 pdfsrc = _as_pdf_document(docsrc)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5480
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5481 if not pdfout.m_internal or not pdfsrc.m_internal:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5482 raise TypeError( "source or target not a PDF")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5483 ENSURE_OPERATION(pdfout)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5484 JM_merge_range(pdfout, pdfsrc, fp, tp, sa, rotate, links, annots, show_progress, _gmap)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5485
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5486 #log( 'insert_pdf(): calling self._reset_page_refs()')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5487 self._reset_page_refs()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5488 if links:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5489 #log( 'insert_pdf(): calling self._do_links()')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5490 self._do_links(docsrc, from_page=fp, to_page=tp, start_at=sa)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5491 if widgets:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5492 self._do_widgets(docsrc, _gmap, from_page=fp, to_page=tp, start_at=sa, join_duplicates=join_duplicates)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5493 if final == 1:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5494 self.Graftmaps[isrt] = None
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5495 #log( 'insert_pdf(): returning')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5496
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5497 @property
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5498 def is_dirty(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5499 pdf = _as_pdf_document(self, required=0)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5500 if not pdf.m_internal:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5501 return False
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5502 r = mupdf.pdf_has_unsaved_changes(pdf)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5503 return True if r else False
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5504
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5505 @property
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5506 def is_fast_webaccess(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5507 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5508 Check whether we have a linearized PDF.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5509 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5510 pdf = _as_pdf_document(self, required=0)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5511 if pdf.m_internal:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5512 return mupdf.pdf_doc_was_linearized(pdf)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5513 return False # gracefully handle non-PDF
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5514
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5515 @property
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5516 def is_form_pdf(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5517 """Either False or PDF field count."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5518 pdf = _as_pdf_document(self, required=0)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5519 if not pdf.m_internal:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5520 return False
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5521 count = -1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5522 try:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5523 fields = mupdf.pdf_dict_getl(
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5524 mupdf.pdf_trailer(pdf),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5525 mupdf.PDF_ENUM_NAME_Root,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5526 mupdf.PDF_ENUM_NAME_AcroForm,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5527 mupdf.PDF_ENUM_NAME_Fields,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5528 )
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5529 if mupdf.pdf_is_array(fields):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5530 count = mupdf.pdf_array_len(fields)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5531 except Exception:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5532 if g_exceptions_verbose: exception_info()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5533 return False
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5534 if count >= 0:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5535 return count
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5536 return False
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5537
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5538 @property
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5539 def is_pdf(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5540 """Check for PDF."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5541 if isinstance(self.this, mupdf.PdfDocument):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5542 return True
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5543 # Avoid calling smupdf.pdf_specifics because it will end up creating
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5544 # a new PdfDocument which will call pdf_create_document(), which is ok
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5545 # but a little unnecessary.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5546 #
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5547 if mupdf.ll_pdf_specifics(self.this.m_internal):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5548 ret = True
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5549 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5550 ret = False
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5551 return ret
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5552
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5553 @property
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5554 def is_reflowable(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5555 """Check if document is layoutable."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5556 if self.is_closed:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5557 raise ValueError("document closed")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5558 return bool(mupdf.fz_is_document_reflowable(self))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5559
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5560 @property
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5561 def is_repaired(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5562 """Check whether PDF was repaired."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5563 pdf = _as_pdf_document(self, required=0)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5564 if not pdf.m_internal:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5565 return False
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5566 r = mupdf.pdf_was_repaired(pdf)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5567 if r:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5568 return True
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5569 return False
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5570
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5571 def journal_can_do(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5572 """Show if undo and / or redo are possible."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5573 if self.is_closed or self.is_encrypted:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5574 raise ValueError("document closed or encrypted")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5575 undo=0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5576 redo=0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5577 pdf = _as_pdf_document(self)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5578 undo = mupdf.pdf_can_undo(pdf)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5579 redo = mupdf.pdf_can_redo(pdf)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5580 return {'undo': bool(undo), 'redo': bool(redo)}
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5581
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5582 def journal_enable(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5583 """Activate document journalling."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5584 if self.is_closed or self.is_encrypted:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5585 raise ValueError("document closed or encrypted")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5586 pdf = _as_pdf_document(self)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5587 mupdf.pdf_enable_journal(pdf)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5588
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5589 def journal_is_enabled(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5590 """Check if journalling is enabled."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5591 if self.is_closed or self.is_encrypted:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5592 raise ValueError("document closed or encrypted")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5593 pdf = _as_pdf_document(self)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5594 enabled = pdf.m_internal and pdf.m_internal.journal
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5595 return enabled
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5596
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5597 def journal_load(self, filename):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5598 """Load a journal from a file."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5599 if self.is_closed or self.is_encrypted:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5600 raise ValueError("document closed or encrypted")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5601 pdf = _as_pdf_document(self)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5602 if isinstance(filename, str):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5603 mupdf.pdf_load_journal(pdf, filename)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5604 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5605 res = JM_BufferFromBytes(filename)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5606 stm = mupdf.fz_open_buffer(res)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5607 mupdf.pdf_deserialise_journal(pdf, stm)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5608 if not pdf.m_internal.journal:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5609 RAISEPY( "Journal and document do not match", JM_Exc_FileDataError)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5610
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5611 def journal_op_name(self, step):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5612 """Show operation name for given step."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5613 if self.is_closed or self.is_encrypted:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5614 raise ValueError("document closed or encrypted")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5615 pdf = _as_pdf_document(self)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5616 name = mupdf.pdf_undoredo_step(pdf, step)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5617 return name
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5618
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5619 def journal_position(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5620 """Show journalling state."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5621 if self.is_closed or self.is_encrypted:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5622 raise ValueError("document closed or encrypted")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5623 steps=0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5624 pdf = _as_pdf_document(self)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5625 rc, steps = mupdf.pdf_undoredo_state(pdf)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5626 return rc, steps
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5627
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5628 def journal_redo(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5629 """Move forward in the journal."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5630 if self.is_closed or self.is_encrypted:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5631 raise ValueError("document closed or encrypted")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5632 pdf = _as_pdf_document(self)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5633 mupdf.pdf_redo(pdf)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5634 return True
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5635
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5636 def journal_save(self, filename):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5637 """Save journal to a file."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5638 if self.is_closed or self.is_encrypted:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5639 raise ValueError("document closed or encrypted")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5640 pdf = _as_pdf_document(self)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5641 if isinstance(filename, str):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5642 mupdf.pdf_save_journal(pdf, filename)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5643 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5644 out = JM_new_output_fileptr(filename)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5645 mupdf.pdf_write_journal(pdf, out)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5646 out.fz_close_output()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5647
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5648 def journal_start_op(self, name=None):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5649 """Begin a journalling operation."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5650 if self.is_closed or self.is_encrypted:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5651 raise ValueError("document closed or encrypted")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5652 pdf = _as_pdf_document(self)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5653 if not pdf.m_internal.journal:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5654 raise RuntimeError( "Journalling not enabled")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5655 if name:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5656 mupdf.pdf_begin_operation(pdf, name)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5657 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5658 mupdf.pdf_begin_implicit_operation(pdf)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5659
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5660 def journal_stop_op(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5661 """End a journalling operation."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5662 if self.is_closed or self.is_encrypted:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5663 raise ValueError("document closed or encrypted")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5664 pdf = _as_pdf_document(self)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5665 mupdf.pdf_end_operation(pdf)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5666
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5667 def journal_undo(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5668 """Move backwards in the journal."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5669 if self.is_closed or self.is_encrypted:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5670 raise ValueError("document closed or encrypted")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5671 pdf = _as_pdf_document(self)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5672 mupdf.pdf_undo(pdf)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5673 return True
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5674
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5675 @property
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5676 def language(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5677 """Document language."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5678 pdf = _as_pdf_document(self, required=0)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5679 if not pdf.m_internal:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5680 return
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5681 lang = mupdf.pdf_document_language(pdf)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5682 if lang == mupdf.FZ_LANG_UNSET:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5683 return
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5684 return mupdf.fz_string_from_text_language2(lang)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5685
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5686 @property
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5687 def last_location(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5688 """Id (chapter, page) of last page."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5689 if self.is_closed:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5690 raise ValueError("document closed")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5691 last_loc = mupdf.fz_last_page(self.this)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5692 return last_loc.chapter, last_loc.page
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5693
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5694 def layer_ui_configs(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5695 """Show OC visibility status modifiable by user."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5696 pdf = _as_pdf_document(self)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5697 info = mupdf.PdfLayerConfigUi()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5698 n = mupdf.pdf_count_layer_config_ui( pdf)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5699 rc = []
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5700 for i in range(n):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5701 mupdf.pdf_layer_config_ui_info( pdf, i, info)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5702 if info.type == 1:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5703 type_ = "checkbox"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5704 elif info.type == 2:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5705 type_ = "radiobox"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5706 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5707 type_ = "label"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5708 item = {
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5709 "number": i,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5710 "text": info.text,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5711 "depth": info.depth,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5712 "type": type_,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5713 "on": info.selected,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5714 "locked": info.locked,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5715 }
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5716 rc.append(item)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5717 return rc
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5718
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5719 def layout(self, rect=None, width=0, height=0, fontsize=11):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5720 """Re-layout a reflowable document."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5721 if self.is_closed or self.is_encrypted:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5722 raise ValueError("document closed or encrypted")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5723 doc = self.this
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5724 if not mupdf.fz_is_document_reflowable( doc):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5725 return
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5726 w = width
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5727 h = height
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5728 r = JM_rect_from_py(rect)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5729 if not mupdf.fz_is_infinite_rect(r):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5730 w = r.x1 - r.x0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5731 h = r.y1 - r.y0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5732 if w <= 0.0 or h <= 0.0:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5733 raise ValueError( "bad page size")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5734 mupdf.fz_layout_document( doc, w, h, fontsize)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5735
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5736 self._reset_page_refs()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5737 self.init_doc()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5738
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5739 def load_page(self, page_id):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5740 """Load a page.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5741
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5742 'page_id' is either a 0-based page number or a tuple (chapter, pno),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5743 with chapter number and page number within that chapter.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5744 """
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5745 if self.is_closed or self.is_encrypted:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5746 raise ValueError("document closed or encrypted")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5747 if page_id is None:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5748 page_id = 0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5749 if page_id not in self:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5750 raise ValueError("page not in document")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5751 if type(page_id) is int and page_id < 0:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5752 np = self.page_count
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5753 while page_id < 0:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5754 page_id += np
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5755 if isinstance(page_id, int):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5756 page = mupdf.fz_load_page(self.this, page_id)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5757 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5758 chapter, pagenum = page_id
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5759 page = mupdf.fz_load_chapter_page(self.this, chapter, pagenum)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5760 val = Page(page, self)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5761
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5762 val.thisown = True
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5763 val.parent = self
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5764 self._page_refs[id(val)] = val
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5765 val._annot_refs = weakref.WeakValueDictionary()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5766 val.number = page_id
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5767 return val
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5768
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5769 def location_from_page_number(self, pno):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5770 """Convert pno to (chapter, page)."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5771 if self.is_closed:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5772 raise ValueError("document closed")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5773 this_doc = self.this
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5774 loc = mupdf.fz_make_location(-1, -1)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5775 page_count = mupdf.fz_count_pages(this_doc)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5776 while pno < 0:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5777 pno += page_count
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5778 if pno >= page_count:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5779 raise ValueError( MSG_BAD_PAGENO)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5780 loc = mupdf.fz_location_from_page_number(this_doc, pno)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5781 return loc.chapter, loc.page
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5782
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5783 def make_bookmark(self, loc):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5784 """Make a page pointer before layouting document."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5785 if self.is_closed or self.is_encrypted:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5786 raise ValueError("document closed or encrypted")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5787 loc = mupdf.FzLocation(*loc)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5788 mark = mupdf.ll_fz_make_bookmark2( self.this.m_internal, loc.internal())
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5789 return mark
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5790
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5791 @property
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5792 def markinfo(self) -> dict:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5793 """Return the PDF MarkInfo value."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5794 xref = self.pdf_catalog()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5795 if xref == 0:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5796 return None
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5797 rc = self.xref_get_key(xref, "MarkInfo")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5798 if rc[0] == "null":
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5799 return {}
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5800 if rc[0] == "xref":
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5801 xref = int(rc[1].split()[0])
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5802 val = self.xref_object(xref, compressed=True)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5803 elif rc[0] == "dict":
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5804 val = rc[1]
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5805 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5806 val = None
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5807 if val is None or not (val[:2] == "<<" and val[-2:] == ">>"):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5808 return {}
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5809 valid = {"Marked": False, "UserProperties": False, "Suspects": False}
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5810 val = val[2:-2].split("/")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5811 for v in val[1:]:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5812 try:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5813 key, value = v.split()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5814 except Exception:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5815 if g_exceptions_verbose > 1: exception_info()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5816 return valid
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5817 if value == "true":
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5818 valid[key] = True
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5819 return valid
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5820
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5821 def move_page(self, pno: int, to: int =-1):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5822 """Move a page within a PDF document.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5823
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5824 Args:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5825 pno: source page number.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5826 to: put before this page, '-1' means after last page.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5827 """
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5828 if self.is_closed:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5829 raise ValueError("document closed")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5830 page_count = len(self)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5831 if (pno not in range(page_count) or to not in range(-1, page_count)):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5832 raise ValueError("bad page number(s)")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5833 before = 1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5834 copy = 0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5835 if to == -1:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5836 to = page_count - 1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5837 before = 0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5838
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5839 return self._move_copy_page(pno, to, before, copy)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5840
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5841 @property
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5842 def name(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5843 return self._name
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5844
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5845 def need_appearances(self, value=None):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5846 """Get/set the NeedAppearances value."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5847 if not self.is_form_pdf:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5848 return None
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5849
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5850 pdf = _as_pdf_document(self)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5851 oldval = -1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5852 appkey = "NeedAppearances"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5853
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5854 form = mupdf.pdf_dict_getp(
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5855 mupdf.pdf_trailer(pdf),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5856 "Root/AcroForm",
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5857 )
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5858 app = mupdf.pdf_dict_gets(form, appkey)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5859 if mupdf.pdf_is_bool(app):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5860 oldval = mupdf.pdf_to_bool(app)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5861 if value:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5862 mupdf.pdf_dict_puts(form, appkey, mupdf.PDF_TRUE)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5863 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5864 mupdf.pdf_dict_puts(form, appkey, mupdf.PDF_FALSE)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5865 if value is None:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5866 return oldval >= 0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5867 return value
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5868
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5869 @property
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5870 def needs_pass(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5871 """Indicate password required."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5872 if self.is_closed:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5873 raise ValueError("document closed")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5874 document = self.this if isinstance(self.this, mupdf.FzDocument) else self.this.super()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5875 ret = mupdf.fz_needs_password( document)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5876 return ret
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5877
39
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
5878 def new_page(
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
5879 doc: 'Document',
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
5880 pno: int = -1,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
5881 width: float = 595,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
5882 height: float = 842,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
5883 ) -> Page:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
5884 """Create and return a new page object.
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
5885
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
5886 Args:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
5887 pno: (int) insert before this page. Default: after last page.
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
5888 width: (float) page width in points. Default: 595 (ISO A4 width).
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
5889 height: (float) page height in points. Default 842 (ISO A4 height).
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
5890 Returns:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
5891 A pymupdf.Page object.
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
5892 """
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
5893 doc._newPage(pno, width=width, height=height)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
5894 return doc[pno]
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
5895
1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5896 def next_location(self, page_id):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5897 """Get (chapter, page) of next page."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5898 if self.is_closed or self.is_encrypted:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5899 raise ValueError("document closed or encrypted")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5900 if type(page_id) is int:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5901 page_id = (0, page_id)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5902 if page_id not in self:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5903 raise ValueError("page id not in document")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5904 if tuple(page_id) == self.last_location:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5905 return ()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5906 this_doc = _as_fz_document(self)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5907 val = page_id[ 0]
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5908 if not isinstance(val, int):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5909 RAISEPY(MSG_BAD_PAGEID, PyExc_ValueError)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5910 chapter = val
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5911 val = page_id[ 1]
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5912 pno = val
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5913 loc = mupdf.fz_make_location(chapter, pno)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5914 next_loc = mupdf.fz_next_page( this_doc, loc)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5915 return next_loc.chapter, next_loc.page
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5916
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5917 def page_annot_xrefs(self, n):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5918 if g_use_extra:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5919 return extra.page_annot_xrefs( self.this, n)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5920
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5921 if isinstance(self.this, mupdf.PdfDocument):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5922 page_count = mupdf.pdf_count_pages(self.this)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5923 pdf_document = self.this
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5924 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5925 page_count = mupdf.fz_count_pages(self.this)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5926 pdf_document = _as_pdf_document(self)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5927 while n < 0:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5928 n += page_count
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5929 if n > page_count:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5930 raise ValueError( MSG_BAD_PAGENO)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5931 page_obj = mupdf.pdf_lookup_page_obj(pdf_document, n)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5932 annots = JM_get_annot_xref_list(page_obj)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5933 return annots
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5934
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5935 @property
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5936 def page_count(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5937 """Number of pages."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5938 if self.is_closed:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5939 raise ValueError('document closed')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5940 if g_use_extra:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5941 return self.page_count2(self)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5942 if isinstance( self.this, mupdf.FzDocument):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5943 return mupdf.fz_count_pages( self.this)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5944 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5945 return mupdf.pdf_count_pages( self.this)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5946
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5947 def page_cropbox(self, pno):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5948 """Get CropBox of page number (without loading page)."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5949 if self.is_closed:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5950 raise ValueError("document closed")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5951 this_doc = self.this
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5952 page_count = mupdf.fz_count_pages( this_doc)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5953 n = pno
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5954 while n < 0:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5955 n += page_count
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5956 pdf = _as_pdf_document(self)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5957 if n >= page_count:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5958 raise ValueError( MSG_BAD_PAGENO)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5959 pageref = mupdf.pdf_lookup_page_obj( pdf, n)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5960 cropbox = JM_cropbox(pageref)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5961 val = JM_py_from_rect(cropbox)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5962
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5963 val = Rect(val)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5964
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5965 return val
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5966
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5967 def page_number_from_location(self, page_id):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5968 """Convert (chapter, pno) to page number."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5969 if type(page_id) is int:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5970 np = self.page_count
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5971 while page_id < 0:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5972 page_id += np
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5973 page_id = (0, page_id)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5974 if page_id not in self:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5975 raise ValueError("page id not in document")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5976 chapter, pno = page_id
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5977 loc = mupdf.fz_make_location( chapter, pno)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5978 page_n = mupdf.fz_page_number_from_location( self.this, loc)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5979 return page_n
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5980
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5981 def page_xref(self, pno):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5982 """Get xref of page number."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5983 if g_use_extra:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5984 return extra.page_xref( self.this, pno)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5985 if self.is_closed:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5986 raise ValueError("document closed")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5987 page_count = mupdf.fz_count_pages(self.this)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5988 n = pno
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5989 while n < 0:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5990 n += page_count
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5991 pdf = _as_pdf_document(self)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5992 xref = 0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5993 if n >= page_count:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5994 raise ValueError( MSG_BAD_PAGENO)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5995 xref = mupdf.pdf_to_num(mupdf.pdf_lookup_page_obj(pdf, n))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5996 return xref
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5997
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5998 @property
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5999 def pagelayout(self) -> str:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6000 """Return the PDF PageLayout value.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6001 """
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6002 xref = self.pdf_catalog()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6003 if xref == 0:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6004 return None
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6005 rc = self.xref_get_key(xref, "PageLayout")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6006 if rc[0] == "null":
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6007 return "SinglePage"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6008 if rc[0] == "name":
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6009 return rc[1][1:]
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6010 return "SinglePage"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6011
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6012 @property
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6013 def pagemode(self) -> str:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6014 """Return the PDF PageMode value.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6015 """
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6016 xref = self.pdf_catalog()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6017 if xref == 0:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6018 return None
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6019 rc = self.xref_get_key(xref, "PageMode")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6020 if rc[0] == "null":
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6021 return "UseNone"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6022 if rc[0] == "name":
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6023 return rc[1][1:]
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6024 return "UseNone"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6025
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6026 if sys.implementation.version < (3, 9):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6027 # Appending `[Page]` causes `TypeError: 'ABCMeta' object is not subscriptable`.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6028 _pages_ret = collections.abc.Iterable
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6029 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6030 _pages_ret = collections.abc.Iterable[Page]
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6031
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6032 def pages(self, start: OptInt =None, stop: OptInt =None, step: OptInt =None) -> _pages_ret:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6033 """Return a generator iterator over a page range.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6034
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6035 Arguments have the same meaning as for the range() built-in.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6036 """
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6037 if not self.page_count:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6038 return
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6039 # set the start value
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6040 start = start or 0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6041 while start < 0:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6042 start += self.page_count
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6043 if start not in range(self.page_count):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6044 raise ValueError("bad start page number")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6045
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6046 # set the stop value
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6047 stop = stop if stop is not None and stop <= self.page_count else self.page_count
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6048
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6049 # set the step value
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6050 if step == 0:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6051 raise ValueError("arg 3 must not be zero")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6052 if step is None:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6053 if start > stop:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6054 step = -1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6055 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6056 step = 1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6057
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6058 for pno in range(start, stop, step):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6059 yield (self.load_page(pno))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6060
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6061 def pdf_catalog(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6062 """Get xref of PDF catalog."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6063 pdf = _as_pdf_document(self, required=0)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6064 xref = 0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6065 if not pdf.m_internal:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6066 return xref
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6067 root = mupdf.pdf_dict_get(mupdf.pdf_trailer(pdf), PDF_NAME('Root'))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6068 xref = mupdf.pdf_to_num(root)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6069 return xref
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6070
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6071 def pdf_trailer(self, compressed=0, ascii=0):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6072 """Get PDF trailer as a string."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6073 return self.xref_object(-1, compressed=compressed, ascii=ascii)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6074
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6075 @property
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6076 def permissions(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6077 """Document permissions."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6078 if self.is_encrypted:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6079 return 0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6080 doc =self.this
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6081 pdf = mupdf.pdf_document_from_fz_document(doc)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6082
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6083 # for PDF return result of standard function
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6084 if pdf.m_internal:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6085 return mupdf.pdf_document_permissions(pdf)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6086
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6087 # otherwise simulate the PDF return value
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6088 perm = 0xFFFFFFFC # all permissions granted
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6089 # now switch off where needed
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6090 if not mupdf.fz_has_permission(doc, mupdf.FZ_PERMISSION_PRINT):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6091 perm = perm ^ mupdf.PDF_PERM_PRINT
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6092 if not mupdf.fz_has_permission(doc, mupdf.FZ_PERMISSION_EDIT):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6093 perm = perm ^ mupdf.PDF_PERM_MODIFY
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6094 if not mupdf.fz_has_permission(doc, mupdf.FZ_PERMISSION_COPY):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6095 perm = perm ^ mupdf.PDF_PERM_COPY
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6096 if not mupdf.fz_has_permission(doc, mupdf.FZ_PERMISSION_ANNOTATE):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6097 perm = perm ^ mupdf.PDF_PERM_ANNOTATE
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6098 return perm
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6099
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6100 def prev_location(self, page_id):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6101
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6102 """Get (chapter, page) of previous page."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6103 if self.is_closed or self.is_encrypted:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6104 raise ValueError("document closed or encrypted")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6105 if type(page_id) is int:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6106 page_id = (0, page_id)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6107 if page_id not in self:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6108 raise ValueError("page id not in document")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6109 if page_id == (0, 0):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6110 return ()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6111 chapter, pno = page_id
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6112 loc = mupdf.fz_make_location(chapter, pno)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6113 prev_loc = mupdf.fz_previous_page(self.this, loc)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6114 return prev_loc.chapter, prev_loc.page
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6115
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6116 def reload_page(self, page: Page) -> Page:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6117 """Make a fresh copy of a page."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6118 old_annots = {} # copy annot references to here
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6119 pno = page.number # save the page number
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6120 for k, v in page._annot_refs.items(): # save the annot dictionary
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6121 old_annots[k] = v
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6122
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6123 # When we call `self.load_page()` below, it will end up in
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6124 # fz_load_chapter_page(), which will return any matching page in the
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6125 # document's list of non-ref-counted loaded pages, instead of actually
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6126 # reloading the page.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6127 #
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6128 # We want to assert that we have actually reloaded the fz_page, and not
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6129 # simply returned the same `fz_page*` pointer from the document's list
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6130 # of non-ref-counted loaded pages.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6131 #
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6132 # So we first remove our reference to the `fz_page*`. This will
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6133 # decrement .refs, and if .refs was 1, this is guaranteed to free the
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6134 # `fz_page*` and remove it from the document's list if it was there. So
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6135 # we are guaranteed that our returned `fz_page*` is from a genuine
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6136 # reload, even if it happens to reuse the original block of memory.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6137 #
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6138 # However if the original .refs is greater than one, there must be
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6139 # other references to the `fz_page` somewhere, and we require that
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6140 # these other references are not keeping the page in the document's
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6141 # list. We check that we are returning a newly loaded page by
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6142 # asserting that our returned `fz_page*` is different from the original
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6143 # `fz_page*` - the original was not freed, so a new `fz_page` cannot
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6144 # reuse the same block of memory.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6145 #
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6146
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6147 refs_old = page.this.m_internal.refs
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6148 m_internal_old = page.this.m_internal_value()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6149
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6150 page.this = None
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6151 page._erase() # remove the page
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6152 page = None
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6153 TOOLS.store_shrink(100)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6154 page = self.load_page(pno) # reload the page
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6155
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6156 # copy annot refs over to the new dictionary
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6157 #page_proxy = weakref.proxy(page)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6158 for k, v in old_annots.items():
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6159 annot = old_annots[k]
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6160 #annot.parent = page_proxy # refresh parent to new page
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6161 page._annot_refs[k] = annot
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6162 if refs_old == 1:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6163 # We know that `page.this = None` will have decremented the ref
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6164 # count to zero so we are guaranteed that the new `fz_page` is a
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6165 # new page even if it happens to have reused the same block of
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6166 # memory.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6167 pass
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6168 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6169 # Check that the new `fz_page*` is different from the original.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6170 m_internal_new = page.this.m_internal_value()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6171 assert m_internal_new != m_internal_old, \
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6172 f'{refs_old=} {m_internal_old=:#x} {m_internal_new=:#x}'
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6173 return page
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6174
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6175 def resolve_link(self, uri=None, chapters=0):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6176 """Calculate internal link destination.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6177
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6178 Args:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6179 uri: (str) some Link.uri
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6180 chapters: (bool) whether to use (chapter, page) format
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6181 Returns:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6182 (page_id, x, y) where x, y are point coordinates on the page.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6183 page_id is either page number (if chapters=0), or (chapter, pno).
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6184 """
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6185 if not uri:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6186 if chapters:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6187 return (-1, -1), 0, 0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6188 return -1, 0, 0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6189 try:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6190 loc, xp, yp = mupdf.fz_resolve_link(self.this, uri)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6191 except Exception:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6192 if g_exceptions_verbose: exception_info()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6193 if chapters:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6194 return (-1, -1), 0, 0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6195 return -1, 0, 0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6196 if chapters:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6197 return (loc.chapter, loc.page), xp, yp
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6198 pno = mupdf.fz_page_number_from_location(self.this, loc)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6199 return pno, xp, yp
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6200
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6201 def rewrite_images(
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6202 self,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6203 dpi_threshold=None,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6204 dpi_target=0,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6205 quality=0,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6206 lossy=True,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6207 lossless=True,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6208 bitonal=True,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6209 color=True,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6210 gray=True,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6211 set_to_gray=False,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6212 options=None,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6213 ):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6214 """Rewrite images in a PDF document.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6215
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6216 The typical use case is to reduce the size of the PDF by recompressing
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6217 images. Default parameters will convert all images to JPEG where
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6218 possible, using the specified resolutions and quality. Exclude
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6219 undesired images by setting parameters to False.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6220 Args:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6221 dpi_threshold: look at images with a larger DPI only.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6222 dpi_target: change eligible images to this DPI.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6223 quality: Quality of the recompressed images (0-100).
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6224 lossy: process lossy image types (e.g. JPEG).
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6225 lossless: process lossless image types (e.g. PNG).
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6226 bitonal: process black-and-white images (e.g. FAX)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6227 color: process colored images.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6228 gray: process gray images.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6229 set_to_gray: whether to change the PDF to gray at process start.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6230 options: (PdfImageRewriterOptions) Custom options for image
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6231 rewriting (optional). Expert use only. If provided, other
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6232 parameters are ignored, except set_to_gray.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6233 """
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6234 quality_str = str(quality)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6235 if not dpi_threshold:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6236 dpi_threshold = dpi_target = 0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6237 if dpi_target > 0 and dpi_target >= dpi_threshold:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6238 raise ValueError("{dpi_target=} must be less than {dpi_threshold=}")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6239 template_opts = mupdf.PdfImageRewriterOptions()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6240 dir1 = set(dir(template_opts)) # for checking that only existing options are set
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6241 if not options:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6242 opts = mupdf.PdfImageRewriterOptions()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6243 if bitonal:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6244 opts.bitonal_image_recompress_method = mupdf.FZ_RECOMPRESS_FAX
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6245 opts.bitonal_image_subsample_method = mupdf.FZ_SUBSAMPLE_AVERAGE
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6246 opts.bitonal_image_subsample_to = dpi_target
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6247 opts.bitonal_image_recompress_quality = quality_str
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6248 opts.bitonal_image_subsample_threshold = dpi_threshold
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6249 if color:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6250 if lossless:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6251 opts.color_lossless_image_recompress_method = mupdf.FZ_RECOMPRESS_JPEG
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6252 opts.color_lossless_image_subsample_method = mupdf.FZ_SUBSAMPLE_AVERAGE
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6253 opts.color_lossless_image_subsample_to = dpi_target
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6254 opts.color_lossless_image_subsample_threshold = dpi_threshold
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6255 opts.color_lossless_image_recompress_quality = quality_str
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6256 if lossy:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6257 opts.color_lossy_image_recompress_method = mupdf.FZ_RECOMPRESS_JPEG
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6258 opts.color_lossy_image_subsample_method = mupdf.FZ_SUBSAMPLE_AVERAGE
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6259 opts.color_lossy_image_subsample_threshold = dpi_threshold
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6260 opts.color_lossy_image_subsample_to = dpi_target
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6261 opts.color_lossy_image_recompress_quality = quality_str
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6262 if gray:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6263 if lossless:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6264 opts.gray_lossless_image_recompress_method = mupdf.FZ_RECOMPRESS_JPEG
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6265 opts.gray_lossless_image_subsample_method = mupdf.FZ_SUBSAMPLE_AVERAGE
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6266 opts.gray_lossless_image_subsample_to = dpi_target
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6267 opts.gray_lossless_image_subsample_threshold = dpi_threshold
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6268 opts.gray_lossless_image_recompress_quality = quality_str
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6269 if lossy:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6270 opts.gray_lossy_image_recompress_method = mupdf.FZ_RECOMPRESS_JPEG
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6271 opts.gray_lossy_image_subsample_method = mupdf.FZ_SUBSAMPLE_AVERAGE
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6272 opts.gray_lossy_image_subsample_threshold = dpi_threshold
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6273 opts.gray_lossy_image_subsample_to = dpi_target
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6274 opts.gray_lossy_image_recompress_quality = quality_str
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6275 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6276 opts = options
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6277
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6278 dir2 = set(dir(opts)) # checking that only possible options were used
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6279 invalid_options = dir2 - dir1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6280 if invalid_options:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6281 raise ValueError(f"Invalid options: {invalid_options}")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6282
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6283 if set_to_gray:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6284 self.recolor(1)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6285 pdf = _as_pdf_document(self)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6286 mupdf.pdf_rewrite_images(pdf, opts)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6287
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6288 def recolor(self, components=1):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6289 """Change the color component count on all pages.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6290
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6291 Args:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6292 components: (int) desired color component count, one of 1, 3, 4.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6293
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6294 Invokes the same-named method for all pages.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6295 """
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6296 if not self.is_pdf:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6297 raise ValueError("is no PDF")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6298 for i in range(self.page_count):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6299 self.load_page(i).recolor(components)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6300
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6301 def resolve_names(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6302 """Convert the PDF's destination names into a Python dict.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6303
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6304 The only parameter is the pymupdf.Document.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6305 All names found in the catalog under keys "/Dests" and "/Names/Dests" are
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6306 being included.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6307
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6308 Returns:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6309 A dcitionary with the following layout:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6310 - key: (str) the name
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6311 - value: (dict) with the following layout:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6312 * "page": target page number (0-based). If no page number found -1.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6313 * "to": (x, y) target point on page - currently in PDF coordinates,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6314 i.e. point (0,0) is the bottom-left of the page.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6315 * "zoom": (float) the zoom factor
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6316 * "dest": (str) only occurs if the target location on the page has
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6317 not been provided as "/XYZ" or if no page number was found.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6318 Examples:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6319 {'__bookmark_1': {'page': 0, 'to': (0.0, 541.0), 'zoom': 0.0},
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6320 '__bookmark_2': {'page': 0, 'to': (0.0, 481.45), 'zoom': 0.0}}
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6321
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6322 or
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6323
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6324 '21154a7c20684ceb91f9c9adc3b677c40': {'page': -1, 'dest': '/XYZ 15.75 1486 0'}, ...
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6325 """
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6326 if hasattr(self, "_resolved_names"): # do not execute multiple times!
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6327 return self._resolved_names
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6328 # this is a backward listing of page xref to page number
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6329 page_xrefs = {self.page_xref(i): i for i in range(self.page_count)}
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6330
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6331 def obj_string(obj):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6332 """Return string version of a PDF object definition."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6333 buffer = mupdf.fz_new_buffer(512)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6334 output = mupdf.FzOutput(buffer)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6335 mupdf.pdf_print_obj(output, obj, 1, 0)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6336 output.fz_close_output()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6337 return JM_UnicodeFromBuffer(buffer)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6338
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6339 def get_array(val):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6340 """Generate value of one item of the names dictionary."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6341 templ_dict = {"page": -1, "dest": ""} # value template
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6342 if val.pdf_is_indirect():
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6343 val = mupdf.pdf_resolve_indirect(val)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6344 if val.pdf_is_array():
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6345 array = obj_string(val)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6346 elif val.pdf_is_dict():
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6347 array = obj_string(mupdf.pdf_dict_gets(val, "D"))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6348 else: # if all fails return the empty template
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6349 return templ_dict
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6350
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6351 # replace PDF "null" by zero, omit the square brackets
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6352 array = array.replace("null", "0")[1:-1]
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6353
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6354 # find stuff before first "/"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6355 idx = array.find("/")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6356 if idx < 1: # this has no target page spec
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6357 templ_dict["dest"] = array # return the orig. string
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6358 return templ_dict
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6359
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6360 subval = array[:idx].strip() # stuff before "/"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6361 array = array[idx:] # stuff from "/" onwards
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6362 templ_dict["dest"] = array
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6363 # if we start with /XYZ: extract x, y, zoom
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6364 # 1, 2 or 3 of these values may actually be supplied
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6365 if array.startswith("/XYZ"):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6366 del templ_dict["dest"] # don't return orig string in this case
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6367
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6368 # make a list of the 3 tokens following "/XYZ"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6369 array_list = array.split()[1:4] # omit "/XYZ"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6370
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6371 # fill up missing tokens with "0" strings
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6372 while len(array_list) < 3: # fill up if too short
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6373 array_list.append("0") # add missing values
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6374
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6375 # make list of 3 floats: x, y and zoom
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6376 t = list(map(float, array_list)) # the resulting x, y, z values
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6377 templ_dict["to"] = (t[0], t[1])
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6378 templ_dict["zoom"] = t[2]
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6379
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6380 # extract page number
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6381 if subval.endswith("0 R"): # page xref given?
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6382 templ_dict["page"] = page_xrefs.get(int(subval.split()[0]),-1)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6383 else: # naked page number given
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6384 templ_dict["page"] = int(subval)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6385 return templ_dict
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6386
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6387 def fill_dict(dest_dict, pdf_dict):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6388 """Generate name resolution items for pdf_dict.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6389
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6390 This may be either "/Names/Dests" or just "/Dests"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6391 """
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6392 # length of the PDF dictionary
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6393 name_count = mupdf.pdf_dict_len(pdf_dict)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6394
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6395 # extract key-val of each dict item
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6396 for i in range(name_count):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6397 key = mupdf.pdf_dict_get_key(pdf_dict, i)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6398 val = mupdf.pdf_dict_get_val(pdf_dict, i)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6399 if key.pdf_is_name(): # this should always be true!
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6400 dict_key = key.pdf_to_name()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6401 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6402 message(f"key {i} is no /Name")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6403 dict_key = None
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6404
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6405 if dict_key:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6406 dest_dict[dict_key] = get_array(val) # store key/value in dict
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6407
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6408 # access underlying PDF document of fz Document
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6409 pdf = mupdf.pdf_document_from_fz_document(self)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6410
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6411 # access PDF catalog
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6412 catalog = mupdf.pdf_dict_gets(mupdf.pdf_trailer(pdf), "Root")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6413
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6414 dest_dict = {}
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6415
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6416 # make PDF_NAME(Dests)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6417 dests = mupdf.pdf_new_name("Dests")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6418
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6419 # extract destinations old style (PDF 1.1)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6420 old_dests = mupdf.pdf_dict_get(catalog, dests)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6421 if old_dests.pdf_is_dict():
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6422 fill_dict(dest_dict, old_dests)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6423
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6424 # extract destinations new style (PDF 1.2+)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6425 tree = mupdf.pdf_load_name_tree(pdf, dests)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6426 if tree.pdf_is_dict():
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6427 fill_dict(dest_dict, tree)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6428
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6429 self._resolved_names = dest_dict # store result or reuse
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6430 return dest_dict
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6431
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6432 def save(
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6433 self,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6434 filename,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6435 garbage=0,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6436 clean=0,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6437 deflate=0,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6438 deflate_images=0,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6439 deflate_fonts=0,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6440 incremental=0,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6441 ascii=0,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6442 expand=0,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6443 linear=0,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6444 no_new_id=0,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6445 appearance=0,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6446 pretty=0,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6447 encryption=1,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6448 permissions=4095,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6449 owner_pw=None,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6450 user_pw=None,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6451 preserve_metadata=1,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6452 use_objstms=0,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6453 compression_effort=0,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6454 ):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6455 # From %pythonprepend save
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6456 #
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6457 """Save PDF to file, pathlib.Path or file pointer."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6458 if self.is_closed or self.is_encrypted:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6459 raise ValueError("document closed or encrypted")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6460 if type(filename) is str:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6461 pass
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6462 elif hasattr(filename, "open"): # assume: pathlib.Path
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6463 filename = str(filename)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6464 elif hasattr(filename, "name"): # assume: file object
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6465 filename = filename.name
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6466 elif not hasattr(filename, "seek"): # assume file object
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6467 raise ValueError("filename must be str, Path or file object")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6468 if filename == self.name and not incremental:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6469 raise ValueError("save to original must be incremental")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6470 if linear and use_objstms:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6471 raise ValueError("'linear' and 'use_objstms' cannot both be requested")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6472 if self.page_count < 1:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6473 raise ValueError("cannot save with zero pages")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6474 if incremental:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6475 if self.name != filename or self.stream:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6476 raise ValueError("incremental needs original file")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6477 if user_pw and len(user_pw) > 40 or owner_pw and len(owner_pw) > 40:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6478 raise ValueError("password length must not exceed 40")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6479
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6480 pdf = _as_pdf_document(self)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6481 opts = mupdf.PdfWriteOptions()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6482 opts.do_incremental = incremental
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6483 opts.do_ascii = ascii
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6484 opts.do_compress = deflate
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6485 opts.do_compress_images = deflate_images
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6486 opts.do_compress_fonts = deflate_fonts
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6487 opts.do_decompress = expand
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6488 opts.do_garbage = garbage
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6489 opts.do_pretty = pretty
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6490 opts.do_linear = linear
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6491 opts.do_clean = clean
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6492 opts.do_sanitize = clean
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6493 opts.dont_regenerate_id = no_new_id
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6494 opts.do_appearance = appearance
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6495 opts.do_encrypt = encryption
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6496 opts.permissions = permissions
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6497 if owner_pw is not None:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6498 opts.opwd_utf8_set_value(owner_pw)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6499 elif user_pw is not None:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6500 opts.opwd_utf8_set_value(user_pw)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6501 if user_pw is not None:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6502 opts.upwd_utf8_set_value(user_pw)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6503 opts.do_preserve_metadata = preserve_metadata
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6504 opts.do_use_objstms = use_objstms
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6505 opts.compression_effort = compression_effort
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6506
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6507 out = None
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6508 pdf.m_internal.resynth_required = 0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6509 JM_embedded_clean(pdf)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6510 if no_new_id == 0:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6511 JM_ensure_identity(pdf)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6512 if isinstance(filename, str):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6513 #log( 'calling mupdf.pdf_save_document()')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6514 mupdf.pdf_save_document(pdf, filename, opts)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6515 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6516 out = JM_new_output_fileptr(filename)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6517 #log( f'{type(out)=} {type(out.this)=}')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6518 mupdf.pdf_write_document(pdf, out, opts)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6519 out.fz_close_output()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6520
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6521 def save_snapshot(self, filename):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6522 """Save a file snapshot suitable for journalling."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6523 if self.is_closed:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6524 raise ValueError("doc is closed")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6525 if type(filename) is str:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6526 pass
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6527 elif hasattr(filename, "open"): # assume: pathlib.Path
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6528 filename = str(filename)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6529 elif hasattr(filename, "name"): # assume: file object
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6530 filename = filename.name
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6531 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6532 raise ValueError("filename must be str, Path or file object")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6533 if filename == self.name:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6534 raise ValueError("cannot snapshot to original")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6535 pdf = _as_pdf_document(self)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6536 mupdf.pdf_save_snapshot(pdf, filename)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6537
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6538 def saveIncr(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6539 """ Save PDF incrementally"""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6540 return self.save(self.name, incremental=True, encryption=mupdf.PDF_ENCRYPT_KEEP)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6541
39
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6542 # ------------------------------------------------------------------------------
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6543 # Remove potentially sensitive data from a PDF. Similar to the Adobe
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6544 # Acrobat 'sanitize' function
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6545 # ------------------------------------------------------------------------------
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6546 def scrub(
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6547 doc: 'Document',
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6548 attached_files: bool = True,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6549 clean_pages: bool = True,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6550 embedded_files: bool = True,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6551 hidden_text: bool = True,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6552 javascript: bool = True,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6553 metadata: bool = True,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6554 redactions: bool = True,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6555 redact_images: int = 0,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6556 remove_links: bool = True,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6557 reset_fields: bool = True,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6558 reset_responses: bool = True,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6559 thumbnails: bool = True,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6560 xml_metadata: bool = True,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6561 ) -> None:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6562
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6563 def remove_hidden(cont_lines):
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6564 """Remove hidden text from a PDF page.
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6565
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6566 Args:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6567 cont_lines: list of lines with /Contents content. Should have status
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6568 from after page.cleanContents().
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6569
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6570 Returns:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6571 List of /Contents lines from which hidden text has been removed.
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6572
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6573 Notes:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6574 The input must have been created after the page's /Contents object(s)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6575 have been cleaned with page.cleanContents(). This ensures a standard
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6576 formatting: one command per line, single spaces between operators.
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6577 This allows for drastic simplification of this code.
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6578 """
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6579 out_lines = [] # will return this
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6580 in_text = False # indicate if within BT/ET object
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6581 suppress = False # indicate text suppression active
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6582 make_return = False
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6583 for line in cont_lines:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6584 if line == b"BT": # start of text object
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6585 in_text = True # switch on
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6586 out_lines.append(line) # output it
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6587 continue
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6588 if line == b"ET": # end of text object
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6589 in_text = False # switch off
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6590 out_lines.append(line) # output it
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6591 continue
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6592 if line == b"3 Tr": # text suppression operator
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6593 suppress = True # switch on
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6594 make_return = True
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6595 continue
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6596 if line[-2:] == b"Tr" and line[0] != b"3":
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6597 suppress = False # text rendering changed
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6598 out_lines.append(line)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6599 continue
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6600 if line == b"Q": # unstack command also switches off
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6601 suppress = False
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6602 out_lines.append(line)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6603 continue
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6604 if suppress and in_text: # suppress hidden lines
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6605 continue
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6606 out_lines.append(line)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6607 if make_return:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6608 return out_lines
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6609 else:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6610 return None
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6611
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6612 if not doc.is_pdf: # only works for PDF
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6613 raise ValueError("is no PDF")
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6614 if doc.is_encrypted or doc.is_closed:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6615 raise ValueError("closed or encrypted doc")
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6616
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6617 if not clean_pages:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6618 hidden_text = False
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6619 redactions = False
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6620
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6621 if metadata:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6622 doc.set_metadata({}) # remove standard metadata
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6623
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6624 for page in doc:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6625 if reset_fields:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6626 # reset form fields (widgets)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6627 for widget in page.widgets():
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6628 widget.reset()
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6629
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6630 if remove_links:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6631 links = page.get_links() # list of all links on page
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6632 for link in links: # remove all links
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6633 page.delete_link(link)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6634
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6635 found_redacts = False
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6636 for annot in page.annots():
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6637 if annot.type[0] == mupdf.PDF_ANNOT_FILE_ATTACHMENT and attached_files:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6638 annot.update_file(buffer_=b" ") # set file content to empty
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6639 if reset_responses:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6640 annot.delete_responses()
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6641 if annot.type[0] == mupdf.PDF_ANNOT_REDACT: # pylint: disable=no-member
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6642 found_redacts = True
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6643
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6644 if redactions and found_redacts:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6645 page.apply_redactions(images=redact_images)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6646
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6647 if not (clean_pages or hidden_text):
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6648 continue # done with the page
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6649
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6650 page.clean_contents()
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6651 if not page.get_contents():
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6652 continue
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6653 if hidden_text:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6654 xrefs = page.get_contents()
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6655 assert len(xrefs) == 1 # only one because of cleaning.
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6656 xref = xrefs[0]
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6657 cont = doc.xref_stream(xref)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6658 cont_lines = remove_hidden(cont.splitlines()) # remove hidden text
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6659 if cont_lines: # something was actually removed
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6660 cont = b"\n".join(cont_lines)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6661 doc.update_stream(xref, cont) # rewrite the page /Contents
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6662
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6663 if thumbnails: # remove page thumbnails?
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6664 if doc.xref_get_key(page.xref, "Thumb")[0] != "null":
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6665 doc.xref_set_key(page.xref, "Thumb", "null")
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6666
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6667 # pages are scrubbed, now perform document-wide scrubbing
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6668 # remove embedded files
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6669 if embedded_files:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6670 for name in doc.embfile_names():
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6671 doc.embfile_del(name)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6672
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6673 if xml_metadata:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6674 doc.del_xml_metadata()
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6675 if not (xml_metadata or javascript):
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6676 xref_limit = 0
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6677 else:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6678 xref_limit = doc.xref_length()
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6679 for xref in range(1, xref_limit):
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6680 if not doc.xref_object(xref):
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6681 msg = "bad xref %i - clean PDF before scrubbing" % xref
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6682 raise ValueError(msg)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6683 if javascript and doc.xref_get_key(xref, "S")[1] == "/JavaScript":
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6684 # a /JavaScript action object
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6685 obj = "<</S/JavaScript/JS()>>" # replace with a null JavaScript
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6686 doc.update_object(xref, obj) # update this object
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6687 continue # no further handling
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6688
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6689 if not xml_metadata:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6690 continue
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6691
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6692 if doc.xref_get_key(xref, "Type")[1] == "/Metadata":
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6693 # delete any metadata object directly
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6694 doc.update_object(xref, "<<>>")
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6695 doc.update_stream(xref, b"deleted", new=True)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6696 continue
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6697
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6698 if doc.xref_get_key(xref, "Metadata")[0] != "null":
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6699 doc.xref_set_key(xref, "Metadata", "null")
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6700
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6701 def search_page_for(
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6702 doc: 'Document',
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6703 pno: int,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6704 text: str,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6705 quads: bool = False,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6706 clip: rect_like = None,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6707 flags: int = None,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6708 textpage: 'TextPage' = None,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6709 ) -> list:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6710 """Search for a string on a page.
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6711
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6712 Args:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6713 pno: page number
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6714 text: string to be searched for
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6715 clip: restrict search to this rectangle
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6716 quads: (bool) return quads instead of rectangles
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6717 flags: bit switches, default: join hyphened words
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6718 textpage: reuse a prepared textpage
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6719 Returns:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6720 a list of rectangles or quads, each containing an occurrence.
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6721 """
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6722 if flags is None:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6723 flags = (0
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6724 | TEXT_DEHYPHENATE
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6725 | TEXT_PRESERVE_LIGATURES
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6726 | TEXT_PRESERVE_WHITESPACE
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6727 | TEXT_MEDIABOX_CLIP
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6728 )
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6729 return doc[pno].search_for(
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6730 text,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6731 quads=quads,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6732 clip=clip,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6733 flags=flags,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6734 textpage=textpage,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6735 )
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6736
1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6737 def select(self, pyliste):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6738 """Build sub-pdf with page numbers in the list."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6739 if self.is_closed or self.is_encrypted:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6740 raise ValueError("document closed or encrypted")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6741 if not self.is_pdf:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6742 raise ValueError("is no PDF")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6743 if not hasattr(pyliste, "__getitem__"):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6744 raise ValueError("sequence required")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6745
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6746 valid_range = range(len(self))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6747 if (len(pyliste) == 0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6748 or min(pyliste) not in valid_range
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6749 or max(pyliste) not in valid_range
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6750 ):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6751 raise ValueError("bad page number(s)")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6752
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6753 # get underlying pdf document,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6754 pdf = _as_pdf_document(self)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6755 # create page sub-pdf via pdf_rearrange_pages2().
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6756 #
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6757 if mupdf_version_tuple >= (1, 25, 3):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6758 # We use PDF_CLEAN_STRUCTURE_KEEP otherwise we lose structure tree
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6759 # which, for example, breaks test_3705.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6760 mupdf.pdf_rearrange_pages2(pdf, pyliste, mupdf.PDF_CLEAN_STRUCTURE_KEEP)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6761 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6762 mupdf.pdf_rearrange_pages2(pdf, pyliste)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6763
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6764 # remove any existing pages with their kids
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6765 self._reset_page_refs()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6766
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6767 def set_language(self, language=None):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6768 pdf = _as_pdf_document(self)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6769 if not language:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6770 lang = mupdf.FZ_LANG_UNSET
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6771 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6772 lang = mupdf.fz_text_language_from_string(language)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6773 mupdf.pdf_set_document_language(pdf, lang)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6774 return True
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6775
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6776 def set_layer(self, config, basestate=None, on=None, off=None, rbgroups=None, locked=None):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6777 """Set the PDF keys /ON, /OFF, /RBGroups of an OC layer."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6778 if self.is_closed:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6779 raise ValueError("document closed")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6780 ocgs = set(self.get_ocgs().keys())
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6781 if ocgs == set():
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6782 raise ValueError("document has no optional content")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6783
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6784 if on:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6785 if type(on) not in (list, tuple):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6786 raise ValueError("bad type: 'on'")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6787 s = set(on).difference(ocgs)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6788 if s != set():
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6789 raise ValueError("bad OCGs in 'on': %s" % s)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6790
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6791 if off:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6792 if type(off) not in (list, tuple):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6793 raise ValueError("bad type: 'off'")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6794 s = set(off).difference(ocgs)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6795 if s != set():
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6796 raise ValueError("bad OCGs in 'off': %s" % s)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6797
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6798 if locked:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6799 if type(locked) not in (list, tuple):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6800 raise ValueError("bad type: 'locked'")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6801 s = set(locked).difference(ocgs)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6802 if s != set():
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6803 raise ValueError("bad OCGs in 'locked': %s" % s)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6804
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6805 if rbgroups:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6806 if type(rbgroups) not in (list, tuple):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6807 raise ValueError("bad type: 'rbgroups'")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6808 for x in rbgroups:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6809 if not type(x) in (list, tuple):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6810 raise ValueError("bad RBGroup '%s'" % x)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6811 s = set(x).difference(ocgs)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6812 if s != set():
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6813 raise ValueError("bad OCGs in RBGroup: %s" % s)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6814
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6815 if basestate:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6816 basestate = str(basestate).upper()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6817 if basestate == "UNCHANGED":
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6818 basestate = "Unchanged"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6819 if basestate not in ("ON", "OFF", "Unchanged"):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6820 raise ValueError("bad 'basestate'")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6821 pdf = _as_pdf_document(self)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6822 ocp = mupdf.pdf_dict_getl(
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6823 mupdf.pdf_trailer( pdf),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6824 PDF_NAME('Root'),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6825 PDF_NAME('OCProperties'),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6826 )
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6827 if not ocp.m_internal:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6828 return
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6829 if config == -1:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6830 obj = mupdf.pdf_dict_get( ocp, PDF_NAME('D'))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6831 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6832 obj = mupdf.pdf_array_get(
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6833 mupdf.pdf_dict_get( ocp, PDF_NAME('Configs')),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6834 config,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6835 )
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6836 if not obj.m_internal:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6837 raise ValueError( MSG_BAD_OC_CONFIG)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6838 JM_set_ocg_arrays( obj, basestate, on, off, rbgroups, locked)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6839 mupdf.ll_pdf_read_ocg( pdf.m_internal)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6840
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6841 def set_layer_ui_config(self, number, action=0):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6842 """Set / unset OC intent configuration."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6843 # The user might have given the name instead of sequence number,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6844 # so select by that name and continue with corresp. number
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6845 if isinstance(number, str):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6846 select = [ui["number"] for ui in self.layer_ui_configs() if ui["text"] == number]
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6847 if select == []:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6848 raise ValueError(f"bad OCG '{number}'.")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6849 number = select[0] # this is the number for the name
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6850 pdf = _as_pdf_document(self)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6851 if action == 1:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6852 mupdf.pdf_toggle_layer_config_ui(pdf, number)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6853 elif action == 2:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6854 mupdf.pdf_deselect_layer_config_ui(pdf, number)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6855 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6856 mupdf.pdf_select_layer_config_ui(pdf, number)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6857
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6858 def set_markinfo(self, markinfo: dict) -> bool:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6859 """Set the PDF MarkInfo values."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6860 xref = self.pdf_catalog()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6861 if xref == 0:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6862 raise ValueError("not a PDF")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6863 if not markinfo or not isinstance(markinfo, dict):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6864 return False
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6865 valid = {"Marked": False, "UserProperties": False, "Suspects": False}
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6866
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6867 if not set(valid.keys()).issuperset(markinfo.keys()):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6868 badkeys = f"bad MarkInfo key(s): {set(markinfo.keys()).difference(valid.keys())}"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6869 raise ValueError(badkeys)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6870 pdfdict = "<<"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6871 valid.update(markinfo)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6872 for key, value in valid.items():
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6873 value=str(value).lower()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6874 if value not in ("true", "false"):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6875 raise ValueError(f"bad key value '{key}': '{value}'")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6876 pdfdict += f"/{key} {value}"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6877 pdfdict += ">>"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6878 self.xref_set_key(xref, "MarkInfo", pdfdict)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6879 return True
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6880
39
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6881 def set_metadata(doc: 'Document', m: dict = None) -> None:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6882 """Update the PDF /Info object.
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6883
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6884 Args:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6885 m: a dictionary like doc.metadata.
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6886 """
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6887 if not doc.is_pdf:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6888 raise ValueError("is no PDF")
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6889 if doc.is_closed or doc.is_encrypted:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6890 raise ValueError("document closed or encrypted")
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6891 if m is None:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6892 m = {}
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6893 elif type(m) is not dict:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6894 raise ValueError("bad metadata")
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6895 keymap = {
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6896 "author": "Author",
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6897 "producer": "Producer",
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6898 "creator": "Creator",
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6899 "title": "Title",
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6900 "format": None,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6901 "encryption": None,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6902 "creationDate": "CreationDate",
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6903 "modDate": "ModDate",
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6904 "subject": "Subject",
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6905 "keywords": "Keywords",
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6906 "trapped": "Trapped",
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6907 }
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6908 valid_keys = set(keymap.keys())
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6909 diff_set = set(m.keys()).difference(valid_keys)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6910 if diff_set != set():
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6911 msg = "bad dict key(s): %s" % diff_set
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6912 raise ValueError(msg)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6913
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6914 t, temp = doc.xref_get_key(-1, "Info")
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6915 if t != "xref":
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6916 info_xref = 0
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6917 else:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6918 info_xref = int(temp.replace("0 R", ""))
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6919
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6920 if m == {} and info_xref == 0: # nothing to do
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6921 return
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6922
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6923 if info_xref == 0: # no prev metadata: get new xref
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6924 info_xref = doc.get_new_xref()
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6925 doc.update_object(info_xref, "<<>>") # fill it with empty object
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6926 doc.xref_set_key(-1, "Info", "%i 0 R" % info_xref)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6927 elif m == {}: # remove existing metadata
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6928 doc.xref_set_key(-1, "Info", "null")
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6929 doc.init_doc()
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6930 return
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6931
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6932 for key, val in [(k, v) for k, v in m.items() if keymap[k] is not None]:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6933 pdf_key = keymap[key]
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6934 if not bool(val) or val in ("none", "null"):
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6935 val = "null"
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6936 else:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6937 val = get_pdf_str(val)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6938 doc.xref_set_key(info_xref, pdf_key, val)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6939 doc.init_doc()
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6940 return
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6941
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6942 def set_oc(doc: 'Document', xref: int, oc: int) -> None:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6943 """Attach optional content object to image or form xobject.
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6944
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6945 Args:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6946 xref: (int) xref number of an image or form xobject
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6947 oc: (int) xref number of an OCG or OCMD
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6948 """
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6949 if doc.is_closed or doc.is_encrypted:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6950 raise ValueError("document close or encrypted")
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6951 t, name = doc.xref_get_key(xref, "Subtype")
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6952 if t != "name" or name not in ("/Image", "/Form"):
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6953 raise ValueError("bad object type at xref %i" % xref)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6954 if oc > 0:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6955 t, name = doc.xref_get_key(oc, "Type")
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6956 if t != "name" or name not in ("/OCG", "/OCMD"):
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6957 raise ValueError("bad object type at xref %i" % oc)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6958 if oc == 0 and "OC" in doc.xref_get_keys(xref):
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6959 doc.xref_set_key(xref, "OC", "null")
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6960 return None
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6961 doc.xref_set_key(xref, "OC", "%i 0 R" % oc)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6962 return None
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6963
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6964 def set_ocmd(
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6965 doc: 'Document',
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6966 xref: int = 0,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6967 ocgs: typing.Union[list, None] = None,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6968 policy: OptStr = None,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6969 ve: typing.Union[list, None] = None,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6970 ) -> int:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6971 """Create or update an OCMD object in a PDF document.
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6972
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6973 Args:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6974 xref: (int) 0 for creating a new object, otherwise update existing one.
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6975 ocgs: (list) OCG xref numbers, which shall be subject to 'policy'.
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6976 policy: one of 'AllOn', 'AllOff', 'AnyOn', 'AnyOff' (any casing).
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6977 ve: (list) visibility expression. Use instead of 'ocgs' with 'policy'.
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6978
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6979 Returns:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6980 Xref of the created or updated OCMD.
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6981 """
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6982
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6983 all_ocgs = set(doc.get_ocgs().keys())
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6984
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6985 def ve_maker(ve):
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6986 if type(ve) not in (list, tuple) or len(ve) < 2:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6987 raise ValueError("bad 've' format: %s" % ve)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6988 if ve[0].lower() not in ("and", "or", "not"):
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6989 raise ValueError("bad operand: %s" % ve[0])
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6990 if ve[0].lower() == "not" and len(ve) != 2:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6991 raise ValueError("bad 've' format: %s" % ve)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6992 item = "[/%s" % ve[0].title()
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6993 for x in ve[1:]:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6994 if type(x) is int:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6995 if x not in all_ocgs:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6996 raise ValueError("bad OCG %i" % x)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6997 item += " %i 0 R" % x
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6998 else:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
6999 item += " %s" % ve_maker(x)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7000 item += "]"
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7001 return item
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7002
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7003 text = "<</Type/OCMD"
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7004
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7005 if ocgs and type(ocgs) in (list, tuple): # some OCGs are provided
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7006 s = set(ocgs).difference(all_ocgs) # contains illegal xrefs
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7007 if s != set():
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7008 msg = "bad OCGs: %s" % s
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7009 raise ValueError(msg)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7010 text += "/OCGs[" + " ".join(map(lambda x: "%i 0 R" % x, ocgs)) + "]"
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7011
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7012 if policy:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7013 policy = str(policy).lower()
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7014 pols = {
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7015 "anyon": "AnyOn",
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7016 "allon": "AllOn",
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7017 "anyoff": "AnyOff",
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7018 "alloff": "AllOff",
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7019 }
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7020 if policy not in ("anyon", "allon", "anyoff", "alloff"):
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7021 raise ValueError("bad policy: %s" % policy)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7022 text += "/P/%s" % pols[policy]
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7023
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7024 if ve:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7025 text += "/VE%s" % ve_maker(ve)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7026
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7027 text += ">>"
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7028
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7029 # make new object or replace old OCMD (check type first)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7030 if xref == 0:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7031 xref = doc.get_new_xref()
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7032 elif "/Type/OCMD" not in doc.xref_object(xref, compressed=True):
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7033 raise ValueError("bad xref or not an OCMD")
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7034 doc.update_object(xref, text)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7035 return xref
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7036
1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
7037 def set_pagelayout(self, pagelayout: str):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
7038 """Set the PDF PageLayout value."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
7039 valid = ("SinglePage", "OneColumn", "TwoColumnLeft", "TwoColumnRight", "TwoPageLeft", "TwoPageRight")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
7040 xref = self.pdf_catalog()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
7041 if xref == 0:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
7042 raise ValueError("not a PDF")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
7043 if not pagelayout:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
7044 raise ValueError("bad PageLayout value")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
7045 if pagelayout[0] == "/":
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
7046 pagelayout = pagelayout[1:]
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
7047 for v in valid:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
7048 if pagelayout.lower() == v.lower():
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
7049 self.xref_set_key(xref, "PageLayout", f"/{v}")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
7050 return True
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
7051 raise ValueError("bad PageLayout value")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
7052
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
7053 def set_pagemode(self, pagemode: str):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
7054 """Set the PDF PageMode value."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
7055 valid = ("UseNone", "UseOutlines", "UseThumbs", "FullScreen", "UseOC", "UseAttachments")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
7056 xref = self.pdf_catalog()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
7057 if xref == 0:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
7058 raise ValueError("not a PDF")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
7059 if not pagemode:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
7060 raise ValueError("bad PageMode value")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
7061 if pagemode[0] == "/":
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
7062 pagemode = pagemode[1:]
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
7063 for v in valid:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
7064 if pagemode.lower() == v.lower():
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
7065 self.xref_set_key(xref, "PageMode", f"/{v}")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
7066 return True
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
7067 raise ValueError("bad PageMode value")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
7068
39
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7069 def set_page_labels(doc, labels):
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7070 """Add / replace page label definitions in PDF document.
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7071
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7072 Args:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7073 doc: PDF document (resp. 'self').
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7074 labels: list of label dictionaries like:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7075 {'startpage': int, 'prefix': str, 'style': str, 'firstpagenum': int},
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7076 as returned by get_page_labels().
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7077 """
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7078 # William Chapman, 2021-01-06
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7079
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7080 def create_label_str(label):
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7081 """Convert Python label dict to corresponding PDF rule string.
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7082
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7083 Args:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7084 label: (dict) build rule for the label.
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7085 Returns:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7086 PDF label rule string wrapped in "<<", ">>".
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7087 """
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7088 s = "%i<<" % label["startpage"]
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7089 if label.get("prefix", "") != "":
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7090 s += "/P(%s)" % label["prefix"]
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7091 if label.get("style", "") != "":
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7092 s += "/S/%s" % label["style"]
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7093 if label.get("firstpagenum", 1) > 1:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7094 s += "/St %i" % label["firstpagenum"]
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7095 s += ">>"
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7096 return s
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7097
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7098 def create_nums(labels):
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7099 """Return concatenated string of all labels rules.
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7100
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7101 Args:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7102 labels: (list) dictionaries as created by function 'rule_dict'.
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7103 Returns:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7104 PDF compatible string for page label definitions, ready to be
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7105 enclosed in PDF array 'Nums[...]'.
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7106 """
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7107 labels.sort(key=lambda x: x["startpage"])
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7108 s = "".join([create_label_str(label) for label in labels])
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7109 return s
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7110
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7111 doc._set_page_labels(create_nums(labels))
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7112
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7113 def set_toc(
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7114 doc: 'Document',
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7115 toc: list,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7116 collapse: int = 1,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7117 ) -> int:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7118 """Create new outline tree (table of contents, TOC).
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7119
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7120 Args:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7121 toc: (list, tuple) each entry must contain level, title, page and
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7122 optionally top margin on the page. None or '()' remove the TOC.
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7123 collapse: (int) collapses entries beyond this level. Zero or None
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7124 shows all entries unfolded.
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7125 Returns:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7126 the number of inserted items, or the number of removed items respectively.
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7127 """
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7128 if doc.is_closed or doc.is_encrypted:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7129 raise ValueError("document closed or encrypted")
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7130 if not doc.is_pdf:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7131 raise ValueError("is no PDF")
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7132 if not toc: # remove all entries
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7133 return len(doc._delToC())
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7134
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7135 # validity checks --------------------------------------------------------
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7136 if type(toc) not in (list, tuple):
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7137 raise ValueError("'toc' must be list or tuple")
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7138 toclen = len(toc)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7139 page_count = doc.page_count
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7140 t0 = toc[0]
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7141 if type(t0) not in (list, tuple):
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7142 raise ValueError("items must be sequences of 3 or 4 items")
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7143 if t0[0] != 1:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7144 raise ValueError("hierarchy level of item 0 must be 1")
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7145 for i in list(range(toclen - 1)):
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7146 t1 = toc[i]
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7147 t2 = toc[i + 1]
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7148 if not -1 <= t1[2] <= page_count:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7149 raise ValueError("row %i: page number out of range" % i)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7150 if (type(t2) not in (list, tuple)) or len(t2) not in (3, 4):
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7151 raise ValueError("bad row %i" % (i + 1))
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7152 if (type(t2[0]) is not int) or t2[0] < 1:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7153 raise ValueError("bad hierarchy level in row %i" % (i + 1))
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7154 if t2[0] > t1[0] + 1:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7155 raise ValueError("bad hierarchy level in row %i" % (i + 1))
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7156 # no formal errors in toc --------------------------------------------------
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7157
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7158 # --------------------------------------------------------------------------
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7159 # make a list of xref numbers, which we can use for our TOC entries
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7160 # --------------------------------------------------------------------------
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7161 old_xrefs = doc._delToC() # del old outlines, get their xref numbers
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7162
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7163 # prepare table of xrefs for new bookmarks
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7164 old_xrefs = []
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7165 xref = [0] + old_xrefs
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7166 xref[0] = doc._getOLRootNumber() # entry zero is outline root xref number
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7167 if toclen > len(old_xrefs): # too few old xrefs?
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7168 for i in range((toclen - len(old_xrefs))):
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7169 xref.append(doc.get_new_xref()) # acquire new ones
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7170
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7171 lvltab = {0: 0} # to store last entry per hierarchy level
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7172
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7173 # ------------------------------------------------------------------------------
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7174 # contains new outline objects as strings - first one is the outline root
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7175 # ------------------------------------------------------------------------------
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7176 olitems = [{"count": 0, "first": -1, "last": -1, "xref": xref[0]}]
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7177 # ------------------------------------------------------------------------------
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7178 # build olitems as a list of PDF-like connected dictionaries
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7179 # ------------------------------------------------------------------------------
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7180 for i in range(toclen):
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7181 o = toc[i]
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7182 lvl = o[0] # level
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7183 title = get_pdf_str(o[1]) # title
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7184 pno = min(doc.page_count - 1, max(0, o[2] - 1)) # page number
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7185 page_xref = doc.page_xref(pno)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7186 page_height = doc.page_cropbox(pno).height
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7187 top = Point(72, page_height - 36)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7188 dest_dict = {"to": top, "kind": LINK_GOTO} # fall back target
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7189 if o[2] < 0:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7190 dest_dict["kind"] = LINK_NONE
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7191 if len(o) > 3: # some target is specified
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7192 if type(o[3]) in (int, float): # convert a number to a point
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7193 dest_dict["to"] = Point(72, page_height - o[3])
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7194 else: # if something else, make sure we have a dict
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7195 # We make a copy of o[3] to avoid modifying our caller's data.
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7196 dest_dict = o[3].copy() if type(o[3]) is dict else dest_dict
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7197 if "to" not in dest_dict: # target point not in dict?
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7198 dest_dict["to"] = top # put default in
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7199 else: # transform target to PDF coordinates
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7200 page = doc[pno]
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7201 point = Point(dest_dict["to"])
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7202 point.y = page.cropbox.height - point.y
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7203 point = point * page.rotation_matrix
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7204 dest_dict["to"] = (point.x, point.y)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7205 d = {}
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7206 d["first"] = -1
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7207 d["count"] = 0
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7208 d["last"] = -1
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7209 d["prev"] = -1
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7210 d["next"] = -1
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7211 d["dest"] = utils.getDestStr(page_xref, dest_dict)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7212 d["top"] = dest_dict["to"]
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7213 d["title"] = title
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7214 d["parent"] = lvltab[lvl - 1]
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7215 d["xref"] = xref[i + 1]
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7216 d["color"] = dest_dict.get("color")
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7217 d["flags"] = dest_dict.get("italic", 0) + 2 * dest_dict.get("bold", 0)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7218 lvltab[lvl] = i + 1
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7219 parent = olitems[lvltab[lvl - 1]] # the parent entry
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7220
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7221 if (
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7222 dest_dict.get("collapse") or collapse and lvl > collapse
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7223 ): # suppress expansion
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7224 parent["count"] -= 1 # make /Count negative
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7225 else:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7226 parent["count"] += 1 # positive /Count
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7227
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7228 if parent["first"] == -1:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7229 parent["first"] = i + 1
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7230 parent["last"] = i + 1
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7231 else:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7232 d["prev"] = parent["last"]
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7233 prev = olitems[parent["last"]]
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7234 prev["next"] = i + 1
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7235 parent["last"] = i + 1
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7236 olitems.append(d)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7237
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7238 # ------------------------------------------------------------------------------
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7239 # now create each outline item as a string and insert it in the PDF
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7240 # ------------------------------------------------------------------------------
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7241 for i, ol in enumerate(olitems):
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7242 txt = "<<"
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7243 if ol["count"] != 0:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7244 txt += "/Count %i" % ol["count"]
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7245 try:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7246 txt += ol["dest"]
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7247 except Exception:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7248 # Verbose in PyMuPDF/tests.
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7249 if g_exceptions_verbose >= 2: exception_info()
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7250 pass
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7251 try:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7252 if ol["first"] > -1:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7253 txt += "/First %i 0 R" % xref[ol["first"]]
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7254 except Exception:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7255 if g_exceptions_verbose >= 2: exception_info()
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7256 pass
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7257 try:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7258 if ol["last"] > -1:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7259 txt += "/Last %i 0 R" % xref[ol["last"]]
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7260 except Exception:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7261 if g_exceptions_verbose >= 2: exception_info()
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7262 pass
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7263 try:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7264 if ol["next"] > -1:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7265 txt += "/Next %i 0 R" % xref[ol["next"]]
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7266 except Exception:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7267 # Verbose in PyMuPDF/tests.
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7268 if g_exceptions_verbose >= 2: exception_info()
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7269 pass
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7270 try:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7271 if ol["parent"] > -1:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7272 txt += "/Parent %i 0 R" % xref[ol["parent"]]
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7273 except Exception:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7274 # Verbose in PyMuPDF/tests.
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7275 if g_exceptions_verbose >= 2: exception_info()
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7276 pass
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7277 try:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7278 if ol["prev"] > -1:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7279 txt += "/Prev %i 0 R" % xref[ol["prev"]]
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7280 except Exception:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7281 # Verbose in PyMuPDF/tests.
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7282 if g_exceptions_verbose >= 2: exception_info()
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7283 pass
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7284 try:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7285 txt += "/Title" + ol["title"]
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7286 except Exception:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7287 # Verbose in PyMuPDF/tests.
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7288 if g_exceptions_verbose >= 2: exception_info()
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7289 pass
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7290
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7291 if ol.get("color") and len(ol["color"]) == 3:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7292 txt += f"/C[ {_format_g(tuple(ol['color']))}]"
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7293 if ol.get("flags", 0) > 0:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7294 txt += "/F %i" % ol["flags"]
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7295
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7296 if i == 0: # special: this is the outline root
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7297 txt += "/Type/Outlines" # so add the /Type entry
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7298 txt += ">>"
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7299 doc.update_object(xref[i], txt) # insert the PDF object
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7300
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7301 doc.init_doc()
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7302 return toclen
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7303
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7304 def set_toc_item(
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7305 doc: 'Document',
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7306 idx: int,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7307 dest_dict: OptDict = None,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7308 kind: OptInt = None,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7309 pno: OptInt = None,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7310 uri: OptStr = None,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7311 title: OptStr = None,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7312 to: point_like = None,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7313 filename: OptStr = None,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7314 zoom: float = 0,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7315 ) -> None:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7316 """Update TOC item by index.
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7317
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7318 It allows changing the item's title and link destination.
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7319
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7320 Args:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7321 idx:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7322 (int) desired index of the TOC list, as created by get_toc.
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7323 dest_dict:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7324 (dict) destination dictionary as created by get_toc(False).
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7325 Outrules all other parameters. If None, the remaining parameters
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7326 are used to make a dest dictionary.
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7327 kind:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7328 (int) kind of link (pymupdf.LINK_GOTO, etc.). If None, then only
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7329 the title will be updated. If pymupdf.LINK_NONE, the TOC item will
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7330 be deleted.
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7331 pno:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7332 (int) page number (1-based like in get_toc). Required if
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7333 pymupdf.LINK_GOTO.
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7334 uri:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7335 (str) the URL, required if pymupdf.LINK_URI.
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7336 title:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7337 (str) the new title. No change if None.
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7338 to:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7339 (point-like) destination on the target page. If omitted, (72, 36)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7340 will be used as target coordinates.
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7341 filename:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7342 (str) destination filename, required for pymupdf.LINK_GOTOR and
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7343 pymupdf.LINK_LAUNCH.
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7344 name:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7345 (str) a destination name for pymupdf.LINK_NAMED.
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7346 zoom:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7347 (float) a zoom factor for the target location (pymupdf.LINK_GOTO).
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7348 """
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7349 xref = doc.get_outline_xrefs()[idx]
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7350 page_xref = 0
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7351 if type(dest_dict) is dict:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7352 if dest_dict["kind"] == LINK_GOTO:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7353 pno = dest_dict["page"]
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7354 page_xref = doc.page_xref(pno)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7355 page_height = doc.page_cropbox(pno).height
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7356 to = dest_dict.get('to', Point(72, 36))
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7357 to.y = page_height - to.y
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7358 dest_dict["to"] = to
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7359 action = utils.getDestStr(page_xref, dest_dict)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7360 if not action.startswith("/A"):
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7361 raise ValueError("bad bookmark dest")
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7362 color = dest_dict.get("color")
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7363 if color:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7364 color = list(map(float, color))
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7365 if len(color) != 3 or min(color) < 0 or max(color) > 1:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7366 raise ValueError("bad color value")
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7367 bold = dest_dict.get("bold", False)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7368 italic = dest_dict.get("italic", False)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7369 flags = italic + 2 * bold
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7370 collapse = dest_dict.get("collapse")
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7371 return doc._update_toc_item(
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7372 xref,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7373 action=action[2:],
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7374 title=title,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7375 color=color,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7376 flags=flags,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7377 collapse=collapse,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7378 )
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7379
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7380 if kind == LINK_NONE: # delete bookmark item
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7381 return doc.del_toc_item(idx)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7382 if kind is None and title is None: # treat as no-op
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7383 return None
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7384 if kind is None: # only update title text
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7385 return doc._update_toc_item(xref, action=None, title=title)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7386
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7387 if kind == LINK_GOTO:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7388 if pno is None or pno not in range(1, doc.page_count + 1):
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7389 raise ValueError("bad page number")
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7390 page_xref = doc.page_xref(pno - 1)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7391 page_height = doc.page_cropbox(pno - 1).height
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7392 if to is None:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7393 to = Point(72, page_height - 36)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7394 else:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7395 to = Point(to)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7396 to.y = page_height - to.y
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7397
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7398 ddict = {
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7399 "kind": kind,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7400 "to": to,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7401 "uri": uri,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7402 "page": pno,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7403 "file": filename,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7404 "zoom": zoom,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7405 }
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7406 action = utils.getDestStr(page_xref, ddict)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7407 if action == "" or not action.startswith("/A"):
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7408 raise ValueError("bad bookmark dest")
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7409
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7410 return doc._update_toc_item(xref, action=action[2:], title=title)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7411
1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
7412 def set_xml_metadata(self, metadata):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
7413 """Store XML document level metadata."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
7414 if self.is_closed or self.is_encrypted:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
7415 raise ValueError("document closed or encrypted")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
7416 pdf = _as_pdf_document(self)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
7417 root = mupdf.pdf_dict_get( mupdf.pdf_trailer( pdf), PDF_NAME('Root'))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
7418 if not root.m_internal:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
7419 RAISEPY( MSG_BAD_PDFROOT, JM_Exc_FileDataError)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
7420 res = mupdf.fz_new_buffer_from_copied_data( metadata.encode('utf-8'))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
7421 xml = mupdf.pdf_dict_get( root, PDF_NAME('Metadata'))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
7422 if xml.m_internal:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
7423 JM_update_stream( pdf, xml, res, 0)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
7424 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
7425 xml = mupdf.pdf_add_stream( pdf, res, mupdf.PdfObj(), 0)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
7426 mupdf.pdf_dict_put( xml, PDF_NAME('Type'), PDF_NAME('Metadata'))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
7427 mupdf.pdf_dict_put( xml, PDF_NAME('Subtype'), PDF_NAME('XML'))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
7428 mupdf.pdf_dict_put( root, PDF_NAME('Metadata'), xml)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
7429
39
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7430 def subset_fonts(doc: 'Document', verbose: bool = False, fallback: bool = False) -> OptInt:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7431 """Build font subsets in a PDF.
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7432
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7433 Eligible fonts are potentially replaced by smaller versions. Page text is
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7434 NOT rewritten and thus should retain properties like being hidden or
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7435 controlled by optional content.
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7436
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7437 This method by default uses MuPDF's own internal feature to create subset
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7438 fonts. As this is a new function, errors may still occur. In this case,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7439 please fall back to using the previous version by using "fallback=True".
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7440 Fallback mode requires the external package 'fontTools'.
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7441
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7442 Args:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7443 fallback: use the older deprecated implementation.
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7444 verbose: only used by fallback mode.
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7445
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7446 Returns:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7447 The new MuPDF-based code returns None. The deprecated fallback
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7448 mode returns 0 if there are no fonts to subset. Otherwise, it
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7449 returns the decrease in fontsize (the difference in fontsize),
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7450 measured in bytes.
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7451 """
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7452 # Font binaries: - "buffer" -> (names, xrefs, (unicodes, glyphs))
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7453 # An embedded font is uniquely defined by its fontbuffer only. It may have
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7454 # multiple names and xrefs.
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7455 # Once the sets of used unicodes and glyphs are known, we compute a
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7456 # smaller version of the buffer user package fontTools.
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7457
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7458 if not fallback: # by default use MuPDF function
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7459 pdf = mupdf.pdf_document_from_fz_document(doc)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7460 mupdf.pdf_subset_fonts2(pdf, list(range(doc.page_count)))
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7461 return
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7462
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7463 font_buffers = {}
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7464
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7465 def get_old_widths(xref):
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7466 """Retrieve old font '/W' and '/DW' values."""
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7467 df = doc.xref_get_key(xref, "DescendantFonts")
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7468 if df[0] != "array": # only handle xref specifications
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7469 return None, None
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7470 df_xref = int(df[1][1:-1].replace("0 R", ""))
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7471 widths = doc.xref_get_key(df_xref, "W")
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7472 if widths[0] != "array": # no widths key found
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7473 widths = None
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7474 else:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7475 widths = widths[1]
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7476 dwidths = doc.xref_get_key(df_xref, "DW")
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7477 if dwidths[0] != "int":
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7478 dwidths = None
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7479 else:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7480 dwidths = dwidths[1]
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7481 return widths, dwidths
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7482
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7483 def set_old_widths(xref, widths, dwidths):
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7484 """Restore the old '/W' and '/DW' in subsetted font.
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7485
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7486 If either parameter is None or evaluates to False, the corresponding
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7487 dictionary key will be set to null.
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7488 """
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7489 df = doc.xref_get_key(xref, "DescendantFonts")
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7490 if df[0] != "array": # only handle xref specs
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7491 return None
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7492 df_xref = int(df[1][1:-1].replace("0 R", ""))
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7493 if (type(widths) is not str or not widths) and doc.xref_get_key(df_xref, "W")[
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7494 0
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7495 ] != "null":
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7496 doc.xref_set_key(df_xref, "W", "null")
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7497 else:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7498 doc.xref_set_key(df_xref, "W", widths)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7499 if (type(dwidths) is not str or not dwidths) and doc.xref_get_key(
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7500 df_xref, "DW"
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7501 )[0] != "null":
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7502 doc.xref_set_key(df_xref, "DW", "null")
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7503 else:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7504 doc.xref_set_key(df_xref, "DW", dwidths)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7505 return None
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7506
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7507 def set_subset_fontname(new_xref):
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7508 """Generate a name prefix to tag a font as subset.
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7509
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7510 We use a random generator to select 6 upper case ASCII characters.
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7511 The prefixed name must be put in the font xref as the "/BaseFont" value
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7512 and in the FontDescriptor object as the '/FontName' value.
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7513 """
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7514 # The following generates a prefix like 'ABCDEF+'
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7515 import random
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7516 import string
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7517 prefix = "".join(random.choices(tuple(string.ascii_uppercase), k=6)) + "+"
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7518 font_str = doc.xref_object(new_xref, compressed=True)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7519 font_str = font_str.replace("/BaseFont/", "/BaseFont/" + prefix)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7520 df = doc.xref_get_key(new_xref, "DescendantFonts")
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7521 if df[0] == "array":
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7522 df_xref = int(df[1][1:-1].replace("0 R", ""))
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7523 fd = doc.xref_get_key(df_xref, "FontDescriptor")
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7524 if fd[0] == "xref":
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7525 fd_xref = int(fd[1].replace("0 R", ""))
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7526 fd_str = doc.xref_object(fd_xref, compressed=True)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7527 fd_str = fd_str.replace("/FontName/", "/FontName/" + prefix)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7528 doc.update_object(fd_xref, fd_str)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7529 doc.update_object(new_xref, font_str)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7530
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7531 def build_subset(buffer, unc_set, gid_set):
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7532 """Build font subset using fontTools.
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7533
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7534 Args:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7535 buffer: (bytes) the font given as a binary buffer.
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7536 unc_set: (set) required glyph ids.
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7537 Returns:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7538 Either None if subsetting is unsuccessful or the subset font buffer.
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7539 """
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7540 try:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7541 import fontTools.subset as fts
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7542 except ImportError:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7543 if g_exceptions_verbose: exception_info()
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7544 message("This method requires fontTools to be installed.")
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7545 raise
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7546 import tempfile
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7547 with tempfile.TemporaryDirectory() as tmp_dir:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7548 oldfont_path = f"{tmp_dir}/oldfont.ttf"
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7549 newfont_path = f"{tmp_dir}/newfont.ttf"
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7550 uncfile_path = f"{tmp_dir}/uncfile.txt"
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7551 args = [
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7552 oldfont_path,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7553 "--retain-gids",
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7554 f"--output-file={newfont_path}",
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7555 "--layout-features=*",
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7556 "--passthrough-tables",
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7557 "--ignore-missing-glyphs",
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7558 "--ignore-missing-unicodes",
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7559 "--symbol-cmap",
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7560 ]
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7561
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7562 # store glyph ids or unicodes as file
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7563 with open(f"{tmp_dir}/uncfile.txt", "w", encoding='utf8') as unc_file:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7564 if 0xFFFD in unc_set: # error unicode exists -> use glyphs
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7565 args.append(f"--gids-file={uncfile_path}")
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7566 gid_set.add(189)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7567 unc_list = list(gid_set)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7568 for unc in unc_list:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7569 unc_file.write("%i\n" % unc)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7570 else:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7571 args.append(f"--unicodes-file={uncfile_path}")
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7572 unc_set.add(255)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7573 unc_list = list(unc_set)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7574 for unc in unc_list:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7575 unc_file.write("%04x\n" % unc)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7576
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7577 # store fontbuffer as a file
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7578 with open(oldfont_path, "wb") as fontfile:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7579 fontfile.write(buffer)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7580 try:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7581 os.remove(newfont_path) # remove old file
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7582 except Exception:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7583 pass
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7584 try: # invoke fontTools subsetter
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7585 fts.main(args)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7586 font = Font(fontfile=newfont_path)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7587 new_buffer = font.buffer # subset font binary
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7588 if font.glyph_count == 0: # intercept empty font
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7589 new_buffer = None
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7590 except Exception:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7591 exception_info()
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7592 new_buffer = None
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7593 return new_buffer
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7594
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7595 def repl_fontnames(doc):
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7596 """Populate 'font_buffers'.
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7597
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7598 For each font candidate, store its xref and the list of names
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7599 by which PDF text may refer to it (there may be multiple).
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7600 """
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7601
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7602 def norm_name(name):
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7603 """Recreate font name that contains PDF hex codes.
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7604
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7605 E.g. #20 -> space, chr(32)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7606 """
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7607 while "#" in name:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7608 p = name.find("#")
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7609 c = int(name[p + 1 : p + 3], 16)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7610 name = name.replace(name[p : p + 3], chr(c))
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7611 return name
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7612
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7613 def get_fontnames(doc, item):
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7614 """Return a list of fontnames for an item of page.get_fonts().
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7615
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7616 There may be multiple names e.g. for Type0 fonts.
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7617 """
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7618 fontname = item[3]
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7619 names = [fontname]
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7620 fontname = doc.xref_get_key(item[0], "BaseFont")[1][1:]
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7621 fontname = norm_name(fontname)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7622 if fontname not in names:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7623 names.append(fontname)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7624 descendents = doc.xref_get_key(item[0], "DescendantFonts")
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7625 if descendents[0] != "array":
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7626 return names
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7627 descendents = descendents[1][1:-1]
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7628 if descendents.endswith(" 0 R"):
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7629 xref = int(descendents[:-4])
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7630 descendents = doc.xref_object(xref, compressed=True)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7631 p1 = descendents.find("/BaseFont")
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7632 if p1 >= 0:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7633 p2 = descendents.find("/", p1 + 1)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7634 p1 = min(descendents.find("/", p2 + 1), descendents.find(">>", p2 + 1))
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7635 fontname = descendents[p2 + 1 : p1]
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7636 fontname = norm_name(fontname)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7637 if fontname not in names:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7638 names.append(fontname)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7639 return names
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7640
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7641 for i in range(doc.page_count):
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7642 for f in doc.get_page_fonts(i, full=True):
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7643 font_xref = f[0] # font xref
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7644 font_ext = f[1] # font file extension
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7645 basename = f[3] # font basename
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7646
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7647 if font_ext not in ( # skip if not supported by fontTools
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7648 "otf",
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7649 "ttf",
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7650 "woff",
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7651 "woff2",
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7652 ):
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7653 continue
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7654 # skip fonts which already are subsets
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7655 if len(basename) > 6 and basename[6] == "+":
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7656 continue
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7657
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7658 extr = doc.extract_font(font_xref)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7659 fontbuffer = extr[-1]
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7660 names = get_fontnames(doc, f)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7661 name_set, xref_set, subsets = font_buffers.get(
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7662 fontbuffer, (set(), set(), (set(), set()))
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7663 )
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7664 xref_set.add(font_xref)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7665 for name in names:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7666 name_set.add(name)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7667 font = Font(fontbuffer=fontbuffer)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7668 name_set.add(font.name)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7669 del font
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7670 font_buffers[fontbuffer] = (name_set, xref_set, subsets)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7671
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7672 def find_buffer_by_name(name):
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7673 for buffer, (name_set, _, _) in font_buffers.items():
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7674 if name in name_set:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7675 return buffer
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7676 return None
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7677
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7678 # -----------------
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7679 # main function
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7680 # -----------------
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7681 repl_fontnames(doc) # populate font information
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7682 if not font_buffers: # nothing found to do
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7683 if verbose:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7684 message(f'No fonts to subset.')
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7685 return 0
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7686
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7687 old_fontsize = 0
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7688 new_fontsize = 0
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7689 for fontbuffer in font_buffers.keys():
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7690 old_fontsize += len(fontbuffer)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7691
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7692 # Scan page text for usage of subsettable fonts
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7693 for page in doc:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7694 # go through the text and extend set of used glyphs by font
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7695 # we use a modified MuPDF trace device, which delivers us glyph ids.
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7696 for span in page.get_texttrace():
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7697 if type(span) is not dict: # skip useless information
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7698 continue
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7699 fontname = span["font"][:33] # fontname for the span
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7700 buffer = find_buffer_by_name(fontname)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7701 if buffer is None:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7702 continue
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7703 name_set, xref_set, (set_ucs, set_gid) = font_buffers[buffer]
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7704 for c in span["chars"]:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7705 set_ucs.add(c[0]) # unicode
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7706 set_gid.add(c[1]) # glyph id
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7707 font_buffers[buffer] = (name_set, xref_set, (set_ucs, set_gid))
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7708
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7709 # build the font subsets
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7710 for old_buffer, (name_set, xref_set, subsets) in font_buffers.items():
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7711 new_buffer = build_subset(old_buffer, subsets[0], subsets[1])
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7712 fontname = list(name_set)[0]
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7713 if new_buffer is None or len(new_buffer) >= len(old_buffer):
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7714 # subset was not created or did not get smaller
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7715 if verbose:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7716 message(f'Cannot subset {fontname!r}.')
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7717 continue
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7718 if verbose:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7719 message(f"Built subset of font {fontname!r}.")
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7720 val = doc._insert_font(fontbuffer=new_buffer) # store subset font in PDF
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7721 new_xref = val[0] # get its xref
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7722 set_subset_fontname(new_xref) # tag fontname as subset font
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7723 font_str = doc.xref_object( # get its object definition
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7724 new_xref,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7725 compressed=True,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7726 )
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7727 # walk through the original font xrefs and replace each by the subset def
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7728 for font_xref in xref_set:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7729 # we need the original '/W' and '/DW' width values
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7730 width_table, def_width = get_old_widths(font_xref)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7731 # ... and replace original font definition at xref with it
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7732 doc.update_object(font_xref, font_str)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7733 # now copy over old '/W' and '/DW' values
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7734 if width_table or def_width:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7735 set_old_widths(font_xref, width_table, def_width)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7736 # 'new_xref' remains unused in the PDF and must be removed
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7737 # by garbage collection.
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7738 new_fontsize += len(new_buffer)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7739
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7740 return old_fontsize - new_fontsize
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7741
1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
7742 def switch_layer(self, config, as_default=0):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
7743 """Activate an OC layer."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
7744 pdf = _as_pdf_document(self)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
7745 cfgs = mupdf.pdf_dict_getl(
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
7746 mupdf.pdf_trailer( pdf),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
7747 PDF_NAME('Root'),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
7748 PDF_NAME('OCProperties'),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
7749 PDF_NAME('Configs')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
7750 )
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
7751 if not mupdf.pdf_is_array( cfgs) or not mupdf.pdf_array_len( cfgs):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
7752 if config < 1:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
7753 return
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
7754 raise ValueError( MSG_BAD_OC_LAYER)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
7755 if config < 0:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
7756 return
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
7757 mupdf.pdf_select_layer_config( pdf, config)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
7758 if as_default:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
7759 mupdf.pdf_set_layer_config_as_default( pdf)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
7760 mupdf.ll_pdf_read_ocg( pdf.m_internal)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
7761
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
7762 def update_object(self, xref, text, page=None):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
7763 """Replace object definition source."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
7764 if self.is_closed or self.is_encrypted:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
7765 raise ValueError("document closed or encrypted")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
7766 pdf = _as_pdf_document(self)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
7767 xreflen = mupdf.pdf_xref_len(pdf)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
7768 if not _INRANGE(xref, 1, xreflen-1):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
7769 RAISEPY("bad xref", MSG_BAD_XREF)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
7770 ENSURE_OPERATION(pdf)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
7771 # create new object with passed-in string
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
7772 new_obj = JM_pdf_obj_from_str(pdf, text)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
7773 mupdf.pdf_update_object(pdf, xref, new_obj)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
7774 if page:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
7775 JM_refresh_links( _as_pdf_page(page))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
7776
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
7777 def update_stream(self, xref=0, stream=None, new=1, compress=1):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
7778 """Replace xref stream part."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
7779 if self.is_closed or self.is_encrypted:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
7780 raise ValueError("document closed or encrypted")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
7781 pdf = _as_pdf_document(self)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
7782 xreflen = mupdf.pdf_xref_len(pdf)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
7783 if xref < 1 or xref > xreflen:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
7784 raise ValueError( MSG_BAD_XREF)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
7785 # get the object
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
7786 obj = mupdf.pdf_new_indirect(pdf, xref, 0)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
7787 if not mupdf.pdf_is_dict(obj):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
7788 raise ValueError( MSG_IS_NO_DICT)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
7789 res = JM_BufferFromBytes(stream)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
7790 if not res.m_internal:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
7791 raise TypeError( MSG_BAD_BUFFER)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
7792 JM_update_stream(pdf, obj, res, compress)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
7793 pdf.dirty = 1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
7794
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
7795 @property
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
7796 def version_count(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
7797 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
7798 Count versions of PDF document.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
7799 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
7800 pdf = _as_pdf_document(self, required=0)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
7801 if pdf.m_internal:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
7802 return mupdf.pdf_count_versions(pdf)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
7803 return 0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
7804
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
7805 def write(
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
7806 self,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
7807 garbage=False,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
7808 clean=False,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
7809 deflate=False,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
7810 deflate_images=False,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
7811 deflate_fonts=False,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
7812 incremental=False,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
7813 ascii=False,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
7814 expand=False,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
7815 linear=False,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
7816 no_new_id=False,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
7817 appearance=False,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
7818 pretty=False,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
7819 encryption=1,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
7820 permissions=4095,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
7821 owner_pw=None,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
7822 user_pw=None,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
7823 preserve_metadata=1,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
7824 use_objstms=0,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
7825 compression_effort=0,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
7826 ):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
7827 from io import BytesIO
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
7828 bio = BytesIO()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
7829 self.save(
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
7830 bio,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
7831 garbage=garbage,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
7832 clean=clean,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
7833 no_new_id=no_new_id,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
7834 appearance=appearance,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
7835 deflate=deflate,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
7836 deflate_images=deflate_images,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
7837 deflate_fonts=deflate_fonts,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
7838 incremental=incremental,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
7839 ascii=ascii,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
7840 expand=expand,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
7841 linear=linear,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
7842 pretty=pretty,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
7843 encryption=encryption,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
7844 permissions=permissions,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
7845 owner_pw=owner_pw,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
7846 user_pw=user_pw,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
7847 preserve_metadata=preserve_metadata,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
7848 use_objstms=use_objstms,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
7849 compression_effort=compression_effort,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
7850 )
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
7851 return bio.getvalue()
39
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7852
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7853 def tobytes(self, *args, **kwargs):
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7854 return self.write(*args, **kwargs)
1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
7855
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
7856 @property
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
7857 def xref(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
7858 """PDF xref number of page."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
7859 CheckParent(self)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
7860 return self.parent.page_xref(self.number)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
7861
39
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7862 def xref_copy(doc: 'Document', source: int, target: int, *, keep: list = None) -> None:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7863 """Copy a PDF dictionary object to another one given their xref numbers.
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7864
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7865 Args:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7866 doc: PDF document object
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7867 source: source xref number
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7868 target: target xref number, the xref must already exist
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7869 keep: an optional list of 1st level keys in target that should not be
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7870 removed before copying.
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7871 Notes:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7872 This works similar to the copy() method of dictionaries in Python. The
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7873 source may be a stream object.
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7874 """
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7875 if doc.xref_is_stream(source):
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7876 # read new xref stream, maintaining compression
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7877 stream = doc.xref_stream_raw(source)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7878 doc.update_stream(
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7879 target,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7880 stream,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7881 compress=False, # keeps source compression
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7882 new=True, # in case target is no stream
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7883 )
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7884
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7885 # empty the target completely, observe exceptions
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7886 if keep is None:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7887 keep = []
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7888 for key in doc.xref_get_keys(target):
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7889 if key in keep:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7890 continue
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7891 doc.xref_set_key(target, key, "null")
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7892 # copy over all source dict items
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7893 for key in doc.xref_get_keys(source):
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7894 item = doc.xref_get_key(source, key)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7895 doc.xref_set_key(target, key, item[1])
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
7896
1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
7897 def xref_get_key(self, xref, key):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
7898 """Get PDF dict key value of object at 'xref'."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
7899 pdf = _as_pdf_document(self)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
7900 xreflen = mupdf.pdf_xref_len(pdf)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
7901 if not _INRANGE(xref, 1, xreflen-1) and xref != -1:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
7902 raise ValueError( MSG_BAD_XREF)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
7903 if xref > 0:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
7904 obj = mupdf.pdf_load_object(pdf, xref)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
7905 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
7906 obj = mupdf.pdf_trailer(pdf)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
7907 if not obj.m_internal:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
7908 return ("null", "null")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
7909 subobj = mupdf.pdf_dict_getp(obj, key)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
7910 if not subobj.m_internal:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
7911 return ("null", "null")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
7912 text = None
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
7913 if mupdf.pdf_is_indirect(subobj):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
7914 type = "xref"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
7915 text = "%i 0 R" % mupdf.pdf_to_num(subobj)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
7916 elif mupdf.pdf_is_array(subobj):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
7917 type = "array"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
7918 elif mupdf.pdf_is_dict(subobj):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
7919 type = "dict"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
7920 elif mupdf.pdf_is_int(subobj):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
7921 type = "int"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
7922 text = "%i" % mupdf.pdf_to_int(subobj)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
7923 elif mupdf.pdf_is_real(subobj):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
7924 type = "float"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
7925 elif mupdf.pdf_is_null(subobj):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
7926 type = "null"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
7927 text = "null"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
7928 elif mupdf.pdf_is_bool(subobj):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
7929 type = "bool"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
7930 if mupdf.pdf_to_bool(subobj):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
7931 text = "true"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
7932 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
7933 text = "false"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
7934 elif mupdf.pdf_is_name(subobj):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
7935 type = "name"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
7936 text = "/%s" % mupdf.pdf_to_name(subobj)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
7937 elif mupdf.pdf_is_string(subobj):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
7938 type = "string"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
7939 text = JM_UnicodeFromStr(mupdf.pdf_to_text_string(subobj))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
7940 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
7941 type = "unknown"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
7942 if text is None:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
7943 res = JM_object_to_buffer(subobj, 1, 0)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
7944 text = JM_UnicodeFromBuffer(res)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
7945 return (type, text)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
7946
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
7947 def xref_get_keys(self, xref):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
7948 """Get the keys of PDF dict object at 'xref'. Use -1 for the PDF trailer."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
7949 pdf = _as_pdf_document(self)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
7950 xreflen = mupdf.pdf_xref_len( pdf)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
7951 if not _INRANGE(xref, 1, xreflen-1) and xref != -1:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
7952 raise ValueError( MSG_BAD_XREF)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
7953 if xref > 0:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
7954 obj = mupdf.pdf_load_object( pdf, xref)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
7955 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
7956 obj = mupdf.pdf_trailer( pdf)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
7957 n = mupdf.pdf_dict_len( obj)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
7958 rc = []
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
7959 if n == 0:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
7960 return rc
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
7961 for i in range(n):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
7962 key = mupdf.pdf_to_name( mupdf.pdf_dict_get_key( obj, i))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
7963 rc.append(key)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
7964 return rc
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
7965
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
7966 def xref_is_font(self, xref):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
7967 """Check if xref is a font object."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
7968 if self.is_closed or self.is_encrypted:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
7969 raise ValueError("document closed or encrypted")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
7970 if self.xref_get_key(xref, "Type")[1] == "/Font":
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
7971 return True
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
7972 return False
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
7973
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
7974 def xref_is_image(self, xref):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
7975 """Check if xref is an image object."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
7976 if self.is_closed or self.is_encrypted:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
7977 raise ValueError("document closed or encrypted")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
7978 if self.xref_get_key(xref, "Subtype")[1] == "/Image":
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
7979 return True
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
7980 return False
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
7981
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
7982 def xref_is_stream(self, xref=0):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
7983 """Check if xref is a stream object."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
7984 pdf = _as_pdf_document(self, required=0)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
7985 if not pdf.m_internal:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
7986 return False # not a PDF
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
7987 return bool(mupdf.pdf_obj_num_is_stream(pdf, xref))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
7988
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
7989 def xref_is_xobject(self, xref):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
7990 """Check if xref is a form xobject."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
7991 if self.is_closed or self.is_encrypted:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
7992 raise ValueError("document closed or encrypted")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
7993 if self.xref_get_key(xref, "Subtype")[1] == "/Form":
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
7994 return True
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
7995 return False
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
7996
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
7997 def xref_length(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
7998 """Get length of xref table."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
7999 xreflen = 0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8000 pdf = _as_pdf_document(self, required=0)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8001 if pdf.m_internal:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8002 xreflen = mupdf.pdf_xref_len(pdf)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8003 return xreflen
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8004
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8005 def xref_object(self, xref, compressed=0, ascii=0):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8006 """Get xref object source as a string."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8007 if self.is_closed:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8008 raise ValueError("document closed")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8009 if g_use_extra:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8010 ret = extra.xref_object( self.this, xref, compressed, ascii)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8011 return ret
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8012 pdf = _as_pdf_document(self)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8013 xreflen = mupdf.pdf_xref_len(pdf)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8014 if not _INRANGE(xref, 1, xreflen-1) and xref != -1:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8015 raise ValueError( MSG_BAD_XREF)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8016 if xref > 0:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8017 obj = mupdf.pdf_load_object(pdf, xref)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8018 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8019 obj = mupdf.pdf_trailer(pdf)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8020 res = JM_object_to_buffer(mupdf.pdf_resolve_indirect(obj), compressed, ascii)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8021 text = JM_EscapeStrFromBuffer(res)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8022 return text
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8023
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8024 def xref_set_key(self, xref, key, value):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8025 """Set the value of a PDF dictionary key."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8026 if self.is_closed:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8027 raise ValueError("document closed")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8028
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8029 if not key or not isinstance(key, str) or INVALID_NAME_CHARS.intersection(key) not in (set(), {"/"}):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8030 raise ValueError("bad 'key'")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8031 if not isinstance(value, str) or not value or value[0] == "/" and INVALID_NAME_CHARS.intersection(value[1:]) != set():
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8032 raise ValueError("bad 'value'")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8033
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8034 pdf = _as_pdf_document(self)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8035 xreflen = mupdf.pdf_xref_len(pdf)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8036 #if not _INRANGE(xref, 1, xreflen-1) and xref != -1:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8037 # THROWMSG("bad xref")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8038 #if len(value) == 0:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8039 # THROWMSG("bad 'value'")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8040 #if len(key) == 0:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8041 # THROWMSG("bad 'key'")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8042 if not _INRANGE(xref, 1, xreflen-1) and xref != -1:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8043 raise ValueError( MSG_BAD_XREF)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8044 if xref != -1:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8045 obj = mupdf.pdf_load_object(pdf, xref)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8046 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8047 obj = mupdf.pdf_trailer(pdf)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8048 new_obj = JM_set_object_value(obj, key, value)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8049 if not new_obj.m_internal:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8050 return # did not work: skip update
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8051 if xref != -1:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8052 mupdf.pdf_update_object(pdf, xref, new_obj)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8053 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8054 n = mupdf.pdf_dict_len(new_obj)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8055 for i in range(n):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8056 mupdf.pdf_dict_put(
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8057 obj,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8058 mupdf.pdf_dict_get_key(new_obj, i),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8059 mupdf.pdf_dict_get_val(new_obj, i),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8060 )
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8061
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8062 def xref_stream(self, xref):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8063 """Get decompressed xref stream."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8064 if self.is_closed or self.is_encrypted:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8065 raise ValueError("document closed or encrypted")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8066 pdf = _as_pdf_document(self)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8067 xreflen = mupdf.pdf_xref_len( pdf)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8068 if not _INRANGE(xref, 1, xreflen-1) and xref != -1:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8069 raise ValueError( MSG_BAD_XREF)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8070 if xref >= 0:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8071 obj = mupdf.pdf_new_indirect( pdf, xref, 0)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8072 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8073 obj = mupdf.pdf_trailer( pdf)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8074 r = None
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8075 if mupdf.pdf_is_stream( obj):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8076 res = mupdf.pdf_load_stream_number( pdf, xref)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8077 r = JM_BinFromBuffer( res)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8078 return r
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8079
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8080 def xref_stream_raw(self, xref):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8081 """Get xref stream without decompression."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8082 if self.is_closed or self.is_encrypted:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8083 raise ValueError("document closed or encrypted")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8084 pdf = _as_pdf_document(self)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8085 xreflen = mupdf.pdf_xref_len( pdf)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8086 if not _INRANGE(xref, 1, xreflen-1) and xref != -1:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8087 raise ValueError( MSG_BAD_XREF)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8088 if xref >= 0:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8089 obj = mupdf.pdf_new_indirect( pdf, xref, 0)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8090 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8091 obj = mupdf.pdf_trailer( pdf)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8092 r = None
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8093 if mupdf.pdf_is_stream( obj):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8094 res = mupdf.pdf_load_raw_stream_number( pdf, xref)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8095 r = JM_BinFromBuffer( res)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8096 return r
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8097
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8098 def xref_xml_metadata(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8099 """Get xref of document XML metadata."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8100 pdf = _as_pdf_document(self)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8101 root = mupdf.pdf_dict_get( mupdf.pdf_trailer( pdf), PDF_NAME('Root'))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8102 if not root.m_internal:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8103 RAISEPY( MSG_BAD_PDFROOT, JM_Exc_FileDataError)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8104 xml = mupdf.pdf_dict_get( root, PDF_NAME('Metadata'))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8105 xref = 0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8106 if xml.m_internal:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8107 xref = mupdf.pdf_to_num( xml)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8108 return xref
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8109
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8110 __slots__ = ('this', 'page_count2', 'this_is_pdf', '__dict__')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8111
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8112 outline = property(lambda self: self._outline)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8113 is_stream = xref_is_stream
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8114
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8115 open = Document
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8116
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8117
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8118 class DocumentWriter:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8119
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8120 def __enter__(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8121 return self
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8122
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8123 def __exit__(self, *args):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8124 self.close()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8125
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8126 def __init__(self, path, options=''):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8127 if isinstance( path, str):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8128 pass
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8129 elif hasattr( path, 'absolute'):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8130 path = str( path)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8131 elif hasattr( path, 'name'):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8132 path = path.name
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8133 if isinstance( path, str):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8134 self.this = mupdf.FzDocumentWriter( path, options, mupdf.FzDocumentWriter.PathType_PDF)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8135 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8136 # Need to keep the Python JM_new_output_fileptr_Output instance
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8137 # alive for the lifetime of this DocumentWriter, otherwise calls
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8138 # to virtual methods implemented in Python fail. So we make it a
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8139 # member of this DocumentWriter.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8140 #
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8141 # Unrelated to this, mupdf.FzDocumentWriter will set
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8142 # self._out.m_internal to null because ownership is passed in.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8143 #
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8144 out = JM_new_output_fileptr( path)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8145 self.this = mupdf.FzDocumentWriter( out, options, mupdf.FzDocumentWriter.OutputType_PDF)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8146 assert out.m_internal_value() == 0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8147 assert hasattr( self.this, '_out')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8148
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8149 def begin_page( self, mediabox):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8150 mediabox2 = JM_rect_from_py(mediabox)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8151 device = mupdf.fz_begin_page( self.this, mediabox2)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8152 device_wrapper = DeviceWrapper( device)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8153 return device_wrapper
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8154
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8155 def close( self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8156 mupdf.fz_close_document_writer( self.this)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8157
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8158 def end_page( self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8159 mupdf.fz_end_page( self.this)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8160
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8161
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8162 class Font:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8163
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8164 def __del__(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8165 if type(self) is not Font:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8166 return None
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8167
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8168 def __init__(
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8169 self,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8170 fontname=None,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8171 fontfile=None,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8172 fontbuffer=None,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8173 script=0,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8174 language=None,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8175 ordering=-1,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8176 is_bold=0,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8177 is_italic=0,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8178 is_serif=0,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8179 embed=1,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8180 ):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8181
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8182 if fontbuffer:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8183 if hasattr(fontbuffer, "getvalue"):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8184 fontbuffer = fontbuffer.getvalue()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8185 elif isinstance(fontbuffer, bytearray):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8186 fontbuffer = bytes(fontbuffer)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8187 if not isinstance(fontbuffer, bytes):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8188 raise ValueError("bad type: 'fontbuffer'")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8189
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8190 if isinstance(fontname, str):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8191 fname_lower = fontname.lower()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8192 if "/" in fname_lower or "\\" in fname_lower or "." in fname_lower:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8193 message("Warning: did you mean a fontfile?")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8194
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8195 if fname_lower in ("cjk", "china-t", "china-ts"):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8196 ordering = 0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8197
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8198 elif fname_lower.startswith("china-s"):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8199 ordering = 1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8200 elif fname_lower.startswith("korea"):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8201 ordering = 3
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8202 elif fname_lower.startswith("japan"):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8203 ordering = 2
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8204 elif fname_lower in fitz_fontdescriptors.keys():
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8205 import pymupdf_fonts # optional fonts
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8206 fontbuffer = pymupdf_fonts.myfont(fname_lower) # make a copy
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8207 fontname = None # ensure using fontbuffer only
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8208 del pymupdf_fonts # remove package again
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8209
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8210 elif ordering < 0:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8211 fontname = Base14_fontdict.get(fontname, fontname)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8212
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8213 lang = mupdf.fz_text_language_from_string(language)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8214 font = JM_get_font(fontname, fontfile,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8215 fontbuffer, script, lang, ordering,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8216 is_bold, is_italic, is_serif, embed)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8217 self.this = font
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8218
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8219 def __repr__(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8220 return "Font('%s')" % self.name
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8221
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8222 @property
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8223 def ascender(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8224 """Return the glyph ascender value."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8225 return mupdf.fz_font_ascender(self.this)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8226
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8227 @property
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8228 def bbox(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8229 return self.this.fz_font_bbox()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8230
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8231 @property
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8232 def buffer(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8233 buffer_ = mupdf.FzBuffer( mupdf.ll_fz_keep_buffer( self.this.m_internal.buffer))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8234 return mupdf.fz_buffer_extract_copy( buffer_)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8235
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8236 def char_lengths(self, text, fontsize=11, language=None, script=0, wmode=0, small_caps=0):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8237 """Return tuple of char lengths of unicode 'text' under a fontsize."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8238 lang = mupdf.fz_text_language_from_string(language)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8239 rc = []
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8240 for ch in text:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8241 c = ord(ch)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8242 if small_caps:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8243 gid = mupdf.fz_encode_character_sc(self.this, c)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8244 if gid >= 0:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8245 font = self.this
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8246 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8247 gid, font = mupdf.fz_encode_character_with_fallback(self.this, c, script, lang)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8248 rc.append(fontsize * mupdf.fz_advance_glyph(font, gid, wmode))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8249 return rc
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8250
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8251 @property
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8252 def descender(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8253 """Return the glyph descender value."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8254 return mupdf.fz_font_descender(self.this)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8255
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8256 @property
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8257 def flags(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8258 f = mupdf.ll_fz_font_flags(self.this.m_internal)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8259 if not f:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8260 return
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8261 assert isinstance( f, mupdf.fz_font_flags_t)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8262 #log( '{=f}')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8263 if mupdf_cppyy:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8264 # cppyy includes remaining higher bits.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8265 v = [f.is_mono]
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8266 def b(bits):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8267 ret = v[0] & ((1 << bits)-1)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8268 v[0] = v[0] >> bits
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8269 return ret
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8270 is_mono = b(1)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8271 is_serif = b(1)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8272 is_bold = b(1)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8273 is_italic = b(1)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8274 ft_substitute = b(1)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8275 ft_stretch = b(1)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8276 fake_bold = b(1)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8277 fake_italic = b(1)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8278 has_opentype = b(1)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8279 invalid_bbox = b(1)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8280 cjk_lang = b(1)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8281 embed = b(1)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8282 never_embed = b(1)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8283 return {
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8284 "mono": is_mono if mupdf_cppyy else f.is_mono,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8285 "serif": is_serif if mupdf_cppyy else f.is_serif,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8286 "bold": is_bold if mupdf_cppyy else f.is_bold,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8287 "italic": is_italic if mupdf_cppyy else f.is_italic,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8288 "substitute": ft_substitute if mupdf_cppyy else f.ft_substitute,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8289 "stretch": ft_stretch if mupdf_cppyy else f.ft_stretch,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8290 "fake-bold": fake_bold if mupdf_cppyy else f.fake_bold,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8291 "fake-italic": fake_italic if mupdf_cppyy else f.fake_italic,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8292 "opentype": has_opentype if mupdf_cppyy else f.has_opentype,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8293 "invalid-bbox": invalid_bbox if mupdf_cppyy else f.invalid_bbox,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8294 'cjk': cjk_lang if mupdf_cppyy else f.cjk,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8295 'cjk-lang': cjk_lang if mupdf_cppyy else f.cjk_lang,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8296 'embed': embed if mupdf_cppyy else f.embed,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8297 'never-embed': never_embed if mupdf_cppyy else f.never_embed,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8298 }
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8299
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8300 def glyph_advance(self, chr_, language=None, script=0, wmode=0, small_caps=0):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8301 """Return the glyph width of a unicode (font size 1)."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8302 lang = mupdf.fz_text_language_from_string(language)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8303 if small_caps:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8304 gid = mupdf.fz_encode_character_sc(self.this, chr_)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8305 if gid >= 0:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8306 font = self.this
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8307 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8308 gid, font = mupdf.fz_encode_character_with_fallback(self.this, chr_, script, lang)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8309 return mupdf.fz_advance_glyph(font, gid, wmode)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8310
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8311 def glyph_bbox(self, char, language=None, script=0, small_caps=0):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8312 """Return the glyph bbox of a unicode (font size 1)."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8313 lang = mupdf.fz_text_language_from_string(language)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8314 if small_caps:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8315 gid = mupdf.fz_encode_character_sc( self.this, char)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8316 if gid >= 0:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8317 font = self.this
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8318 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8319 gid, font = mupdf.fz_encode_character_with_fallback( self.this, char, script, lang)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8320 return Rect(mupdf.fz_bound_glyph( font, gid, mupdf.FzMatrix()))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8321
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8322 @property
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8323 def glyph_count(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8324 return self.this.m_internal.glyph_count
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8325
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8326 def glyph_name_to_unicode(self, name):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8327 """Return the unicode for a glyph name."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8328 return glyph_name_to_unicode(name)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8329
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8330 def has_glyph(self, chr, language=None, script=0, fallback=0, small_caps=0):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8331 """Check whether font has a glyph for this unicode."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8332 if fallback:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8333 lang = mupdf.fz_text_language_from_string(language)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8334 gid, font = mupdf.fz_encode_character_with_fallback(self.this, chr, script, lang)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8335 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8336 if small_caps:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8337 gid = mupdf.fz_encode_character_sc(self.this, chr)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8338 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8339 gid = mupdf.fz_encode_character(self.this, chr)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8340 return gid
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8341
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8342 @property
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8343 def is_bold(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8344 return mupdf.fz_font_is_bold( self.this)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8345
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8346 @property
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8347 def is_italic(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8348 return mupdf.fz_font_is_italic( self.this)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8349
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8350 @property
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8351 def is_monospaced(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8352 return mupdf.fz_font_is_monospaced( self.this)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8353
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8354 @property
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8355 def is_serif(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8356 return mupdf.fz_font_is_serif( self.this)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8357
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8358 @property
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8359 def is_writable(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8360 return True # see pymupdf commit ef4056ee4da2
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8361 font = self.this
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8362 flags = mupdf.ll_fz_font_flags(font.m_internal)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8363 if mupdf_cppyy:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8364 # cppyy doesn't handle bitfields correctly.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8365 import cppyy
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8366 ft_substitute = cppyy.gbl.mupdf_mfz_font_flags_ft_substitute( flags)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8367 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8368 ft_substitute = flags.ft_substitute
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8369
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8370 if ( mupdf.ll_fz_font_t3_procs(font.m_internal)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8371 or ft_substitute
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8372 or not mupdf.pdf_font_writing_supported(font)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8373 ):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8374 return False
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8375 return True
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8376
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8377 @property
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8378 def name(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8379 ret = mupdf.fz_font_name(self.this)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8380 #log( '{ret=}')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8381 return ret
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8382
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8383 def text_length(self, text, fontsize=11, language=None, script=0, wmode=0, small_caps=0):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8384 """Return length of unicode 'text' under a fontsize."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8385 thisfont = self.this
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8386 lang = mupdf.fz_text_language_from_string(language)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8387 rc = 0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8388 if not isinstance(text, str):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8389 raise TypeError( MSG_BAD_TEXT)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8390 for ch in text:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8391 c = ord(ch)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8392 if small_caps:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8393 gid = mupdf.fz_encode_character_sc(thisfont, c)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8394 if gid >= 0:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8395 font = thisfont
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8396 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8397 gid, font = mupdf.fz_encode_character_with_fallback(thisfont, c, script, lang)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8398 rc += mupdf.fz_advance_glyph(font, gid, wmode)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8399 rc *= fontsize
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8400 return rc
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8401
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8402 def unicode_to_glyph_name(self, ch):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8403 """Return the glyph name for a unicode."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8404 return unicode_to_glyph_name(ch)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8405
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8406 def valid_codepoints(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8407 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8408 Returns sorted list of valid unicodes of a fz_font.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8409 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8410 ucs_gids = mupdf.fz_enumerate_font_cmap2(self.this)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8411 ucss = [i.ucs for i in ucs_gids]
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8412 ucss_unique = set(ucss)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8413 ucss_unique_sorted = sorted(ucss_unique)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8414 return ucss_unique_sorted
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8415
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8416
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8417 class Graftmap:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8418
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8419 def __del__(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8420 if not type(self) is Graftmap:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8421 return
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8422 self.thisown = False
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8423
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8424 def __init__(self, doc):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8425 dst = _as_pdf_document(doc)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8426 map_ = mupdf.pdf_new_graft_map(dst)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8427 self.this = map_
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8428 self.thisown = True
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8429
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8430
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8431 class Link:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8432 def __del__(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8433 self._erase()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8434
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8435 def __init__( self, this):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8436 assert isinstance( this, mupdf.FzLink)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8437 self.this = this
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8438
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8439 def __repr__(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8440 CheckParent(self)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8441 return "link on " + str(self.parent)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8442
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8443 def __str__(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8444 CheckParent(self)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8445 return "link on " + str(self.parent)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8446
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8447 def _border(self, doc, xref):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8448 pdf = _as_pdf_document(doc, required=0)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8449 if not pdf.m_internal:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8450 return
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8451 link_obj = mupdf.pdf_new_indirect(pdf, xref, 0)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8452 if not link_obj.m_internal:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8453 return
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8454 b = JM_annot_border(link_obj)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8455 return b
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8456
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8457 def _colors(self, doc, xref):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8458 pdf = _as_pdf_document(doc, required=0)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8459 if not pdf.m_internal:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8460 return
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8461 link_obj = mupdf.pdf_new_indirect( pdf, xref, 0)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8462 if not link_obj.m_internal:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8463 raise ValueError( MSG_BAD_XREF)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8464 b = JM_annot_colors( link_obj)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8465 return b
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8466
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8467 def _erase(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8468 self.parent = None
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8469 self.thisown = False
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8470
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8471 def _setBorder(self, border, doc, xref):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8472 pdf = _as_pdf_document(doc, required=0)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8473 if not pdf.m_internal:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8474 return
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8475 link_obj = mupdf.pdf_new_indirect(pdf, xref, 0)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8476 if not link_obj.m_internal:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8477 return
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8478 b = JM_annot_set_border(border, pdf, link_obj)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8479 return b
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8480
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8481 @property
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8482 def border(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8483 return self._border(self.parent.parent.this, self.xref)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8484
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8485 @property
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8486 def colors(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8487 return self._colors(self.parent.parent.this, self.xref)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8488
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8489 @property
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8490 def dest(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8491 """Create link destination details."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8492 if hasattr(self, "parent") and self.parent is None:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8493 raise ValueError("orphaned object: parent is None")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8494 if self.parent.parent.is_closed or self.parent.parent.is_encrypted:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8495 raise ValueError("document closed or encrypted")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8496 doc = self.parent.parent
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8497
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8498 if self.is_external or self.uri.startswith("#"):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8499 uri = None
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8500 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8501 uri = doc.resolve_link(self.uri)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8502
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8503 return linkDest(self, uri, doc)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8504
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8505 @property
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8506 def flags(self)->int:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8507 CheckParent(self)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8508 doc = self.parent.parent
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8509 if not doc.is_pdf:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8510 return 0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8511 f = doc.xref_get_key(self.xref, "F")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8512 if f[1] != "null":
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8513 return int(f[1])
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8514 return 0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8515
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8516 @property
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8517 def is_external(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8518 """Flag the link as external."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8519 CheckParent(self)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8520 if g_use_extra:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8521 return extra.Link_is_external( self.this)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8522 this_link = self.this
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8523 if not this_link.m_internal or not this_link.m_internal.uri:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8524 return False
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8525 return bool( mupdf.fz_is_external_link( this_link.m_internal.uri))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8526
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8527 @property
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8528 def next(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8529 """Next link."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8530 if not self.this.m_internal:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8531 return None
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8532 CheckParent(self)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8533 if 0 and g_use_extra:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8534 val = extra.Link_next( self.this)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8535 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8536 val = self.this.next()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8537 if not val.m_internal:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8538 return None
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8539 val = Link( val)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8540 if val:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8541 val.thisown = True
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8542 val.parent = self.parent # copy owning page from prev link
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8543 val.parent._annot_refs[id(val)] = val
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8544 if self.xref > 0: # prev link has an xref
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8545 link_xrefs = [x[0] for x in self.parent.annot_xrefs() if x[1] == mupdf.PDF_ANNOT_LINK]
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8546 link_ids = [x[2] for x in self.parent.annot_xrefs() if x[1] == mupdf.PDF_ANNOT_LINK]
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8547 idx = link_xrefs.index(self.xref)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8548 val.xref = link_xrefs[idx + 1]
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8549 val.id = link_ids[idx + 1]
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8550 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8551 val.xref = 0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8552 val.id = ""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8553 return val
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8554
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8555 @property
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8556 def rect(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8557 """Rectangle ('hot area')."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8558 CheckParent(self)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8559 # utils.py:getLinkDict() appears to expect exceptions from us, so we
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8560 # ensure that we raise on error.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8561 if self.this is None or not self.this.m_internal:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8562 raise Exception( 'self.this.m_internal not available')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8563 val = JM_py_from_rect( self.this.rect())
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8564 val = Rect(val)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8565 return val
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8566
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8567 def set_border(self, border=None, width=0, dashes=None, style=None):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8568 if type(border) is not dict:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8569 border = {"width": width, "style": style, "dashes": dashes}
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8570 return self._setBorder(border, self.parent.parent.this, self.xref)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8571
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8572 def set_colors(self, colors=None, stroke=None, fill=None):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8573 """Set border colors."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8574 CheckParent(self)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8575 doc = self.parent.parent
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8576 if type(colors) is not dict:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8577 colors = {"fill": fill, "stroke": stroke}
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8578 fill = colors.get("fill")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8579 stroke = colors.get("stroke")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8580 if fill is not None:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8581 message("warning: links have no fill color")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8582 if stroke in ([], ()):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8583 doc.xref_set_key(self.xref, "C", "[]")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8584 return
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8585 if hasattr(stroke, "__float__"):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8586 stroke = [float(stroke)]
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8587 CheckColor(stroke)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8588 assert len(stroke) in (1, 3, 4)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8589 s = f"[{_format_g(stroke)}]"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8590 doc.xref_set_key(self.xref, "C", s)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8591
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8592 def set_flags(self, flags):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8593 CheckParent(self)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8594 doc = self.parent.parent
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8595 if not doc.is_pdf:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8596 raise ValueError("is no PDF")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8597 if not type(flags) is int:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8598 raise ValueError("bad 'flags' value")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8599 doc.xref_set_key(self.xref, "F", str(flags))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8600 return None
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8601
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8602 @property
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8603 def uri(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8604 """Uri string."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8605 #CheckParent(self)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8606 if g_use_extra:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8607 return extra.link_uri(self.this)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8608 this_link = self.this
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8609 return this_link.m_internal.uri if this_link.m_internal else ''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8610
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8611 page = -1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8612
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8613
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8614 class Matrix:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8615
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8616 def __abs__(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8617 return math.sqrt(sum([c*c for c in self]))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8618
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8619 def __add__(self, m):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8620 if hasattr(m, "__float__"):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8621 return Matrix(self.a + m, self.b + m, self.c + m,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8622 self.d + m, self.e + m, self.f + m)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8623 if len(m) != 6:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8624 raise ValueError("Matrix: bad seq len")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8625 return Matrix(self.a + m[0], self.b + m[1], self.c + m[2],
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8626 self.d + m[3], self.e + m[4], self.f + m[5])
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8627
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8628 def __bool__(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8629 return not (max(self) == min(self) == 0)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8630
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8631 def __eq__(self, mat):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8632 if not hasattr(mat, "__len__"):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8633 return False
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8634 return len(mat) == 6 and not (self - mat)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8635
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8636 def __getitem__(self, i):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8637 return (self.a, self.b, self.c, self.d, self.e, self.f)[i]
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8638
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8639 def __init__(self, *args, a=None, b=None, c=None, d=None, e=None, f=None):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8640 """
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8641 Matrix() - all zeros
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8642 Matrix(a, b, c, d, e, f)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8643 Matrix(zoom-x, zoom-y) - zoom
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8644 Matrix(shear-x, shear-y, 1) - shear
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8645 Matrix(degree) - rotate
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8646 Matrix(Matrix) - new copy
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8647 Matrix(sequence) - from 'sequence'
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8648 Matrix(mupdf.FzMatrix) - from MuPDF class wrapper for fz_matrix.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8649
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8650 Explicit keyword args a, b, c, d, e, f override any earlier settings if
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8651 not None.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8652 """
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8653 if not args:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8654 self.a = self.b = self.c = self.d = self.e = self.f = 0.0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8655 elif len(args) > 6:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8656 raise ValueError("Matrix: bad seq len")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8657 elif len(args) == 6: # 6 numbers
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8658 self.a, self.b, self.c, self.d, self.e, self.f = map(float, args)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8659 elif len(args) == 1: # either an angle or a sequ
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8660 if isinstance(args[0], mupdf.FzMatrix):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8661 self.a = args[0].a
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8662 self.b = args[0].b
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8663 self.c = args[0].c
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8664 self.d = args[0].d
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8665 self.e = args[0].e
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8666 self.f = args[0].f
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8667 elif hasattr(args[0], "__float__"):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8668 theta = math.radians(args[0])
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8669 c_ = round(math.cos(theta), 8)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8670 s_ = round(math.sin(theta), 8)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8671 self.a = self.d = c_
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8672 self.b = s_
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8673 self.c = -s_
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8674 self.e = self.f = 0.0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8675 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8676 self.a, self.b, self.c, self.d, self.e, self.f = map(float, args[0])
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8677 elif len(args) == 2 or len(args) == 3 and args[2] == 0:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8678 self.a, self.b, self.c, self.d, self.e, self.f = float(args[0]), \
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8679 0.0, 0.0, float(args[1]), 0.0, 0.0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8680 elif len(args) == 3 and args[2] == 1:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8681 self.a, self.b, self.c, self.d, self.e, self.f = 1.0, \
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8682 float(args[1]), float(args[0]), 1.0, 0.0, 0.0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8683 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8684 raise ValueError("Matrix: bad args")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8685
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8686 # Override with explicit args if specified.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8687 if a is not None: self.a = a
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8688 if b is not None: self.b = b
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8689 if c is not None: self.c = c
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8690 if d is not None: self.d = d
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8691 if e is not None: self.e = e
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8692 if f is not None: self.f = f
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8693
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8694 def __invert__(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8695 """Calculate inverted matrix."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8696 m1 = Matrix()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8697 m1.invert(self)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8698 return m1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8699
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8700 def __len__(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8701 return 6
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8702
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8703 def __mul__(self, m):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8704 if hasattr(m, "__float__"):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8705 return Matrix(self.a * m, self.b * m, self.c * m,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8706 self.d * m, self.e * m, self.f * m)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8707 m1 = Matrix(1,1)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8708 return m1.concat(self, m)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8709
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8710 def __neg__(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8711 return Matrix(-self.a, -self.b, -self.c, -self.d, -self.e, -self.f)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8712
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8713 def __nonzero__(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8714 return not (max(self) == min(self) == 0)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8715
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8716 def __pos__(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8717 return Matrix(self)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8718
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8719 def __repr__(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8720 return "Matrix" + str(tuple(self))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8721
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8722 def __setitem__(self, i, v):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8723 v = float(v)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8724 if i == 0: self.a = v
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8725 elif i == 1: self.b = v
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8726 elif i == 2: self.c = v
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8727 elif i == 3: self.d = v
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8728 elif i == 4: self.e = v
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8729 elif i == 5: self.f = v
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8730 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8731 raise IndexError("index out of range")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8732 return
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8733
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8734 def __sub__(self, m):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8735 if hasattr(m, "__float__"):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8736 return Matrix(self.a - m, self.b - m, self.c - m,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8737 self.d - m, self.e - m, self.f - m)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8738 if len(m) != 6:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8739 raise ValueError("Matrix: bad seq len")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8740 return Matrix(self.a - m[0], self.b - m[1], self.c - m[2],
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8741 self.d - m[3], self.e - m[4], self.f - m[5])
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8742
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8743 def __truediv__(self, m):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8744 if hasattr(m, "__float__"):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8745 return Matrix(self.a * 1./m, self.b * 1./m, self.c * 1./m,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8746 self.d * 1./m, self.e * 1./m, self.f * 1./m)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8747 m1 = util_invert_matrix(m)[1]
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8748 if not m1:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8749 raise ZeroDivisionError("matrix not invertible")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8750 m2 = Matrix(1,1)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8751 return m2.concat(self, m1)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8752
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8753 def concat(self, one, two):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8754 """Multiply two matrices and replace current one."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8755 if not len(one) == len(two) == 6:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8756 raise ValueError("Matrix: bad seq len")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8757 self.a, self.b, self.c, self.d, self.e, self.f = util_concat_matrix(one, two)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8758 return self
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8759
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8760 def invert(self, src=None):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8761 """Calculate the inverted matrix. Return 0 if successful and replace
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8762 current one. Else return 1 and do nothing.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8763 """
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8764 if src is None:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8765 dst = util_invert_matrix(self)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8766 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8767 dst = util_invert_matrix(src)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8768 if dst[0] == 1:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8769 return 1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8770 self.a, self.b, self.c, self.d, self.e, self.f = dst[1]
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8771 return 0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8772
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8773 @property
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8774 def is_rectilinear(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8775 """True if rectangles are mapped to rectangles."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8776 return (abs(self.b) < EPSILON and abs(self.c) < EPSILON) or \
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8777 (abs(self.a) < EPSILON and abs(self.d) < EPSILON)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8778
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8779 def prerotate(self, theta):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8780 """Calculate pre rotation and replace current matrix."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8781 theta = float(theta)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8782 while theta < 0: theta += 360
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8783 while theta >= 360: theta -= 360
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8784 if abs(0 - theta) < EPSILON:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8785 pass
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8786
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8787 elif abs(90.0 - theta) < EPSILON:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8788 a = self.a
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8789 b = self.b
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8790 self.a = self.c
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8791 self.b = self.d
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8792 self.c = -a
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8793 self.d = -b
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8794
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8795 elif abs(180.0 - theta) < EPSILON:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8796 self.a = -self.a
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8797 self.b = -self.b
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8798 self.c = -self.c
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8799 self.d = -self.d
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8800
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8801 elif abs(270.0 - theta) < EPSILON:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8802 a = self.a
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8803 b = self.b
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8804 self.a = -self.c
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8805 self.b = -self.d
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8806 self.c = a
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8807 self.d = b
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8808
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8809 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8810 rad = math.radians(theta)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8811 s = math.sin(rad)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8812 c = math.cos(rad)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8813 a = self.a
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8814 b = self.b
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8815 self.a = c * a + s * self.c
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8816 self.b = c * b + s * self.d
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8817 self.c =-s * a + c * self.c
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8818 self.d =-s * b + c * self.d
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8819
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8820 return self
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8821
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8822 def prescale(self, sx, sy):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8823 """Calculate pre scaling and replace current matrix."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8824 sx = float(sx)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8825 sy = float(sy)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8826 self.a *= sx
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8827 self.b *= sx
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8828 self.c *= sy
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8829 self.d *= sy
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8830 return self
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8831
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8832 def preshear(self, h, v):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8833 """Calculate pre shearing and replace current matrix."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8834 h = float(h)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8835 v = float(v)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8836 a, b = self.a, self.b
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8837 self.a += v * self.c
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8838 self.b += v * self.d
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8839 self.c += h * a
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8840 self.d += h * b
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8841 return self
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8842
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8843 def pretranslate(self, tx, ty):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8844 """Calculate pre translation and replace current matrix."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8845 tx = float(tx)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8846 ty = float(ty)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8847 self.e += tx * self.a + ty * self.c
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8848 self.f += tx * self.b + ty * self.d
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8849 return self
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8850
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8851 __inv__ = __invert__
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8852 __div__ = __truediv__
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8853 norm = __abs__
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8854
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8855
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8856 class IdentityMatrix(Matrix):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8857 """Identity matrix [1, 0, 0, 1, 0, 0]"""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8858
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8859 def __hash__(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8860 return hash((1,0,0,1,0,0))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8861
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8862 def __init__(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8863 Matrix.__init__(self, 1.0, 1.0)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8864
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8865 def __repr__(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8866 return "IdentityMatrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8867
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8868 def __setattr__(self, name, value):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8869 if name in "ad":
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8870 self.__dict__[name] = 1.0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8871 elif name in "bcef":
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8872 self.__dict__[name] = 0.0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8873 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8874 self.__dict__[name] = value
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8875
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8876 def checkargs(*args):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8877 raise NotImplementedError("Identity is readonly")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8878
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8879 Identity = IdentityMatrix()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8880
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8881
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8882 class linkDest:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8883 """link or outline destination details"""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8884
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8885 def __init__(self, obj, rlink, document=None):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8886 isExt = obj.is_external
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8887 isInt = not isExt
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8888 self.dest = ""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8889 self.file_spec = ""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8890 self.flags = 0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8891 self.is_map = False
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8892 self.is_uri = False
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8893 self.kind = LINK_NONE
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8894 self.lt = Point(0, 0)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8895 self.named = dict()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8896 self.new_window = ""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8897 self.page = obj.page
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8898 self.rb = Point(0, 0)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8899 self.uri = obj.uri
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8900
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8901 def uri_to_dict(uri):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8902 items = self.uri[1:].split('&')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8903 ret = dict()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8904 for item in items:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8905 eq = item.find('=')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8906 if eq >= 0:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8907 ret[item[:eq]] = item[eq+1:]
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8908 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8909 ret[item] = None
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8910 return ret
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8911
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8912 def unescape(name):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8913 """Unescape '%AB' substrings to chr(0xAB)."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8914 split = name.replace("%%", "%25") # take care of escaped '%'
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8915 split = split.split("%")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8916 newname = split[0]
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8917 for item in split[1:]:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8918 piece = item[:2]
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8919 newname += chr(int(piece, base=16))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8920 newname += item[2:]
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8921 return newname
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8922
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8923 if rlink and not self.uri.startswith("#"):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8924 self.uri = f"#page={rlink[0] + 1}&zoom=0,{_format_g(rlink[1])},{_format_g(rlink[2])}"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8925 if obj.is_external:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8926 self.page = -1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8927 self.kind = LINK_URI
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8928 if not self.uri:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8929 self.page = -1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8930 self.kind = LINK_NONE
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8931 if isInt and self.uri:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8932 self.uri = self.uri.replace("&zoom=nan", "&zoom=0")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8933 if self.uri.startswith("#"):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8934 self.kind = LINK_GOTO
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8935 m = re.match('^#page=([0-9]+)&zoom=([0-9.]+),(-?[0-9.]+),(-?[0-9.]+)$', self.uri)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8936 if m:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8937 self.page = int(m.group(1)) - 1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8938 self.lt = Point(float((m.group(3))), float(m.group(4)))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8939 self.flags = self.flags | LINK_FLAG_L_VALID | LINK_FLAG_T_VALID
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8940 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8941 m = re.match('^#page=([0-9]+)$', self.uri)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8942 if m:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8943 self.page = int(m.group(1)) - 1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8944 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8945 self.kind = LINK_NAMED
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8946 m = re.match('^#nameddest=(.*)', self.uri)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8947 assert document
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8948 if document and m:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8949 named = unescape(m.group(1))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8950 self.named = document.resolve_names().get(named)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8951 if self.named is None:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8952 # document.resolve_names() does not contain an
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8953 # entry for `named` so use an empty dict.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8954 self.named = dict()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8955 self.named['nameddest'] = named
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8956 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8957 self.named = uri_to_dict(self.uri[1:])
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8958 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8959 self.kind = LINK_NAMED
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8960 self.named = uri_to_dict(self.uri)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8961 if obj.is_external:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8962 if not self.uri:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8963 pass
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8964 elif self.uri.startswith("file:"):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8965 self.file_spec = self.uri[5:]
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8966 if self.file_spec.startswith("//"):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8967 self.file_spec = self.file_spec[2:]
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8968 self.is_uri = False
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8969 self.uri = ""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8970 self.kind = LINK_LAUNCH
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8971 ftab = self.file_spec.split("#")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8972 if len(ftab) == 2:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8973 if ftab[1].startswith("page="):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8974 self.kind = LINK_GOTOR
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8975 self.file_spec = ftab[0]
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8976 self.page = int(ftab[1].split("&")[0][5:]) - 1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8977 elif ":" in self.uri:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8978 self.is_uri = True
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8979 self.kind = LINK_URI
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8980 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8981 self.is_uri = True
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8982 self.kind = LINK_LAUNCH
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8983 assert isinstance(self.named, dict)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8984
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8985 class Widget:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8986 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8987 Class describing a PDF form field ("widget")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8988 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8989
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8990 def __init__(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8991 self.border_color = None
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8992 self.border_style = "S"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8993 self.border_width = 0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8994 self.border_dashes = None
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8995 self.choice_values = None # choice fields only
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8996 self.rb_parent = None # radio buttons only: xref of owning parent
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8997
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8998 self.field_name = None # field name
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8999 self.field_label = None # field label
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9000 self.field_value = None
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9001 self.field_flags = 0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9002 self.field_display = 0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9003 self.field_type = 0 # valid range 1 through 7
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9004 self.field_type_string = None # field type as string
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9005
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9006 self.fill_color = None
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9007 self.button_caption = None # button caption
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9008 self.is_signed = None # True / False if signature
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9009 self.text_color = (0, 0, 0)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9010 self.text_font = "Helv"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9011 self.text_fontsize = 0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9012 self.text_maxlen = 0 # text fields only
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9013 self.text_format = 0 # text fields only
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9014 self._text_da = "" # /DA = default appearance
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9015
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9016 self.script = None # JavaScript (/A)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9017 self.script_stroke = None # JavaScript (/AA/K)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9018 self.script_format = None # JavaScript (/AA/F)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9019 self.script_change = None # JavaScript (/AA/V)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9020 self.script_calc = None # JavaScript (/AA/C)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9021 self.script_blur = None # JavaScript (/AA/Bl)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9022 self.script_focus = None # JavaScript (/AA/Fo) codespell:ignore
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9023
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9024 self.rect = None # annot value
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9025 self.xref = 0 # annot value
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9026
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9027 def __repr__(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9028 #return "'%s' widget on %s" % (self.field_type_string, str(self.parent))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9029 # No self.parent.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9030 return f'Widget:(field_type={self.field_type_string} script={self.script})'
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9031 return "'%s' widget" % (self.field_type_string)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9032
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9033 def _adjust_font(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9034 """Ensure text_font is from our list and correctly spelled.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9035 """
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9036 if not self.text_font:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9037 self.text_font = "Helv"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9038 return
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9039 valid_fonts = ("Cour", "TiRo", "Helv", "ZaDb")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9040 for f in valid_fonts:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9041 if self.text_font.lower() == f.lower():
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9042 self.text_font = f
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9043 return
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9044 self.text_font = "Helv"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9045 return
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9046
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9047 def _checker(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9048 """Any widget type checks.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9049 """
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9050 if self.field_type not in range(1, 8):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9051 raise ValueError("bad field type")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9052
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9053 # if setting a radio button to ON, first set Off all buttons
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9054 # in the group - this is not done by MuPDF:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9055 if self.field_type == mupdf.PDF_WIDGET_TYPE_RADIOBUTTON and self.field_value not in (False, "Off") and hasattr(self, "parent"):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9056 # so we are about setting this button to ON/True
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9057 # check other buttons in same group and set them to 'Off'
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9058 doc = self.parent.parent
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9059 kids_type, kids_value = doc.xref_get_key(self.xref, "Parent/Kids")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9060 if kids_type == "array":
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9061 xrefs = tuple(map(int, kids_value[1:-1].replace("0 R","").split()))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9062 for xref in xrefs:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9063 if xref != self.xref:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9064 doc.xref_set_key(xref, "AS", "/Off")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9065 # the calling method will now set the intended button to on and
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9066 # will find everything prepared for correct functioning.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9067
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9068 def _parse_da(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9069 """Extract font name, size and color from default appearance string (/DA object).
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9070
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9071 Equivalent to 'pdf_parse_default_appearance' function in MuPDF's 'pdf-annot.c'.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9072 """
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9073 if not self._text_da:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9074 return
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9075 font = "Helv"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9076 fsize = 0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9077 col = (0, 0, 0)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9078 dat = self._text_da.split() # split on any whitespace
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9079 for i, item in enumerate(dat):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9080 if item == "Tf":
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9081 font = dat[i - 2][1:]
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9082 fsize = float(dat[i - 1])
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9083 dat[i] = dat[i-1] = dat[i-2] = ""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9084 continue
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9085 if item == "g": # unicolor text
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9086 col = [(float(dat[i - 1]))]
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9087 dat[i] = dat[i-1] = ""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9088 continue
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9089 if item == "rg": # RGB colored text
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9090 col = [float(f) for f in dat[i - 3:i]]
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9091 dat[i] = dat[i-1] = dat[i-2] = dat[i-3] = ""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9092 continue
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9093 self.text_font = font
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9094 self.text_fontsize = fsize
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9095 self.text_color = col
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9096 self._text_da = ""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9097 return
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9098
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9099 def _validate(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9100 """Validate the class entries.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9101 """
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9102 if (self.rect.is_infinite
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9103 or self.rect.is_empty
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9104 ):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9105 raise ValueError("bad rect")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9106
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9107 if not self.field_name:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9108 raise ValueError("field name missing")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9109
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9110 if self.field_label == "Unnamed":
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9111 self.field_label = None
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9112 CheckColor(self.border_color)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9113 CheckColor(self.fill_color)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9114 if not self.text_color:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9115 self.text_color = (0, 0, 0)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9116 CheckColor(self.text_color)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9117
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9118 if not self.border_width:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9119 self.border_width = 0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9120
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9121 if not self.text_fontsize:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9122 self.text_fontsize = 0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9123
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9124 self.border_style = self.border_style.upper()[0:1]
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9125
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9126 # standardize content of JavaScript entries
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9127 btn_type = self.field_type in (
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9128 mupdf.PDF_WIDGET_TYPE_BUTTON,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9129 mupdf.PDF_WIDGET_TYPE_CHECKBOX,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9130 mupdf.PDF_WIDGET_TYPE_RADIOBUTTON,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9131 )
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9132 if not self.script:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9133 self.script = None
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9134 elif type(self.script) is not str:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9135 raise ValueError("script content must be a string")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9136
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9137 # buttons cannot have the following script actions
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9138 if btn_type or not self.script_calc:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9139 self.script_calc = None
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9140 elif type(self.script_calc) is not str:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9141 raise ValueError("script_calc content must be a string")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9142
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9143 if btn_type or not self.script_change:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9144 self.script_change = None
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9145 elif type(self.script_change) is not str:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9146 raise ValueError("script_change content must be a string")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9147
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9148 if btn_type or not self.script_format:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9149 self.script_format = None
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9150 elif type(self.script_format) is not str:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9151 raise ValueError("script_format content must be a string")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9152
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9153 if btn_type or not self.script_stroke:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9154 self.script_stroke = None
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9155 elif type(self.script_stroke) is not str:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9156 raise ValueError("script_stroke content must be a string")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9157
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9158 if btn_type or not self.script_blur:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9159 self.script_blur = None
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9160 elif type(self.script_blur) is not str:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9161 raise ValueError("script_blur content must be a string")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9162
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9163 if btn_type or not self.script_focus:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9164 self.script_focus = None
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9165 elif type(self.script_focus) is not str:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9166 raise ValueError("script_focus content must be a string")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9167
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9168 self._checker() # any field_type specific checks
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9169
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9170 def _sync_flags(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9171 """Propagate the field flags.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9172
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9173 If this widget has a "/Parent", set its field flags and that of all
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9174 its /Kids widgets to the value of the current widget.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9175 Only possible for widgets existing in the PDF.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9176
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9177 Returns True or False.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9178 """
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9179 if not self.xref:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9180 return False # no xref: widget not in the PDF
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9181 doc = self.parent.parent # the owning document
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9182 assert doc
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9183 pdf = _as_pdf_document(doc)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9184 # load underlying PDF object
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9185 pdf_widget = mupdf.pdf_load_object(pdf, self.xref)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9186 Parent = mupdf.pdf_dict_get(pdf_widget, PDF_NAME("Parent"))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9187 if not Parent.pdf_is_dict():
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9188 return False # no /Parent: nothing to do
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9189
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9190 # put the field flags value into the parent field flags:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9191 Parent.pdf_dict_put_int(PDF_NAME("Ff"), self.field_flags)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9192
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9193 # also put that value into all kids of the Parent
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9194 kids = Parent.pdf_dict_get(PDF_NAME("Kids"))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9195 if not kids.pdf_is_array():
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9196 message("warning: malformed PDF, Parent has no Kids array")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9197 return False # no /Kids: should never happen!
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9198
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9199 for i in range(kids.pdf_array_len()): # walk through all kids
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9200 # access kid widget, and do some precautionary checks
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9201 kid = kids.pdf_array_get(i)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9202 if not kid.pdf_is_dict():
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9203 continue
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9204 xref = kid.pdf_to_num() # get xref of the kid
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9205 if xref == self.xref: # skip self widget
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9206 continue
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9207 subtype = kid.pdf_dict_get(PDF_NAME("Subtype"))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9208 if not subtype.pdf_to_name() == "Widget":
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9209 continue
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9210 # put the field flags value into the kid field flags:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9211 kid.pdf_dict_put_int(PDF_NAME("Ff"), self.field_flags)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9212
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9213 return True # all done
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9214
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9215 def button_states(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9216 """Return the on/off state names for button widgets.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9217
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9218 A button may have 'normal' or 'pressed down' appearances. While the 'Off'
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9219 state is usually called like this, the 'On' state is often given a name
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9220 relating to the functional context.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9221 """
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9222 if self.field_type not in (2, 5):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9223 return None # no button type
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9224 if hasattr(self, "parent"): # field already exists on page
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9225 doc = self.parent.parent
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9226 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9227 return
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9228 xref = self.xref
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9229 states = {"normal": None, "down": None}
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9230 APN = doc.xref_get_key(xref, "AP/N")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9231 if APN[0] == "dict":
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9232 nstates = []
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9233 APN = APN[1][2:-2]
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9234 apnt = APN.split("/")[1:]
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9235 for x in apnt:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9236 nstates.append(x.split()[0])
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9237 states["normal"] = nstates
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9238 if APN[0] == "xref":
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9239 nstates = []
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9240 nxref = int(APN[1].split(" ")[0])
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9241 APN = doc.xref_object(nxref)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9242 apnt = APN.split("/")[1:]
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9243 for x in apnt:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9244 nstates.append(x.split()[0])
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9245 states["normal"] = nstates
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9246 APD = doc.xref_get_key(xref, "AP/D")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9247 if APD[0] == "dict":
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9248 dstates = []
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9249 APD = APD[1][2:-2]
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9250 apdt = APD.split("/")[1:]
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9251 for x in apdt:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9252 dstates.append(x.split()[0])
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9253 states["down"] = dstates
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9254 if APD[0] == "xref":
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9255 dstates = []
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9256 dxref = int(APD[1].split(" ")[0])
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9257 APD = doc.xref_object(dxref)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9258 apdt = APD.split("/")[1:]
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9259 for x in apdt:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9260 dstates.append(x.split()[0])
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9261 states["down"] = dstates
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9262 return states
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9263
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9264 @property
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9265 def next(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9266 return self._annot.next
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9267
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9268 def on_state(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9269 """Return the "On" value for button widgets.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9270
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9271 This is useful for radio buttons mainly. Checkboxes will always return
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9272 "Yes". Radio buttons will return the string that is unequal to "Off"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9273 as returned by method button_states().
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9274 If the radio button is new / being created, it does not yet have an
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9275 "On" value. In this case, a warning is shown and True is returned.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9276 """
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9277 if self.field_type not in (2, 5):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9278 return None # no checkbox or radio button
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9279 bstate = self.button_states()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9280 if bstate is None:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9281 bstate = dict()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9282 for k in bstate.keys():
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9283 for v in bstate[k]:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9284 if v != "Off":
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9285 return v
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9286 message("warning: radio button has no 'On' value.")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9287 return True
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9288
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9289 def reset(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9290 """Reset the field value to its default.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9291 """
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9292 TOOLS._reset_widget(self._annot)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9293
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9294 def update(self, sync_flags=False):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9295 """Reflect Python object in the PDF."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9296 self._validate()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9297
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9298 self._adjust_font() # ensure valid text_font name
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9299
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9300 # now create the /DA string
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9301 self._text_da = ""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9302 if len(self.text_color) == 3:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9303 fmt = "{:g} {:g} {:g} rg /{f:s} {s:g} Tf" + self._text_da
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9304 elif len(self.text_color) == 1:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9305 fmt = "{:g} g /{f:s} {s:g} Tf" + self._text_da
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9306 elif len(self.text_color) == 4:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9307 fmt = "{:g} {:g} {:g} {:g} k /{f:s} {s:g} Tf" + self._text_da
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9308 self._text_da = fmt.format(*self.text_color, f=self.text_font,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9309 s=self.text_fontsize)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9310 # finally update the widget
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9311
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9312 # if widget has a '/AA/C' script, make sure it is in the '/CO'
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9313 # array of the '/AcroForm' dictionary.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9314 if self.script_calc: # there is a "calculation" script:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9315 # make sure we are in the /CO array
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9316 util_ensure_widget_calc(self._annot)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9317
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9318 # finally update the widget
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9319 TOOLS._save_widget(self._annot, self)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9320 self._text_da = ""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9321 if sync_flags:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9322 self._sync_flags() # propagate field flags to parent and kids
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9323
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9324
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9325 from . import _extra
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9326
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9327
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9328 class Outline:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9329
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9330 def __init__(self, ol):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9331 self.this = ol
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9332
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9333 @property
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9334 def dest(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9335 '''outline destination details'''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9336 return linkDest(self, None, None)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9337
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9338 def destination(self, document):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9339 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9340 Like `dest` property but uses `document` to resolve destinations for
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9341 kind=LINK_NAMED.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9342 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9343 return linkDest(self, None, document)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9344
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9345 @property
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9346 def down(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9347 ol = self.this
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9348 down_ol = ol.down()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9349 if not down_ol.m_internal:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9350 return
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9351 return Outline(down_ol)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9352
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9353 @property
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9354 def is_external(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9355 if g_use_extra:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9356 # calling _extra.* here appears to save significant time in
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9357 # test_toc.py:test_full_toc, 1.2s=>0.94s.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9358 #
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9359 return _extra.Outline_is_external( self.this)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9360 ol = self.this
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9361 if not ol.m_internal:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9362 return False
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9363 uri = ol.m_internal.uri if 1 else ol.uri()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9364 if uri is None:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9365 return False
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9366 return mupdf.fz_is_external_link(uri)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9367
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9368 @property
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9369 def is_open(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9370 if 1:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9371 return self.this.m_internal.is_open
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9372 return self.this.is_open()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9373
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9374 @property
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9375 def next(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9376 ol = self.this
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9377 next_ol = ol.next()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9378 if not next_ol.m_internal:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9379 return
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9380 return Outline(next_ol)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9381
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9382 @property
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9383 def page(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9384 if 1:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9385 return self.this.m_internal.page.page
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9386 return self.this.page().page
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9387
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9388 @property
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9389 def title(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9390 return self.this.m_internal.title
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9391
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9392 @property
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9393 def uri(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9394 ol = self.this
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9395 if not ol.m_internal:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9396 return None
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9397 return ol.m_internal.uri
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9398
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9399 @property
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9400 def x(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9401 return self.this.m_internal.x
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9402
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9403 @property
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9404 def y(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9405 return self.this.m_internal.y
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9406
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9407 __slots__ = [ 'this']
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9408
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9409
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9410 def _make_PdfFilterOptions(
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9411 recurse=0,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9412 instance_forms=0,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9413 ascii=0,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9414 no_update=0,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9415 sanitize=0,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9416 sopts=None,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9417 ):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9418 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9419 Returns a mupdf.PdfFilterOptions instance.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9420 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9421
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9422 filter_ = mupdf.PdfFilterOptions()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9423 filter_.recurse = recurse
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9424 filter_.instance_forms = instance_forms
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9425 filter_.ascii = ascii
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9426
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9427 filter_.no_update = no_update
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9428 if sanitize:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9429 # We want to use a PdfFilterFactory whose `.filter` fn pointer is
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9430 # set to MuPDF's `pdf_new_sanitize_filter()`. But not sure how to
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9431 # get access to this raw fn in Python; and on Windows raw MuPDF
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9432 # functions are not even available to C++.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9433 #
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9434 # So we use SWIG Director to implement our own
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9435 # PdfFilterFactory whose `filter()` method calls
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9436 # `mupdf.ll_pdf_new_sanitize_filter()`.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9437 if sopts:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9438 assert isinstance(sopts, mupdf.PdfSanitizeFilterOptions)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9439 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9440 sopts = mupdf.PdfSanitizeFilterOptions()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9441 class Factory(mupdf.PdfFilterFactory2):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9442 def __init__(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9443 super().__init__()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9444 self.use_virtual_filter()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9445 self.sopts = sopts
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9446 def filter(self, ctx, doc, chain, struct_parents, transform, options):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9447 if 0:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9448 log(f'sanitize filter.filter():')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9449 log(f' {self=}')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9450 log(f' {ctx=}')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9451 log(f' {doc=}')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9452 log(f' {chain=}')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9453 log(f' {struct_parents=}')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9454 log(f' {transform=}')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9455 log(f' {options=}')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9456 log(f' {self.sopts.internal()=}')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9457 return mupdf.ll_pdf_new_sanitize_filter(
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9458 doc,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9459 chain,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9460 struct_parents,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9461 transform,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9462 options,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9463 self.sopts.internal(),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9464 )
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9465
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9466 factory = Factory()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9467 filter_.add_factory(factory.internal())
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9468 filter_._factory = factory
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9469 return filter_
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9470
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9471
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9472 class Page:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9473
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9474 def __init__(self, page, document):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9475 assert isinstance(page, (mupdf.FzPage, mupdf.PdfPage)), f'page is: {page}'
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9476 self.this = page
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9477 self.thisown = True
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9478 self.last_point = None
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9479 self.draw_cont = ''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9480 self._annot_refs = dict()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9481 self.parent = document
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9482 if page.m_internal:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9483 if isinstance( page, mupdf.PdfPage):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9484 self.number = page.m_internal.super.number
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9485 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9486 self.number = page.m_internal.number
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9487 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9488 self.number = None
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9489
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9490 def __repr__(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9491 return self.__str__()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9492 CheckParent(self)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9493 x = self.parent.name
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9494 if self.parent.stream is not None:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9495 x = "<memory, doc# %i>" % (self.parent._graft_id,)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9496 if x == "":
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9497 x = "<new PDF, doc# %i>" % self.parent._graft_id
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9498 return "page %s of %s" % (self.number, x)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9499
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9500 def __str__(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9501 #CheckParent(self)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9502 parent = getattr(self, 'parent', None)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9503 if isinstance(self.this.m_internal, mupdf.pdf_page):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9504 number = self.this.m_internal.super.number
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9505 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9506 number = self.this.m_internal.number
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9507 ret = f'page {number}'
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9508 if parent:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9509 x = self.parent.name
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9510 if self.parent.stream is not None:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9511 x = "<memory, doc# %i>" % (self.parent._graft_id,)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9512 if x == "":
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9513 x = "<new PDF, doc# %i>" % self.parent._graft_id
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9514 ret += f' of {x}'
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9515 return ret
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9516
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9517 def _add_caret_annot(self, point):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9518 if g_use_extra:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9519 annot = extra._add_caret_annot( self.this, JM_point_from_py(point))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9520 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9521 page = self._pdf_page()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9522 annot = mupdf.pdf_create_annot(page, mupdf.PDF_ANNOT_CARET)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9523 if point:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9524 p = JM_point_from_py(point)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9525 r = mupdf.pdf_annot_rect(annot)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9526 r = mupdf.FzRect(p.x, p.y, p.x + r.x1 - r.x0, p.y + r.y1 - r.y0)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9527 mupdf.pdf_set_annot_rect(annot, r)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9528 mupdf.pdf_update_annot(annot)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9529 JM_add_annot_id(annot, "A")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9530 return annot
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9531
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9532 def _add_file_annot(self, point, buffer_, filename, ufilename=None, desc=None, icon=None):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9533 page = self._pdf_page()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9534 uf = ufilename if ufilename else filename
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9535 d = desc if desc else filename
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9536 p = JM_point_from_py(point)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9537 filebuf = JM_BufferFromBytes(buffer_)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9538 if not filebuf.m_internal:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9539 raise TypeError( MSG_BAD_BUFFER)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9540 annot = mupdf.pdf_create_annot(page, mupdf.PDF_ANNOT_FILE_ATTACHMENT)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9541 r = mupdf.pdf_annot_rect(annot)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9542 r = mupdf.fz_make_rect(p.x, p.y, p.x + r.x1 - r.x0, p.y + r.y1 - r.y0)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9543 mupdf.pdf_set_annot_rect(annot, r)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9544 flags = mupdf.PDF_ANNOT_IS_PRINT
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9545 mupdf.pdf_set_annot_flags(annot, flags)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9546
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9547 if icon:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9548 mupdf.pdf_set_annot_icon_name(annot, icon)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9549
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9550 val = JM_embed_file(page.doc(), filebuf, filename, uf, d, 1)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9551 mupdf.pdf_dict_put(mupdf.pdf_annot_obj(annot), PDF_NAME('FS'), val)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9552 mupdf.pdf_dict_put_text_string(mupdf.pdf_annot_obj(annot), PDF_NAME('Contents'), filename)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9553 mupdf.pdf_update_annot(annot)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9554 mupdf.pdf_set_annot_rect(annot, r)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9555 mupdf.pdf_set_annot_flags(annot, flags)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9556 JM_add_annot_id(annot, "A")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9557 return Annot(annot)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9558
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9559 def _add_freetext_annot(
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9560 self, rect,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9561 text,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9562 fontsize=11,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9563 fontname=None,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9564 text_color=None,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9565 fill_color=None,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9566 border_color=None,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9567 border_width=0,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9568 dashes=None,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9569 callout=None,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9570 line_end=mupdf.PDF_ANNOT_LE_OPEN_ARROW,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9571 opacity=1,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9572 align=0,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9573 rotate=0,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9574 richtext=False,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9575 style=None,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9576 ):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9577 rc = f"""<?xml version="1.0"?>
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9578 <body xmlns="http://www.w3.org/1999/xtml"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9579 xmlns:xfa="http://www.xfa.org/schema/xfa-data/1.0/"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9580 xfa:contentType="text/html" xfa:APIVersion="Acrobat:8.0.0" xfa:spec="2.4">
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9581 {text}"""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9582 page = self._pdf_page()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9583 if border_color and not richtext:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9584 raise ValueError("cannot set border_color if rich_text is False")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9585 if border_color and not text_color:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9586 text_color = border_color
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9587 nfcol, fcol = JM_color_FromSequence(fill_color)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9588 ntcol, tcol = JM_color_FromSequence(text_color)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9589 r = JM_rect_from_py(rect)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9590 if mupdf.fz_is_infinite_rect(r) or mupdf.fz_is_empty_rect(r):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9591 raise ValueError( MSG_BAD_RECT)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9592 annot = mupdf.pdf_create_annot(page, mupdf.PDF_ANNOT_FREE_TEXT)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9593 annot_obj = mupdf.pdf_annot_obj(annot)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9594
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9595 #insert text as 'contents' or 'RC' depending on 'richtext'
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9596 if not richtext:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9597 mupdf.pdf_set_annot_contents(annot, text)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9598 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9599 mupdf.pdf_dict_put_text_string(annot_obj,PDF_NAME("RC"), rc)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9600 if style:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9601 mupdf.pdf_dict_put_text_string(annot_obj,PDF_NAME("DS"), style)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9602
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9603 mupdf.pdf_set_annot_rect(annot, r)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9604
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9605 while rotate < 0:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9606 rotate += 360
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9607 while rotate >= 360:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9608 rotate -= 360
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9609 if rotate != 0:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9610 mupdf.pdf_dict_put_int(annot_obj, PDF_NAME('Rotate'), rotate)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9611
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9612 mupdf.pdf_set_annot_quadding(annot, align)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9613
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9614 if nfcol > 0:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9615 mupdf.pdf_set_annot_color(annot, fcol[:nfcol])
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9616
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9617 mupdf.pdf_set_annot_border_width(annot, border_width)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9618 mupdf.pdf_set_annot_opacity(annot, opacity)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9619 if dashes:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9620 for d in dashes:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9621 mupdf.pdf_add_annot_border_dash_item(annot, float(d))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9622
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9623 # Insert callout information
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9624 if callout:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9625 mupdf.pdf_dict_put(annot_obj, PDF_NAME("IT"), PDF_NAME("FreeTextCallout"))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9626 mupdf.pdf_set_annot_callout_style(annot, line_end)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9627 point_count = len(callout)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9628 extra.JM_set_annot_callout_line(annot, tuple(callout), point_count)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9629
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9630 # insert the default appearance string
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9631 if not richtext:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9632 JM_make_annot_DA(annot, ntcol, tcol, fontname, fontsize)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9633
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9634 mupdf.pdf_update_annot(annot)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9635 JM_add_annot_id(annot, "A")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9636 val = Annot(annot)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9637 return val
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9638
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9639 def _add_ink_annot(self, list):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9640 page = _as_pdf_page(self.this)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9641 if not PySequence_Check(list):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9642 raise ValueError( MSG_BAD_ARG_INK_ANNOT)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9643 ctm = mupdf.FzMatrix()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9644 mupdf.pdf_page_transform(page, mupdf.FzRect(0), ctm)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9645 inv_ctm = mupdf.fz_invert_matrix(ctm)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9646 annot = mupdf.pdf_create_annot(page, mupdf.PDF_ANNOT_INK)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9647 annot_obj = mupdf.pdf_annot_obj(annot)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9648 n0 = len(list)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9649 inklist = mupdf.pdf_new_array(page.doc(), n0)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9650
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9651 for j in range(n0):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9652 sublist = list[j]
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9653 n1 = len(sublist)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9654 stroke = mupdf.pdf_new_array(page.doc(), 2 * n1)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9655
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9656 for i in range(n1):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9657 p = sublist[i]
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9658 if not PySequence_Check(p) or PySequence_Size(p) != 2:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9659 raise ValueError( MSG_BAD_ARG_INK_ANNOT)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9660 point = mupdf.fz_transform_point(JM_point_from_py(p), inv_ctm)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9661 mupdf.pdf_array_push_real(stroke, point.x)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9662 mupdf.pdf_array_push_real(stroke, point.y)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9663
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9664 mupdf.pdf_array_push(inklist, stroke)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9665
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9666 mupdf.pdf_dict_put(annot_obj, PDF_NAME('InkList'), inklist)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9667 mupdf.pdf_update_annot(annot)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9668 JM_add_annot_id(annot, "A")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9669 return Annot(annot)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9670
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9671 def _add_line_annot(self, p1, p2):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9672 page = self._pdf_page()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9673 annot = mupdf.pdf_create_annot(page, mupdf.PDF_ANNOT_LINE)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9674 a = JM_point_from_py(p1)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9675 b = JM_point_from_py(p2)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9676 mupdf.pdf_set_annot_line(annot, a, b)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9677 mupdf.pdf_update_annot(annot)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9678 JM_add_annot_id(annot, "A")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9679 assert annot.m_internal
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9680 return Annot(annot)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9681
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9682 def _add_multiline(self, points, annot_type):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9683 page = self._pdf_page()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9684 if len(points) < 2:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9685 raise ValueError( MSG_BAD_ARG_POINTS)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9686 annot = mupdf.pdf_create_annot(page, annot_type)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9687 for p in points:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9688 if (PySequence_Size(p) != 2):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9689 raise ValueError( MSG_BAD_ARG_POINTS)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9690 point = JM_point_from_py(p)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9691 mupdf.pdf_add_annot_vertex(annot, point)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9692
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9693 mupdf.pdf_update_annot(annot)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9694 JM_add_annot_id(annot, "A")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9695 return Annot(annot)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9696
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9697 def _add_redact_annot(self, quad, text=None, da_str=None, align=0, fill=None, text_color=None):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9698 page = self._pdf_page()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9699 fcol = [ 1, 1, 1, 0]
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9700 nfcol = 0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9701 annot = mupdf.pdf_create_annot(page, mupdf.PDF_ANNOT_REDACT)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9702 q = JM_quad_from_py(quad)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9703 r = mupdf.fz_rect_from_quad(q)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9704 # TODO calculate de-rotated rect
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9705 mupdf.pdf_set_annot_rect(annot, r)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9706 if fill:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9707 nfcol, fcol = JM_color_FromSequence(fill)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9708 arr = mupdf.pdf_new_array(page.doc(), nfcol)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9709 for i in range(nfcol):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9710 mupdf.pdf_array_push_real(arr, fcol[i])
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9711 mupdf.pdf_dict_put(mupdf.pdf_annot_obj(annot), PDF_NAME('IC'), arr)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9712 if text:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9713 assert da_str
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9714 mupdf.pdf_dict_puts(
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9715 mupdf.pdf_annot_obj(annot),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9716 "OverlayText",
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9717 mupdf.pdf_new_text_string(text),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9718 )
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9719 mupdf.pdf_dict_put_text_string(mupdf.pdf_annot_obj(annot), PDF_NAME('DA'), da_str)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9720 mupdf.pdf_dict_put_int(mupdf.pdf_annot_obj(annot), PDF_NAME('Q'), align)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9721 mupdf.pdf_update_annot(annot)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9722 JM_add_annot_id(annot, "A")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9723 annot = mupdf.ll_pdf_keep_annot(annot.m_internal)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9724 annot = mupdf.PdfAnnot( annot)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9725 return Annot(annot)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9726
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9727 def _add_square_or_circle(self, rect, annot_type):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9728 page = self._pdf_page()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9729 r = JM_rect_from_py(rect)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9730 if mupdf.fz_is_infinite_rect(r) or mupdf.fz_is_empty_rect(r):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9731 raise ValueError( MSG_BAD_RECT)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9732 annot = mupdf.pdf_create_annot(page, annot_type)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9733 mupdf.pdf_set_annot_rect(annot, r)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9734 mupdf.pdf_update_annot(annot)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9735 JM_add_annot_id(annot, "A")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9736 assert annot.m_internal
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9737 return Annot(annot)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9738
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9739 def _add_stamp_annot(self, rect, stamp=0):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9740 rect = Rect(rect)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9741 r = JM_rect_from_py(rect)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9742 if mupdf.fz_is_infinite_rect(r) or mupdf.fz_is_empty_rect(r):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9743 raise ValueError(MSG_BAD_RECT)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9744 page = self._pdf_page()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9745 stamp_id = [
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9746 "Approved",
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9747 "AsIs",
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9748 "Confidential",
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9749 "Departmental",
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9750 "Experimental",
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9751 "Expired",
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9752 "Final",
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9753 "ForComment",
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9754 "ForPublicRelease",
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9755 "NotApproved",
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9756 "NotForPublicRelease",
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9757 "Sold",
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9758 "TopSecret",
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9759 "Draft",
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9760 ]
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9761 n = len(stamp_id)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9762 buf = None
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9763 name = None
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9764 if stamp in range(n):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9765 name = stamp_id[stamp]
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9766 elif isinstance(stamp, Pixmap):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9767 buf = stamp.tobytes()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9768 elif isinstance(stamp, str):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9769 buf = pathlib.Path(stamp).read_bytes()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9770 elif isinstance(stamp, (bytes, bytearray)):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9771 buf = stamp
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9772 elif isinstance(stamp, io.BytesIO):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9773 buf = stamp.getvalue()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9774 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9775 name = stamp_id[0]
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9776
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9777 annot = mupdf.pdf_create_annot(page, mupdf.PDF_ANNOT_STAMP)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9778 if buf: # image stamp
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9779 fzbuff = mupdf.fz_new_buffer_from_copied_data(buf)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9780 img = mupdf.fz_new_image_from_buffer(fzbuff)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9781
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9782 # compute image boundary box on page
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9783 w, h = img.w(), img.h()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9784 scale = min(rect.width / w, rect.height / h)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9785 width = w * scale # bbox width
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9786 height = h * scale # bbox height
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9787
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9788 # center of "rect"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9789 center = (rect.tl + rect.br) / 2
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9790 x0 = center.x - width / 2
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9791 y0 = center.y - height / 2
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9792 x1 = x0 + width
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9793 y1 = y0 + height
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9794 r = mupdf.fz_make_rect(x0, y0, x1, y1)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9795 mupdf.pdf_set_annot_rect(annot, r)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9796 mupdf.pdf_set_annot_stamp_image(annot, img)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9797 mupdf.pdf_dict_put(mupdf.pdf_annot_obj(annot), PDF_NAME("Name"), mupdf.pdf_new_name("ImageStamp"))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9798 mupdf.pdf_set_annot_contents(annot, "Image Stamp")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9799 else: # text stamp
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9800 mupdf.pdf_set_annot_rect(annot, r)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9801 mupdf.pdf_dict_put(mupdf.pdf_annot_obj(annot), PDF_NAME("Name"), PDF_NAME(name))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9802 mupdf.pdf_set_annot_contents(annot, name)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9803 mupdf.pdf_update_annot(annot)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9804 JM_add_annot_id(annot, "A")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9805 return Annot(annot)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9806
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9807 def _add_text_annot(self, point, text, icon=None):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9808 page = self._pdf_page()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9809 p = JM_point_from_py( point)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9810 annot = mupdf.pdf_create_annot(page, mupdf.PDF_ANNOT_TEXT)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9811 r = mupdf.pdf_annot_rect(annot)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9812 r = mupdf.fz_make_rect(p.x, p.y, p.x + r.x1 - r.x0, p.y + r.y1 - r.y0)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9813 mupdf.pdf_set_annot_rect(annot, r)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9814 mupdf.pdf_set_annot_contents(annot, text)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9815 if icon:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9816 mupdf.pdf_set_annot_icon_name(annot, icon)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9817 mupdf.pdf_update_annot(annot)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9818 JM_add_annot_id(annot, "A")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9819 return Annot(annot)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9820
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9821 def _add_text_marker(self, quads, annot_type):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9822
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9823 CheckParent(self)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9824 if not self.parent.is_pdf:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9825 raise ValueError("is no PDF")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9826
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9827 val = Page__add_text_marker(self, quads, annot_type)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9828 if not val:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9829 return None
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9830 val.parent = weakref.proxy(self)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9831 self._annot_refs[id(val)] = val
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9832
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9833 return val
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9834
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9835 def _addAnnot_FromString(self, linklist):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9836 """Add links from list of object sources."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9837 CheckParent(self)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9838 if g_use_extra:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9839 self.__class__._addAnnot_FromString = extra.Page_addAnnot_FromString
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9840 #log('Page._addAnnot_FromString() deferring to extra.Page_addAnnot_FromString().')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9841 return extra.Page_addAnnot_FromString( self.this, linklist)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9842 page = _as_pdf_page(self.this)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9843 lcount = len(linklist) # link count
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9844 if lcount < 1:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9845 return
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9846 i = -1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9847
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9848 # insert links from the provided sources
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9849 if not isinstance(linklist, tuple):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9850 raise ValueError( "bad 'linklist' argument")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9851 if not mupdf.pdf_dict_get( page.obj(), PDF_NAME('Annots')).m_internal:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9852 mupdf.pdf_dict_put_array( page.obj(), PDF_NAME('Annots'), lcount)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9853 annots = mupdf.pdf_dict_get( page.obj(), PDF_NAME('Annots'))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9854 assert annots.m_internal, f'{lcount=} {annots.m_internal=}'
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9855 for i in range(lcount):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9856 txtpy = linklist[i]
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9857 text = JM_StrAsChar(txtpy)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9858 if not text:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9859 message("skipping bad link / annot item %i.", i)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9860 continue
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9861 try:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9862 annot = mupdf.pdf_add_object( page.doc(), JM_pdf_obj_from_str( page.doc(), text))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9863 ind_obj = mupdf.pdf_new_indirect( page.doc(), mupdf.pdf_to_num( annot), 0)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9864 mupdf.pdf_array_push( annots, ind_obj)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9865 except Exception:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9866 if g_exceptions_verbose: exception_info()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9867 message("skipping bad link / annot item %i.\n" % i)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9868
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9869 def _addWidget(self, field_type, field_name):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9870 page = self._pdf_page()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9871 pdf = page.doc()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9872 annot = JM_create_widget(pdf, page, field_type, field_name)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9873 if not annot.m_internal:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9874 raise RuntimeError( "cannot create widget")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9875 JM_add_annot_id(annot, "W")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9876 return Annot(annot)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9877
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9878 def _apply_redactions(self, text, images, graphics):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9879 page = self._pdf_page()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9880 opts = mupdf.PdfRedactOptions()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9881 opts.black_boxes = 0 # no black boxes
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9882 opts.text = text # how to treat text
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9883 opts.image_method = images # how to treat images
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9884 opts.line_art = graphics # how to treat vector graphics
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9885 success = mupdf.pdf_redact_page(page.doc(), page, opts)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9886 return success
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9887
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9888 def _erase(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9889 self._reset_annot_refs()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9890 try:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9891 self.parent._forget_page(self)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9892 except Exception:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9893 exception_info()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9894 pass
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9895 self.parent = None
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9896 self.thisown = False
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9897 self.number = None
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9898 self.this = None
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9899
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9900 def _count_q_balance(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9901 """Count missing graphic state pushs and pops.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9902
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9903 Returns:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9904 A pair of integers (push, pop). Push is the number of missing
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9905 PDF "q" commands, pop is the number of "Q" commands.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9906 A balanced graphics state for the page will be reached if its
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9907 /Contents is prepended with 'push' copies of string "q\n"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9908 and appended with 'pop' copies of "\nQ".
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9909 """
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9910 page = _as_pdf_page(self) # need the underlying PDF page
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9911 res = mupdf.pdf_dict_get( # access /Resources
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9912 page.obj(),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9913 mupdf.PDF_ENUM_NAME_Resources,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9914 )
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9915 cont = mupdf.pdf_dict_get( # access /Contents
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9916 page.obj(),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9917 mupdf.PDF_ENUM_NAME_Contents,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9918 )
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9919 pdf = _as_pdf_document(self.parent) # need underlying PDF document
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9920
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9921 # return value of MuPDF function
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9922 return mupdf.pdf_count_q_balance_outparams_fn(pdf, res, cont)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9923
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9924 def _get_optional_content(self, oc: OptInt) -> OptStr:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9925 if oc is None or oc == 0:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9926 return None
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9927 doc = self.parent
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9928 check = doc.xref_object(oc, compressed=True)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9929 if not ("/Type/OCG" in check or "/Type/OCMD" in check):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9930 #log( 'raising "bad optional content"')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9931 raise ValueError("bad optional content: 'oc'")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9932 #log( 'Looking at self._get_resource_properties()')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9933 props = {}
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9934 for p, x in self._get_resource_properties():
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9935 props[x] = p
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9936 if oc in props.keys():
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9937 return props[oc]
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9938 i = 0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9939 mc = "MC%i" % i
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9940 while mc in props.values():
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9941 i += 1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9942 mc = "MC%i" % i
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9943 self._set_resource_property(mc, oc)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9944 #log( 'returning {mc=}')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9945 return mc
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9946
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9947 def _get_resource_properties(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9948 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9949 page list Resource/Properties
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9950 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9951 page = self._pdf_page()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9952 rc = JM_get_resource_properties(page.obj())
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9953 return rc
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9954
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9955 def _get_textpage(self, clip=None, flags=0, matrix=None):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9956 if g_use_extra:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9957 ll_tpage = extra.page_get_textpage(self.this, clip, flags, matrix)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9958 tpage = mupdf.FzStextPage(ll_tpage)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9959 return tpage
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9960 page = self.this
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9961 options = mupdf.FzStextOptions(flags)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9962 rect = JM_rect_from_py(clip)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9963 # Default to page's rect if `clip` not specified, for #2048.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9964 rect = mupdf.fz_bound_page(page) if clip is None else JM_rect_from_py(clip)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9965 ctm = JM_matrix_from_py(matrix)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9966 tpage = mupdf.FzStextPage(rect)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9967 dev = mupdf.fz_new_stext_device(tpage, options)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9968 if _globals.no_device_caching:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9969 mupdf.fz_enable_device_hints( dev, mupdf.FZ_NO_CACHE)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9970 if isinstance(page, mupdf.FzPage):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9971 pass
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9972 elif isinstance(page, mupdf.PdfPage):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9973 page = page.super()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9974 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9975 assert 0, f'Unrecognised {type(page)=}'
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9976 mupdf.fz_run_page(page, dev, ctm, mupdf.FzCookie())
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9977 mupdf.fz_close_device(dev)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9978 return tpage
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9979
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9980 def _insert_image(self,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9981 filename=None, pixmap=None, stream=None, imask=None, clip=None,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9982 overlay=1, rotate=0, keep_proportion=1, oc=0, width=0, height=0,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9983 xref=0, alpha=-1, _imgname=None, digests=None
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9984 ):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9985 maskbuf = mupdf.FzBuffer()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9986 page = self._pdf_page()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9987 # This will create an empty PdfDocument with a call to
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9988 # pdf_new_document() then assign page.doc()'s return value to it (which
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9989 # drop the original empty pdf_document).
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9990 pdf = page.doc()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9991 w = width
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9992 h = height
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9993 img_xref = xref
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9994 rc_digest = 0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9995
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9996 do_process_pixmap = 1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9997 do_process_stream = 1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9998 do_have_imask = 1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9999 do_have_image = 1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10000 do_have_xref = 1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10001
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10002 if xref > 0:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10003 ref = mupdf.pdf_new_indirect(pdf, xref, 0)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10004 w = mupdf.pdf_to_int( mupdf.pdf_dict_geta( ref, PDF_NAME('Width'), PDF_NAME('W')))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10005 h = mupdf.pdf_to_int( mupdf.pdf_dict_geta( ref, PDF_NAME('Height'), PDF_NAME('H')))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10006 if w + h == 0:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10007 raise ValueError( MSG_IS_NO_IMAGE)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10008 #goto have_xref()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10009 do_process_pixmap = 0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10010 do_process_stream = 0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10011 do_have_imask = 0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10012 do_have_image = 0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10013
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10014 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10015 if stream:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10016 imgbuf = JM_BufferFromBytes(stream)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10017 do_process_pixmap = 0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10018 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10019 if filename:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10020 imgbuf = mupdf.fz_read_file(filename)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10021 #goto have_stream()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10022 do_process_pixmap = 0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10023
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10024 if do_process_pixmap:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10025 #log( 'do_process_pixmap')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10026 # process pixmap ---------------------------------
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10027 arg_pix = pixmap.this
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10028 w = arg_pix.w()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10029 h = arg_pix.h()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10030 digest = mupdf.fz_md5_pixmap2(arg_pix)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10031 md5_py = digest
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10032 temp = digests.get(md5_py, None)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10033 if temp is not None:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10034 img_xref = temp
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10035 ref = mupdf.pdf_new_indirect(page.doc(), img_xref, 0)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10036 #goto have_xref()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10037 do_process_stream = 0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10038 do_have_imask = 0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10039 do_have_image = 0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10040 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10041 if arg_pix.alpha() == 0:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10042 image = mupdf.fz_new_image_from_pixmap(arg_pix, mupdf.FzImage())
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10043 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10044 pm = mupdf.fz_convert_pixmap(
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10045 arg_pix,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10046 mupdf.FzColorspace(),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10047 mupdf.FzColorspace(),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10048 mupdf.FzDefaultColorspaces(None),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10049 mupdf.FzColorParams(),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10050 1,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10051 )
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10052 pm.alpha = 0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10053 pm.colorspace = None
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10054 mask = mupdf.fz_new_image_from_pixmap(pm, mupdf.FzImage())
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10055 image = mupdf.fz_new_image_from_pixmap(arg_pix, mask)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10056 #goto have_image()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10057 do_process_stream = 0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10058 do_have_imask = 0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10059
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10060 if do_process_stream:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10061 #log( 'do_process_stream')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10062 # process stream ---------------------------------
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10063 state = mupdf.FzMd5()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10064 if mupdf_cppyy:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10065 mupdf.fz_md5_update_buffer( state, imgbuf)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10066 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10067 mupdf.fz_md5_update(state, imgbuf.m_internal.data, imgbuf.m_internal.len)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10068 if imask:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10069 maskbuf = JM_BufferFromBytes(imask)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10070 if mupdf_cppyy:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10071 mupdf.fz_md5_update_buffer( state, maskbuf)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10072 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10073 mupdf.fz_md5_update(state, maskbuf.m_internal.data, maskbuf.m_internal.len)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10074 digest = mupdf.fz_md5_final2(state)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10075 md5_py = bytes(digest)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10076 temp = digests.get(md5_py, None)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10077 if temp is not None:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10078 img_xref = temp
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10079 ref = mupdf.pdf_new_indirect(page.doc(), img_xref, 0)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10080 w = mupdf.pdf_to_int( mupdf.pdf_dict_geta( ref, PDF_NAME('Width'), PDF_NAME('W')))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10081 h = mupdf.pdf_to_int( mupdf.pdf_dict_geta( ref, PDF_NAME('Height'), PDF_NAME('H')))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10082 #goto have_xref()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10083 do_have_imask = 0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10084 do_have_image = 0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10085 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10086 image = mupdf.fz_new_image_from_buffer(imgbuf)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10087 w = image.w()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10088 h = image.h()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10089 if not imask:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10090 #goto have_image()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10091 do_have_imask = 0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10092
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10093 if do_have_imask:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10094 # `fz_compressed_buffer` is reference counted and
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10095 # `mupdf.fz_new_image_from_compressed_buffer2()`
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10096 # is povided as a Swig-friendly wrapper for
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10097 # `fz_new_image_from_compressed_buffer()`, so we can do things
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10098 # straightfowardly.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10099 #
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10100 cbuf1 = mupdf.fz_compressed_image_buffer( image)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10101 if not cbuf1.m_internal:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10102 raise ValueError( "uncompressed image cannot have mask")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10103 bpc = image.bpc()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10104 colorspace = image.colorspace()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10105 xres, yres = mupdf.fz_image_resolution(image)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10106 mask = mupdf.fz_new_image_from_buffer(maskbuf)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10107 image = mupdf.fz_new_image_from_compressed_buffer2(
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10108 w,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10109 h,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10110 bpc,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10111 colorspace,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10112 xres,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10113 yres,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10114 1, # interpolate
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10115 0, # imagemask,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10116 list(), # decode
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10117 list(), # colorkey
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10118 cbuf1,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10119 mask,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10120 )
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10121
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10122 if do_have_image:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10123 #log( 'do_have_image')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10124 ref = mupdf.pdf_add_image(pdf, image)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10125 if oc:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10126 JM_add_oc_object(pdf, ref, oc)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10127 img_xref = mupdf.pdf_to_num(ref)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10128 digests[md5_py] = img_xref
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10129 rc_digest = 1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10130
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10131 if do_have_xref:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10132 #log( 'do_have_xref')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10133 resources = mupdf.pdf_dict_get_inheritable(page.obj(), PDF_NAME('Resources'))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10134 if not resources.m_internal:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10135 resources = mupdf.pdf_dict_put_dict(page.obj(), PDF_NAME('Resources'), 2)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10136 xobject = mupdf.pdf_dict_get(resources, PDF_NAME('XObject'))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10137 if not xobject.m_internal:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10138 xobject = mupdf.pdf_dict_put_dict(resources, PDF_NAME('XObject'), 2)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10139 mat = calc_image_matrix(w, h, clip, rotate, keep_proportion)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10140 mupdf.pdf_dict_puts(xobject, _imgname, ref)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10141 nres = mupdf.fz_new_buffer(50)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10142 s = f"\nq\n{_format_g((mat.a, mat.b, mat.c, mat.d, mat.e, mat.f))} cm\n/{_imgname} Do\nQ\n"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10143 #s = s.replace('\n', '\r\n')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10144 mupdf.fz_append_string(nres, s)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10145 JM_insert_contents(pdf, page.obj(), nres, overlay)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10146
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10147 if rc_digest:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10148 return img_xref, digests
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10149 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10150 return img_xref, None
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10151
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10152 def _insertFont(self, fontname, bfname, fontfile, fontbuffer, set_simple, idx, wmode, serif, encoding, ordering):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10153 page = self._pdf_page()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10154 pdf = page.doc()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10155
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10156 value = JM_insert_font(pdf, bfname, fontfile,fontbuffer, set_simple, idx, wmode, serif, encoding, ordering)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10157 # get the objects /Resources, /Resources/Font
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10158 resources = mupdf.pdf_dict_get_inheritable(page.obj(), PDF_NAME('Resources'))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10159 if not resources.pdf_is_dict():
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10160 resources = mupdf.pdf_dict_put_dict(page.obj(), PDF_NAME("Resources"), 5)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10161 fonts = mupdf.pdf_dict_get(resources, PDF_NAME('Font'))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10162 if not fonts.m_internal: # page has no fonts yet
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10163 fonts = mupdf.pdf_new_dict(pdf, 5)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10164 mupdf.pdf_dict_putl(page.obj(), fonts, PDF_NAME('Resources'), PDF_NAME('Font'))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10165 # store font in resources and fonts objects will contain named reference to font
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10166 _, xref = JM_INT_ITEM(value, 0)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10167 if not xref:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10168 raise RuntimeError( "cannot insert font")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10169 font_obj = mupdf.pdf_new_indirect(pdf, xref, 0)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10170 mupdf.pdf_dict_puts(fonts, fontname, font_obj)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10171 return value
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10172
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10173 def _load_annot(self, name, xref):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10174 page = self._pdf_page()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10175 if xref == 0:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10176 annot = JM_get_annot_by_name(page, name)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10177 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10178 annot = JM_get_annot_by_xref(page, xref)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10179 if annot.m_internal:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10180 return Annot(annot)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10181
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10182 def _makePixmap(self, doc, ctm, cs, alpha=0, annots=1, clip=None):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10183 pix = JM_pixmap_from_page(doc, self.this, ctm, cs, alpha, annots, clip)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10184 return Pixmap(pix)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10185
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10186 def _other_box(self, boxtype):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10187 rect = mupdf.FzRect( mupdf.FzRect.Fixed_INFINITE)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10188 page = _as_pdf_page(self.this, required=False)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10189 if page.m_internal:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10190 obj = mupdf.pdf_dict_gets( page.obj(), boxtype)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10191 if mupdf.pdf_is_array(obj):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10192 rect = mupdf.pdf_to_rect(obj)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10193 if mupdf.fz_is_infinite_rect( rect):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10194 return
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10195 return JM_py_from_rect(rect)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10196
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10197 def _pdf_page(self, required=True):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10198 return _as_pdf_page(self.this, required=required)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10199
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10200 def _reset_annot_refs(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10201 """Invalidate / delete all annots of this page."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10202 self._annot_refs.clear()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10203
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10204 def _set_opacity(self, gstate=None, CA=1, ca=1, blendmode=None):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10205
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10206 if CA >= 1 and ca >= 1 and blendmode is None:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10207 return
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10208 tCA = int(round(max(CA , 0) * 100))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10209 if tCA >= 100:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10210 tCA = 99
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10211 tca = int(round(max(ca, 0) * 100))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10212 if tca >= 100:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10213 tca = 99
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10214 gstate = "fitzca%02i%02i" % (tCA, tca)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10215
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10216 if not gstate:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10217 return
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10218 page = _as_pdf_page(self.this)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10219 resources = mupdf.pdf_dict_get(page.obj(), PDF_NAME('Resources'))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10220 if not resources.m_internal:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10221 resources = mupdf.pdf_dict_put_dict(page.obj(), PDF_NAME('Resources'), 2)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10222 extg = mupdf.pdf_dict_get(resources, PDF_NAME('ExtGState'))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10223 if not extg.m_internal:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10224 extg = mupdf.pdf_dict_put_dict(resources, PDF_NAME('ExtGState'), 2)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10225 n = mupdf.pdf_dict_len(extg)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10226 for i in range(n):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10227 o1 = mupdf.pdf_dict_get_key(extg, i)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10228 name = mupdf.pdf_to_name(o1)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10229 if name == gstate:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10230 return gstate
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10231 opa = mupdf.pdf_new_dict(page.doc(), 3)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10232 mupdf.pdf_dict_put_real(opa, PDF_NAME('CA'), CA)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10233 mupdf.pdf_dict_put_real(opa, PDF_NAME('ca'), ca)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10234 mupdf.pdf_dict_puts(extg, gstate, opa)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10235 return gstate
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10236
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10237 def _set_pagebox(self, boxtype, rect):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10238 doc = self.parent
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10239 if doc is None:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10240 raise ValueError("orphaned object: parent is None")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10241
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10242 if not doc.is_pdf:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10243 raise ValueError("is no PDF")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10244
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10245 valid_boxes = ("CropBox", "BleedBox", "TrimBox", "ArtBox")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10246
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10247 if boxtype not in valid_boxes:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10248 raise ValueError("bad boxtype")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10249
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10250 rect = Rect(rect)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10251 mb = self.mediabox
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10252 rect = Rect(rect[0], mb.y1 - rect[3], rect[2], mb.y1 - rect[1])
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10253 if not (mb.x0 <= rect.x0 < rect.x1 <= mb.x1 and mb.y0 <= rect.y0 < rect.y1 <= mb.y1):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10254 raise ValueError(f"{boxtype} not in MediaBox")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10255
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10256 doc.xref_set_key(self.xref, boxtype, f"[{_format_g(tuple(rect))}]")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10257
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10258 def _set_resource_property(self, name, xref):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10259 page = self._pdf_page()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10260 JM_set_resource_property(page.obj(), name, xref)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10261
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10262 def _show_pdf_page(self, fz_srcpage, overlay=1, matrix=None, xref=0, oc=0, clip=None, graftmap=None, _imgname=None):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10263 cropbox = JM_rect_from_py(clip)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10264 mat = JM_matrix_from_py(matrix)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10265 rc_xref = xref
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10266 tpage = _as_pdf_page(self.this)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10267 tpageref = tpage.obj()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10268 pdfout = tpage.doc() # target PDF
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10269 ENSURE_OPERATION(pdfout)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10270 #-------------------------------------------------------------
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10271 # convert the source page to a Form XObject
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10272 #-------------------------------------------------------------
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10273 xobj1 = JM_xobject_from_page(pdfout, fz_srcpage, xref, graftmap.this)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10274 if not rc_xref:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10275 rc_xref = mupdf.pdf_to_num(xobj1)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10276
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10277 #-------------------------------------------------------------
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10278 # create referencing XObject (controls display on target page)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10279 #-------------------------------------------------------------
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10280 # fill reference to xobj1 into the /Resources
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10281 #-------------------------------------------------------------
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10282 subres1 = mupdf.pdf_new_dict(pdfout, 5)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10283 mupdf.pdf_dict_puts(subres1, "fullpage", xobj1)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10284 subres = mupdf.pdf_new_dict(pdfout, 5)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10285 mupdf.pdf_dict_put(subres, PDF_NAME('XObject'), subres1)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10286
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10287 res = mupdf.fz_new_buffer(20)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10288 mupdf.fz_append_string(res, "/fullpage Do")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10289
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10290 xobj2 = mupdf.pdf_new_xobject(pdfout, cropbox, mat, subres, res)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10291 if oc > 0:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10292 JM_add_oc_object(pdfout, mupdf.pdf_resolve_indirect(xobj2), oc)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10293
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10294 #-------------------------------------------------------------
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10295 # update target page with xobj2:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10296 #-------------------------------------------------------------
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10297 # 1. insert Xobject in Resources
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10298 #-------------------------------------------------------------
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10299 resources = mupdf.pdf_dict_get_inheritable(tpageref, PDF_NAME('Resources'))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10300 if not resources.m_internal:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10301 resources = mupdf.pdf_dict_put_dict(tpageref,PDF_NAME('Resources'), 5)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10302 subres = mupdf.pdf_dict_get(resources, PDF_NAME('XObject'))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10303 if not subres.m_internal:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10304 subres = mupdf.pdf_dict_put_dict(resources, PDF_NAME('XObject'), 5)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10305
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10306 mupdf.pdf_dict_puts(subres, _imgname, xobj2)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10307
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10308 #-------------------------------------------------------------
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10309 # 2. make and insert new Contents object
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10310 #-------------------------------------------------------------
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10311 nres = mupdf.fz_new_buffer(50) # buffer for Do-command
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10312 mupdf.fz_append_string(nres, " q /") # Do-command
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10313 mupdf.fz_append_string(nres, _imgname)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10314 mupdf.fz_append_string(nres, " Do Q ")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10315
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10316 JM_insert_contents(pdfout, tpageref, nres, overlay)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10317 return rc_xref
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10318
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10319 def add_caret_annot(self, point: point_like) -> Annot:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10320 """Add a 'Caret' annotation."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10321 old_rotation = annot_preprocess(self)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10322 try:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10323 annot = self._add_caret_annot(point)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10324 finally:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10325 if old_rotation != 0:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10326 self.set_rotation(old_rotation)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10327 annot = Annot( annot)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10328 annot_postprocess(self, annot)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10329 assert hasattr( annot, 'parent')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10330 return annot
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10331
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10332 def add_circle_annot(self, rect: rect_like) -> Annot:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10333 """Add a 'Circle' (ellipse, oval) annotation."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10334 old_rotation = annot_preprocess(self)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10335 try:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10336 annot = self._add_square_or_circle(rect, mupdf.PDF_ANNOT_CIRCLE)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10337 finally:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10338 if old_rotation != 0:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10339 self.set_rotation(old_rotation)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10340 annot_postprocess(self, annot)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10341 return annot
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10342
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10343 def add_file_annot(
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10344 self,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10345 point: point_like,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10346 buffer_: ByteString,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10347 filename: str,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10348 ufilename: OptStr =None,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10349 desc: OptStr =None,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10350 icon: OptStr =None
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10351 ) -> Annot:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10352 """Add a 'FileAttachment' annotation."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10353 old_rotation = annot_preprocess(self)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10354 try:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10355 annot = self._add_file_annot(point,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10356 buffer_,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10357 filename,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10358 ufilename=ufilename,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10359 desc=desc,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10360 icon=icon,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10361 )
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10362 finally:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10363 if old_rotation != 0:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10364 self.set_rotation(old_rotation)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10365 annot_postprocess(self, annot)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10366 return annot
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10367
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10368 def add_freetext_annot(
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10369 self,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10370 rect: rect_like,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10371 text: str,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10372 *,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10373 fontsize: float =11,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10374 fontname: OptStr =None,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10375 text_color: OptSeq =None,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10376 fill_color: OptSeq =None,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10377 border_color: OptSeq =None,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10378 border_width: float =0,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10379 dashes: OptSeq =None,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10380 callout: OptSeq =None,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10381 line_end: int=mupdf.PDF_ANNOT_LE_OPEN_ARROW,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10382 opacity: float =1,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10383 align: int =0,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10384 rotate: int =0,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10385 richtext=False,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10386 style=None,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10387 ) -> Annot:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10388 """Add a 'FreeText' annotation."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10389
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10390 old_rotation = annot_preprocess(self)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10391 try:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10392 annot = self._add_freetext_annot(
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10393 rect,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10394 text,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10395 fontsize=fontsize,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10396 fontname=fontname,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10397 text_color=text_color,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10398 fill_color=fill_color,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10399 border_color=border_color,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10400 border_width=border_width,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10401 dashes=dashes,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10402 callout=callout,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10403 line_end=line_end,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10404 opacity=opacity,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10405 align=align,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10406 rotate=rotate,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10407 richtext=richtext,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10408 style=style,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10409 )
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10410 finally:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10411 if old_rotation != 0:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10412 self.set_rotation(old_rotation)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10413 annot_postprocess(self, annot)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10414 return annot
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10415
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10416 def add_highlight_annot(self, quads=None, start=None,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10417 stop=None, clip=None) -> Annot:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10418 """Add a 'Highlight' annotation."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10419 if quads is None:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10420 q = get_highlight_selection(self, start=start, stop=stop, clip=clip)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10421 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10422 q = CheckMarkerArg(quads)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10423 ret = self._add_text_marker(q, mupdf.PDF_ANNOT_HIGHLIGHT)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10424 return ret
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10425
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10426 def add_ink_annot(self, handwriting: list) -> Annot:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10427 """Add a 'Ink' ('handwriting') annotation.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10428
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10429 The argument must be a list of lists of point_likes.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10430 """
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10431 old_rotation = annot_preprocess(self)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10432 try:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10433 annot = self._add_ink_annot(handwriting)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10434 finally:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10435 if old_rotation != 0:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10436 self.set_rotation(old_rotation)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10437 annot_postprocess(self, annot)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10438 return annot
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10439
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10440 def add_line_annot(self, p1: point_like, p2: point_like) -> Annot:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10441 """Add a 'Line' annotation."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10442 old_rotation = annot_preprocess(self)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10443 try:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10444 annot = self._add_line_annot(p1, p2)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10445 finally:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10446 if old_rotation != 0:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10447 self.set_rotation(old_rotation)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10448 annot_postprocess(self, annot)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10449 return annot
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10450
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10451 def add_polygon_annot(self, points: list) -> Annot:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10452 """Add a 'Polygon' annotation."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10453 old_rotation = annot_preprocess(self)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10454 try:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10455 annot = self._add_multiline(points, mupdf.PDF_ANNOT_POLYGON)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10456 finally:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10457 if old_rotation != 0:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10458 self.set_rotation(old_rotation)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10459 annot_postprocess(self, annot)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10460 return annot
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10461
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10462 def add_polyline_annot(self, points: list) -> Annot:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10463 """Add a 'PolyLine' annotation."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10464 old_rotation = annot_preprocess(self)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10465 try:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10466 annot = self._add_multiline(points, mupdf.PDF_ANNOT_POLY_LINE)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10467 finally:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10468 if old_rotation != 0:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10469 self.set_rotation(old_rotation)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10470 annot_postprocess(self, annot)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10471 return annot
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10472
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10473 def add_rect_annot(self, rect: rect_like) -> Annot:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10474 """Add a 'Square' (rectangle) annotation."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10475 old_rotation = annot_preprocess(self)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10476 try:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10477 annot = self._add_square_or_circle(rect, mupdf.PDF_ANNOT_SQUARE)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10478 finally:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10479 if old_rotation != 0:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10480 self.set_rotation(old_rotation)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10481 annot_postprocess(self, annot)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10482 return annot
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10483
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10484 def add_redact_annot(
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10485 self,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10486 quad,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10487 text: OptStr =None,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10488 fontname: OptStr =None,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10489 fontsize: float =11,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10490 align: int =0,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10491 fill: OptSeq =None,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10492 text_color: OptSeq =None,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10493 cross_out: bool =True,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10494 ) -> Annot:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10495 """Add a 'Redact' annotation."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10496 da_str = None
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10497 if text and not set(string.whitespace).issuperset(text):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10498 CheckColor(fill)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10499 CheckColor(text_color)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10500 if not fontname:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10501 fontname = "Helv"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10502 if not fontsize:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10503 fontsize = 11
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10504 if not text_color:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10505 text_color = (0, 0, 0)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10506 if hasattr(text_color, "__float__"):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10507 text_color = (text_color, text_color, text_color)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10508 if len(text_color) > 3:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10509 text_color = text_color[:3]
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10510 fmt = "{:g} {:g} {:g} rg /{f:s} {s:g} Tf"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10511 da_str = fmt.format(*text_color, f=fontname, s=fontsize)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10512 if fill is None:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10513 fill = (1, 1, 1)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10514 if fill:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10515 if hasattr(fill, "__float__"):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10516 fill = (fill, fill, fill)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10517 if len(fill) > 3:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10518 fill = fill[:3]
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10519 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10520 text = None
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10521
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10522 old_rotation = annot_preprocess(self)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10523 try:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10524 annot = self._add_redact_annot(quad, text=text, da_str=da_str,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10525 align=align, fill=fill)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10526 finally:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10527 if old_rotation != 0:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10528 self.set_rotation(old_rotation)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10529 annot_postprocess(self, annot)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10530 #-------------------------------------------------------------
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10531 # change appearance to show a crossed-out rectangle
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10532 #-------------------------------------------------------------
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10533 if cross_out:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10534 ap_tab = annot._getAP().splitlines()[:-1] # get the 4 commands only
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10535 _, LL, LR, UR, UL = ap_tab
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10536 ap_tab.append(LR)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10537 ap_tab.append(LL)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10538 ap_tab.append(UR)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10539 ap_tab.append(LL)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10540 ap_tab.append(UL)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10541 ap_tab.append(b"S")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10542 ap = b"\n".join(ap_tab)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10543 annot._setAP(ap, 0)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10544 return annot
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10545
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10546 def add_squiggly_annot(
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10547 self,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10548 quads=None,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10549 start=None,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10550 stop=None,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10551 clip=None,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10552 ) -> Annot:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10553 """Add a 'Squiggly' annotation."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10554 if quads is None:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10555 q = get_highlight_selection(self, start=start, stop=stop, clip=clip)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10556 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10557 q = CheckMarkerArg(quads)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10558 return self._add_text_marker(q, mupdf.PDF_ANNOT_SQUIGGLY)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10559
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10560 def add_stamp_annot(self, rect: rect_like, stamp=0) -> Annot:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10561 """Add a ('rubber') 'Stamp' annotation."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10562 old_rotation = annot_preprocess(self)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10563 try:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10564 annot = self._add_stamp_annot(rect, stamp)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10565 finally:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10566 if old_rotation != 0:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10567 self.set_rotation(old_rotation)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10568 annot_postprocess(self, annot)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10569 return annot
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10570
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10571 def add_strikeout_annot(self, quads=None, start=None, stop=None, clip=None) -> Annot:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10572 """Add a 'StrikeOut' annotation."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10573 if quads is None:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10574 q = get_highlight_selection(self, start=start, stop=stop, clip=clip)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10575 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10576 q = CheckMarkerArg(quads)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10577 return self._add_text_marker(q, mupdf.PDF_ANNOT_STRIKE_OUT)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10578
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10579 def add_text_annot(self, point: point_like, text: str, icon: str ="Note") -> Annot:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10580 """Add a 'Text' (sticky note) annotation."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10581 old_rotation = annot_preprocess(self)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10582 try:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10583 annot = self._add_text_annot(point, text, icon=icon)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10584 finally:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10585 if old_rotation != 0:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10586 self.set_rotation(old_rotation)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10587 annot_postprocess(self, annot)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10588 return annot
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10589
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10590 def add_underline_annot(self, quads=None, start=None, stop=None, clip=None) -> Annot:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10591 """Add a 'Underline' annotation."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10592 if quads is None:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10593 q = get_highlight_selection(self, start=start, stop=stop, clip=clip)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10594 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10595 q = CheckMarkerArg(quads)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10596 return self._add_text_marker(q, mupdf.PDF_ANNOT_UNDERLINE)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10597
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10598 def add_widget(self, widget: Widget) -> Annot:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10599 """Add a 'Widget' (form field)."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10600 CheckParent(self)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10601 doc = self.parent
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10602 if not doc.is_pdf:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10603 raise ValueError("is no PDF")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10604 widget._validate()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10605 annot = self._addWidget(widget.field_type, widget.field_name)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10606 if not annot:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10607 return None
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10608 annot.thisown = True
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10609 annot.parent = weakref.proxy(self) # owning page object
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10610 self._annot_refs[id(annot)] = annot
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10611 widget.parent = annot.parent
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10612 widget._annot = annot
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10613 widget.update()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10614 return annot
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10615
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10616 def annot_names(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10617 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10618 page get list of annot names
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10619 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10620 """List of names of annotations, fields and links."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10621 CheckParent(self)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10622 page = self._pdf_page(required=False)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10623 if not page.m_internal:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10624 return []
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10625 return JM_get_annot_id_list(page)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10626
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10627 def annot_xrefs(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10628 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10629 List of xref numbers of annotations, fields and links.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10630 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10631 return JM_get_annot_xref_list2(self)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10632
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10633 def annots(self, types=None):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10634 """ Generator over the annotations of a page.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10635
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10636 Args:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10637 types: (list) annotation types to subselect from. If none,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10638 all annotations are returned. E.g. types=[PDF_ANNOT_LINE]
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10639 will only yield line annotations.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10640 """
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10641 skip_types = (mupdf.PDF_ANNOT_LINK, mupdf.PDF_ANNOT_POPUP, mupdf.PDF_ANNOT_WIDGET)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10642 if not hasattr(types, "__getitem__"):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10643 annot_xrefs = [a[0] for a in self.annot_xrefs() if a[1] not in skip_types]
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10644 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10645 annot_xrefs = [a[0] for a in self.annot_xrefs() if a[1] in types and a[1] not in skip_types]
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10646 for xref in annot_xrefs:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10647 annot = self.load_annot(xref)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10648 annot._yielded=True
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10649 yield annot
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10650
39
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
10651 def apply_redactions(
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
10652 page: 'Page',
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
10653 images: int = 2,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
10654 graphics: int = 1,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
10655 text: int = 0,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
10656 ) -> bool:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
10657 """Apply the redaction annotations of the page.
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
10658
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
10659 Args:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
10660 page: the PDF page.
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
10661 images:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
10662 0 - ignore images
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
10663 1 - remove all overlapping images
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
10664 2 - blank out overlapping image parts
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
10665 3 - remove image unless invisible
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
10666 graphics:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
10667 0 - ignore graphics
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
10668 1 - remove graphics if contained in rectangle
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
10669 2 - remove all overlapping graphics
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
10670 text:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
10671 0 - remove text
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
10672 1 - ignore text
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
10673 """
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
10674
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
10675 def center_rect(annot_rect, new_text, font, fsize):
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
10676 """Calculate minimal sub-rectangle for the overlay text.
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
10677
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
10678 Notes:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
10679 Because 'insert_textbox' supports no vertical text centering,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
10680 we calculate an approximate number of lines here and return a
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
10681 sub-rect with smaller height, which should still be sufficient.
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
10682 Args:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
10683 annot_rect: the annotation rectangle
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
10684 new_text: the text to insert.
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
10685 font: the fontname. Must be one of the CJK or Base-14 set, else
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
10686 the rectangle is returned unchanged.
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
10687 fsize: the fontsize
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
10688 Returns:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
10689 A rectangle to use instead of the annot rectangle.
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
10690 """
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
10691 if not new_text or annot_rect.width <= EPSILON:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
10692 return annot_rect
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
10693 try:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
10694 text_width = get_text_length(new_text, font, fsize)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
10695 except (ValueError, mupdf.FzErrorBase): # unsupported font
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
10696 if g_exceptions_verbose:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
10697 exception_info()
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
10698 return annot_rect
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
10699 line_height = fsize * 1.2
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
10700 limit = annot_rect.width
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
10701 h = math.ceil(text_width / limit) * line_height # estimate rect height
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
10702 if h >= annot_rect.height:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
10703 return annot_rect
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
10704 r = annot_rect
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
10705 y = (annot_rect.tl.y + annot_rect.bl.y - h) * 0.5
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
10706 r.y0 = y
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
10707 return r
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
10708
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
10709 CheckParent(page)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
10710 doc = page.parent
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
10711 if doc.is_encrypted or doc.is_closed:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
10712 raise ValueError("document closed or encrypted")
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
10713 if not doc.is_pdf:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
10714 raise ValueError("is no PDF")
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
10715
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
10716 redact_annots = [] # storage of annot values
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
10717 for annot in page.annots(
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
10718 types=(mupdf.PDF_ANNOT_REDACT,) # pylint: disable=no-member
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
10719 ):
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
10720 # loop redactions
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
10721 redact_annots.append(annot._get_redact_values()) # save annot values
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
10722
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
10723 if redact_annots == []: # any redactions on this page?
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
10724 return False # no redactions
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
10725
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
10726 rc = page._apply_redactions(text, images, graphics) # call MuPDF
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
10727 if not rc: # should not happen really
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
10728 raise ValueError("Error applying redactions.")
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
10729
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
10730 # now write replacement text in old redact rectangles
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
10731 shape = page.new_shape()
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
10732 for redact in redact_annots:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
10733 annot_rect = redact["rect"]
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
10734 fill = redact["fill"]
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
10735 if fill:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
10736 shape.draw_rect(annot_rect) # colorize the rect background
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
10737 shape.finish(fill=fill, color=fill)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
10738 if "text" in redact.keys(): # if we also have text
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
10739 new_text = redact["text"]
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
10740 align = redact.get("align", 0)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
10741 fname = redact["fontname"]
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
10742 fsize = redact["fontsize"]
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
10743 color = redact["text_color"]
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
10744 # try finding vertical centered sub-rect
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
10745 trect = center_rect(annot_rect, new_text, fname, fsize)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
10746
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
10747 rc = -1
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
10748 while rc < 0 and fsize >= 4: # while not enough room
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
10749 # (re-) try insertion
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
10750 rc = shape.insert_textbox(
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
10751 trect,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
10752 new_text,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
10753 fontname=fname,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
10754 fontsize=fsize,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
10755 color=color,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
10756 align=align,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
10757 )
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
10758 fsize -= 0.5 # reduce font if unsuccessful
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
10759 shape.commit() # append new contents object
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
10760 return True
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
10761
1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10762 def recolor(self, components=1):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10763 """Convert colorspaces of objects on the page.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10764
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10765 Valid values are 1, 3 and 4.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10766 """
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10767 if components not in (1, 3, 4):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10768 raise ValueError("components must be one of 1, 3, 4")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10769 pdfdoc = _as_pdf_document(self.parent)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10770 ropt = mupdf.pdf_recolor_options()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10771 ropt.num_comp = components
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10772 ropts = mupdf.PdfRecolorOptions(ropt)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10773 mupdf.pdf_recolor_page(pdfdoc, self.number, ropts)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10774
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10775 def clip_to_rect(self, rect):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10776 """Clip away page content outside the rectangle."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10777 clip = Rect(rect)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10778 if clip.is_infinite or (clip & self.rect).is_empty:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10779 raise ValueError("rect must not be infinite or empty")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10780 clip *= self.transformation_matrix
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10781 pdfpage = _as_pdf_page(self)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10782 pclip = JM_rect_from_py(clip)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10783 mupdf.pdf_clip_page(pdfpage, pclip)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10784
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10785 @property
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10786 def artbox(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10787 """The ArtBox"""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10788 rect = self._other_box("ArtBox")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10789 if rect is None:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10790 return self.cropbox
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10791 mb = self.mediabox
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10792 return Rect(rect[0], mb.y1 - rect[3], rect[2], mb.y1 - rect[1])
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10793
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10794 @property
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10795 def bleedbox(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10796 """The BleedBox"""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10797 rect = self._other_box("BleedBox")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10798 if rect is None:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10799 return self.cropbox
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10800 mb = self.mediabox
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10801 return Rect(rect[0], mb.y1 - rect[3], rect[2], mb.y1 - rect[1])
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10802
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10803 def bound(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10804 """Get page rectangle."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10805 CheckParent(self)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10806 page = _as_fz_page(self.this)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10807 val = mupdf.fz_bound_page(page)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10808 val = Rect(val)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10809
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10810 if val.is_infinite and self.parent.is_pdf:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10811 cb = self.cropbox
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10812 w, h = cb.width, cb.height
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10813 if self.rotation not in (0, 180):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10814 w, h = h, w
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10815 val = Rect(0, 0, w, h)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10816 msg = TOOLS.mupdf_warnings(reset=False).splitlines()[-1]
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10817 message(msg)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10818
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10819 return val
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10820
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10821 def clean_contents(self, sanitize=1):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10822 if not sanitize and not self.is_wrapped:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10823 self.wrap_contents()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10824 page = _as_pdf_page( self.this, required=False)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10825 if not page.m_internal:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10826 return
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10827 filter_ = _make_PdfFilterOptions(recurse=1, sanitize=sanitize)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10828 mupdf.pdf_filter_page_contents( page.doc(), page, filter_)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10829
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10830 @property
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10831 def cropbox(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10832 """The CropBox."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10833 CheckParent(self)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10834 page = self._pdf_page(required=False)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10835 if not page.m_internal:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10836 val = mupdf.fz_bound_page(self.this)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10837 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10838 val = JM_cropbox(page.obj())
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10839 val = Rect(val)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10840
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10841 return val
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10842
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10843 @property
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10844 def cropbox_position(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10845 return self.cropbox.tl
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10846
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10847 def delete_annot(self, annot):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10848 """Delete annot and return next one."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10849 CheckParent(self)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10850 CheckParent(annot)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10851
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10852 page = self._pdf_page()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10853 while 1:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10854 # first loop through all /IRT annots and remove them
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10855 irt_annot = JM_find_annot_irt(annot.this)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10856 if not irt_annot: # no more there
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10857 break
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10858 mupdf.pdf_delete_annot(page, irt_annot.this)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10859 nextannot = mupdf.pdf_next_annot(annot.this) # store next
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10860 mupdf.pdf_delete_annot(page, annot.this)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10861 val = Annot(nextannot)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10862
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10863 if val:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10864 val.thisown = True
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10865 val.parent = weakref.proxy(self) # owning page object
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10866 val.parent._annot_refs[id(val)] = val
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10867 annot._erase()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10868 return val
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10869
39
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
10870 def delete_image(page: 'Page', xref: int):
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
10871 """Delete the image referred to by xef.
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
10872
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
10873 Actually replaces by a small transparent Pixmap using method Page.replace_image.
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
10874
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
10875 Args:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
10876 xref: xref of the image to delete.
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
10877 """
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
10878 # make a small 100% transparent pixmap (of just any dimension)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
10879 pix = Pixmap(csGRAY, (0, 0, 1, 1), 1)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
10880 pix.clear_with() # clear all samples bytes to 0x00
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
10881 page.replace_image(xref, pixmap=pix)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
10882
1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10883 def delete_link(self, linkdict):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10884 """Delete a Link."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10885 CheckParent(self)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10886 if not isinstance( linkdict, dict):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10887 return # have no dictionary
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10888
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10889 def finished():
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10890 if linkdict["xref"] == 0: return
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10891 try:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10892 linkid = linkdict["id"]
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10893 linkobj = self._annot_refs[linkid]
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10894 linkobj._erase()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10895 except Exception:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10896 # Don't print this exception, to match classic. Issue #2841.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10897 if g_exceptions_verbose > 1: exception_info()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10898 pass
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10899
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10900 page = _as_pdf_page(self.this, required=False)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10901 if not page.m_internal:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10902 return finished() # have no PDF
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10903 xref = linkdict[dictkey_xref]
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10904 if xref < 1:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10905 return finished() # invalid xref
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10906 annots = mupdf.pdf_dict_get( page.obj(), PDF_NAME('Annots'))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10907 if not annots.m_internal:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10908 return finished() # have no annotations
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10909 len_ = mupdf.pdf_array_len( annots)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10910 if len_ == 0:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10911 return finished()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10912 oxref = 0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10913 for i in range( len_):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10914 oxref = mupdf.pdf_to_num( mupdf.pdf_array_get( annots, i))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10915 if xref == oxref:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10916 break # found xref in annotations
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10917
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10918 if xref != oxref:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10919 return finished() # xref not in annotations
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10920 mupdf.pdf_array_delete( annots, i) # delete entry in annotations
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10921 mupdf.pdf_delete_object( page.doc(), xref) # delete link object
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10922 mupdf.pdf_dict_put( page.obj(), PDF_NAME('Annots'), annots)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10923 JM_refresh_links( page)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10924
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10925 return finished()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10926
39
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
10927 def delete_widget(page: 'Page', widget: Widget) -> Widget:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
10928 """Delete widget from page and return the next one."""
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
10929 CheckParent(page)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
10930 annot = getattr(widget, "_annot", None)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
10931 if annot is None:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
10932 raise ValueError("bad type: widget")
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
10933 nextwidget = widget.next
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
10934 page.delete_annot(annot)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
10935 widget._annot.parent = None
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
10936 keylist = list(widget.__dict__.keys())
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
10937 for key in keylist:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
10938 del widget.__dict__[key]
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
10939 return nextwidget
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
10940
1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10941 @property
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10942 def derotation_matrix(self) -> Matrix:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10943 """Reflects page de-rotation."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10944 if g_use_extra:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10945 return Matrix(extra.Page_derotate_matrix( self.this))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10946 pdfpage = self._pdf_page(required=False)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10947 if not pdfpage.m_internal:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10948 return Matrix(mupdf.FzRect(mupdf.FzRect.UNIT))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10949 return Matrix(JM_derotate_page_matrix(pdfpage))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10950
39
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
10951 def draw_bezier(
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
10952 page: 'Page',
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
10953 p1: point_like,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
10954 p2: point_like,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
10955 p3: point_like,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
10956 p4: point_like,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
10957 color: OptSeq = (0,),
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
10958 fill: OptSeq = None,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
10959 dashes: OptStr = None,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
10960 width: float = 1,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
10961 morph: OptStr = None,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
10962 closePath: bool = False,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
10963 lineCap: int = 0,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
10964 lineJoin: int = 0,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
10965 overlay: bool = True,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
10966 stroke_opacity: float = 1,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
10967 fill_opacity: float = 1,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
10968 oc: int = 0,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
10969 ) -> Point:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
10970 """Draw a general cubic Bezier curve from p1 to p4 using control points p2 and p3."""
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
10971 img = page.new_shape()
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
10972 Q = img.draw_bezier(Point(p1), Point(p2), Point(p3), Point(p4))
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
10973 img.finish(
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
10974 color=color,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
10975 fill=fill,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
10976 dashes=dashes,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
10977 width=width,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
10978 lineCap=lineCap,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
10979 lineJoin=lineJoin,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
10980 morph=morph,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
10981 closePath=closePath,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
10982 stroke_opacity=stroke_opacity,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
10983 fill_opacity=fill_opacity,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
10984 oc=oc,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
10985 )
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
10986 img.commit(overlay)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
10987
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
10988 return Q
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
10989
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
10990 def draw_circle(
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
10991 page: 'Page',
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
10992 center: point_like,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
10993 radius: float,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
10994 color: OptSeq = (0,),
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
10995 fill: OptSeq = None,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
10996 morph: OptSeq = None,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
10997 dashes: OptStr = None,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
10998 width: float = 1,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
10999 lineCap: int = 0,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11000 lineJoin: int = 0,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11001 overlay: bool = True,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11002 stroke_opacity: float = 1,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11003 fill_opacity: float = 1,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11004 oc: int = 0,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11005 ) -> Point:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11006 """Draw a circle given its center and radius."""
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11007 img = page.new_shape()
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11008 Q = img.draw_circle(Point(center), radius)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11009 img.finish(
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11010 color=color,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11011 fill=fill,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11012 dashes=dashes,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11013 width=width,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11014 lineCap=lineCap,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11015 lineJoin=lineJoin,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11016 morph=morph,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11017 stroke_opacity=stroke_opacity,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11018 fill_opacity=fill_opacity,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11019 oc=oc,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11020 )
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11021 img.commit(overlay)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11022 return Q
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11023
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11024 def draw_curve(
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11025 page: 'Page',
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11026 p1: point_like,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11027 p2: point_like,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11028 p3: point_like,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11029 color: OptSeq = (0,),
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11030 fill: OptSeq = None,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11031 dashes: OptStr = None,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11032 width: float = 1,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11033 morph: OptSeq = None,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11034 closePath: bool = False,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11035 lineCap: int = 0,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11036 lineJoin: int = 0,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11037 overlay: bool = True,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11038 stroke_opacity: float = 1,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11039 fill_opacity: float = 1,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11040 oc: int = 0,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11041 ) -> Point:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11042 """Draw a special Bezier curve from p1 to p3, generating control points on lines p1 to p2 and p2 to p3."""
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11043 img = page.new_shape()
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11044 Q = img.draw_curve(Point(p1), Point(p2), Point(p3))
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11045 img.finish(
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11046 color=color,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11047 fill=fill,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11048 dashes=dashes,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11049 width=width,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11050 lineCap=lineCap,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11051 lineJoin=lineJoin,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11052 morph=morph,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11053 closePath=closePath,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11054 stroke_opacity=stroke_opacity,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11055 fill_opacity=fill_opacity,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11056 oc=oc,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11057 )
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11058 img.commit(overlay)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11059
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11060 return Q
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11061
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11062 def draw_line(
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11063 page: 'Page',
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11064 p1: point_like,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11065 p2: point_like,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11066 color: OptSeq = (0,),
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11067 dashes: OptStr = None,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11068 width: float = 1,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11069 lineCap: int = 0,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11070 lineJoin: int = 0,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11071 overlay: bool = True,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11072 morph: OptSeq = None,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11073 stroke_opacity: float = 1,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11074 fill_opacity: float = 1,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11075 oc=0,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11076 ) -> Point:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11077 """Draw a line from point p1 to point p2."""
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11078 img = page.new_shape()
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11079 p = img.draw_line(Point(p1), Point(p2))
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11080 img.finish(
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11081 color=color,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11082 dashes=dashes,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11083 width=width,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11084 closePath=False,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11085 lineCap=lineCap,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11086 lineJoin=lineJoin,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11087 morph=morph,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11088 stroke_opacity=stroke_opacity,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11089 fill_opacity=fill_opacity,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11090 oc=oc,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11091 )
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11092 img.commit(overlay)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11093
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11094 return p
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11095
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11096 def draw_oval(
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11097 page: 'Page',
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11098 rect: typing.Union[rect_like, quad_like],
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11099 color: OptSeq = (0,),
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11100 fill: OptSeq = None,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11101 dashes: OptStr = None,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11102 morph: OptSeq = None,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11103 width: float = 1,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11104 lineCap: int = 0,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11105 lineJoin: int = 0,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11106 overlay: bool = True,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11107 stroke_opacity: float = 1,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11108 fill_opacity: float = 1,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11109 oc: int = 0,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11110 ) -> Point:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11111 """Draw an oval given its containing rectangle or quad."""
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11112 img = page.new_shape()
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11113 Q = img.draw_oval(rect)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11114 img.finish(
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11115 color=color,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11116 fill=fill,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11117 dashes=dashes,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11118 width=width,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11119 lineCap=lineCap,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11120 lineJoin=lineJoin,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11121 morph=morph,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11122 stroke_opacity=stroke_opacity,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11123 fill_opacity=fill_opacity,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11124 oc=oc,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11125 )
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11126 img.commit(overlay)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11127
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11128 return Q
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11129
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11130 def draw_polyline(
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11131 page: 'Page',
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11132 points: list,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11133 color: OptSeq = (0,),
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11134 fill: OptSeq = None,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11135 dashes: OptStr = None,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11136 width: float = 1,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11137 morph: OptSeq = None,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11138 lineCap: int = 0,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11139 lineJoin: int = 0,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11140 overlay: bool = True,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11141 closePath: bool = False,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11142 stroke_opacity: float = 1,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11143 fill_opacity: float = 1,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11144 oc: int = 0,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11145 ) -> Point:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11146 """Draw multiple connected line segments."""
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11147 img = page.new_shape()
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11148 Q = img.draw_polyline(points)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11149 img.finish(
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11150 color=color,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11151 fill=fill,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11152 dashes=dashes,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11153 width=width,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11154 lineCap=lineCap,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11155 lineJoin=lineJoin,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11156 morph=morph,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11157 closePath=closePath,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11158 stroke_opacity=stroke_opacity,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11159 fill_opacity=fill_opacity,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11160 oc=oc,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11161 )
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11162 img.commit(overlay)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11163
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11164 return Q
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11165
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11166 def draw_quad(
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11167 page: 'Page',
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11168 quad: quad_like,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11169 color: OptSeq = (0,),
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11170 fill: OptSeq = None,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11171 dashes: OptStr = None,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11172 width: float = 1,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11173 lineCap: int = 0,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11174 lineJoin: int = 0,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11175 morph: OptSeq = None,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11176 overlay: bool = True,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11177 stroke_opacity: float = 1,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11178 fill_opacity: float = 1,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11179 oc: int = 0,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11180 ) -> Point:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11181 """Draw a quadrilateral."""
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11182 img = page.new_shape()
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11183 Q = img.draw_quad(Quad(quad))
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11184 img.finish(
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11185 color=color,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11186 fill=fill,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11187 dashes=dashes,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11188 width=width,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11189 lineCap=lineCap,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11190 lineJoin=lineJoin,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11191 morph=morph,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11192 stroke_opacity=stroke_opacity,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11193 fill_opacity=fill_opacity,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11194 oc=oc,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11195 )
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11196 img.commit(overlay)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11197
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11198 return Q
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11199
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11200 def draw_rect(
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11201 page: 'Page',
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11202 rect: rect_like,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11203 color: OptSeq = (0,),
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11204 fill: OptSeq = None,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11205 dashes: OptStr = None,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11206 width: float = 1,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11207 lineCap: int = 0,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11208 lineJoin: int = 0,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11209 morph: OptSeq = None,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11210 overlay: bool = True,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11211 stroke_opacity: float = 1,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11212 fill_opacity: float = 1,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11213 oc: int = 0,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11214 radius=None,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11215 ) -> Point:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11216 '''
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11217 Draw a rectangle. See Shape class method for details.
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11218 '''
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11219 img = page.new_shape()
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11220 Q = img.draw_rect(Rect(rect), radius=radius)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11221 img.finish(
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11222 color=color,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11223 fill=fill,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11224 dashes=dashes,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11225 width=width,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11226 lineCap=lineCap,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11227 lineJoin=lineJoin,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11228 morph=morph,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11229 stroke_opacity=stroke_opacity,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11230 fill_opacity=fill_opacity,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11231 oc=oc,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11232 )
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11233 img.commit(overlay)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11234
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11235 return Q
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11236
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11237 def draw_sector(
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11238 page: 'Page',
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11239 center: point_like,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11240 point: point_like,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11241 beta: float,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11242 color: OptSeq = (0,),
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11243 fill: OptSeq = None,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11244 dashes: OptStr = None,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11245 fullSector: bool = True,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11246 morph: OptSeq = None,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11247 width: float = 1,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11248 closePath: bool = False,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11249 lineCap: int = 0,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11250 lineJoin: int = 0,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11251 overlay: bool = True,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11252 stroke_opacity: float = 1,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11253 fill_opacity: float = 1,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11254 oc: int = 0,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11255 ) -> Point:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11256 """Draw a circle sector given circle center, one arc end point and the angle of the arc.
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11257
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11258 Parameters:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11259 center -- center of circle
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11260 point -- arc end point
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11261 beta -- angle of arc (degrees)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11262 fullSector -- connect arc ends with center
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11263 """
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11264 img = page.new_shape()
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11265 Q = img.draw_sector(Point(center), Point(point), beta, fullSector=fullSector)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11266 img.finish(
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11267 color=color,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11268 fill=fill,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11269 dashes=dashes,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11270 width=width,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11271 lineCap=lineCap,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11272 lineJoin=lineJoin,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11273 morph=morph,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11274 closePath=closePath,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11275 stroke_opacity=stroke_opacity,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11276 fill_opacity=fill_opacity,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11277 oc=oc,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11278 )
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11279 img.commit(overlay)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11280
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11281 return Q
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11282
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11283 def draw_squiggle(
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11284 page: 'Page',
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11285 p1: point_like,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11286 p2: point_like,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11287 breadth: float = 2,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11288 color: OptSeq = (0,),
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11289 dashes: OptStr = None,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11290 width: float = 1,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11291 lineCap: int = 0,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11292 lineJoin: int = 0,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11293 overlay: bool = True,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11294 morph: OptSeq = None,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11295 stroke_opacity: float = 1,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11296 fill_opacity: float = 1,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11297 oc: int = 0,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11298 ) -> Point:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11299 """Draw a squiggly line from point p1 to point p2."""
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11300 img = page.new_shape()
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11301 p = img.draw_squiggle(Point(p1), Point(p2), breadth=breadth)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11302 img.finish(
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11303 color=color,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11304 dashes=dashes,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11305 width=width,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11306 closePath=False,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11307 lineCap=lineCap,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11308 lineJoin=lineJoin,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11309 morph=morph,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11310 stroke_opacity=stroke_opacity,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11311 fill_opacity=fill_opacity,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11312 oc=oc,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11313 )
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11314 img.commit(overlay)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11315
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11316 return p
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11317
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11318 def draw_zigzag(
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11319 page: 'Page',
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11320 p1: point_like,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11321 p2: point_like,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11322 breadth: float = 2,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11323 color: OptSeq = (0,),
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11324 dashes: OptStr = None,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11325 width: float = 1,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11326 lineCap: int = 0,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11327 lineJoin: int = 0,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11328 overlay: bool = True,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11329 morph: OptSeq = None,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11330 stroke_opacity: float = 1,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11331 fill_opacity: float = 1,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11332 oc: int = 0,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11333 ) -> Point:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11334 """Draw a zigzag line from point p1 to point p2."""
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11335 img = page.new_shape()
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11336 p = img.draw_zigzag(Point(p1), Point(p2), breadth=breadth)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11337 img.finish(
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11338 color=color,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11339 dashes=dashes,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11340 width=width,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11341 closePath=False,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11342 lineCap=lineCap,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11343 lineJoin=lineJoin,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11344 morph=morph,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11345 stroke_opacity=stroke_opacity,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11346 fill_opacity=fill_opacity,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11347 oc=oc,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11348 )
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11349 img.commit(overlay)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11350
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11351 return p
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11352
1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11353 def extend_textpage(self, tpage, flags=0, matrix=None):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11354 page = self.this
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11355 tp = tpage.this
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11356 assert isinstance( tp, mupdf.FzStextPage)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11357 options = mupdf.FzStextOptions()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11358 options.flags = flags
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11359 ctm = JM_matrix_from_py(matrix)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11360 dev = mupdf.FzDevice(tp, options)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11361 mupdf.fz_run_page( page, dev, ctm, mupdf.FzCookie())
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11362 mupdf.fz_close_device( dev)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11363
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11364 @property
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11365 def first_annot(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11366 """First annotation."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11367 CheckParent(self)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11368 page = self._pdf_page(required=False)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11369 if not page.m_internal:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11370 return
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11371 annot = mupdf.pdf_first_annot(page)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11372 if not annot.m_internal:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11373 return
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11374 val = Annot(annot)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11375 val.thisown = True
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11376 val.parent = weakref.proxy(self) # owning page object
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11377 self._annot_refs[id(val)] = val
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11378 return val
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11379
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11380 @property
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11381 def first_link(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11382 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11383 First link on page
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11384 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11385 return self.load_links()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11386
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11387 @property
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11388 def first_widget(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11389 """First widget/field."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11390 CheckParent(self)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11391 annot = 0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11392 page = self._pdf_page(required=False)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11393 if not page.m_internal:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11394 return
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11395 annot = mupdf.pdf_first_widget(page)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11396 if not annot.m_internal:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11397 return
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11398 val = Annot(annot)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11399 val.thisown = True
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11400 val.parent = weakref.proxy(self) # owning page object
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11401 self._annot_refs[id(val)] = val
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11402 widget = Widget()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11403 TOOLS._fill_widget(val, widget)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11404 val = widget
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11405 return val
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11406
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11407 def get_bboxlog(self, layers=None):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11408 CheckParent(self)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11409 old_rotation = self.rotation
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11410 if old_rotation != 0:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11411 self.set_rotation(0)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11412 page = self.this
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11413 rc = []
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11414 inc_layers = True if layers else False
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11415 dev = JM_new_bbox_device( rc, inc_layers)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11416 mupdf.fz_run_page( page, dev, mupdf.FzMatrix(), mupdf.FzCookie())
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11417 mupdf.fz_close_device( dev)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11418
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11419 if old_rotation != 0:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11420 self.set_rotation(old_rotation)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11421 return rc
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11422
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11423 def get_cdrawings(self, extended=None, callback=None, method=None):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11424 """Extract vector graphics ("line art") from the page."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11425 CheckParent(self)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11426 old_rotation = self.rotation
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11427 if old_rotation != 0:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11428 self.set_rotation(0)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11429 page = self.this
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11430 if isinstance(page, mupdf.PdfPage):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11431 # Downcast pdf_page to fz_page.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11432 page = mupdf.FzPage(page)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11433 assert isinstance(page, mupdf.FzPage), f'{self.this=}'
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11434 clips = True if extended else False
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11435 prect = mupdf.fz_bound_page(page)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11436 if g_use_extra:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11437 rc = extra.get_cdrawings(page, extended, callback, method)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11438 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11439 rc = list()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11440 if callable(callback) or method is not None:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11441 dev = JM_new_lineart_device_Device(callback, clips, method)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11442 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11443 dev = JM_new_lineart_device_Device(rc, clips, method)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11444 dev.ptm = mupdf.FzMatrix(1, 0, 0, -1, 0, prect.y1)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11445 mupdf.fz_run_page(page, dev, mupdf.FzMatrix(), mupdf.FzCookie())
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11446 mupdf.fz_close_device(dev)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11447
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11448 if old_rotation != 0:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11449 self.set_rotation(old_rotation)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11450 if callable(callback) or method is not None:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11451 return
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11452 return rc
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11453
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11454 def get_contents(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11455 """Get xrefs of /Contents objects."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11456 CheckParent(self)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11457 ret = []
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11458 page = _as_pdf_page(self.this)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11459 obj = page.obj()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11460 contents = mupdf.pdf_dict_get(obj, mupdf.PDF_ENUM_NAME_Contents)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11461 if mupdf.pdf_is_array(contents):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11462 n = mupdf.pdf_array_len(contents)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11463 for i in range(n):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11464 icont = mupdf.pdf_array_get(contents, i)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11465 xref = mupdf.pdf_to_num(icont)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11466 ret.append(xref)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11467 elif contents.m_internal:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11468 xref = mupdf.pdf_to_num(contents)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11469 ret.append( xref)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11470 return ret
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11471
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11472 def get_displaylist(self, annots=1):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11473 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11474 Make a DisplayList from the page for Pixmap generation.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11475
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11476 Include (default) or exclude annotations.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11477 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11478 CheckParent(self)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11479 if annots:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11480 dl = mupdf.fz_new_display_list_from_page(self.this)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11481 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11482 dl = mupdf.fz_new_display_list_from_page_contents(self.this)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11483 return DisplayList(dl)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11484
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11485 def get_drawings(self, extended: bool=False) -> list:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11486 """Retrieve vector graphics. The extended version includes clips.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11487
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11488 Note:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11489 For greater comfort, this method converts point-likes, rect-likes, quad-likes
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11490 of the C version to respective Point / Rect / Quad objects.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11491 It also adds default items that are missing in original path types.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11492 """
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11493 allkeys = (
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11494 'closePath',
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11495 'fill',
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11496 'color',
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11497 'width',
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11498 'lineCap',
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11499 'lineJoin',
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11500 'dashes',
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11501 'stroke_opacity',
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11502 'fill_opacity',
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11503 'even_odd',
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11504 )
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11505 val = self.get_cdrawings(extended=extended)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11506 for i in range(len(val)):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11507 npath = val[i]
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11508 if not npath["type"].startswith("clip"):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11509 npath["rect"] = Rect(npath["rect"])
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11510 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11511 npath["scissor"] = Rect(npath["scissor"])
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11512 if npath["type"]!="group":
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11513 items = npath["items"]
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11514 newitems = []
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11515 for item in items:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11516 cmd = item[0]
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11517 rest = item[1:]
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11518 if cmd == "re":
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11519 item = ("re", Rect(rest[0]).normalize(), rest[1])
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11520 elif cmd == "qu":
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11521 item = ("qu", Quad(rest[0]))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11522 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11523 item = tuple([cmd] + [Point(i) for i in rest])
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11524 newitems.append(item)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11525 npath["items"] = newitems
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11526 if npath['type'] in ('f', 's'):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11527 for k in allkeys:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11528 npath[k] = npath.get(k)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11529
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11530 val[i] = npath
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11531 return val
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11532
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11533 class Drawpath(object):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11534 """Reflects a path dictionary from get_cdrawings()."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11535 def __init__(self, **args):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11536 self.__dict__.update(args)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11537
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11538 class Drawpathlist(object):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11539 """List of Path objects representing get_cdrawings() output."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11540 def __getitem__(self, item):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11541 return self.paths.__getitem__(item)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11542
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11543 def __init__(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11544 self.paths = []
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11545 self.path_count = 0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11546 self.group_count = 0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11547 self.clip_count = 0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11548 self.fill_count = 0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11549 self.stroke_count = 0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11550 self.fillstroke_count = 0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11551
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11552 def __len__(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11553 return self.paths.__len__()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11554
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11555 def append(self, path):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11556 self.paths.append(path)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11557 self.path_count += 1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11558 if path.type == "clip":
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11559 self.clip_count += 1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11560 elif path.type == "group":
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11561 self.group_count += 1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11562 elif path.type == "f":
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11563 self.fill_count += 1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11564 elif path.type == "s":
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11565 self.stroke_count += 1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11566 elif path.type == "fs":
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11567 self.fillstroke_count += 1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11568
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11569 def clip_parents(self, i):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11570 """Return list of parent clip paths.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11571
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11572 Args:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11573 i: (int) return parents of this path.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11574 Returns:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11575 List of the clip parents."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11576 if i >= self.path_count:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11577 raise IndexError("bad path index")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11578 while i < 0:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11579 i += self.path_count
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11580 lvl = self.paths[i].level
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11581 clips = list( # clip paths before identified one
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11582 reversed(
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11583 [
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11584 p
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11585 for p in self.paths[:i]
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11586 if p.type == "clip" and p.level < lvl
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11587 ]
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11588 )
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11589 )
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11590 if clips == []: # none found: empty list
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11591 return []
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11592 nclips = [clips[0]] # init return list
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11593 for p in clips[1:]:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11594 if p.level >= nclips[-1].level:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11595 continue # only accept smaller clip levels
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11596 nclips.append(p)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11597 return nclips
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11598
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11599 def group_parents(self, i):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11600 """Return list of parent group paths.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11601
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11602 Args:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11603 i: (int) return parents of this path.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11604 Returns:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11605 List of the group parents."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11606 if i >= self.path_count:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11607 raise IndexError("bad path index")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11608 while i < 0:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11609 i += self.path_count
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11610 lvl = self.paths[i].level
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11611 groups = list( # group paths before identified one
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11612 reversed(
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11613 [
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11614 p
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11615 for p in self.paths[:i]
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11616 if p.type == "group" and p.level < lvl
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11617 ]
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11618 )
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11619 )
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11620 if groups == []: # none found: empty list
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11621 return []
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11622 ngroups = [groups[0]] # init return list
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11623 for p in groups[1:]:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11624 if p.level >= ngroups[-1].level:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11625 continue # only accept smaller group levels
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11626 ngroups.append(p)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11627 return ngroups
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11628
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11629 def get_lineart(self) -> object:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11630 """Get page drawings paths.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11631
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11632 Note:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11633 For greater comfort, this method converts point-like, rect-like, quad-like
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11634 tuples of the C version to respective Point / Rect / Quad objects.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11635 Also adds default items that are missing in original path types.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11636 In contrast to get_drawings(), this output is an object.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11637 """
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11638
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11639 val = self.get_cdrawings(extended=True)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11640 paths = self.Drawpathlist()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11641 for path in val:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11642 npath = self.Drawpath(**path)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11643 if npath.type != "clip":
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11644 npath.rect = Rect(path["rect"])
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11645 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11646 npath.scissor = Rect(path["scissor"])
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11647 if npath.type != "group":
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11648 items = path["items"]
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11649 newitems = []
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11650 for item in items:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11651 cmd = item[0]
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11652 rest = item[1:]
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11653 if cmd == "re":
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11654 item = ("re", Rect(rest[0]).normalize(), rest[1])
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11655 elif cmd == "qu":
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11656 item = ("qu", Quad(rest[0]))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11657 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11658 item = tuple([cmd] + [Point(i) for i in rest])
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11659 newitems.append(item)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11660 npath.items = newitems
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11661
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11662 if npath.type == "f":
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11663 npath.stroke_opacity = None
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11664 npath.dashes = None
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11665 npath.line_join = None
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11666 npath.line_cap = None
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11667 npath.color = None
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11668 npath.width = None
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11669
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11670 paths.append(npath)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11671
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11672 val = None
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11673 return paths
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11674
39
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11675 def get_image_info(
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11676 page: 'Page',
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11677 hashes: bool = False,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11678 xrefs: bool = False
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11679 ) -> list:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11680 """Extract image information only from a pymupdf.TextPage.
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11681
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11682 Args:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11683 hashes: (bool) include MD5 hash for each image.
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11684 xrefs: (bool) try to find the xref for each image. Sets hashes to true.
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11685 """
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11686 doc = page.parent
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11687 if xrefs and doc.is_pdf:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11688 hashes = True
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11689 if not doc.is_pdf:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11690 xrefs = False
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11691 imginfo = getattr(page, "_image_info", None)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11692 if imginfo and not xrefs:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11693 return imginfo
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11694 if not imginfo:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11695 tp = page.get_textpage(flags=TEXT_PRESERVE_IMAGES)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11696 imginfo = tp.extractIMGINFO(hashes=hashes)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11697 del tp
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11698 if hashes:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11699 page._image_info = imginfo
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11700 if not xrefs or not doc.is_pdf:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11701 return imginfo
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11702 imglist = page.get_images()
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11703 digests = {}
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11704 for item in imglist:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11705 xref = item[0]
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11706 pix = Pixmap(doc, xref)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11707 digests[pix.digest] = xref
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11708 del pix
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11709 for i in range(len(imginfo)):
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11710 item = imginfo[i]
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11711 xref = digests.get(item["digest"], 0)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11712 item["xref"] = xref
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11713 imginfo[i] = item
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11714 return imginfo
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11715
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11716 def get_image_rects(page: 'Page', name, transform=False) -> list:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11717 """Return list of image positions on a page.
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11718
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11719 Args:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11720 name: (str, list, int) image identification. May be reference name, an
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11721 item of the page's image list or an xref.
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11722 transform: (bool) whether to also return the transformation matrix.
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11723 Returns:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11724 A list of pymupdf.Rect objects or tuples of (pymupdf.Rect, pymupdf.Matrix)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11725 for all image locations on the page.
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11726 """
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11727 if type(name) in (list, tuple):
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11728 xref = name[0]
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11729 elif type(name) is int:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11730 xref = name
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11731 else:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11732 imglist = [i for i in page.get_images() if i[7] == name]
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11733 if imglist == []:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11734 raise ValueError("bad image name")
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11735 elif len(imglist) != 1:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11736 raise ValueError("multiple image names found")
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11737 xref = imglist[0][0]
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11738 pix = Pixmap(page.parent, xref) # make pixmap of the image to compute MD5
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11739 digest = pix.digest
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11740 del pix
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11741 infos = page.get_image_info(hashes=True)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11742 if not transform:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11743 bboxes = [Rect(im["bbox"]) for im in infos if im["digest"] == digest]
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11744 else:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11745 bboxes = [
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11746 (Rect(im["bbox"]), Matrix(im["transform"]))
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11747 for im in infos
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11748 if im["digest"] == digest
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11749 ]
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11750 return bboxes
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11751
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11752 def get_label(page):
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11753 """Return the label for this PDF page.
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11754
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11755 Args:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11756 page: page object.
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11757 Returns:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11758 The label (str) of the page. Errors return an empty string.
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11759 """
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11760 # Jorj McKie, 2021-01-06
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11761
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11762 labels = page.parent._get_page_labels()
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11763 if not labels:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11764 return ""
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11765 labels.sort()
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11766 return utils.get_label_pno(page.number, labels)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11767
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11768 def get_links(page: 'Page') -> list:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11769 """Create a list of all links contained in a PDF page.
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11770
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11771 Notes:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11772 see PyMuPDF ducmentation for details.
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11773 """
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11774
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11775 CheckParent(page)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11776 ln = page.first_link
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11777 links = []
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11778 while ln:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11779 nl = utils.getLinkDict(ln, page.parent)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11780 links.append(nl)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11781 ln = ln.next
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11782 if links != [] and page.parent.is_pdf:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11783 linkxrefs = [x for x in
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11784 #page.annot_xrefs()
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11785 JM_get_annot_xref_list2(page)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11786 if x[1] == mupdf.PDF_ANNOT_LINK # pylint: disable=no-member
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11787 ]
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11788 if len(linkxrefs) == len(links):
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11789 for i in range(len(linkxrefs)):
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11790 links[i]["xref"] = linkxrefs[i][0]
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11791 links[i]["id"] = linkxrefs[i][2]
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11792 return links
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11793
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11794 def get_pixmap(
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11795 page: 'Page',
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11796 *,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11797 matrix: matrix_like=Identity,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11798 dpi=None,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11799 colorspace: Colorspace=None,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11800 clip: rect_like=None,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11801 alpha: bool=False,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11802 annots: bool=True,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11803 ) -> 'Pixmap':
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11804 """Create pixmap of page.
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11805
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11806 Keyword args:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11807 matrix: Matrix for transformation (default: Identity).
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11808 dpi: desired dots per inch. If given, matrix is ignored.
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11809 colorspace: (str/Colorspace) cmyk, rgb, gray - case ignored, default csRGB.
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11810 clip: (irect-like) restrict rendering to this area.
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11811 alpha: (bool) whether to include alpha channel
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11812 annots: (bool) whether to also render annotations
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11813 """
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11814 if colorspace is None:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11815 colorspace = csRGB
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11816 if dpi:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11817 zoom = dpi / 72
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11818 matrix = Matrix(zoom, zoom)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11819
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11820 if type(colorspace) is str:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11821 if colorspace.upper() == "GRAY":
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11822 colorspace = csGRAY
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11823 elif colorspace.upper() == "CMYK":
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11824 colorspace = csCMYK
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11825 else:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11826 colorspace = csRGB
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11827 if colorspace.n not in (1, 3, 4):
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11828 raise ValueError("unsupported colorspace")
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11829
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11830 dl = page.get_displaylist(annots=annots)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11831 pix = dl.get_pixmap(matrix=matrix, colorspace=colorspace, alpha=alpha, clip=clip)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11832 dl = None
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11833 if dpi:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11834 pix.set_dpi(dpi, dpi)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11835 return pix
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
11836
1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11837 def remove_rotation(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11838 """Set page rotation to 0 while maintaining visual appearance."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11839 rot = self.rotation # normalized rotation value
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11840 if rot == 0:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11841 return Identity # nothing to do
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11842
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11843 # need to derotate the page's content
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11844 mb = self.mediabox # current mediabox
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11845
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11846 if rot == 90:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11847 # before derotation, shift content horizontally
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11848 mat0 = Matrix(1, 0, 0, 1, mb.y1 - mb.x1 - mb.x0 - mb.y0, 0)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11849 elif rot == 270:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11850 # before derotation, shift content vertically
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11851 mat0 = Matrix(1, 0, 0, 1, 0, mb.x1 - mb.y1 - mb.y0 - mb.x0)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11852 else: # rot = 180
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11853 mat0 = Matrix(1, 0, 0, 1, -2 * mb.x0, -2 * mb.y0)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11854
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11855 # prefix with derotation matrix
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11856 mat = mat0 * self.derotation_matrix
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11857 cmd = _format_g(tuple(mat)) + ' cm '
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11858 cmd = cmd.encode('utf8')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11859 _ = TOOLS._insert_contents(self, cmd, False) # prepend to page contents
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11860
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11861 # swap x- and y-coordinates
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11862 if rot in (90, 270):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11863 x0, y0, x1, y1 = mb
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11864 mb.x0 = y0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11865 mb.y0 = x0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11866 mb.x1 = y1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11867 mb.y1 = x1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11868 self.set_mediabox(mb)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11869
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11870 self.set_rotation(0)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11871 rot = ~mat # inverse of the derotation matrix
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11872
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11873 for annot in self.annots(): # modify rectangles of annotations
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11874 r = annot.rect * rot
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11875 # TODO: only try to set rectangle for applicable annot types
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11876 annot.set_rect(r)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11877 for link in self.get_links(): # modify 'from' rectangles of links
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11878 r = link["from"] * rot
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11879 self.delete_link(link)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11880 link["from"] = r
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11881 try: # invalid links remain deleted
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11882 self.insert_link(link)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11883 except Exception:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11884 pass
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11885 for widget in self.widgets(): # modify field rectangles
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11886 r = widget.rect * rot
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11887 widget.rect = r
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11888 widget.update()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11889 return rot # the inverse of the generated derotation matrix
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11890
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11891 def cluster_drawings(
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11892 self, clip=None, drawings=None, x_tolerance: float = 3, y_tolerance: float = 3,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11893 final_filter: bool = True,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11894 ) -> list:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11895 """Join rectangles of neighboring vector graphic items.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11896
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11897 Args:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11898 clip: optional rect-like to restrict the page area to consider.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11899 drawings: (optional) output of a previous "get_drawings()".
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11900 x_tolerance: horizontal neighborhood threshold.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11901 y_tolerance: vertical neighborhood threshold.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11902
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11903 Notes:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11904 Vector graphics (also called line-art or drawings) usually consist
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11905 of independent items like rectangles, lines or curves to jointly
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11906 form table grid lines or bar, line, pie charts and similar.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11907 This method identifies rectangles wrapping these disparate items.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11908
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11909 Returns:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11910 A list of Rect items, each wrapping line-art items that are close
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11911 enough to be considered forming a common vector graphic.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11912 Only "significant" rectangles will be returned, i.e. having both,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11913 width and height larger than the tolerance values.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11914 """
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11915 CheckParent(self)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11916 parea = self.rect # the default clipping area
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11917 if clip is not None:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11918 parea = Rect(clip)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11919 delta_x = x_tolerance # shorter local name
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11920 delta_y = y_tolerance # shorter local name
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11921 if drawings is None: # if we cannot re-use a previous output
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11922 drawings = self.get_drawings()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11923
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11924 def are_neighbors(r1, r2):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11925 """Detect whether r1, r2 are "neighbors".
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11926
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11927 Items r1, r2 are called neighbors if the minimum distance between
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11928 their points is less-equal delta.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11929
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11930 Both parameters must be (potentially invalid) rectangles.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11931 """
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11932 # normalize rectangles as needed
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11933 rr1_x0, rr1_x1 = (r1.x0, r1.x1) if r1.x1 > r1.x0 else (r1.x1, r1.x0)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11934 rr1_y0, rr1_y1 = (r1.y0, r1.y1) if r1.y1 > r1.y0 else (r1.y1, r1.y0)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11935 rr2_x0, rr2_x1 = (r2.x0, r2.x1) if r2.x1 > r2.x0 else (r2.x1, r2.x0)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11936 rr2_y0, rr2_y1 = (r2.y0, r2.y1) if r2.y1 > r2.y0 else (r2.y1, r2.y0)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11937 if (
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11938 0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11939 or rr1_x1 < rr2_x0 - delta_x
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11940 or rr1_x0 > rr2_x1 + delta_x
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11941 or rr1_y1 < rr2_y0 - delta_y
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11942 or rr1_y0 > rr2_y1 + delta_y
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11943 ):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11944 # Rects do not overlap.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11945 return False
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11946 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11947 # Rects overlap.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11948 return True
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11949
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11950 # exclude graphics not contained in the clip
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11951 paths = [
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11952 p
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11953 for p in drawings
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11954 if 1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11955 and p["rect"].x0 >= parea.x0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11956 and p["rect"].x1 <= parea.x1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11957 and p["rect"].y0 >= parea.y0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11958 and p["rect"].y1 <= parea.y1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11959 ]
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11960
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11961 # list of all vector graphic rectangles
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11962 prects = sorted([p["rect"] for p in paths], key=lambda r: (r.y1, r.x0))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11963
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11964 new_rects = [] # the final list of the joined rectangles
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11965
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11966 # -------------------------------------------------------------------------
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11967 # The strategy is to identify and join all rects that are neighbors
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11968 # -------------------------------------------------------------------------
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11969 while prects: # the algorithm will empty this list
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11970 r = +prects[0] # copy of first rectangle
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11971 repeat = True
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11972 while repeat:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11973 repeat = False
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11974 for i in range(len(prects) - 1, 0, -1): # from back to front
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11975 if are_neighbors(prects[i], r):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11976 r |= prects[i].tl # include in first rect
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11977 r |= prects[i].br # include in first rect
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11978 del prects[i] # delete this rect
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11979 repeat = True
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11980
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11981 new_rects.append(r)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11982 del prects[0]
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11983 prects = sorted(set(prects), key=lambda r: (r.y1, r.x0))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11984
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11985 new_rects = sorted(set(new_rects), key=lambda r: (r.y1, r.x0))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11986 if not final_filter:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11987 return new_rects
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11988 return [r for r in new_rects if r.width > delta_x and r.height > delta_y]
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11989
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11990 def get_fonts(self, full=False):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11991 """List of fonts defined in the page object."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11992 CheckParent(self)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11993 return self.parent.get_page_fonts(self.number, full=full)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11994
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11995 def get_image_bbox(self, name, transform=0):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11996 """Get rectangle occupied by image 'name'.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11997
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11998 'name' is either an item of the image list, or the referencing
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11999 name string - elem[7] of the resp. item.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12000 Option 'transform' also returns the image transformation matrix.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12001 """
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12002 CheckParent(self)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12003 doc = self.parent
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12004 if doc.is_closed or doc.is_encrypted:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12005 raise ValueError('document closed or encrypted')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12006
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12007 inf_rect = Rect(1, 1, -1, -1)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12008 null_mat = Matrix()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12009 if transform:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12010 rc = (inf_rect, null_mat)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12011 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12012 rc = inf_rect
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12013
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12014 if type(name) in (list, tuple):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12015 if not type(name[-1]) is int:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12016 raise ValueError('need item of full page image list')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12017 item = name
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12018 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12019 imglist = [i for i in doc.get_page_images(self.number, True) if name == i[7]]
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12020 if len(imglist) == 1:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12021 item = imglist[0]
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12022 elif imglist == []:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12023 raise ValueError('bad image name')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12024 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12025 raise ValueError("found multiple images named '%s'." % name)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12026 xref = item[-1]
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12027 if xref != 0 or transform:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12028 try:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12029 return self.get_image_rects(item, transform=transform)[0]
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12030 except Exception:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12031 exception_info()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12032 return inf_rect
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12033 pdf_page = self._pdf_page()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12034 val = JM_image_reporter(pdf_page)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12035
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12036 if not bool(val):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12037 return rc
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12038
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12039 for v in val:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12040 if v[0] != item[-3]:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12041 continue
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12042 q = Quad(v[1])
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12043 bbox = q.rect
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12044 if transform == 0:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12045 rc = bbox
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12046 break
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12047
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12048 hm = Matrix(util_hor_matrix(q.ll, q.lr))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12049 h = abs(q.ll - q.ul)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12050 w = abs(q.ur - q.ul)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12051 m0 = Matrix(1 / w, 0, 0, 1 / h, 0, 0)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12052 m = ~(hm * m0)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12053 rc = (bbox, m)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12054 break
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12055 val = rc
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12056
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12057 return val
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12058
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12059 def get_images(self, full=False):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12060 """List of images defined in the page object."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12061 CheckParent(self)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12062 return self.parent.get_page_images(self.number, full=full)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12063
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12064 def get_oc_items(self) -> list:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12065 """Get OCGs and OCMDs used in the page's contents.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12066
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12067 Returns:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12068 List of items (name, xref, type), where type is one of "ocg" / "ocmd",
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12069 and name is the property name.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12070 """
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12071 rc = []
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12072 for pname, xref in self._get_resource_properties():
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12073 text = self.parent.xref_object(xref, compressed=True)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12074 if "/Type/OCG" in text:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12075 octype = "ocg"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12076 elif "/Type/OCMD" in text:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12077 octype = "ocmd"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12078 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12079 continue
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12080 rc.append((pname, xref, octype))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12081 return rc
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12082
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12083 def get_svg_image(self, matrix=None, text_as_path=1):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12084 """Make SVG image from page."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12085 CheckParent(self)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12086 mediabox = mupdf.fz_bound_page(self.this)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12087 ctm = JM_matrix_from_py(matrix)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12088 tbounds = mediabox
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12089 text_option = mupdf.FZ_SVG_TEXT_AS_PATH if text_as_path == 1 else mupdf.FZ_SVG_TEXT_AS_TEXT
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12090 tbounds = mupdf.fz_transform_rect(tbounds, ctm)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12091
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12092 res = mupdf.fz_new_buffer(1024)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12093 out = mupdf.FzOutput(res)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12094 dev = mupdf.fz_new_svg_device(
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12095 out,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12096 tbounds.x1-tbounds.x0, # width
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12097 tbounds.y1-tbounds.y0, # height
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12098 text_option,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12099 1,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12100 )
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12101 mupdf.fz_run_page(self.this, dev, ctm, mupdf.FzCookie())
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12102 mupdf.fz_close_device(dev)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12103 out.fz_close_output()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12104 text = JM_EscapeStrFromBuffer(res)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12105 return text
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12106
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12107 def get_textbox(
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12108 page: Page,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12109 rect: rect_like,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12110 textpage=None, #: TextPage = None,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12111 ) -> str:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12112 tp = textpage
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12113 if tp is None:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12114 tp = page.get_textpage()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12115 elif getattr(tp, "parent") != page:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12116 raise ValueError("not a textpage of this page")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12117 rc = tp.extractTextbox(rect)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12118 if textpage is None:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12119 del tp
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12120 return rc
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12121
39
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12122 def get_text(self, *args, **kwargs):
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12123 return utils.get_text(self, *args, **kwargs)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12124
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12125 def get_text_blocks(self, *args, **kwargs):
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12126 return utils.get_text_blocks(self, *args, **kwargs)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12127
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12128 def get_text_selection(self, *args, **kwargs):
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12129 return utils.get_text_selection(self, *args, **kwargs)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12130
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12131 def get_text_words(self, *args, **kwargs):
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12132 return utils.get_text_words(self, *args, **kwargs)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12133
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12134 def get_textpage_ocr(self, *args, **kwargs):
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12135 return utils.get_textpage_ocr(self, *args, **kwargs)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12136
1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12137 def get_textpage(self, clip: rect_like = None, flags: int = 0, matrix=None) -> "TextPage":
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12138 CheckParent(self)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12139 if matrix is None:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12140 matrix = Matrix(1, 1)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12141 old_rotation = self.rotation
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12142 if old_rotation != 0:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12143 self.set_rotation(0)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12144 try:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12145 textpage = self._get_textpage(clip, flags=flags, matrix=matrix)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12146 finally:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12147 if old_rotation != 0:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12148 self.set_rotation(old_rotation)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12149 textpage = TextPage(textpage)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12150 textpage.parent = weakref.proxy(self)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12151 return textpage
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12152
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12153 def get_texttrace(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12154
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12155 CheckParent(self)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12156 old_rotation = self.rotation
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12157 if old_rotation != 0:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12158 self.set_rotation(0)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12159 page = self.this
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12160 rc = []
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12161 if g_use_extra:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12162 dev = extra.JM_new_texttrace_device(rc)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12163 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12164 dev = JM_new_texttrace_device(rc)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12165 prect = mupdf.fz_bound_page(page)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12166 dev.ptm = mupdf.FzMatrix(1, 0, 0, -1, 0, prect.y1)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12167 mupdf.fz_run_page(page, dev, mupdf.FzMatrix(), mupdf.FzCookie())
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12168 mupdf.fz_close_device(dev)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12169
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12170 if old_rotation != 0:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12171 self.set_rotation(old_rotation)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12172 return rc
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12173
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12174 def get_xobjects(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12175 """List of xobjects defined in the page object."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12176 CheckParent(self)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12177 return self.parent.get_page_xobjects(self.number)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12178
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12179 def insert_font(self, fontname="helv", fontfile=None, fontbuffer=None,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12180 set_simple=False, wmode=0, encoding=0):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12181 doc = self.parent
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12182 if doc is None:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12183 raise ValueError("orphaned object: parent is None")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12184 idx = 0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12185
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12186 if fontname.startswith("/"):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12187 fontname = fontname[1:]
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12188 inv_chars = INVALID_NAME_CHARS.intersection(fontname)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12189 if inv_chars != set():
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12190 raise ValueError(f"bad fontname chars {inv_chars}")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12191
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12192 font = CheckFont(self, fontname)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12193 if font is not None: # font already in font list of page
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12194 xref = font[0] # this is the xref
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12195 if CheckFontInfo(doc, xref): # also in our document font list?
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12196 return xref # yes: we are done
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12197 # need to build the doc FontInfo entry - done via get_char_widths
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12198 doc.get_char_widths(xref)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12199 return xref
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12200
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12201 #--------------------------------------------------------------------------
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12202 # the font is not present for this page
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12203 #--------------------------------------------------------------------------
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12204
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12205 bfname = Base14_fontdict.get(fontname.lower(), None) # BaseFont if Base-14 font
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12206
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12207 serif = 0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12208 CJK_number = -1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12209 CJK_list_n = ["china-t", "china-s", "japan", "korea"]
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12210 CJK_list_s = ["china-ts", "china-ss", "japan-s", "korea-s"]
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12211
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12212 try:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12213 CJK_number = CJK_list_n.index(fontname)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12214 serif = 0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12215 except Exception:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12216 # Verbose in PyMuPDF/tests.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12217 if g_exceptions_verbose > 1: exception_info()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12218 pass
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12219
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12220 if CJK_number < 0:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12221 try:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12222 CJK_number = CJK_list_s.index(fontname)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12223 serif = 1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12224 except Exception:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12225 # Verbose in PyMuPDF/tests.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12226 if g_exceptions_verbose > 1: exception_info()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12227 pass
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12228
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12229 if fontname.lower() in fitz_fontdescriptors.keys():
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12230 import pymupdf_fonts
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12231 fontbuffer = pymupdf_fonts.myfont(fontname) # make a copy
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12232 del pymupdf_fonts
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12233
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12234 # install the font for the page
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12235 if fontfile is not None:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12236 if type(fontfile) is str:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12237 fontfile_str = fontfile
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12238 elif hasattr(fontfile, "absolute"):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12239 fontfile_str = str(fontfile)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12240 elif hasattr(fontfile, "name"):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12241 fontfile_str = fontfile.name
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12242 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12243 raise ValueError("bad fontfile")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12244 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12245 fontfile_str = None
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12246 val = self._insertFont(fontname, bfname, fontfile_str, fontbuffer, set_simple, idx,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12247 wmode, serif, encoding, CJK_number)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12248
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12249 if not val: # did not work, error return
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12250 return val
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12251
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12252 xref = val[0] # xref of installed font
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12253 fontdict = val[1]
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12254
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12255 if CheckFontInfo(doc, xref): # check again: document already has this font
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12256 return xref # we are done
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12257
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12258 # need to create document font info
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12259 doc.get_char_widths(xref, fontdict=fontdict)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12260 return xref
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12261
39
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12262 def insert_htmlbox(
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12263 page,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12264 rect,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12265 text,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12266 *,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12267 css=None,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12268 scale_low=0,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12269 archive=None,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12270 rotate=0,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12271 oc=0,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12272 opacity=1,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12273 overlay=True,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12274 _scale_word_width=True,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12275 _verbose=False,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12276 ) -> tuple:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12277 """Insert text with optional HTML tags and stylings into a rectangle.
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12278
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12279 Args:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12280 rect: (rect-like) rectangle into which the text should be placed.
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12281 text: (str) text with optional HTML tags and stylings.
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12282 css: (str) CSS styling commands.
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12283 scale_low: (float) force-fit content by scaling it down. Must be in
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12284 range [0, 1]. If 1, no scaling will take place. If 0, arbitrary
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12285 down-scaling is acceptable. A value of 0.1 would mean that content
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12286 may be scaled down by at most 90%.
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12287 archive: Archive object pointing to locations of used fonts or images
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12288 rotate: (int) rotate the text in the box by a multiple of 90 degrees.
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12289 oc: (int) the xref of an OCG / OCMD (Optional Content).
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12290 opacity: (float) set opacity of inserted content.
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12291 overlay: (bool) put text on top of page content.
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12292 _scale_word_width: internal, for testing only.
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12293 _verbose: internal, for testing only.
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12294 Returns:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12295 A tuple of floats (spare_height, scale).
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12296 spare_height:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12297 The height of the remaining space in <rect> below the
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12298 text, or -1 if we failed to fit.
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12299 scale:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12300 The scaling required; `0 < scale <= 1`.
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12301 Will be less than `scale_low` if we failed to fit.
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12302 """
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12303 # normalize rotation angle
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12304 if not rotate % 90 == 0:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12305 raise ValueError("bad rotation angle")
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12306 while rotate < 0:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12307 rotate += 360
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12308 while rotate >= 360:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12309 rotate -= 360
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12310
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12311 if not 0 <= scale_low <= 1:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12312 raise ValueError("'scale_low' must be in [0, 1]")
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12313
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12314 if css is None:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12315 css = ""
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12316
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12317 rect = Rect(rect)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12318 if rotate in (90, 270):
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12319 temp_rect = Rect(0, 0, rect.height, rect.width)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12320 else:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12321 temp_rect = Rect(0, 0, rect.width, rect.height)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12322
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12323 # use a small border by default
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12324 mycss = "body {margin:1px;}" + css # append user CSS
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12325
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12326 # either make a story, or accept a given one
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12327 if isinstance(text, str): # if a string, convert to a Story
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12328 story = Story(html=text, user_css=mycss, archive=archive)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12329 elif isinstance(text, Story):
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12330 story = text
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12331 else:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12332 raise ValueError("'text' must be a string or a Story")
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12333
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12334 # ----------------------------------------------------------------
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12335 # Find a scaling factor that lets our story fit in. Instead of scaling
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12336 # the text smaller, we instead look at how much bigger the rect needs
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12337 # to be to fit the text, then reverse the scaling to get how much we
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12338 # need to scale down the text.
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12339 # ----------------------------------------------------------------
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12340 rect_scale_max = None if scale_low == 0 else 1 / scale_low
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12341
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12342 fit = story.fit_scale(
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12343 temp_rect,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12344 scale_min=1,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12345 scale_max=rect_scale_max,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12346 flags=mupdf.FZ_PLACE_STORY_FLAG_NO_OVERFLOW if _scale_word_width else 0,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12347 verbose=_verbose,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12348 )
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12349
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12350 if not fit.big_enough: # there was no fit
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12351 scale = 1 / fit.parameter
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12352 return (-1, scale)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12353
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12354 # fit.filled is a tuple; we convert it in place to a Rect for
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12355 # convenience. (fit.rect is already a Rect.)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12356 fit.filled = Rect(fit.filled)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12357 assert (fit.rect.x0, fit.rect.y0) == (0, 0)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12358 assert (fit.filled.x0, fit.filled.y0) == (0, 0)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12359
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12360 scale = 1 / fit.parameter
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12361 assert scale >= scale_low, f'{scale_low=} {scale=}'
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12362
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12363 spare_height = max((fit.rect.y1 - fit.filled.y1) * scale, 0)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12364
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12365 def rect_function(*args):
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12366 return fit.rect, fit.rect, None
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12367
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12368 # draw story on temp PDF page
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12369 doc = story.write_with_links(rect_function)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12370
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12371 # Insert opacity if requested.
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12372 # For this, we prepend a command to the /Contents.
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12373 if 0 <= opacity < 1:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12374 tpage = doc[0] # load page
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12375 # generate /ExtGstate for the page
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12376 alp0 = tpage._set_opacity(CA=opacity, ca=opacity)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12377 s = f"/{alp0} gs\n" # generate graphic state command
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12378 TOOLS._insert_contents(tpage, s.encode(), 0)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12379
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12380 # put result in target page
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12381 page.show_pdf_page(rect, doc, 0, rotate=rotate, oc=oc, overlay=overlay)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12382
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12383 # -------------------------------------------------------------------------
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12384 # re-insert links in target rect (show_pdf_page cannot copy annotations)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12385 # -------------------------------------------------------------------------
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12386 # scaled center point of fit.rect
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12387 mp1 = (fit.rect.tl + fit.rect.br) / 2 * scale
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12388
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12389 # center point of target rect
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12390 mp2 = (rect.tl + rect.br) / 2
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12391
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12392 # compute link positioning matrix:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12393 # - move center of scaled-down fit.rect to (0,0)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12394 # - rotate
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12395 # - move (0,0) to center of target rect
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12396 mat = (
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12397 Matrix(scale, 0, 0, scale, -mp1.x, -mp1.y)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12398 * Matrix(-rotate)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12399 * Matrix(1, 0, 0, 1, mp2.x, mp2.y)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12400 )
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12401
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12402 # copy over links
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12403 for link in doc[0].get_links():
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12404 link["from"] *= mat
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12405 page.insert_link(link)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12406
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12407 return spare_height, scale
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12408
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12409 def insert_image(
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12410 page,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12411 rect,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12412 *,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12413 alpha=-1,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12414 filename=None,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12415 height=0,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12416 keep_proportion=True,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12417 mask=None,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12418 oc=0,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12419 overlay=True,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12420 pixmap=None,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12421 rotate=0,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12422 stream=None,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12423 width=0,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12424 xref=0,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12425 ):
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12426 """Insert an image for display in a rectangle.
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12427
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12428 Args:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12429 rect: (rect_like) position of image on the page.
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12430 alpha: (int, optional) set to 0 if image has no transparency.
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12431 filename: (str, Path, file object) image filename.
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12432 height: (int)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12433 keep_proportion: (bool) keep width / height ratio (default).
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12434 mask: (bytes, optional) image consisting of alpha values to use.
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12435 oc: (int) xref of OCG or OCMD to declare as Optional Content.
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12436 overlay: (bool) put in foreground (default) or background.
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12437 pixmap: (pymupdf.Pixmap) use this as image.
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12438 rotate: (int) rotate by 0, 90, 180 or 270 degrees.
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12439 stream: (bytes) use this as image.
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12440 width: (int)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12441 xref: (int) use this as image.
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12442
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12443 'page' and 'rect' are positional, all other parameters are keywords.
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12444
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12445 If 'xref' is given, that image is used. Other input options are ignored.
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12446 Else, exactly one of pixmap, stream or filename must be given.
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12447
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12448 'alpha=0' for non-transparent images improves performance significantly.
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12449 Affects stream and filename only.
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12450
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12451 Optimum transparent insertions are possible by using filename / stream in
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12452 conjunction with a 'mask' image of alpha values.
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12453
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12454 Returns:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12455 xref (int) of inserted image. Re-use as argument for multiple insertions.
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12456 """
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12457 CheckParent(page)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12458 doc = page.parent
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12459 if not doc.is_pdf:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12460 raise ValueError("is no PDF")
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12461
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12462 if xref == 0 and (bool(filename) + bool(stream) + bool(pixmap) != 1):
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12463 raise ValueError("xref=0 needs exactly one of filename, pixmap, stream")
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12464
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12465 if filename:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12466 if type(filename) is str:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12467 pass
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12468 elif hasattr(filename, "absolute"):
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12469 filename = str(filename)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12470 elif hasattr(filename, "name"):
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12471 filename = filename.name
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12472 else:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12473 raise ValueError("bad filename")
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12474
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12475 if filename and not os.path.exists(filename):
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12476 raise FileNotFoundError("No such file: '%s'" % filename)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12477 elif stream and type(stream) not in (bytes, bytearray, io.BytesIO):
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12478 raise ValueError("stream must be bytes-like / BytesIO")
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12479 elif pixmap and type(pixmap) is not Pixmap:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12480 raise ValueError("pixmap must be a Pixmap")
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12481 if mask and not (stream or filename):
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12482 raise ValueError("mask requires stream or filename")
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12483 if mask and type(mask) not in (bytes, bytearray, io.BytesIO):
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12484 raise ValueError("mask must be bytes-like / BytesIO")
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12485 while rotate < 0:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12486 rotate += 360
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12487 while rotate >= 360:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12488 rotate -= 360
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12489 if rotate not in (0, 90, 180, 270):
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12490 raise ValueError("bad rotate value")
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12491
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12492 r = Rect(rect)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12493 if r.is_empty or r.is_infinite:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12494 raise ValueError("rect must be finite and not empty")
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12495 clip = r * ~page.transformation_matrix
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12496
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12497 # Create a unique image reference name.
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12498 ilst = [i[7] for i in doc.get_page_images(page.number)]
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12499 ilst += [i[1] for i in doc.get_page_xobjects(page.number)]
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12500 ilst += [i[4] for i in doc.get_page_fonts(page.number)]
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12501 n = "fzImg" # 'pymupdf image'
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12502 i = 0
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12503 _imgname = n + "0" # first name candidate
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12504 while _imgname in ilst:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12505 i += 1
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12506 _imgname = n + str(i) # try new name
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12507
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12508 if overlay:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12509 page.wrap_contents() # ensure a balanced graphics state
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12510 digests = doc.InsertedImages
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12511 xref, digests = page._insert_image(
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12512 filename=filename,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12513 pixmap=pixmap,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12514 stream=stream,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12515 imask=mask,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12516 clip=clip,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12517 overlay=overlay,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12518 oc=oc,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12519 xref=xref,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12520 rotate=rotate,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12521 keep_proportion=keep_proportion,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12522 width=width,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12523 height=height,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12524 alpha=alpha,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12525 _imgname=_imgname,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12526 digests=digests,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12527 )
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12528 if digests is not None:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12529 doc.InsertedImages = digests
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12530
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12531 return xref
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12532
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12533 def insert_link(page: 'Page', lnk: dict, mark: bool = True) -> None:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12534 """Insert a new link for the current page."""
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12535 CheckParent(page)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12536 annot = utils.getLinkText(page, lnk)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12537 if annot == "":
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12538 raise ValueError("link kind not supported")
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12539 page._addAnnot_FromString((annot,))
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12540
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12541 def insert_text(
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12542 page: 'Page',
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12543 point: point_like,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12544 text: typing.Union[str, list],
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12545 *,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12546 fontsize: float = 11,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12547 lineheight: OptFloat = None,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12548 fontname: str = "helv",
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12549 fontfile: OptStr = None,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12550 set_simple: int = 0,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12551 encoding: int = 0,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12552 color: OptSeq = None,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12553 fill: OptSeq = None,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12554 border_width: float = 0.05,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12555 miter_limit: float = 1,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12556 render_mode: int = 0,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12557 rotate: int = 0,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12558 morph: OptSeq = None,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12559 overlay: bool = True,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12560 stroke_opacity: float = 1,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12561 fill_opacity: float = 1,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12562 oc: int = 0,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12563 ):
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12564
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12565 img = page.new_shape()
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12566 rc = img.insert_text(
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12567 point,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12568 text,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12569 fontsize=fontsize,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12570 lineheight=lineheight,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12571 fontname=fontname,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12572 fontfile=fontfile,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12573 set_simple=set_simple,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12574 encoding=encoding,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12575 color=color,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12576 fill=fill,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12577 border_width=border_width,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12578 render_mode=render_mode,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12579 miter_limit=miter_limit,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12580 rotate=rotate,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12581 morph=morph,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12582 stroke_opacity=stroke_opacity,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12583 fill_opacity=fill_opacity,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12584 oc=oc,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12585 )
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12586 if rc >= 0:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12587 img.commit(overlay)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12588 return rc
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12589
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12590 def insert_textbox(
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12591 page: 'Page',
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12592 rect: rect_like,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12593 buffer: typing.Union[str, list],
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12594 *,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12595 fontname: str = "helv",
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12596 fontfile: OptStr = None,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12597 set_simple: int = 0,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12598 encoding: int = 0,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12599 fontsize: float = 11,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12600 lineheight: OptFloat = None,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12601 color: OptSeq = None,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12602 fill: OptSeq = None,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12603 expandtabs: int = 1,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12604 align: int = 0,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12605 rotate: int = 0,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12606 render_mode: int = 0,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12607 miter_limit: float = 1,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12608 border_width: float = 0.05,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12609 morph: OptSeq = None,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12610 overlay: bool = True,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12611 stroke_opacity: float = 1,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12612 fill_opacity: float = 1,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12613 oc: int = 0,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12614 ) -> float:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12615 """Insert text into a given rectangle.
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12616
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12617 Notes:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12618 Creates a Shape object, uses its same-named method and commits it.
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12619 Parameters:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12620 rect: (rect-like) area to use for text.
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12621 buffer: text to be inserted
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12622 fontname: a Base-14 font, font name or '/name'
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12623 fontfile: name of a font file
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12624 fontsize: font size
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12625 lineheight: overwrite the font property
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12626 color: RGB color triple
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12627 expandtabs: handles tabulators with string function
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12628 align: left, center, right, justified
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12629 rotate: 0, 90, 180, or 270 degrees
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12630 morph: morph box with a matrix and a fixpoint
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12631 overlay: put text in foreground or background
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12632 Returns:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12633 unused or deficit rectangle area (float)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12634 """
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12635 img = page.new_shape()
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12636 rc = img.insert_textbox(
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12637 rect,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12638 buffer,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12639 fontsize=fontsize,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12640 lineheight=lineheight,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12641 fontname=fontname,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12642 fontfile=fontfile,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12643 set_simple=set_simple,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12644 encoding=encoding,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12645 color=color,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12646 fill=fill,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12647 expandtabs=expandtabs,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12648 render_mode=render_mode,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12649 miter_limit=miter_limit,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12650 border_width=border_width,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12651 align=align,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12652 rotate=rotate,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12653 morph=morph,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12654 stroke_opacity=stroke_opacity,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12655 fill_opacity=fill_opacity,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12656 oc=oc,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12657 )
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12658 if rc >= 0:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12659 img.commit(overlay)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12660 return rc
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12661
1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12662 @property
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12663 def is_wrapped(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12664 """Check if /Contents is in a balanced graphics state."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12665 return self._count_q_balance() == (0, 0)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12666
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12667 @property
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12668 def language(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12669 """Page language."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12670 pdfpage = _as_pdf_page(self.this, required=False)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12671 if not pdfpage.m_internal:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12672 return
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12673 lang = mupdf.pdf_dict_get_inheritable(pdfpage.obj(), PDF_NAME('Lang'))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12674 if not lang.m_internal:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12675 return
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12676 return mupdf.pdf_to_str_buf(lang)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12677
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12678 def links(self, kinds=None):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12679 """ Generator over the links of a page.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12680
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12681 Args:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12682 kinds: (list) link kinds to subselect from. If none,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12683 all links are returned. E.g. kinds=[LINK_URI]
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12684 will only yield URI links.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12685 """
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12686 all_links = self.get_links()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12687 for link in all_links:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12688 if kinds is None or link["kind"] in kinds:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12689 yield (link)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12690
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12691 def load_annot(self, ident: typing.Union[str, int]) -> Annot:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12692 """Load an annot by name (/NM key) or xref.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12693
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12694 Args:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12695 ident: identifier, either name (str) or xref (int).
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12696 """
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12697 CheckParent(self)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12698 if type(ident) is str:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12699 xref = 0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12700 name = ident
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12701 elif type(ident) is int:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12702 xref = ident
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12703 name = None
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12704 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12705 raise ValueError("identifier must be a string or integer")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12706 val = self._load_annot(name, xref)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12707 if not val:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12708 return val
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12709 val.thisown = True
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12710 val.parent = weakref.proxy(self)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12711 self._annot_refs[id(val)] = val
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12712 return val
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12713
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12714 def load_links(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12715 """Get first Link."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12716 CheckParent(self)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12717 val = mupdf.fz_load_links( self.this)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12718 if not val.m_internal:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12719 return
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12720 val = Link( val)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12721 val.thisown = True
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12722 val.parent = weakref.proxy(self) # owning page object
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12723 self._annot_refs[id(val)] = val
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12724 val.xref = 0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12725 val.id = ""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12726 if self.parent.is_pdf:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12727 xrefs = self.annot_xrefs()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12728 xrefs = [x for x in xrefs if x[1] == mupdf.PDF_ANNOT_LINK]
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12729 if xrefs:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12730 link_id = xrefs[0]
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12731 val.xref = link_id[0]
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12732 val.id = link_id[2]
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12733 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12734 val.xref = 0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12735 val.id = ""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12736 return val
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12737
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12738 #----------------------------------------------------------------
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12739 # page load widget by xref
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12740 #----------------------------------------------------------------
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12741 def load_widget( self, xref):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12742 """Load a widget by its xref."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12743 CheckParent(self)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12744
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12745 page = _as_pdf_page(self.this)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12746 annot = JM_get_widget_by_xref( page, xref)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12747 #log( '{=type(annot)}')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12748 val = annot
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12749 if not val:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12750 return val
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12751 val.thisown = True
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12752 val.parent = weakref.proxy(self)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12753 self._annot_refs[id(val)] = val
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12754 widget = Widget()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12755 TOOLS._fill_widget(val, widget)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12756 val = widget
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12757 return val
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12758
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12759 @property
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12760 def mediabox(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12761 """The MediaBox."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12762 CheckParent(self)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12763 page = self._pdf_page(required=False)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12764 if not page.m_internal:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12765 rect = mupdf.fz_bound_page( self.this)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12766 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12767 rect = JM_mediabox( page.obj())
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12768 return Rect(rect)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12769
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12770 @property
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12771 def mediabox_size(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12772 return Point(self.mediabox.x1, self.mediabox.y1)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12773
39
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12774 def new_shape(self):
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12775 return Shape(self)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12776
1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12777 #@property
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12778 #def parent( self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12779 # assert self._parent
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12780 # if self._parent:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12781 # return self._parent
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12782 # return Document( self.this.document())
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12783
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12784 def read_contents(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12785 """All /Contents streams concatenated to one bytes object."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12786 return TOOLS._get_all_contents(self)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12787
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12788 def refresh(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12789 """Refresh page after link/annot/widget updates."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12790 CheckParent(self)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12791 doc = self.parent
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12792 page = doc.reload_page(self)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12793 # fixme this looks wrong.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12794 self.this = page
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12795
39
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12796 def replace_image(
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12797 page: 'Page',
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12798 xref: int,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12799 *,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12800 filename=None,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12801 pixmap=None,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12802 stream=None,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12803 ):
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12804 """Replace the image referred to by xref.
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12805
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12806 Replace the image by changing the object definition stored under xref. This
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12807 will leave the pages appearance instructions intact, so the new image is
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12808 being displayed with the same bbox, rotation etc.
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12809 By providing a small fully transparent image, an effect as if the image had
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12810 been deleted can be achieved.
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12811 A typical use may include replacing large images by a smaller version,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12812 e.g. with a lower resolution or graylevel instead of colored.
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12813
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12814 Args:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12815 xref: the xref of the image to replace.
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12816 filename, pixmap, stream: exactly one of these must be provided. The
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12817 meaning being the same as in Page.insert_image.
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12818 """
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12819 doc = page.parent # the owning document
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12820 if not doc.xref_is_image(xref):
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12821 raise ValueError("xref not an image") # insert new image anywhere in page
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12822 if bool(filename) + bool(stream) + bool(pixmap) != 1:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12823 raise ValueError("Exactly one of filename/stream/pixmap must be given")
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12824 new_xref = page.insert_image(
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12825 page.rect, filename=filename, stream=stream, pixmap=pixmap
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12826 )
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12827 doc.xref_copy(new_xref, xref) # copy over new to old
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12828 last_contents_xref = page.get_contents()[-1]
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12829 # new image insertion has created a new /Contents source,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12830 # which we will set to spaces now
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12831 doc.update_stream(last_contents_xref, b" ")
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12832 page._image_info = None # clear cache of extracted image information
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12833
1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12834 @property
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12835 def rotation(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12836 """Page rotation."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12837 CheckParent(self)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12838 page = _as_pdf_page(self.this, required=0)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12839 if not page.m_internal:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12840 return 0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12841 return JM_page_rotation(page)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12842
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12843 @property
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12844 def rotation_matrix(self) -> Matrix:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12845 """Reflects page rotation."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12846 return Matrix(TOOLS._rotate_matrix(self))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12847
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12848 def run(self, dw, m):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12849 """Run page through a device.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12850 dw: DeviceWrapper
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12851 """
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12852 CheckParent(self)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12853 mupdf.fz_run_page(self.this, dw.device, JM_matrix_from_py(m), mupdf.FzCookie())
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12854
39
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12855 def search_for(
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12856 page,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12857 text,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12858 *,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12859 clip=None,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12860 quads=False,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12861 flags=None,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12862 textpage=None,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12863 ) -> list:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12864 """Search for a string on a page.
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12865
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12866 Args:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12867 text: string to be searched for
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12868 clip: restrict search to this rectangle
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12869 quads: (bool) return quads instead of rectangles
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12870 flags: bit switches, default: join hyphened words
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12871 textpage: a pre-created pymupdf.TextPage
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12872 Returns:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12873 a list of rectangles or quads, each containing one occurrence.
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12874 """
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12875 if flags is None:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12876 flags=(0
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12877 | TEXT_DEHYPHENATE
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12878 | TEXT_PRESERVE_WHITESPACE
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12879 | TEXT_PRESERVE_LIGATURES
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12880 | TEXT_MEDIABOX_CLIP
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12881 )
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12882 if clip is not None:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12883 clip = Rect(clip)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12884
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12885 CheckParent(page)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12886 tp = textpage
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12887 if tp is None:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12888 tp = page.get_textpage(clip=clip, flags=flags) # create pymupdf.TextPage
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12889 elif getattr(tp, "parent") != page:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12890 raise ValueError("not a textpage of this page")
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12891 rlist = tp.search(text, quads=quads)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12892 if textpage is None:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12893 del tp
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12894 return rlist
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12895
1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12896 def set_artbox(self, rect):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12897 """Set the ArtBox."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12898 return self._set_pagebox("ArtBox", rect)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12899
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12900 def set_bleedbox(self, rect):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12901 """Set the BleedBox."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12902 return self._set_pagebox("BleedBox", rect)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12903
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12904 def set_contents(self, xref):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12905 """Set object at 'xref' as the page's /Contents."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12906 CheckParent(self)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12907 doc = self.parent
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12908 if doc.is_closed:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12909 raise ValueError("document closed")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12910 if not doc.is_pdf:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12911 raise ValueError("is no PDF")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12912 if xref not in range(1, doc.xref_length()):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12913 raise ValueError("bad xref")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12914 if not doc.xref_is_stream(xref):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12915 raise ValueError("xref is no stream")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12916 doc.xref_set_key(self.xref, "Contents", "%i 0 R" % xref)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12917
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12918 def set_cropbox(self, rect):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12919 """Set the CropBox. Will also change Page.rect."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12920 return self._set_pagebox("CropBox", rect)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12921
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12922 def set_language(self, language=None):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12923 """Set PDF page default language."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12924 CheckParent(self)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12925 pdfpage = _as_pdf_page(self.this)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12926 if not language:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12927 mupdf.pdf_dict_del(pdfpage.obj(), PDF_NAME('Lang'))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12928 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12929 lang = mupdf.fz_text_language_from_string(language)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12930 assert hasattr(mupdf, 'fz_string_from_text_language2')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12931 mupdf.pdf_dict_put_text_string(
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12932 pdfpage.obj,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12933 PDF_NAME('Lang'),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12934 mupdf.fz_string_from_text_language2(lang)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12935 )
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12936
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12937 def set_mediabox(self, rect):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12938 """Set the MediaBox."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12939 CheckParent(self)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12940 page = self._pdf_page()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12941 mediabox = JM_rect_from_py(rect)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12942 if (mupdf.fz_is_empty_rect(mediabox)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12943 or mupdf.fz_is_infinite_rect(mediabox)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12944 ):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12945 raise ValueError( MSG_BAD_RECT)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12946 mupdf.pdf_dict_put_rect( page.obj(), PDF_NAME('MediaBox'), mediabox)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12947 mupdf.pdf_dict_del( page.obj(), PDF_NAME('CropBox'))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12948 mupdf.pdf_dict_del( page.obj(), PDF_NAME('ArtBox'))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12949 mupdf.pdf_dict_del( page.obj(), PDF_NAME('BleedBox'))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12950 mupdf.pdf_dict_del( page.obj(), PDF_NAME('TrimBox'))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12951
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12952 def set_rotation(self, rotation):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12953 """Set page rotation."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12954 CheckParent(self)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12955 page = _as_pdf_page(self.this)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12956 rot = JM_norm_rotation(rotation)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12957 mupdf.pdf_dict_put_int( page.obj(), PDF_NAME('Rotate'), rot)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12958
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12959 def set_trimbox(self, rect):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12960 """Set the TrimBox."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12961 return self._set_pagebox("TrimBox", rect)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12962
39
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12963 def show_pdf_page(
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12964 page,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12965 rect,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12966 docsrc,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12967 pno=0,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12968 keep_proportion=True,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12969 overlay=True,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12970 oc=0,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12971 rotate=0,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12972 clip=None,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12973 ) -> int:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12974 """Show page number 'pno' of PDF 'docsrc' in rectangle 'rect'.
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12975
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12976 Args:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12977 rect: (rect-like) where to place the source image
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12978 docsrc: (document) source PDF
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12979 pno: (int) source page number
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12980 keep_proportion: (bool) do not change width-height-ratio
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12981 overlay: (bool) put in foreground
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12982 oc: (xref) make visibility dependent on this OCG / OCMD (which must be defined in the target PDF)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12983 rotate: (int) degrees (multiple of 90)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12984 clip: (rect-like) part of source page rectangle
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12985 Returns:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12986 xref of inserted object (for reuse)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12987 """
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12988 def calc_matrix(sr, tr, keep=True, rotate=0):
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12989 """Calculate transformation matrix from source to target rect.
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12990
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12991 Notes:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12992 The product of four matrices in this sequence: (1) translate correct
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12993 source corner to origin, (2) rotate, (3) scale, (4) translate to
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12994 target's top-left corner.
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12995 Args:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12996 sr: source rect in PDF (!) coordinate system
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12997 tr: target rect in PDF coordinate system
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12998 keep: whether to keep source ratio of width to height
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
12999 rotate: rotation angle in degrees
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
13000 Returns:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
13001 Transformation matrix.
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
13002 """
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
13003 # calc center point of source rect
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
13004 smp = (sr.tl + sr.br) / 2.0
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
13005 # calc center point of target rect
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
13006 tmp = (tr.tl + tr.br) / 2.0
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
13007
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
13008 # m moves to (0, 0), then rotates
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
13009 m = Matrix(1, 0, 0, 1, -smp.x, -smp.y) * Matrix(rotate)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
13010
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
13011 sr1 = sr * m # resulting source rect to calculate scale factors
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
13012
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
13013 fw = tr.width / sr1.width # scale the width
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
13014 fh = tr.height / sr1.height # scale the height
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
13015 if keep:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
13016 fw = fh = min(fw, fh) # take min if keeping aspect ratio
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
13017
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
13018 m *= Matrix(fw, fh) # concat scale matrix
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
13019 m *= Matrix(1, 0, 0, 1, tmp.x, tmp.y) # concat move to target center
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
13020 return JM_TUPLE(m)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
13021
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
13022 CheckParent(page)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
13023 doc = page.parent
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
13024
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
13025 if not doc.is_pdf or not docsrc.is_pdf:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
13026 raise ValueError("is no PDF")
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
13027
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
13028 if rect.is_empty or rect.is_infinite:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
13029 raise ValueError("rect must be finite and not empty")
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
13030
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
13031 while pno < 0: # support negative page numbers
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
13032 pno += docsrc.page_count
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
13033 src_page = docsrc[pno] # load source page
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
13034
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
13035 tar_rect = rect * ~page.transformation_matrix # target rect in PDF coordinates
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
13036
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
13037 src_rect = src_page.rect if not clip else src_page.rect & clip # source rect
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
13038 if src_rect.is_empty or src_rect.is_infinite:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
13039 raise ValueError("clip must be finite and not empty")
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
13040 src_rect = src_rect * ~src_page.transformation_matrix # ... in PDF coord
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
13041
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
13042 matrix = calc_matrix(src_rect, tar_rect, keep=keep_proportion, rotate=rotate)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
13043
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
13044 # list of existing /Form /XObjects
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
13045 ilst = [i[1] for i in doc.get_page_xobjects(page.number)]
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
13046 ilst += [i[7] for i in doc.get_page_images(page.number)]
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
13047 ilst += [i[4] for i in doc.get_page_fonts(page.number)]
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
13048
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
13049 # create a name not in that list
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
13050 n = "fzFrm"
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
13051 i = 0
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
13052 _imgname = n + "0"
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
13053 while _imgname in ilst:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
13054 i += 1
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
13055 _imgname = n + str(i)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
13056
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
13057 isrc = docsrc._graft_id # used as key for graftmaps
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
13058 if doc._graft_id == isrc:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
13059 raise ValueError("source document must not equal target")
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
13060
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
13061 # retrieve / make Graftmap for source PDF
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
13062 gmap = doc.Graftmaps.get(isrc, None)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
13063 if gmap is None:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
13064 gmap = Graftmap(doc)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
13065 doc.Graftmaps[isrc] = gmap
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
13066
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
13067 # take note of generated xref for automatic reuse
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
13068 pno_id = (isrc, pno) # id of docsrc[pno]
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
13069 xref = doc.ShownPages.get(pno_id, 0)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
13070
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
13071 if overlay:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
13072 page.wrap_contents() # ensure a balanced graphics state
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
13073 xref = page._show_pdf_page(
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
13074 src_page,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
13075 overlay=overlay,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
13076 matrix=matrix,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
13077 xref=xref,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
13078 oc=oc,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
13079 clip=src_rect,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
13080 graftmap=gmap,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
13081 _imgname=_imgname,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
13082 )
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
13083 doc.ShownPages[pno_id] = xref
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
13084
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
13085 return xref
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
13086
1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13087 @property
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13088 def transformation_matrix(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13089 """Page transformation matrix."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13090 CheckParent(self)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13091
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13092 ctm = mupdf.FzMatrix()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13093 page = self._pdf_page(required=False)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13094 if not page.m_internal:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13095 return JM_py_from_matrix(ctm)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13096 mediabox = mupdf.FzRect(mupdf.FzRect.Fixed_UNIT) # fixme: original code passed mediabox=NULL.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13097 mupdf.pdf_page_transform(page, mediabox, ctm)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13098 val = JM_py_from_matrix(ctm)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13099
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13100 if self.rotation % 360 == 0:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13101 val = Matrix(val)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13102 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13103 val = Matrix(1, 0, 0, -1, 0, self.cropbox.height)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13104 return val
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13105
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13106 @property
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13107 def trimbox(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13108 """The TrimBox"""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13109 rect = self._other_box("TrimBox")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13110 if rect is None:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13111 return self.cropbox
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13112 mb = self.mediabox
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13113 return Rect(rect[0], mb.y1 - rect[3], rect[2], mb.y1 - rect[1])
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13114
39
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
13115 def update_link(page: 'Page', lnk: dict) -> None:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
13116 """Update a link on the current page."""
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
13117 CheckParent(page)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
13118 annot = utils.getLinkText(page, lnk)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
13119 if annot == "":
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
13120 raise ValueError("link kind not supported")
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
13121
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
13122 page.parent.update_object(lnk["xref"], annot, page=page)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
13123
1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13124 def widgets(self, types=None):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13125 """ Generator over the widgets of a page.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13126
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13127 Args:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13128 types: (list) field types to subselect from. If none,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13129 all fields are returned. E.g. types=[PDF_WIDGET_TYPE_TEXT]
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13130 will only yield text fields.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13131 """
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13132 #for a in self.annot_xrefs():
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13133 # log( '{a=}')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13134 widget_xrefs = [a[0] for a in self.annot_xrefs() if a[1] == mupdf.PDF_ANNOT_WIDGET]
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13135 #log(f'widgets(): {widget_xrefs=}')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13136 for xref in widget_xrefs:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13137 widget = self.load_widget(xref)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13138 if types is None or widget.field_type in types:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13139 yield (widget)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13140
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13141 def wrap_contents(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13142 """Ensure page is in a balanced graphics state."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13143 push, pop = self._count_q_balance() # count missing "q"/"Q" commands
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13144 if push > 0: # prepend required push commands
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13145 prepend = b"q\n" * push
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13146 TOOLS._insert_contents(self, prepend, False)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13147 if pop > 0: # append required pop commands
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13148 append = b"\nQ" * pop + b"\n"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13149 TOOLS._insert_contents(self, append, True)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13150
39
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
13151 def write_text(
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
13152 page: 'Page',
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
13153 rect=None,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
13154 writers=None,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
13155 overlay=True,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
13156 color=None,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
13157 opacity=None,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
13158 keep_proportion=True,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
13159 rotate=0,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
13160 oc=0,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
13161 ) -> None:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
13162 """Write the text of one or more pymupdf.TextWriter objects.
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
13163
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
13164 Args:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
13165 rect: target rectangle. If None, the union of the text writers is used.
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
13166 writers: one or more pymupdf.TextWriter objects.
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
13167 overlay: put in foreground or background.
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
13168 keep_proportion: maintain aspect ratio of rectangle sides.
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
13169 rotate: arbitrary rotation angle.
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
13170 oc: the xref of an optional content object
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
13171 """
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
13172 assert isinstance(page, Page)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
13173 if not writers:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
13174 raise ValueError("need at least one pymupdf.TextWriter")
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
13175 if type(writers) is TextWriter:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
13176 if rotate == 0 and rect is None:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
13177 writers.write_text(page, opacity=opacity, color=color, overlay=overlay)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
13178 return None
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
13179 else:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
13180 writers = (writers,)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
13181 clip = writers[0].text_rect
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
13182 textdoc = Document()
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
13183 tpage = textdoc.new_page(width=page.rect.width, height=page.rect.height)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
13184 for writer in writers:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
13185 clip |= writer.text_rect
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
13186 writer.write_text(tpage, opacity=opacity, color=color)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
13187 if rect is None:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
13188 rect = clip
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
13189 page.show_pdf_page(
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
13190 rect,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
13191 textdoc,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
13192 0,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
13193 overlay=overlay,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
13194 keep_proportion=keep_proportion,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
13195 rotate=rotate,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
13196 clip=clip,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
13197 oc=oc,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
13198 )
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
13199 textdoc = None
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
13200 tpage = None
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
13201
1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13202 @property
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13203 def xref(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13204 """PDF xref number of page."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13205 CheckParent(self)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13206 return self.parent.page_xref(self.number)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13207
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13208 rect = property(bound, doc="page rectangle")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13209
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13210
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13211 class Pixmap:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13212
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13213 def __init__(self, *args):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13214 """
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13215 Pixmap(colorspace, irect, alpha) - empty pixmap.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13216 Pixmap(colorspace, src) - copy changing colorspace.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13217 Pixmap(src, width, height,[clip]) - scaled copy, float dimensions.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13218 Pixmap(src, alpha=1) - copy and add or drop alpha channel.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13219 Pixmap(filename) - from an image in a file.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13220 Pixmap(image) - from an image in memory (bytes).
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13221 Pixmap(colorspace, width, height, samples, alpha) - from samples data.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13222 Pixmap(PDFdoc, xref) - from an image at xref in a PDF document.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13223 """
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13224 # Cache for property `self.samples_mv`. Set here so __del_() sees it if
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13225 # we raise.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13226 #
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13227 self._samples_mv = None
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13228
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13229 # 2024-01-16: Experimental support for a memory-view of the underlying
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13230 # data. Doesn't seem to make much difference to Pixmap.set_pixel() so
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13231 # not currently used.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13232 self._memory_view = None
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13233
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13234 if 0:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13235 pass
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13236
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13237 elif args_match(args,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13238 (Colorspace, mupdf.FzColorspace),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13239 (mupdf.FzRect, mupdf.FzIrect, IRect, Rect, tuple)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13240 ):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13241 # create empty pixmap with colorspace and IRect
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13242 cs, rect = args
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13243 alpha = 0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13244 pm = mupdf.fz_new_pixmap_with_bbox(cs, JM_irect_from_py(rect), mupdf.FzSeparations(0), alpha)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13245 self.this = pm
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13246
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13247 elif args_match(args,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13248 (Colorspace, mupdf.FzColorspace),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13249 (mupdf.FzRect, mupdf.FzIrect, IRect, Rect, tuple),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13250 (int, bool)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13251 ):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13252 # create empty pixmap with colorspace and IRect
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13253 cs, rect, alpha = args
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13254 pm = mupdf.fz_new_pixmap_with_bbox(cs, JM_irect_from_py(rect), mupdf.FzSeparations(0), alpha)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13255 self.this = pm
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13256
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13257 elif args_match(args, (Colorspace, mupdf.FzColorspace, type(None)), (Pixmap, mupdf.FzPixmap)):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13258 # copy pixmap, converting colorspace
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13259 cs, spix = args
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13260 if isinstance(cs, Colorspace):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13261 cs = cs.this
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13262 elif cs is None:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13263 cs = mupdf.FzColorspace(None)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13264 if isinstance(spix, Pixmap):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13265 spix = spix.this
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13266 if not mupdf.fz_pixmap_colorspace(spix).m_internal:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13267 raise ValueError( "source colorspace must not be None")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13268
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13269 if cs.m_internal:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13270 self.this = mupdf.fz_convert_pixmap(
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13271 spix,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13272 cs,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13273 mupdf.FzColorspace(),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13274 mupdf.FzDefaultColorspaces(None),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13275 mupdf.FzColorParams(),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13276 1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13277 )
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13278 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13279 self.this = mupdf.fz_new_pixmap_from_alpha_channel( spix)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13280 if not self.this.m_internal:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13281 raise RuntimeError( MSG_PIX_NOALPHA)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13282
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13283 elif args_match(args, (Pixmap, mupdf.FzPixmap), (Pixmap, mupdf.FzPixmap)):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13284 # add mask to a pixmap w/o alpha channel
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13285 spix, mpix = args
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13286 if isinstance(spix, Pixmap):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13287 spix = spix.this
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13288 if isinstance(mpix, Pixmap):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13289 mpix = mpix.this
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13290 spm = spix
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13291 mpm = mpix
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13292 if not spix.m_internal: # intercept NULL for spix: make alpha only pix
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13293 dst = mupdf.fz_new_pixmap_from_alpha_channel(mpm)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13294 if not dst.m_internal:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13295 raise RuntimeError( MSG_PIX_NOALPHA)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13296 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13297 dst = mupdf.fz_new_pixmap_from_color_and_mask(spm, mpm)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13298 self.this = dst
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13299
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13300 elif (args_match(args, (Pixmap, mupdf.FzPixmap), (float, int), (float, int), None) or
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13301 args_match(args, (Pixmap, mupdf.FzPixmap), (float, int), (float, int))):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13302 # create pixmap as scaled copy of another one
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13303 if len(args) == 3:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13304 spix, w, h = args
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13305 bbox = mupdf.FzIrect(mupdf.fz_infinite_irect)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13306 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13307 spix, w, h, clip = args
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13308 bbox = JM_irect_from_py(clip)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13309
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13310 src_pix = spix.this if isinstance(spix, Pixmap) else spix
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13311 if not mupdf.fz_is_infinite_irect(bbox):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13312 pm = mupdf.fz_scale_pixmap(src_pix, src_pix.x(), src_pix.y(), w, h, bbox)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13313 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13314 pm = mupdf.fz_scale_pixmap(src_pix, src_pix.x(), src_pix.y(), w, h, mupdf.FzIrect(mupdf.fz_infinite_irect))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13315 self.this = pm
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13316
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13317 elif args_match(args, str, (Pixmap, mupdf.FzPixmap)) and args[0] == 'raw':
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13318 # Special raw construction where we set .this directly.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13319 _, pm = args
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13320 if isinstance(pm, Pixmap):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13321 pm = pm.this
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13322 self.this = pm
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13323
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13324 elif args_match(args, (Pixmap, mupdf.FzPixmap), (int, None)):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13325 # Pixmap(struct Pixmap *spix, int alpha=1)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13326 # copy pixmap & add / drop the alpha channel
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13327 spix = args[0]
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13328 alpha = args[1] if len(args) == 2 else 1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13329 src_pix = spix.this if isinstance(spix, Pixmap) else spix
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13330 if not _INRANGE(alpha, 0, 1):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13331 raise ValueError( "bad alpha value")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13332 cs = mupdf.fz_pixmap_colorspace(src_pix)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13333 if not cs.m_internal and not alpha:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13334 raise ValueError( "cannot drop alpha for 'NULL' colorspace")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13335 seps = mupdf.FzSeparations()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13336 n = mupdf.fz_pixmap_colorants(src_pix)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13337 w = mupdf.fz_pixmap_width(src_pix)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13338 h = mupdf.fz_pixmap_height(src_pix)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13339 pm = mupdf.fz_new_pixmap(cs, w, h, seps, alpha)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13340 pm.m_internal.x = src_pix.m_internal.x
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13341 pm.m_internal.y = src_pix.m_internal.y
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13342 pm.m_internal.xres = src_pix.m_internal.xres
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13343 pm.m_internal.yres = src_pix.m_internal.yres
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13344
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13345 # copy samples data ------------------------------------------
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13346 if 1:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13347 # We use our pixmap_copy() to get best performance.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13348 # test_pixmap.py:test_setalpha(): 3.9s t=0.0062
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13349 extra.pixmap_copy( pm.m_internal, src_pix.m_internal, n)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13350 elif 1:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13351 # Use memoryview.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13352 # test_pixmap.py:test_setalpha(): 4.6 t=0.51
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13353 src_view = mupdf.fz_pixmap_samples_memoryview( src_pix)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13354 pm_view = mupdf.fz_pixmap_samples_memoryview( pm)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13355 if src_pix.alpha() == pm.alpha(): # identical samples
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13356 #memcpy(tptr, sptr, w * h * (n + alpha));
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13357 size = w * h * (n + alpha)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13358 pm_view[ 0 : size] = src_view[ 0 : size]
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13359 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13360 tptr = 0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13361 sptr = 0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13362 # This is a little faster than calling
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13363 # pm.fz_samples_set(), but still quite slow. E.g. reduces
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13364 # test_pixmap.py:test_setalpha() from 6.7s to 4.5s.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13365 #
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13366 # t=0.53
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13367 pm_stride = pm.stride()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13368 pm_n = pm.n()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13369 pm_alpha = pm.alpha()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13370 src_stride = src_pix.stride()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13371 src_n = src_pix.n()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13372 #log( '{=pm_stride pm_n src_stride src_n}')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13373 for y in range( h):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13374 for x in range( w):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13375 pm_i = pm_stride * y + pm_n * x
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13376 src_i = src_stride * y + src_n * x
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13377 pm_view[ pm_i : pm_i + n] = src_view[ src_i : src_i + n]
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13378 if pm_alpha:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13379 pm_view[ pm_i + n] = 255
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13380 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13381 # Copy individual bytes from Python. Very slow.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13382 # test_pixmap.py:test_setalpha(): 6.89 t=2.601
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13383 if src_pix.alpha() == pm.alpha(): # identical samples
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13384 #memcpy(tptr, sptr, w * h * (n + alpha));
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13385 for i in range(w * h * (n + alpha)):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13386 mupdf.fz_samples_set(pm, i, mupdf.fz_samples_get(src_pix, i))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13387 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13388 # t=2.56
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13389 tptr = 0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13390 sptr = 0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13391 src_pix_alpha = src_pix.alpha()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13392 for i in range(w * h):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13393 #memcpy(tptr, sptr, n);
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13394 for j in range(n):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13395 mupdf.fz_samples_set(pm, tptr + j, mupdf.fz_samples_get(src_pix, sptr + j))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13396 tptr += n
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13397 if pm.alpha():
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13398 mupdf.fz_samples_set(pm, tptr, 255)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13399 tptr += 1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13400 sptr += n + src_pix_alpha
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13401 self.this = pm
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13402
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13403 elif args_match(args, (mupdf.FzColorspace, Colorspace), int, int, None, (int, bool)):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13404 # create pixmap from samples data
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13405 cs, w, h, samples, alpha = args
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13406 if isinstance(cs, Colorspace):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13407 cs = cs.this
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13408 assert isinstance(cs, mupdf.FzColorspace)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13409 n = mupdf.fz_colorspace_n(cs)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13410 stride = (n + alpha) * w
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13411 seps = mupdf.FzSeparations()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13412 pm = mupdf.fz_new_pixmap(cs, w, h, seps, alpha)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13413
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13414 if isinstance( samples, (bytes, bytearray)):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13415 #log('using mupdf.python_buffer_data()')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13416 samples2 = mupdf.python_buffer_data(samples)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13417 size = len(samples)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13418 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13419 res = JM_BufferFromBytes(samples)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13420 if not res.m_internal:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13421 raise ValueError( "bad samples data")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13422 size, c = mupdf.fz_buffer_storage(res)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13423 samples2 = mupdf.python_buffer_data(samples) # raw swig proxy for `const unsigned char*`.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13424 if stride * h != size:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13425 raise ValueError( f"bad samples length {w=} {h=} {alpha=} {n=} {stride=} {size=}")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13426 mupdf.ll_fz_pixmap_copy_raw( pm.m_internal, samples2)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13427 self.this = pm
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13428
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13429 elif args_match(args, None):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13430 # create pixmap from filename, file object, pathlib.Path or memory
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13431 imagedata, = args
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13432 name = 'name'
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13433 if hasattr(imagedata, "resolve"):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13434 fname = imagedata.__str__()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13435 if fname:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13436 img = mupdf.fz_new_image_from_file(fname)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13437 elif hasattr(imagedata, name):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13438 fname = imagedata.name
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13439 if fname:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13440 img = mupdf.fz_new_image_from_file(fname)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13441 elif isinstance(imagedata, str):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13442 img = mupdf.fz_new_image_from_file(imagedata)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13443 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13444 res = JM_BufferFromBytes(imagedata)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13445 if not res.m_internal or not res.m_internal.len:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13446 raise ValueError( "bad image data")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13447 img = mupdf.fz_new_image_from_buffer(res)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13448
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13449 # Original code passed null for subarea and ctm, but that's not
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13450 # possible with MuPDF's python bindings. The equivalent is an
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13451 # infinite rect and identify matrix scaled by img.w() and img.h().
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13452 pm, w, h = mupdf.fz_get_pixmap_from_image(
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13453 img,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13454 mupdf.FzIrect(FZ_MIN_INF_RECT, FZ_MIN_INF_RECT, FZ_MAX_INF_RECT, FZ_MAX_INF_RECT),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13455 mupdf.FzMatrix( img.w(), 0, 0, img.h(), 0, 0),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13456 )
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13457 xres, yres = mupdf.fz_image_resolution(img)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13458 pm.m_internal.xres = xres
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13459 pm.m_internal.yres = yres
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13460 self.this = pm
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13461
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13462 elif args_match(args, (Document, mupdf.FzDocument), int):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13463 # Create pixmap from PDF image identified by XREF number
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13464 doc, xref = args
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13465 pdf = _as_pdf_document(doc)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13466 xreflen = mupdf.pdf_xref_len(pdf)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13467 if not _INRANGE(xref, 1, xreflen-1):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13468 raise ValueError( MSG_BAD_XREF)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13469 ref = mupdf.pdf_new_indirect(pdf, xref, 0)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13470 type_ = mupdf.pdf_dict_get(ref, PDF_NAME('Subtype'))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13471 if (not mupdf.pdf_name_eq(type_, PDF_NAME('Image'))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13472 and not mupdf.pdf_name_eq(type_, PDF_NAME('Alpha'))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13473 and not mupdf.pdf_name_eq(type_, PDF_NAME('Luminosity'))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13474 ):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13475 raise ValueError( MSG_IS_NO_IMAGE)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13476 img = mupdf.pdf_load_image(pdf, ref)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13477 # Original code passed null for subarea and ctm, but that's not
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13478 # possible with MuPDF's python bindings. The equivalent is an
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13479 # infinite rect and identify matrix scaled by img.w() and img.h().
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13480 pix, w, h = mupdf.fz_get_pixmap_from_image(
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13481 img,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13482 mupdf.FzIrect(FZ_MIN_INF_RECT, FZ_MIN_INF_RECT, FZ_MAX_INF_RECT, FZ_MAX_INF_RECT),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13483 mupdf.FzMatrix(img.w(), 0, 0, img.h(), 0, 0),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13484 )
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13485 self.this = pix
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13486
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13487 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13488 text = 'Unrecognised args for constructing Pixmap:\n'
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13489 for arg in args:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13490 text += f' {type(arg)}: {arg}\n'
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13491 raise Exception( text)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13492
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13493 def __len__(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13494 return self.size
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13495
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13496 def __repr__(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13497 if not type(self) is Pixmap: return
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13498 if self.colorspace:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13499 return "Pixmap(%s, %s, %s)" % (self.colorspace.this.m_internal.name, self.irect, self.alpha)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13500 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13501 return "Pixmap(%s, %s, %s)" % ('None', self.irect, self.alpha)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13502
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13503 def _tobytes(self, format_, jpg_quality):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13504 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13505 Pixmap._tobytes
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13506 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13507 pm = self.this
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13508 size = mupdf.fz_pixmap_stride(pm) * pm.h()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13509 res = mupdf.fz_new_buffer(size)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13510 out = mupdf.FzOutput(res)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13511 if format_ == 1: mupdf.fz_write_pixmap_as_png(out, pm)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13512 elif format_ == 2: mupdf.fz_write_pixmap_as_pnm(out, pm)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13513 elif format_ == 3: mupdf.fz_write_pixmap_as_pam(out, pm)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13514 elif format_ == 5: mupdf.fz_write_pixmap_as_psd(out, pm)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13515 elif format_ == 6: mupdf.fz_write_pixmap_as_ps(out, pm)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13516 elif format_ == 7:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13517 mupdf.fz_write_pixmap_as_jpeg(out, pm, jpg_quality, 0)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13518 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13519 mupdf.fz_write_pixmap_as_png(out, pm)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13520 out.fz_close_output()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13521 barray = JM_BinFromBuffer(res)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13522 return barray
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13523
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13524 def _writeIMG(self, filename, format_, jpg_quality):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13525 pm = self.this
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13526 if format_ == 1: mupdf.fz_save_pixmap_as_png(pm, filename)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13527 elif format_ == 2: mupdf.fz_save_pixmap_as_pnm(pm, filename)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13528 elif format_ == 3: mupdf.fz_save_pixmap_as_pam(pm, filename)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13529 elif format_ == 5: mupdf.fz_save_pixmap_as_psd(pm, filename)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13530 elif format_ == 6: mupdf.fz_save_pixmap_as_ps(pm, filename)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13531 elif format_ == 7: mupdf.fz_save_pixmap_as_jpeg(pm, filename, jpg_quality)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13532 else: mupdf.fz_save_pixmap_as_png(pm, filename)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13533
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13534 @property
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13535 def alpha(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13536 """Indicates presence of alpha channel."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13537 return mupdf.fz_pixmap_alpha(self.this)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13538
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13539 def clear_with(self, value=None, bbox=None):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13540 """Fill all color components with same value."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13541 if value is None:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13542 mupdf.fz_clear_pixmap(self.this)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13543 elif bbox is None:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13544 mupdf.fz_clear_pixmap_with_value(self.this, value)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13545 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13546 JM_clear_pixmap_rect_with_value(self.this, value, JM_irect_from_py(bbox))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13547
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13548 def color_count(self, colors=0, clip=None):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13549 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13550 Return count of each color.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13551 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13552 pm = self.this
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13553 rc = JM_color_count( pm, clip)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13554 if not colors:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13555 return len( rc)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13556 return rc
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13557
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13558 def color_topusage(self, clip=None):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13559 """Return most frequent color and its usage ratio."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13560 allpixels = 0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13561 cnt = 0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13562 if clip is not None and self.irect in Rect(clip):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13563 clip = self.irect
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13564 for pixel, count in self.color_count(colors=True,clip=clip).items():
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13565 allpixels += count
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13566 if count > cnt:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13567 cnt = count
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13568 maxpixel = pixel
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13569 if not allpixels:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13570 return (1, bytes([255] * self.n))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13571 return (cnt / allpixels, maxpixel)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13572
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13573 @property
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13574 def colorspace(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13575 """Pixmap Colorspace."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13576 cs = Colorspace(mupdf.fz_pixmap_colorspace(self.this))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13577 if cs.name == "None":
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13578 return None
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13579 return cs
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13580
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13581 def copy(self, src, bbox):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13582 """Copy bbox from another Pixmap."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13583 pm = self.this
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13584 src_pix = src.this
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13585 if not mupdf.fz_pixmap_colorspace(src_pix):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13586 raise ValueError( "cannot copy pixmap with NULL colorspace")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13587 if pm.alpha() != src_pix.alpha():
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13588 raise ValueError( "source and target alpha must be equal")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13589 mupdf.fz_copy_pixmap_rect(pm, src_pix, JM_irect_from_py(bbox), mupdf.FzDefaultColorspaces(None))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13590
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13591 @property
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13592 def digest(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13593 """MD5 digest of pixmap (bytes)."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13594 ret = mupdf.fz_md5_pixmap2(self.this)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13595 return bytes(ret)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13596
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13597 def gamma_with(self, gamma):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13598 """Apply correction with some float.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13599 gamma=1 is a no-op."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13600 if not mupdf.fz_pixmap_colorspace( self.this):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13601 message_warning("colorspace invalid for function")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13602 return
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13603 mupdf.fz_gamma_pixmap( self.this, gamma)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13604
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13605 @property
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13606 def h(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13607 """The height."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13608 return mupdf.fz_pixmap_height(self.this)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13609
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13610 def invert_irect(self, bbox=None):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13611 """Invert the colors inside a bbox."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13612 pm = self.this
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13613 if not mupdf.fz_pixmap_colorspace(pm).m_internal:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13614 message_warning("ignored for stencil pixmap")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13615 return False
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13616 r = JM_irect_from_py(bbox)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13617 if mupdf.fz_is_infinite_irect(r):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13618 mupdf.fz_invert_pixmap(pm)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13619 return True
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13620 mupdf.fz_invert_pixmap_rect(pm, r)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13621 return True
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13622
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13623 @property
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13624 def irect(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13625 """Pixmap bbox - an IRect object."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13626 val = mupdf.fz_pixmap_bbox(self.this)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13627 return JM_py_from_irect( val)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13628
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13629 @property
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13630 def is_monochrome(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13631 """Check if pixmap is monochrome."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13632 return mupdf.fz_is_pixmap_monochrome( self.this)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13633
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13634 @property
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13635 def is_unicolor(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13636 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13637 Check if pixmap has only one color.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13638 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13639 pm = self.this
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13640 n = pm.n()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13641 count = pm.w() * pm.h() * n
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13642 def _pixmap_read_samples(pm, offset, n):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13643 ret = list()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13644 for i in range(n):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13645 ret.append(mupdf.fz_samples_get(pm, offset+i))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13646 return ret
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13647 for offset in range( 0, count, n):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13648 if offset == 0:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13649 sample0 = _pixmap_read_samples( pm, 0, n)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13650 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13651 sample = _pixmap_read_samples( pm, offset, n)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13652 if sample != sample0:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13653 return False
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13654 return True
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13655
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13656 @property
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13657 def n(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13658 """The size of one pixel."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13659 if g_use_extra:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13660 # Setting self.__class__.n gives a small reduction in overhead of
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13661 # test_general.py:test_2093, e.g. 1.4x -> 1.3x.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13662 #return extra.pixmap_n(self.this)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13663 def n2(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13664 return extra.pixmap_n(self.this)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13665 self.__class__.n = property(n2)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13666 return self.n
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13667 return mupdf.fz_pixmap_components(self.this)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13668
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13669 def pdfocr_save(self, filename, compress=1, language=None, tessdata=None):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13670 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13671 Save pixmap as an OCR-ed PDF page.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13672 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13673 tessdata = get_tessdata(tessdata)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13674 opts = mupdf.FzPdfocrOptions()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13675 opts.compress = compress
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13676 if language:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13677 opts.language_set2( language)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13678 if tessdata:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13679 opts.datadir_set2( tessdata)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13680 pix = self.this
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13681 if isinstance(filename, str):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13682 mupdf.fz_save_pixmap_as_pdfocr( pix, filename, 0, opts)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13683 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13684 out = JM_new_output_fileptr( filename)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13685 try:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13686 mupdf.fz_write_pixmap_as_pdfocr( out, pix, opts)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13687 finally:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13688 out.fz_close_output() # Avoid MuPDF warning.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13689
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13690 def pdfocr_tobytes(self, compress=True, language="eng", tessdata=None):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13691 """Save pixmap as an OCR-ed PDF page.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13692
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13693 Args:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13694 compress: (bool) compress, default 1 (True).
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13695 language: (str) language(s) occurring on page, default "eng" (English),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13696 multiples like "eng+ger" for English and German.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13697 tessdata: (str) folder name of Tesseract's language support. If None
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13698 we use environment variable TESSDATA_PREFIX or search for
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13699 Tesseract installation.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13700 Notes:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13701 On failure, make sure Tesseract is installed and you have set
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13702 <tessdata> or environment variable "TESSDATA_PREFIX" to the folder
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13703 containing your Tesseract's language support data.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13704 """
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13705 tessdata = get_tessdata(tessdata)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13706 from io import BytesIO
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13707 bio = BytesIO()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13708 self.pdfocr_save(bio, compress=compress, language=language, tessdata=tessdata)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13709 return bio.getvalue()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13710
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13711 def pil_image(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13712 """Create a Pillow Image from the Pixmap."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13713 try:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13714 from PIL import Image
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13715 except ImportError:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13716 message("PIL/Pillow not installed")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13717 raise
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13718
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13719 cspace = self.colorspace
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13720 if not cspace:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13721 mode = "L"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13722 elif cspace.n == 1:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13723 mode = "L" if not self.alpha else "LA"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13724 elif cspace.n == 3:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13725 mode = "RGB" if not self.alpha else "RGBA"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13726 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13727 mode = "CMYK"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13728
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13729 img = Image.frombytes(mode, (self.width, self.height), self.samples)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13730 return img
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13731
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13732 def pil_save(self, *args, **kwargs):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13733 """Write to image file using Pillow.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13734
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13735 An intermediate PIL Image is created, and its "save" method is used
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13736 to store the image. See Pillow documentation to learn about the
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13737 meaning of possible positional and keyword parameters.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13738 Use this when other output formats are desired.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13739 """
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13740 img = self.pil_image()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13741
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13742 if "dpi" not in kwargs.keys():
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13743 kwargs["dpi"] = (self.xres, self.yres)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13744
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13745 img.save(*args, **kwargs)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13746
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13747 def pil_tobytes(self, *args, **kwargs):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13748 """Convert to an image in memory using Pillow.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13749
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13750 An intermediate PIL Image is created, and its "save" method is used
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13751 to store the image. See Pillow documentation to learn about the
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13752 meaning of possible positional or keyword parameters.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13753 Use this when other output formats are desired.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13754 """
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13755 bytes_out = io.BytesIO()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13756 img = self.pil_image()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13757
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13758 if "dpi" not in kwargs.keys():
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13759 kwargs["dpi"] = (self.xres, self.yres)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13760
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13761 img.save(bytes_out, *args, **kwargs)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13762 return bytes_out.getvalue()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13763
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13764 def pixel(self, x, y):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13765 """Get color tuple of pixel (x, y).
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13766 Last item is the alpha if Pixmap.alpha is true."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13767 if g_use_extra:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13768 return extra.pixmap_pixel(self.this.m_internal, x, y)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13769 if (0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13770 or x < 0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13771 or x >= self.this.m_internal.w
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13772 or y < 0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13773 or y >= self.this.m_internal.h
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13774 ):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13775 RAISEPY(MSG_PIXEL_OUTSIDE, PyExc_ValueError)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13776 n = self.this.m_internal.n
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13777 stride = self.this.m_internal.stride
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13778 i = stride * y + n * x
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13779 ret = tuple( self.samples_mv[ i: i+n])
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13780 return ret
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13781
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13782 @property
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13783 def samples(self)->bytes:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13784 mv = self.samples_mv
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13785 return bytes( mv)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13786
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13787 @property
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13788 def samples_mv(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13789 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13790 Pixmap samples memoryview.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13791 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13792 # We remember the returned memoryview so that our `__del__()` can
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13793 # release it; otherwise accessing it after we have been destructed will
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13794 # fail, possibly crashing Python; this is #4155.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13795 #
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13796 if self._samples_mv is None:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13797 self._samples_mv = mupdf.fz_pixmap_samples_memoryview(self.this)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13798 return self._samples_mv
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13799
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13800 def _samples_mv_release(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13801 if self._samples_mv:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13802 self._samples_mv.release()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13803
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13804 @property
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13805 def samples_ptr(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13806 return mupdf.fz_pixmap_samples_int(self.this)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13807
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13808 def save(self, filename, output=None, jpg_quality=95):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13809 """Output as image in format determined by filename extension.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13810
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13811 Args:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13812 output: (str) only use to overrule filename extension. Default is PNG.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13813 Others are JPEG, JPG, PNM, PGM, PPM, PBM, PAM, PSD, PS.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13814 """
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13815 valid_formats = {
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13816 "png": 1,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13817 "pnm": 2,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13818 "pgm": 2,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13819 "ppm": 2,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13820 "pbm": 2,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13821 "pam": 3,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13822 "psd": 5,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13823 "ps": 6,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13824 "jpg": 7,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13825 "jpeg": 7,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13826 }
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13827
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13828 if type(filename) is str:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13829 pass
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13830 elif hasattr(filename, "absolute"):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13831 filename = str(filename)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13832 elif hasattr(filename, "name"):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13833 filename = filename.name
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13834 if output is None:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13835 _, ext = os.path.splitext(filename)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13836 output = ext[1:]
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13837
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13838 idx = valid_formats.get(output.lower(), None)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13839 if idx is None:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13840 raise ValueError(f"Image format {output} not in {tuple(valid_formats.keys())}")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13841 if self.alpha and idx in (2, 6, 7):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13842 raise ValueError("'%s' cannot have alpha" % output)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13843 if self.colorspace and self.colorspace.n > 3 and idx in (1, 2, 4):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13844 raise ValueError(f"unsupported colorspace for '{output}'")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13845 if idx == 7:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13846 self.set_dpi(self.xres, self.yres)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13847 return self._writeIMG(filename, idx, jpg_quality)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13848
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13849 def set_alpha(self, alphavalues=None, premultiply=1, opaque=None, matte=None):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13850 """Set alpha channel to values contained in a byte array.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13851 If omitted, set alphas to 255.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13852
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13853 Args:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13854 alphavalues: (bytes) with length (width * height) or 'None'.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13855 premultiply: (bool, True) premultiply colors with alpha values.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13856 opaque: (tuple, length colorspace.n) this color receives opacity 0.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13857 matte: (tuple, length colorspace.n)) preblending background color.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13858 """
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13859 pix = self.this
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13860 alpha = 0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13861 m = 0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13862 if pix.alpha() == 0:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13863 raise ValueError( MSG_PIX_NOALPHA)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13864 n = mupdf.fz_pixmap_colorants(pix)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13865 w = mupdf.fz_pixmap_width(pix)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13866 h = mupdf.fz_pixmap_height(pix)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13867 balen = w * h * (n+1)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13868 colors = [0, 0, 0, 0] # make this color opaque
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13869 bgcolor = [0, 0, 0, 0] # preblending background color
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13870 zero_out = 0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13871 bground = 0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13872 if opaque and isinstance(opaque, (list, tuple)) and len(opaque) == n:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13873 for i in range(n):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13874 colors[i] = opaque[i]
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13875 zero_out = 1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13876 if matte and isinstance( matte, (tuple, list)) and len(matte) == n:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13877 for i in range(n):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13878 bgcolor[i] = matte[i]
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13879 bground = 1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13880 data = bytes()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13881 data_len = 0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13882 if alphavalues:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13883 #res = JM_BufferFromBytes(alphavalues)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13884 #data_len, data = mupdf.fz_buffer_storage(res)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13885 #if data_len < w * h:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13886 # THROWMSG("bad alpha values")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13887 # fixme: don't seem to need to create an fz_buffer - can
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13888 # use <alphavalues> directly?
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13889 if isinstance(alphavalues, (bytes, bytearray)):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13890 data = alphavalues
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13891 data_len = len(alphavalues)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13892 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13893 assert 0, f'unexpected type for alphavalues: {type(alphavalues)}'
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13894 if data_len < w * h:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13895 raise ValueError( "bad alpha values")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13896 if 1:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13897 # Use C implementation for speed.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13898 mupdf.Pixmap_set_alpha_helper(
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13899 balen,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13900 n,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13901 data_len,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13902 zero_out,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13903 mupdf.python_buffer_data( data),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13904 pix.m_internal,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13905 premultiply,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13906 bground,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13907 colors,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13908 bgcolor,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13909 )
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13910 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13911 i = k = j = 0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13912 data_fix = 255
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13913 while i < balen:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13914 alpha = data[k]
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13915 if zero_out:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13916 for j in range(i, i+n):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13917 if mupdf.fz_samples_get(pix, j) != colors[j - i]:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13918 data_fix = 255
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13919 break
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13920 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13921 data_fix = 0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13922 if data_len:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13923 def fz_mul255( a, b):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13924 x = a * b + 128
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13925 x += x // 256
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13926 return x // 256
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13927
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13928 if data_fix == 0:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13929 mupdf.fz_samples_set(pix, i+n, 0)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13930 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13931 mupdf.fz_samples_set(pix, i+n, alpha)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13932 if premultiply and not bground:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13933 for j in range(i, i+n):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13934 mupdf.fz_samples_set(pix, j, fz_mul255( mupdf.fz_samples_get(pix, j), alpha))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13935 elif bground:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13936 for j in range( i, i+n):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13937 m = bgcolor[j - i]
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13938 mupdf.fz_samples_set(pix, j, fz_mul255( mupdf.fz_samples_get(pix, j) - m, alpha))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13939 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13940 mupdf.fz_samples_set(pix, i+n, data_fix)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13941 i += n+1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13942 k += 1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13943
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13944 def tobytes(self, output="png", jpg_quality=95):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13945 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13946 Convert to binary image stream of desired type.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13947 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13948 valid_formats = {
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13949 "png": 1,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13950 "pnm": 2,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13951 "pgm": 2,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13952 "ppm": 2,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13953 "pbm": 2,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13954 "pam": 3,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13955 "tga": 4,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13956 "tpic": 4,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13957 "psd": 5,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13958 "ps": 6,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13959 'jpg': 7,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13960 'jpeg': 7,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13961 }
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13962 idx = valid_formats.get(output.lower(), None)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13963 if idx is None:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13964 raise ValueError(f"Image format {output} not in {tuple(valid_formats.keys())}")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13965 if self.alpha and idx in (2, 6, 7):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13966 raise ValueError("'{output}' cannot have alpha")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13967 if self.colorspace and self.colorspace.n > 3 and idx in (1, 2, 4):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13968 raise ValueError(f"unsupported colorspace for '{output}'")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13969 if idx == 7:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13970 self.set_dpi(self.xres, self.yres)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13971 barray = self._tobytes(idx, jpg_quality)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13972 return barray
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13973
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13974 def set_dpi(self, xres, yres):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13975 """Set resolution in both dimensions."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13976 pm = self.this
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13977 pm.m_internal.xres = xres
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13978 pm.m_internal.yres = yres
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13979
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13980 def set_origin(self, x, y):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13981 """Set top-left coordinates."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13982 pm = self.this
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13983 pm.m_internal.x = x
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13984 pm.m_internal.y = y
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13985
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13986 def set_pixel(self, x, y, color):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13987 """Set color of pixel (x, y)."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13988 if g_use_extra:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13989 return extra.set_pixel(self.this.m_internal, x, y, color)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13990 pm = self.this
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13991 if not _INRANGE(x, 0, pm.w() - 1) or not _INRANGE(y, 0, pm.h() - 1):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13992 raise ValueError( MSG_PIXEL_OUTSIDE)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13993 n = pm.n()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13994 for j in range(n):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13995 i = color[j]
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13996 if not _INRANGE(i, 0, 255):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13997 raise ValueError( MSG_BAD_COLOR_SEQ)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13998 stride = mupdf.fz_pixmap_stride( pm)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13999 i = stride * y + n * x
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14000 if 0:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14001 # Using a cached self._memory_view doesn't actually make much
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14002 # difference to speed.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14003 if not self._memory_view:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14004 self._memory_view = self.samples_mv
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14005 for j in range(n):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14006 self._memory_view[i + j] = color[j]
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14007 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14008 for j in range(n):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14009 pm.fz_samples_set(i + j, color[j])
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14010
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14011 def set_rect(self, bbox, color):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14012 """Set color of all pixels in bbox."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14013 pm = self.this
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14014 n = pm.n()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14015 c = []
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14016 for j in range(n):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14017 i = color[j]
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14018 if not _INRANGE(i, 0, 255):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14019 raise ValueError( MSG_BAD_COLOR_SEQ)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14020 c.append(i)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14021 bbox = JM_irect_from_py(bbox)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14022 i = JM_fill_pixmap_rect_with_color(pm, c, bbox)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14023 rc = bool(i)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14024 return rc
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14025
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14026 def shrink(self, factor):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14027 """Divide width and height by 2**factor.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14028 E.g. factor=1 shrinks to 25% of original size (in place)."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14029 if factor < 1:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14030 message_warning("ignoring shrink factor < 1")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14031 return
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14032 mupdf.fz_subsample_pixmap( self.this, factor)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14033 # Pixmap has changed so clear our memory view.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14034 self._memory_view = None
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14035 self._samples_mv_release()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14036
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14037 @property
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14038 def size(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14039 """Pixmap size."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14040 return mupdf.fz_pixmap_size( self.this)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14041
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14042 @property
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14043 def stride(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14044 """Length of one image line (width * n)."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14045 return self.this.stride()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14046
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14047 def tint_with(self, black, white):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14048 """Tint colors with modifiers for black and white."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14049 if not self.colorspace or self.colorspace.n > 3:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14050 message("warning: colorspace invalid for function")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14051 return
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14052 return mupdf.fz_tint_pixmap( self.this, black, white)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14053
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14054 @property
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14055 def w(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14056 """The width."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14057 return mupdf.fz_pixmap_width(self.this)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14058
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14059 def warp(self, quad, width, height):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14060 """Return pixmap from a warped quad."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14061 if not quad.is_convex: raise ValueError("quad must be convex")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14062 q = JM_quad_from_py(quad)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14063 points = [ q.ul, q.ur, q.lr, q.ll]
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14064 dst = mupdf.fz_warp_pixmap( self.this, points, width, height)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14065 return Pixmap( dst)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14066
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14067 @property
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14068 def x(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14069 """x component of Pixmap origin."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14070 return mupdf.fz_pixmap_x(self.this)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14071
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14072 @property
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14073 def xres(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14074 """Resolution in x direction."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14075 return self.this.xres()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14076
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14077 @property
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14078 def y(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14079 """y component of Pixmap origin."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14080 return mupdf.fz_pixmap_y(self.this)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14081
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14082 @property
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14083 def yres(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14084 """Resolution in y direction."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14085 return self.this.yres()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14086
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14087 width = w
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14088 height = h
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14089
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14090 def __del__(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14091 if self._samples_mv:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14092 self._samples_mv.release()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14093
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14094
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14095 del Point
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14096 class Point:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14097
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14098 def __abs__(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14099 return math.sqrt(self.x * self.x + self.y * self.y)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14100
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14101 def __add__(self, p):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14102 if hasattr(p, "__float__"):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14103 return Point(self.x + p, self.y + p)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14104 if len(p) != 2:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14105 raise ValueError("Point: bad seq len")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14106 return Point(self.x + p[0], self.y + p[1])
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14107
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14108 def __bool__(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14109 return not (max(self) == min(self) == 0)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14110
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14111 def __eq__(self, p):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14112 if not hasattr(p, "__len__"):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14113 return False
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14114 return len(p) == 2 and not (self - p)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14115
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14116 def __getitem__(self, i):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14117 return (self.x, self.y)[i]
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14118
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14119 def __hash__(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14120 return hash(tuple(self))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14121
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14122 def __init__(self, *args, x=None, y=None):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14123 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14124 Point() - all zeros
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14125 Point(x, y)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14126 Point(Point) - new copy
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14127 Point(sequence) - from 'sequence'
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14128
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14129 Explicit keyword args x, y override earlier settings if not None.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14130 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14131 if not args:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14132 self.x = 0.0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14133 self.y = 0.0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14134 elif len(args) > 2:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14135 raise ValueError("Point: bad seq len")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14136 elif len(args) == 2:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14137 self.x = float(args[0])
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14138 self.y = float(args[1])
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14139 elif len(args) == 1:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14140 l = args[0]
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14141 if isinstance(l, (mupdf.FzPoint, mupdf.fz_point)):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14142 self.x = l.x
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14143 self.y = l.y
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14144 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14145 if not hasattr(l, "__getitem__"):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14146 raise ValueError("Point: bad args")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14147 if len(l) != 2:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14148 raise ValueError("Point: bad seq len")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14149 self.x = float(l[0])
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14150 self.y = float(l[1])
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14151 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14152 raise ValueError("Point: bad seq len")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14153 if x is not None: self.x = x
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14154 if y is not None: self.y = y
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14155
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14156 def __len__(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14157 return 2
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14158
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14159 def __mul__(self, m):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14160 if hasattr(m, "__float__"):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14161 return Point(self.x * m, self.y * m)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14162 if hasattr(m, "__getitem__") and len(m) == 2:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14163 # dot product
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14164 return self.x * m[0] + self.y * m[1]
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14165 p = Point(self)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14166 return p.transform(m)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14167
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14168 def __neg__(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14169 return Point(-self.x, -self.y)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14170
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14171 def __nonzero__(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14172 return not (max(self) == min(self) == 0)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14173
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14174 def __pos__(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14175 return Point(self)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14176
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14177 def __repr__(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14178 return "Point" + str(tuple(self))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14179
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14180 def __setitem__(self, i, v):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14181 v = float(v)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14182 if i == 0: self.x = v
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14183 elif i == 1: self.y = v
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14184 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14185 raise IndexError("index out of range")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14186 return None
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14187
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14188 def __sub__(self, p):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14189 if hasattr(p, "__float__"):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14190 return Point(self.x - p, self.y - p)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14191 if len(p) != 2:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14192 raise ValueError("Point: bad seq len")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14193 return Point(self.x - p[0], self.y - p[1])
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14194
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14195 def __truediv__(self, m):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14196 if hasattr(m, "__float__"):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14197 return Point(self.x * 1./m, self.y * 1./m)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14198 m1 = util_invert_matrix(m)[1]
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14199 if not m1:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14200 raise ZeroDivisionError("matrix not invertible")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14201 p = Point(self)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14202 return p.transform(m1)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14203
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14204 @property
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14205 def abs_unit(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14206 """Unit vector with positive coordinates."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14207 s = self.x * self.x + self.y * self.y
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14208 if s < EPSILON:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14209 return Point(0,0)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14210 s = math.sqrt(s)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14211 return Point(abs(self.x) / s, abs(self.y) / s)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14212
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14213 def distance_to(self, *args):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14214 """Return distance to rectangle or another point."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14215 if not len(args) > 0:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14216 raise ValueError("at least one parameter must be given")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14217
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14218 x = args[0]
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14219 if len(x) == 2:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14220 x = Point(x)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14221 elif len(x) == 4:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14222 x = Rect(x)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14223 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14224 raise ValueError("arg1 must be point-like or rect-like")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14225
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14226 if len(args) > 1:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14227 unit = args[1]
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14228 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14229 unit = "px"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14230 u = {"px": (1.,1.), "in": (1.,72.), "cm": (2.54, 72.),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14231 "mm": (25.4, 72.)}
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14232 f = u[unit][0] / u[unit][1]
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14233
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14234 if type(x) is Point:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14235 return abs(self - x) * f
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14236
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14237 # from here on, x is a rectangle
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14238 # as a safeguard, make a finite copy of it
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14239 r = Rect(x.top_left, x.top_left)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14240 r = r | x.bottom_right
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14241 if self in r:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14242 return 0.0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14243 if self.x > r.x1:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14244 if self.y >= r.y1:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14245 return self.distance_to(r.bottom_right, unit)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14246 elif self.y <= r.y0:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14247 return self.distance_to(r.top_right, unit)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14248 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14249 return (self.x - r.x1) * f
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14250 elif r.x0 <= self.x <= r.x1:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14251 if self.y >= r.y1:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14252 return (self.y - r.y1) * f
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14253 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14254 return (r.y0 - self.y) * f
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14255 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14256 if self.y >= r.y1:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14257 return self.distance_to(r.bottom_left, unit)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14258 elif self.y <= r.y0:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14259 return self.distance_to(r.top_left, unit)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14260 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14261 return (r.x0 - self.x) * f
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14262
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14263 def transform(self, m):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14264 """Replace point by its transformation with matrix-like m."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14265 if len(m) != 6:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14266 raise ValueError("Matrix: bad seq len")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14267 self.x, self.y = util_transform_point(self, m)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14268 return self
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14269
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14270 @property
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14271 def unit(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14272 """Unit vector of the point."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14273 s = self.x * self.x + self.y * self.y
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14274 if s < EPSILON:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14275 return Point(0,0)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14276 s = math.sqrt(s)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14277 return Point(self.x / s, self.y / s)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14278
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14279 __div__ = __truediv__
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14280 norm = __abs__
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14281
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14282
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14283 class Quad:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14284
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14285 def __abs__(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14286 if self.is_empty:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14287 return 0.0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14288 return abs(self.ul - self.ur) * abs(self.ul - self.ll)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14289
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14290 def __add__(self, q):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14291 if hasattr(q, "__float__"):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14292 return Quad(self.ul + q, self.ur + q, self.ll + q, self.lr + q)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14293 if len(q) != 4:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14294 raise ValueError("Quad: bad seq len")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14295 return Quad(self.ul + q[0], self.ur + q[1], self.ll + q[2], self.lr + q[3])
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14296
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14297 def __bool__(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14298 return not self.is_empty
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14299
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14300 def __contains__(self, x):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14301 try:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14302 l = x.__len__()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14303 except Exception:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14304 if g_exceptions_verbose > 1: exception_info()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14305 return False
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14306 if l == 2:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14307 return util_point_in_quad(x, self)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14308 if l != 4:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14309 return False
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14310 if CheckRect(x):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14311 if Rect(x).is_empty:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14312 return True
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14313 return util_point_in_quad(x[:2], self) and util_point_in_quad(x[2:], self)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14314 if CheckQuad(x):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14315 for i in range(4):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14316 if not util_point_in_quad(x[i], self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14317 return False
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14318 return True
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14319 return False
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14320
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14321 def __eq__(self, quad):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14322 if not hasattr(quad, "__len__"):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14323 return False
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14324 return len(quad) == 4 and (
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14325 self.ul == quad[0] and
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14326 self.ur == quad[1] and
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14327 self.ll == quad[2] and
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14328 self.lr == quad[3]
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14329 )
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14330
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14331 def __getitem__(self, i):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14332 return (self.ul, self.ur, self.ll, self.lr)[i]
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14333
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14334 def __hash__(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14335 return hash(tuple(self))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14336
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14337 def __init__(self, *args, ul=None, ur=None, ll=None, lr=None):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14338 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14339 Quad() - all zero points
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14340 Quad(ul, ur, ll, lr)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14341 Quad(quad) - new copy
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14342 Quad(sequence) - from 'sequence'
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14343
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14344 Explicit keyword args ul, ur, ll, lr override earlier settings if not
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14345 None.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14346
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14347 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14348 if not args:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14349 self.ul = self.ur = self.ll = self.lr = Point()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14350 elif len(args) > 4:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14351 raise ValueError("Quad: bad seq len")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14352 elif len(args) == 4:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14353 self.ul, self.ur, self.ll, self.lr = map(Point, args)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14354 elif len(args) == 1:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14355 l = args[0]
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14356 if isinstance(l, mupdf.FzQuad):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14357 self.this = l
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14358 self.ul, self.ur, self.ll, self.lr = Point(l.ul), Point(l.ur), Point(l.ll), Point(l.lr)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14359 elif not hasattr(l, "__getitem__"):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14360 raise ValueError("Quad: bad args")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14361 elif len(l) != 4:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14362 raise ValueError("Quad: bad seq len")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14363 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14364 self.ul, self.ur, self.ll, self.lr = map(Point, l)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14365 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14366 raise ValueError("Quad: bad args")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14367 if ul is not None: self.ul = Point(ul)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14368 if ur is not None: self.ur = Point(ur)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14369 if ll is not None: self.ll = Point(ll)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14370 if lr is not None: self.lr = Point(lr)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14371
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14372 def __len__(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14373 return 4
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14374
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14375 def __mul__(self, m):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14376 q = Quad(self)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14377 q = q.transform(m)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14378 return q
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14379
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14380 def __neg__(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14381 return Quad(-self.ul, -self.ur, -self.ll, -self.lr)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14382
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14383 def __nonzero__(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14384 return not self.is_empty
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14385
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14386 def __pos__(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14387 return Quad(self)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14388
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14389 def __repr__(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14390 return "Quad" + str(tuple(self))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14391
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14392 def __setitem__(self, i, v):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14393 if i == 0: self.ul = Point(v)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14394 elif i == 1: self.ur = Point(v)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14395 elif i == 2: self.ll = Point(v)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14396 elif i == 3: self.lr = Point(v)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14397 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14398 raise IndexError("index out of range")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14399 return None
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14400
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14401 def __sub__(self, q):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14402 if hasattr(q, "__float__"):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14403 return Quad(self.ul - q, self.ur - q, self.ll - q, self.lr - q)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14404 if len(q) != 4:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14405 raise ValueError("Quad: bad seq len")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14406 return Quad(self.ul - q[0], self.ur - q[1], self.ll - q[2], self.lr - q[3])
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14407
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14408 def __truediv__(self, m):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14409 if hasattr(m, "__float__"):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14410 im = 1. / m
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14411 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14412 im = util_invert_matrix(m)[1]
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14413 if not im:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14414 raise ZeroDivisionError("Matrix not invertible")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14415 q = Quad(self)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14416 q = q.transform(im)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14417 return q
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14418
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14419 @property
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14420 def is_convex(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14421 """Check if quad is convex and not degenerate.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14422
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14423 Notes:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14424 Check that for the two diagonals, the other two corners are not
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14425 on the same side of the diagonal.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14426 Returns:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14427 True or False.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14428 """
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14429 m = planish_line(self.ul, self.lr) # puts this diagonal on x-axis
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14430 p1 = self.ll * m # transform the
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14431 p2 = self.ur * m # other two points
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14432 if p1.y * p2.y > 0:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14433 return False
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14434 m = planish_line(self.ll, self.ur) # puts other diagonal on x-axis
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14435 p1 = self.lr * m # transform the
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14436 p2 = self.ul * m # remaining points
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14437 if p1.y * p2.y > 0:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14438 return False
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14439 return True
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14440
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14441 @property
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14442 def is_empty(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14443 """Check whether all quad corners are on the same line.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14444
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14445 This is the case if width or height is zero.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14446 """
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14447 return self.width < EPSILON or self.height < EPSILON
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14448
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14449 @property
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14450 def is_infinite(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14451 """Check whether this is the infinite quad."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14452 return self.rect.is_infinite
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14453
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14454 @property
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14455 def is_rectangular(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14456 """Check if quad is rectangular.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14457
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14458 Notes:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14459 Some rotation matrix can thus transform it into a rectangle.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14460 This is equivalent to three corners enclose 90 degrees.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14461 Returns:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14462 True or False.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14463 """
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14464
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14465 sine = util_sine_between(self.ul, self.ur, self.lr)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14466 if abs(sine - 1) > EPSILON: # the sine of the angle
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14467 return False
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14468
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14469 sine = util_sine_between(self.ur, self.lr, self.ll)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14470 if abs(sine - 1) > EPSILON:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14471 return False
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14472
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14473 sine = util_sine_between(self.lr, self.ll, self.ul)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14474 if abs(sine - 1) > EPSILON:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14475 return False
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14476
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14477 return True
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14478
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14479 def morph(self, p, m):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14480 """Morph the quad with matrix-like 'm' and point-like 'p'.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14481
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14482 Return a new quad."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14483 if self.is_infinite:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14484 return INFINITE_QUAD()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14485 delta = Matrix(1, 1).pretranslate(p.x, p.y)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14486 q = self * ~delta * m * delta
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14487 return q
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14488
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14489 @property
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14490 def rect(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14491 r = Rect()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14492 r.x0 = min(self.ul.x, self.ur.x, self.lr.x, self.ll.x)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14493 r.y0 = min(self.ul.y, self.ur.y, self.lr.y, self.ll.y)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14494 r.x1 = max(self.ul.x, self.ur.x, self.lr.x, self.ll.x)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14495 r.y1 = max(self.ul.y, self.ur.y, self.lr.y, self.ll.y)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14496 return r
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14497
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14498 def transform(self, m):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14499 """Replace quad by its transformation with matrix m."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14500 if hasattr(m, "__float__"):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14501 pass
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14502 elif len(m) != 6:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14503 raise ValueError("Matrix: bad seq len")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14504 self.ul *= m
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14505 self.ur *= m
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14506 self.ll *= m
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14507 self.lr *= m
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14508 return self
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14509
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14510 __div__ = __truediv__
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14511 width = property(lambda self: max(abs(self.ul - self.ur), abs(self.ll - self.lr)))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14512 height = property(lambda self: max(abs(self.ul - self.ll), abs(self.ur - self.lr)))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14513
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14514
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14515 class Rect:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14516
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14517 def __abs__(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14518 if self.is_empty or self.is_infinite:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14519 return 0.0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14520 return (self.x1 - self.x0) * (self.y1 - self.y0)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14521
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14522 def __add__(self, p):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14523 if hasattr(p, "__float__"):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14524 return Rect(self.x0 + p, self.y0 + p, self.x1 + p, self.y1 + p)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14525 if len(p) != 4:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14526 raise ValueError("Rect: bad seq len")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14527 return Rect(self.x0 + p[0], self.y0 + p[1], self.x1 + p[2], self.y1 + p[3])
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14528
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14529 def __and__(self, x):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14530 if not hasattr(x, "__len__"):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14531 raise ValueError("bad operand 2")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14532
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14533 r1 = Rect(x)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14534 r = Rect(self)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14535 return r.intersect(r1)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14536
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14537 def __bool__(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14538 return not (max(self) == min(self) == 0)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14539
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14540 def __contains__(self, x):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14541 if hasattr(x, "__float__"):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14542 return x in tuple(self)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14543 l = len(x)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14544 if l == 2:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14545 return util_is_point_in_rect(x, self)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14546 if l == 4:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14547 r = INFINITE_RECT()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14548 try:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14549 r = Rect(x)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14550 except Exception:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14551 if g_exceptions_verbose > 1: exception_info()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14552 r = Quad(x).rect
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14553 return (self.x0 <= r.x0 <= r.x1 <= self.x1 and
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14554 self.y0 <= r.y0 <= r.y1 <= self.y1)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14555 return False
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14556
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14557 def __eq__(self, rect):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14558 if not hasattr(rect, "__len__"):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14559 return False
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14560 return len(rect) == 4 and not (self - rect)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14561
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14562 def __getitem__(self, i):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14563 return (self.x0, self.y0, self.x1, self.y1)[i]
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14564
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14565 def __hash__(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14566 return hash(tuple(self))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14567
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14568 def __init__(self, *args, p0=None, p1=None, x0=None, y0=None, x1=None, y1=None):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14569 """
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14570 Rect() - all zeros
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14571 Rect(x0, y0, x1, y1)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14572 Rect(top-left, x1, y1)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14573 Rect(x0, y0, bottom-right)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14574 Rect(top-left, bottom-right)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14575 Rect(Rect or IRect) - new copy
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14576 Rect(sequence) - from 'sequence'
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14577
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14578 Explicit keyword args p0, p1, x0, y0, x1, y1 override earlier settings
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14579 if not None.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14580 """
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14581 x0, y0, x1, y1 = util_make_rect( *args, p0=p0, p1=p1, x0=x0, y0=y0, x1=x1, y1=y1)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14582 self.x0 = float( x0)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14583 self.y0 = float( y0)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14584 self.x1 = float( x1)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14585 self.y1 = float( y1)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14586
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14587 def __len__(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14588 return 4
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14589
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14590 def __mul__(self, m):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14591 if hasattr(m, "__float__"):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14592 return Rect(self.x0 * m, self.y0 * m, self.x1 * m, self.y1 * m)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14593 r = Rect(self)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14594 r = r.transform(m)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14595 return r
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14596
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14597 def __neg__(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14598 return Rect(-self.x0, -self.y0, -self.x1, -self.y1)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14599
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14600 def __nonzero__(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14601 return not (max(self) == min(self) == 0)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14602
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14603 def __or__(self, x):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14604 if not hasattr(x, "__len__"):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14605 raise ValueError("bad operand 2")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14606 r = Rect(self)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14607 if len(x) == 2:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14608 return r.include_point(x)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14609 if len(x) == 4:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14610 return r.include_rect(x)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14611 raise ValueError("bad operand 2")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14612
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14613 def __pos__(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14614 return Rect(self)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14615
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14616 def __repr__(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14617 return "Rect" + str(tuple(self))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14618
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14619 def __setitem__(self, i, v):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14620 v = float(v)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14621 if i == 0: self.x0 = v
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14622 elif i == 1: self.y0 = v
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14623 elif i == 2: self.x1 = v
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14624 elif i == 3: self.y1 = v
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14625 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14626 raise IndexError("index out of range")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14627 return None
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14628
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14629 def __sub__(self, p):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14630 if hasattr(p, "__float__"):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14631 return Rect(self.x0 - p, self.y0 - p, self.x1 - p, self.y1 - p)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14632 if len(p) != 4:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14633 raise ValueError("Rect: bad seq len")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14634 return Rect(self.x0 - p[0], self.y0 - p[1], self.x1 - p[2], self.y1 - p[3])
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14635
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14636 def __truediv__(self, m):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14637 if hasattr(m, "__float__"):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14638 return Rect(self.x0 * 1./m, self.y0 * 1./m, self.x1 * 1./m, self.y1 * 1./m)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14639 im = util_invert_matrix(m)[1]
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14640 if not im:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14641 raise ZeroDivisionError(f"Matrix not invertible: {m}")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14642 r = Rect(self)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14643 r = r.transform(im)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14644 return r
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14645
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14646 @property
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14647 def bottom_left(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14648 """Bottom-left corner."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14649 return Point(self.x0, self.y1)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14650
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14651 @property
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14652 def bottom_right(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14653 """Bottom-right corner."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14654 return Point(self.x1, self.y1)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14655
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14656 def contains(self, x):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14657 """Check if containing point-like or rect-like x."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14658 return self.__contains__(x)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14659
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14660 @property
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14661 def height(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14662 return max(0, self.y1 - self.y0)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14663
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14664 def include_point(self, p):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14665 """Extend to include point-like p."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14666 if len(p) != 2:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14667 raise ValueError("Point: bad seq len")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14668 self.x0, self.y0, self.x1, self.y1 = util_include_point_in_rect(self, p)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14669 return self
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14670
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14671 def include_rect(self, r):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14672 """Extend to include rect-like r."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14673 if len(r) != 4:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14674 raise ValueError("Rect: bad seq len")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14675 r = Rect(r)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14676 if r.is_infinite or self.is_infinite:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14677 self.x0, self.y0, self.x1, self.y1 = FZ_MIN_INF_RECT, FZ_MIN_INF_RECT, FZ_MAX_INF_RECT, FZ_MAX_INF_RECT
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14678 elif r.is_empty:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14679 return self
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14680 elif self.is_empty:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14681 self.x0, self.y0, self.x1, self.y1 = r.x0, r.y0, r.x1, r.y1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14682 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14683 self.x0, self.y0, self.x1, self.y1 = util_union_rect(self, r)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14684 return self
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14685
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14686 def intersect(self, r):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14687 """Restrict to common rect with rect-like r."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14688 if not len(r) == 4:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14689 raise ValueError("Rect: bad seq len")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14690 r = Rect(r)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14691 if r.is_infinite:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14692 return self
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14693 elif self.is_infinite:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14694 self.x0, self.y0, self.x1, self.y1 = r.x0, r.y0, r.x1, r.y1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14695 elif r.is_empty:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14696 self.x0, self.y0, self.x1, self.y1 = r.x0, r.y0, r.x1, r.y1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14697 elif self.is_empty:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14698 return self
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14699 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14700 self.x0, self.y0, self.x1, self.y1 = util_intersect_rect(self, r)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14701 return self
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14702
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14703 def intersects(self, x):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14704 """Check if intersection with rectangle x is not empty."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14705 rect2 = Rect(x)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14706 return (1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14707 and not self.is_empty
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14708 and not self.is_infinite
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14709 and not rect2.is_empty
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14710 and not rect2.is_infinite
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14711 and self.x0 < rect2.x1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14712 and rect2.x0 < self.x1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14713 and self.y0 < rect2.y1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14714 and rect2.y0 < self.y1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14715 )
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14716
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14717 @property
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14718 def is_empty(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14719 """True if rectangle area is empty."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14720 return self.x0 >= self.x1 or self.y0 >= self.y1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14721
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14722 @property
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14723 def is_infinite(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14724 """True if this is the infinite rectangle."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14725 return self.x0 == self.y0 == FZ_MIN_INF_RECT and self.x1 == self.y1 == FZ_MAX_INF_RECT
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14726
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14727 @property
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14728 def is_valid(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14729 """True if rectangle is valid."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14730 return self.x0 <= self.x1 and self.y0 <= self.y1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14731
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14732 def morph(self, p, m):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14733 """Morph with matrix-like m and point-like p.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14734
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14735 Returns a new quad."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14736 if self.is_infinite:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14737 return INFINITE_QUAD()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14738 return self.quad.morph(p, m)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14739
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14740 def norm(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14741 return math.sqrt(sum([c*c for c in self]))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14742
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14743 def normalize(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14744 """Replace rectangle with its finite version."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14745 if self.x1 < self.x0:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14746 self.x0, self.x1 = self.x1, self.x0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14747 if self.y1 < self.y0:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14748 self.y0, self.y1 = self.y1, self.y0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14749 return self
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14750
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14751 @property
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14752 def quad(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14753 """Return Quad version of rectangle."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14754 return Quad(self.tl, self.tr, self.bl, self.br)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14755
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14756 def round(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14757 """Return the IRect."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14758 return IRect(util_round_rect(self))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14759
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14760 @property
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14761 def top_left(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14762 """Top-left corner."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14763 return Point(self.x0, self.y0)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14764
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14765 @property
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14766 def top_right(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14767 """Top-right corner."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14768 return Point(self.x1, self.y0)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14769
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14770 def torect(self, r):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14771 """Return matrix that converts to target rect."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14772
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14773 r = Rect(r)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14774 if self.is_infinite or self.is_empty or r.is_infinite or r.is_empty:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14775 raise ValueError("rectangles must be finite and not empty")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14776 return (
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14777 Matrix(1, 0, 0, 1, -self.x0, -self.y0)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14778 * Matrix(r.width / self.width, r.height / self.height)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14779 * Matrix(1, 0, 0, 1, r.x0, r.y0)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14780 )
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14781
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14782 def transform(self, m):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14783 """Replace with the transformation by matrix-like m."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14784 if not len(m) == 6:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14785 raise ValueError("Matrix: bad seq len")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14786 self.x0, self.y0, self.x1, self.y1 = util_transform_rect(self, m)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14787 return self
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14788
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14789 @property
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14790 def width(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14791 return max(0, self.x1 - self.x0)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14792
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14793 __div__ = __truediv__
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14794
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14795 bl = bottom_left
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14796 br = bottom_right
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14797 irect = property(round)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14798 tl = top_left
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14799 tr = top_right
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14800
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14801
39
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
14802 class Shape:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
14803 """Create a new shape."""
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
14804
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
14805 @staticmethod
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
14806 def horizontal_angle(C, P):
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
14807 """Return the angle to the horizontal for the connection from C to P.
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
14808 This uses the arcus sine function and resolves its inherent ambiguity by
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
14809 looking up in which quadrant vector S = P - C is located.
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
14810 """
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
14811 S = Point(P - C).unit # unit vector 'C' -> 'P'
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
14812 alfa = math.asin(abs(S.y)) # absolute angle from horizontal
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
14813 if S.x < 0: # make arcsin result unique
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
14814 if S.y <= 0: # bottom-left
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
14815 alfa = -(math.pi - alfa)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
14816 else: # top-left
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
14817 alfa = math.pi - alfa
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
14818 else:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
14819 if S.y >= 0: # top-right
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
14820 pass
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
14821 else: # bottom-right
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
14822 alfa = -alfa
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
14823 return alfa
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
14824
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
14825 def __init__(self, page: Page):
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
14826 CheckParent(page)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
14827 self.page = page
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
14828 self.doc = page.parent
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
14829 if not self.doc.is_pdf:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
14830 raise ValueError("is no PDF")
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
14831 self.height = page.mediabox_size.y
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
14832 self.width = page.mediabox_size.x
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
14833 self.x = page.cropbox_position.x
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
14834 self.y = page.cropbox_position.y
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
14835
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
14836 self.pctm = page.transformation_matrix # page transf. matrix
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
14837 self.ipctm = ~self.pctm # inverted transf. matrix
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
14838
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
14839 self.draw_cont = ""
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
14840 self.text_cont = ""
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
14841 self.totalcont = ""
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
14842 self.last_point = None
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
14843 self.rect = None
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
14844
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
14845 def updateRect(self, x):
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
14846 if self.rect is None:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
14847 if len(x) == 2:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
14848 self.rect = Rect(x, x)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
14849 else:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
14850 self.rect = Rect(x)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
14851
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
14852 else:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
14853 if len(x) == 2:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
14854 x = Point(x)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
14855 self.rect.x0 = min(self.rect.x0, x.x)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
14856 self.rect.y0 = min(self.rect.y0, x.y)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
14857 self.rect.x1 = max(self.rect.x1, x.x)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
14858 self.rect.y1 = max(self.rect.y1, x.y)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
14859 else:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
14860 x = Rect(x)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
14861 self.rect.x0 = min(self.rect.x0, x.x0)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
14862 self.rect.y0 = min(self.rect.y0, x.y0)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
14863 self.rect.x1 = max(self.rect.x1, x.x1)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
14864 self.rect.y1 = max(self.rect.y1, x.y1)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
14865
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
14866 def draw_line(self, p1: point_like, p2: point_like) -> Point:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
14867 """Draw a line between two points."""
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
14868 p1 = Point(p1)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
14869 p2 = Point(p2)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
14870 if not (self.last_point == p1):
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
14871 self.draw_cont += _format_g(JM_TUPLE(p1 * self.ipctm)) + " m\n"
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
14872 self.last_point = p1
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
14873 self.updateRect(p1)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
14874
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
14875 self.draw_cont += _format_g(JM_TUPLE(p2 * self.ipctm)) + " l\n"
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
14876 self.updateRect(p2)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
14877 self.last_point = p2
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
14878 return self.last_point
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
14879
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
14880 def draw_polyline(self, points: list) -> Point:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
14881 """Draw several connected line segments."""
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
14882 for i, p in enumerate(points):
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
14883 if i == 0:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
14884 if not (self.last_point == Point(p)):
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
14885 self.draw_cont += _format_g(JM_TUPLE(Point(p) * self.ipctm)) + " m\n"
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
14886 self.last_point = Point(p)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
14887 else:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
14888 self.draw_cont += _format_g(JM_TUPLE(Point(p) * self.ipctm)) + " l\n"
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
14889 self.updateRect(p)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
14890
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
14891 self.last_point = Point(points[-1])
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
14892 return self.last_point
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
14893
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
14894 def draw_bezier(
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
14895 self,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
14896 p1: point_like,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
14897 p2: point_like,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
14898 p3: point_like,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
14899 p4: point_like,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
14900 ) -> Point:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
14901 """Draw a standard cubic Bezier curve."""
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
14902 p1 = Point(p1)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
14903 p2 = Point(p2)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
14904 p3 = Point(p3)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
14905 p4 = Point(p4)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
14906 if not (self.last_point == p1):
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
14907 self.draw_cont += _format_g(JM_TUPLE(p1 * self.ipctm)) + " m\n"
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
14908 args = JM_TUPLE(list(p2 * self.ipctm) + list(p3 * self.ipctm) + list(p4 * self.ipctm))
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
14909 self.draw_cont += _format_g(args) + " c\n"
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
14910 self.updateRect(p1)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
14911 self.updateRect(p2)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
14912 self.updateRect(p3)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
14913 self.updateRect(p4)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
14914 self.last_point = p4
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
14915 return self.last_point
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
14916
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
14917 def draw_oval(self, tetra: typing.Union[quad_like, rect_like]) -> Point:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
14918 """Draw an ellipse inside a tetrapod."""
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
14919 if len(tetra) != 4:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
14920 raise ValueError("invalid arg length")
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
14921 if hasattr(tetra[0], "__float__"):
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
14922 q = Rect(tetra).quad
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
14923 else:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
14924 q = Quad(tetra)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
14925
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
14926 mt = q.ul + (q.ur - q.ul) * 0.5
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
14927 mr = q.ur + (q.lr - q.ur) * 0.5
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
14928 mb = q.ll + (q.lr - q.ll) * 0.5
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
14929 ml = q.ul + (q.ll - q.ul) * 0.5
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
14930 if not (self.last_point == ml):
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
14931 self.draw_cont += _format_g(JM_TUPLE(ml * self.ipctm)) + " m\n"
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
14932 self.last_point = ml
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
14933 self.draw_curve(ml, q.ll, mb)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
14934 self.draw_curve(mb, q.lr, mr)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
14935 self.draw_curve(mr, q.ur, mt)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
14936 self.draw_curve(mt, q.ul, ml)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
14937 self.updateRect(q.rect)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
14938 self.last_point = ml
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
14939 return self.last_point
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
14940
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
14941 def draw_circle(self, center: point_like, radius: float) -> Point:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
14942 """Draw a circle given its center and radius."""
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
14943 if not radius > EPSILON:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
14944 raise ValueError("radius must be positive")
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
14945 center = Point(center)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
14946 p1 = center - (radius, 0)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
14947 return self.draw_sector(center, p1, 360, fullSector=False)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
14948
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
14949 def draw_curve(
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
14950 self,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
14951 p1: point_like,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
14952 p2: point_like,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
14953 p3: point_like,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
14954 ) -> Point:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
14955 """Draw a curve between points using one control point."""
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
14956 kappa = 0.55228474983
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
14957 p1 = Point(p1)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
14958 p2 = Point(p2)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
14959 p3 = Point(p3)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
14960 k1 = p1 + (p2 - p1) * kappa
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
14961 k2 = p3 + (p2 - p3) * kappa
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
14962 return self.draw_bezier(p1, k1, k2, p3)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
14963
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
14964 def draw_sector(
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
14965 self,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
14966 center: point_like,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
14967 point: point_like,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
14968 beta: float,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
14969 fullSector: bool = True,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
14970 ) -> Point:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
14971 """Draw a circle sector."""
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
14972 center = Point(center)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
14973 point = Point(point)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
14974 l3 = lambda a, b: _format_g((a, b)) + " m\n"
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
14975 l4 = lambda a, b, c, d, e, f: _format_g((a, b, c, d, e, f)) + " c\n"
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
14976 l5 = lambda a, b: _format_g((a, b)) + " l\n"
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
14977 betar = math.radians(-beta)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
14978 w360 = math.radians(math.copysign(360, betar)) * (-1)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
14979 w90 = math.radians(math.copysign(90, betar))
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
14980 w45 = w90 / 2
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
14981 while abs(betar) > 2 * math.pi:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
14982 betar += w360 # bring angle below 360 degrees
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
14983 if not (self.last_point == point):
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
14984 self.draw_cont += l3(*JM_TUPLE(point * self.ipctm))
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
14985 self.last_point = point
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
14986 Q = Point(0, 0) # just make sure it exists
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
14987 C = center
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
14988 P = point
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
14989 S = P - C # vector 'center' -> 'point'
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
14990 rad = abs(S) # circle radius
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
14991
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
14992 if not rad > EPSILON:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
14993 raise ValueError("radius must be positive")
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
14994
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
14995 alfa = self.horizontal_angle(center, point)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
14996 while abs(betar) > abs(w90): # draw 90 degree arcs
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
14997 q1 = C.x + math.cos(alfa + w90) * rad
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
14998 q2 = C.y + math.sin(alfa + w90) * rad
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
14999 Q = Point(q1, q2) # the arc's end point
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15000 r1 = C.x + math.cos(alfa + w45) * rad / math.cos(w45)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15001 r2 = C.y + math.sin(alfa + w45) * rad / math.cos(w45)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15002 R = Point(r1, r2) # crossing point of tangents
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15003 kappah = (1 - math.cos(w45)) * 4 / 3 / abs(R - Q)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15004 kappa = kappah * abs(P - Q)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15005 cp1 = P + (R - P) * kappa # control point 1
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15006 cp2 = Q + (R - Q) * kappa # control point 2
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15007 self.draw_cont += l4(*JM_TUPLE(
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15008 list(cp1 * self.ipctm) + list(cp2 * self.ipctm) + list(Q * self.ipctm)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15009 ))
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15010
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15011 betar -= w90 # reduce param angle by 90 deg
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15012 alfa += w90 # advance start angle by 90 deg
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15013 P = Q # advance to arc end point
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15014 # draw (remaining) arc
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15015 if abs(betar) > 1e-3: # significant degrees left?
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15016 beta2 = betar / 2
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15017 q1 = C.x + math.cos(alfa + betar) * rad
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15018 q2 = C.y + math.sin(alfa + betar) * rad
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15019 Q = Point(q1, q2) # the arc's end point
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15020 r1 = C.x + math.cos(alfa + beta2) * rad / math.cos(beta2)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15021 r2 = C.y + math.sin(alfa + beta2) * rad / math.cos(beta2)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15022 R = Point(r1, r2) # crossing point of tangents
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15023 # kappa height is 4/3 of segment height
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15024 kappah = (1 - math.cos(beta2)) * 4 / 3 / abs(R - Q) # kappa height
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15025 kappa = kappah * abs(P - Q) / (1 - math.cos(betar))
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15026 cp1 = P + (R - P) * kappa # control point 1
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15027 cp2 = Q + (R - Q) * kappa # control point 2
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15028 self.draw_cont += l4(*JM_TUPLE(
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15029 list(cp1 * self.ipctm) + list(cp2 * self.ipctm) + list(Q * self.ipctm)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15030 ))
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15031 if fullSector:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15032 self.draw_cont += l3(*JM_TUPLE(point * self.ipctm))
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15033 self.draw_cont += l5(*JM_TUPLE(center * self.ipctm))
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15034 self.draw_cont += l5(*JM_TUPLE(Q * self.ipctm))
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15035 self.last_point = Q
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15036 return self.last_point
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15037
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15038 def draw_rect(self, rect: rect_like, *, radius=None) -> Point:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15039 """Draw a rectangle.
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15040
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15041 Args:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15042 radius: if not None, the rectangle will have rounded corners.
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15043 This is the radius of the curvature, given as percentage of
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15044 the rectangle width or height. Valid are values 0 < v <= 0.5.
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15045 For a sequence of two values, the corners will have different
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15046 radii. Otherwise, the percentage will be computed from the
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15047 shorter side. A value of (0.5, 0.5) will draw an ellipse.
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15048 """
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15049 r = Rect(rect)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15050 if radius is None: # standard rectangle
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15051 self.draw_cont += _format_g(JM_TUPLE(
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15052 list(r.bl * self.ipctm) + [r.width, r.height]
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15053 )) + " re\n"
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15054 self.updateRect(r)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15055 self.last_point = r.tl
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15056 return self.last_point
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15057 # rounded corners requested. This requires 1 or 2 values, each
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15058 # with 0 < value <= 0.5
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15059 if hasattr(radius, "__float__"):
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15060 if radius <= 0 or radius > 0.5:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15061 raise ValueError(f"bad radius value {radius}.")
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15062 d = min(r.width, r.height) * radius
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15063 px = (d, 0)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15064 py = (0, d)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15065 elif hasattr(radius, "__len__") and len(radius) == 2:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15066 rx, ry = radius
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15067 px = (rx * r.width, 0)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15068 py = (0, ry * r.height)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15069 if min(rx, ry) <= 0 or max(rx, ry) > 0.5:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15070 raise ValueError(f"bad radius value {radius}.")
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15071 else:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15072 raise ValueError(f"bad radius value {radius}.")
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15073
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15074 lp = self.draw_line(r.tl + py, r.bl - py)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15075 lp = self.draw_curve(lp, r.bl, r.bl + px)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15076
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15077 lp = self.draw_line(lp, r.br - px)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15078 lp = self.draw_curve(lp, r.br, r.br - py)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15079
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15080 lp = self.draw_line(lp, r.tr + py)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15081 lp = self.draw_curve(lp, r.tr, r.tr - px)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15082
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15083 lp = self.draw_line(lp, r.tl + px)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15084 self.last_point = self.draw_curve(lp, r.tl, r.tl + py)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15085
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15086 self.updateRect(r)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15087 return self.last_point
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15088
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15089 def draw_quad(self, quad: quad_like) -> Point:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15090 """Draw a Quad."""
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15091 q = Quad(quad)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15092 return self.draw_polyline([q.ul, q.ll, q.lr, q.ur, q.ul])
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15093
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15094 def draw_zigzag(
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15095 self,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15096 p1: point_like,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15097 p2: point_like,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15098 breadth: float = 2,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15099 ) -> Point:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15100 """Draw a zig-zagged line from p1 to p2."""
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15101 p1 = Point(p1)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15102 p2 = Point(p2)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15103 S = p2 - p1 # vector start - end
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15104 rad = abs(S) # distance of points
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15105 cnt = 4 * int(round(rad / (4 * breadth), 0)) # always take full phases
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15106 if cnt < 4:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15107 raise ValueError("points too close")
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15108 mb = rad / cnt # revised breadth
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15109 matrix = Matrix(util_hor_matrix(p1, p2)) # normalize line to x-axis
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15110 i_mat = ~matrix # get original position
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15111 points = [] # stores edges
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15112 for i in range(1, cnt):
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15113 if i % 4 == 1: # point "above" connection
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15114 p = Point(i, -1) * mb
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15115 elif i % 4 == 3: # point "below" connection
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15116 p = Point(i, 1) * mb
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15117 else: # ignore others
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15118 continue
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15119 points.append(p * i_mat)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15120 self.draw_polyline([p1] + points + [p2]) # add start and end points
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15121 return p2
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15122
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15123 def draw_squiggle(
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15124 self,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15125 p1: point_like,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15126 p2: point_like,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15127 breadth=2,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15128 ) -> Point:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15129 """Draw a squiggly line from p1 to p2."""
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15130 p1 = Point(p1)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15131 p2 = Point(p2)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15132 S = p2 - p1 # vector start - end
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15133 rad = abs(S) # distance of points
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15134 cnt = 4 * int(round(rad / (4 * breadth), 0)) # always take full phases
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15135 if cnt < 4:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15136 raise ValueError("points too close")
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15137 mb = rad / cnt # revised breadth
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15138 matrix = Matrix(util_hor_matrix(p1, p2)) # normalize line to x-axis
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15139 i_mat = ~matrix # get original position
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15140 k = 2.4142135623765633 # y of draw_curve helper point
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15141
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15142 points = [] # stores edges
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15143 for i in range(1, cnt):
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15144 if i % 4 == 1: # point "above" connection
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15145 p = Point(i, -k) * mb
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15146 elif i % 4 == 3: # point "below" connection
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15147 p = Point(i, k) * mb
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15148 else: # else on connection line
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15149 p = Point(i, 0) * mb
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15150 points.append(p * i_mat)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15151
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15152 points = [p1] + points + [p2]
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15153 cnt = len(points)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15154 i = 0
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15155 while i + 2 < cnt:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15156 self.draw_curve(points[i], points[i + 1], points[i + 2])
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15157 i += 2
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15158 return p2
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15159
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15160 # ==============================================================================
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15161 # Shape.insert_text
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15162 # ==============================================================================
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15163 def insert_text(
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15164 self,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15165 point: point_like,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15166 buffer: typing.Union[str, list],
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15167 *,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15168 fontsize: float = 11,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15169 lineheight: OptFloat = None,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15170 fontname: str = "helv",
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15171 fontfile: OptStr = None,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15172 set_simple: bool = 0,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15173 encoding: int = 0,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15174 color: OptSeq = None,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15175 fill: OptSeq = None,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15176 render_mode: int = 0,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15177 border_width: float = 0.05,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15178 miter_limit: float = 1,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15179 rotate: int = 0,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15180 morph: OptSeq = None,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15181 stroke_opacity: float = 1,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15182 fill_opacity: float = 1,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15183 oc: int = 0,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15184 ) -> int:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15185
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15186 # ensure 'text' is a list of strings, worth dealing with
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15187 if not bool(buffer):
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15188 return 0
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15189
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15190 if type(buffer) not in (list, tuple):
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15191 text = buffer.splitlines()
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15192 else:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15193 text = buffer
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15194
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15195 if not len(text) > 0:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15196 return 0
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15197
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15198 point = Point(point)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15199 try:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15200 maxcode = max([ord(c) for c in " ".join(text)])
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15201 except Exception:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15202 exception_info()
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15203 return 0
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15204
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15205 # ensure valid 'fontname'
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15206 fname = fontname
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15207 if fname.startswith("/"):
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15208 fname = fname[1:]
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15209
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15210 xref = self.page.insert_font(
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15211 fontname=fname, fontfile=fontfile, encoding=encoding, set_simple=set_simple
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15212 )
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15213 fontinfo = CheckFontInfo(self.doc, xref)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15214
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15215 fontdict = fontinfo[1]
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15216 ordering = fontdict["ordering"]
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15217 simple = fontdict["simple"]
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15218 bfname = fontdict["name"]
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15219 ascender = fontdict["ascender"]
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15220 descender = fontdict["descender"]
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15221 if lineheight:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15222 lheight = fontsize * lineheight
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15223 elif ascender - descender <= 1:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15224 lheight = fontsize * 1.2
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15225 else:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15226 lheight = fontsize * (ascender - descender)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15227
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15228 if maxcode > 255:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15229 glyphs = self.doc.get_char_widths(xref, maxcode + 1)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15230 else:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15231 glyphs = fontdict["glyphs"]
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15232
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15233 tab = []
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15234 for t in text:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15235 if simple and bfname not in ("Symbol", "ZapfDingbats"):
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15236 g = None
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15237 else:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15238 g = glyphs
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15239 tab.append(getTJstr(t, g, simple, ordering))
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15240 text = tab
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15241
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15242 color_str = ColorCode(color, "c")
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15243 fill_str = ColorCode(fill, "f")
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15244 if not fill and render_mode == 0: # ensure fill color when 0 Tr
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15245 fill = color
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15246 fill_str = ColorCode(color, "f")
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15247
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15248 morphing = CheckMorph(morph)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15249 rot = rotate
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15250 if rot % 90 != 0:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15251 raise ValueError("bad rotate value")
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15252
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15253 while rot < 0:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15254 rot += 360
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15255 rot = rot % 360 # text rotate = 0, 90, 270, 180
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15256
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15257 templ1 = lambda a, b, c, d, e, f, g: f"\nq\n{a}{b}BT\n{c}1 0 0 1 {_format_g((d, e))} Tm\n/{f} {_format_g(g)} Tf "
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15258 templ2 = lambda a: f"TJ\n0 -{_format_g(a)} TD\n"
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15259 cmp90 = "0 1 -1 0 0 0 cm\n" # rotates 90 deg counter-clockwise
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15260 cmm90 = "0 -1 1 0 0 0 cm\n" # rotates 90 deg clockwise
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15261 cm180 = "-1 0 0 -1 0 0 cm\n" # rotates by 180 deg.
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15262 height = self.height
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15263 width = self.width
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15264
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15265 # setting up for standard rotation directions
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15266 # case rotate = 0
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15267 if morphing:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15268 m1 = Matrix(1, 0, 0, 1, morph[0].x + self.x, height - morph[0].y - self.y)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15269 mat = ~m1 * morph[1] * m1
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15270 cm = _format_g(JM_TUPLE(mat)) + " cm\n"
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15271 else:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15272 cm = ""
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15273 top = height - point.y - self.y # start of 1st char
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15274 left = point.x + self.x # start of 1. char
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15275 space = top # space available
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15276 #headroom = point.y + self.y # distance to page border
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15277 if rot == 90:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15278 left = height - point.y - self.y
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15279 top = -point.x - self.x
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15280 cm += cmp90
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15281 space = width - abs(top)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15282 #headroom = point.x + self.x
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15283
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15284 elif rot == 270:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15285 left = -height + point.y + self.y
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15286 top = point.x + self.x
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15287 cm += cmm90
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15288 space = abs(top)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15289 #headroom = width - point.x - self.x
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15290
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15291 elif rot == 180:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15292 left = -point.x - self.x
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15293 top = -height + point.y + self.y
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15294 cm += cm180
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15295 space = abs(point.y + self.y)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15296 #headroom = height - point.y - self.y
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15297
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15298 optcont = self.page._get_optional_content(oc)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15299 if optcont is not None:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15300 bdc = "/OC /%s BDC\n" % optcont
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15301 emc = "EMC\n"
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15302 else:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15303 bdc = emc = ""
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15304
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15305 alpha = self.page._set_opacity(CA=stroke_opacity, ca=fill_opacity)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15306 if alpha is None:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15307 alpha = ""
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15308 else:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15309 alpha = "/%s gs\n" % alpha
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15310 nres = templ1(bdc, alpha, cm, left, top, fname, fontsize)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15311
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15312 if render_mode > 0:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15313 nres += "%i Tr " % render_mode
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15314 nres += _format_g(border_width * fontsize) + " w "
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15315 if miter_limit is not None:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15316 nres += _format_g(miter_limit) + " M "
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15317 if color is not None:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15318 nres += color_str
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15319 if fill is not None:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15320 nres += fill_str
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15321
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15322 # =========================================================================
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15323 # start text insertion
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15324 # =========================================================================
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15325 nres += text[0]
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15326 nlines = 1 # set output line counter
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15327 if len(text) > 1:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15328 nres += templ2(lheight) # line 1
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15329 else:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15330 nres += 'TJ'
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15331 for i in range(1, len(text)):
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15332 if space < lheight:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15333 break # no space left on page
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15334 if i > 1:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15335 nres += "\nT* "
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15336 nres += text[i] + 'TJ'
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15337 space -= lheight
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15338 nlines += 1
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15339
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15340 nres += "\nET\n%sQ\n" % emc
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15341
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15342 # =========================================================================
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15343 # end of text insertion
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15344 # =========================================================================
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15345 # update the /Contents object
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15346 self.text_cont += nres
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15347 return nlines
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15348
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15349 # ==============================================================================
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15350 # Shape.insert_textbox
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15351 # ==============================================================================
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15352 def insert_textbox(
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15353 self,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15354 rect: rect_like,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15355 buffer: typing.Union[str, list],
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15356 *,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15357 fontname: OptStr = "helv",
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15358 fontfile: OptStr = None,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15359 fontsize: float = 11,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15360 lineheight: OptFloat = None,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15361 set_simple: bool = 0,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15362 encoding: int = 0,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15363 color: OptSeq = None,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15364 fill: OptSeq = None,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15365 expandtabs: int = 1,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15366 border_width: float = 0.05,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15367 miter_limit: float = 1,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15368 align: int = 0,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15369 render_mode: int = 0,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15370 rotate: int = 0,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15371 morph: OptSeq = None,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15372 stroke_opacity: float = 1,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15373 fill_opacity: float = 1,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15374 oc: int = 0,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15375 ) -> float:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15376 """Insert text into a given rectangle.
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15377
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15378 Args:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15379 rect -- the textbox to fill
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15380 buffer -- text to be inserted
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15381 fontname -- a Base-14 font, font name or '/name'
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15382 fontfile -- name of a font file
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15383 fontsize -- font size
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15384 lineheight -- overwrite the font property
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15385 color -- RGB stroke color triple
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15386 fill -- RGB fill color triple
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15387 render_mode -- text rendering control
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15388 border_width -- thickness of glyph borders as percentage of fontsize
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15389 expandtabs -- handles tabulators with string function
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15390 align -- left, center, right, justified
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15391 rotate -- 0, 90, 180, or 270 degrees
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15392 morph -- morph box with a matrix and a fixpoint
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15393 Returns:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15394 unused or deficit rectangle area (float)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15395 """
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15396 rect = Rect(rect)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15397 if rect.is_empty or rect.is_infinite:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15398 raise ValueError("text box must be finite and not empty")
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15399
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15400 color_str = ColorCode(color, "c")
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15401 fill_str = ColorCode(fill, "f")
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15402 if fill is None and render_mode == 0: # ensure fill color for 0 Tr
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15403 fill = color
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15404 fill_str = ColorCode(color, "f")
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15405
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15406 optcont = self.page._get_optional_content(oc)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15407 if optcont is not None:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15408 bdc = "/OC /%s BDC\n" % optcont
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15409 emc = "EMC\n"
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15410 else:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15411 bdc = emc = ""
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15412
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15413 # determine opacity / transparency
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15414 alpha = self.page._set_opacity(CA=stroke_opacity, ca=fill_opacity)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15415 if alpha is None:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15416 alpha = ""
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15417 else:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15418 alpha = "/%s gs\n" % alpha
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15419
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15420 if rotate % 90 != 0:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15421 raise ValueError("rotate must be multiple of 90")
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15422
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15423 rot = rotate
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15424 while rot < 0:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15425 rot += 360
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15426 rot = rot % 360
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15427
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15428 # is buffer worth of dealing with?
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15429 if not bool(buffer):
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15430 return rect.height if rot in (0, 180) else rect.width
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15431
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15432 cmp90 = "0 1 -1 0 0 0 cm\n" # rotates counter-clockwise
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15433 cmm90 = "0 -1 1 0 0 0 cm\n" # rotates clockwise
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15434 cm180 = "-1 0 0 -1 0 0 cm\n" # rotates by 180 deg.
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15435 height = self.height
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15436
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15437 fname = fontname
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15438 if fname.startswith("/"):
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15439 fname = fname[1:]
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15440
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15441 xref = self.page.insert_font(
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15442 fontname=fname, fontfile=fontfile, encoding=encoding, set_simple=set_simple
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15443 )
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15444 fontinfo = CheckFontInfo(self.doc, xref)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15445
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15446 fontdict = fontinfo[1]
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15447 ordering = fontdict["ordering"]
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15448 simple = fontdict["simple"]
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15449 glyphs = fontdict["glyphs"]
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15450 bfname = fontdict["name"]
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15451 ascender = fontdict["ascender"]
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15452 descender = fontdict["descender"]
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15453
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15454 if lineheight:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15455 lheight_factor = lineheight
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15456 elif ascender - descender <= 1:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15457 lheight_factor = 1.2
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15458 else:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15459 lheight_factor = ascender - descender
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15460 lheight = fontsize * lheight_factor
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15461
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15462 # create a list from buffer, split into its lines
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15463 if type(buffer) in (list, tuple):
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15464 t0 = "\n".join(buffer)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15465 else:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15466 t0 = buffer
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15467
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15468 maxcode = max([ord(c) for c in t0])
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15469 # replace invalid char codes for simple fonts
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15470 if simple and maxcode > 255:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15471 t0 = "".join([c if ord(c) < 256 else "?" for c in t0])
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15472
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15473 t0 = t0.splitlines()
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15474
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15475 glyphs = self.doc.get_char_widths(xref, maxcode + 1)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15476 if simple and bfname not in ("Symbol", "ZapfDingbats"):
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15477 tj_glyphs = None
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15478 else:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15479 tj_glyphs = glyphs
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15480
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15481 # ----------------------------------------------------------------------
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15482 # calculate pixel length of a string
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15483 # ----------------------------------------------------------------------
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15484 def pixlen(x):
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15485 """Calculate pixel length of x."""
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15486 if ordering < 0:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15487 return sum([glyphs[ord(c)][1] for c in x]) * fontsize
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15488 else:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15489 return len(x) * fontsize
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15490
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15491 # ---------------------------------------------------------------------
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15492
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15493 if ordering < 0:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15494 blen = glyphs[32][1] * fontsize # pixel size of space character
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15495 else:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15496 blen = fontsize
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15497
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15498 text = "" # output buffer
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15499
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15500 if CheckMorph(morph):
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15501 m1 = Matrix(
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15502 1, 0, 0, 1, morph[0].x + self.x, self.height - morph[0].y - self.y
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15503 )
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15504 mat = ~m1 * morph[1] * m1
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15505 cm = _format_g(JM_TUPLE(mat)) + " cm\n"
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15506 else:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15507 cm = ""
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15508
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15509 # ---------------------------------------------------------------------
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15510 # adjust for text orientation / rotation
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15511 # ---------------------------------------------------------------------
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15512 progr = 1 # direction of line progress
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15513 c_pnt = Point(0, fontsize * ascender) # used for line progress
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15514 if rot == 0: # normal orientation
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15515 point = rect.tl + c_pnt # line 1 is 'lheight' below top
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15516 maxwidth = rect.width # pixels available in one line
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15517 maxheight = rect.height # available text height
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15518
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15519 elif rot == 90: # rotate counter clockwise
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15520 c_pnt = Point(fontsize * ascender, 0) # progress in x-direction
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15521 point = rect.bl + c_pnt # line 1 'lheight' away from left
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15522 maxwidth = rect.height # pixels available in one line
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15523 maxheight = rect.width # available text height
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15524 cm += cmp90
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15525
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15526 elif rot == 180: # text upside down
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15527 # progress upwards in y direction
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15528 c_pnt = -Point(0, fontsize * ascender)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15529 point = rect.br + c_pnt # line 1 'lheight' above bottom
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15530 maxwidth = rect.width # pixels available in one line
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15531 progr = -1 # subtract lheight for next line
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15532 maxheight =rect.height # available text height
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15533 cm += cm180
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15534
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15535 else: # rotate clockwise (270 or -90)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15536 # progress from right to left
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15537 c_pnt = -Point(fontsize * ascender, 0)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15538 point = rect.tr + c_pnt # line 1 'lheight' left of right
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15539 maxwidth = rect.height # pixels available in one line
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15540 progr = -1 # subtract lheight for next line
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15541 maxheight = rect.width # available text height
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15542 cm += cmm90
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15543
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15544 # =====================================================================
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15545 # line loop
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15546 # =====================================================================
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15547 just_tab = [] # 'justify' indicators per line
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15548
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15549 for i, line in enumerate(t0):
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15550 line_t = line.expandtabs(expandtabs).split(" ") # split into words
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15551 num_words = len(line_t)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15552 lbuff = "" # init line buffer
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15553 rest = maxwidth # available line pixels
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15554 # =================================================================
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15555 # word loop
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15556 # =================================================================
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15557 for j in range(num_words):
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15558 word = line_t[j]
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15559 pl_w = pixlen(word) # pixel len of word
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15560 if rest >= pl_w: # does it fit on the line?
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15561 lbuff += word + " " # yes, append word
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15562 rest -= pl_w + blen # update available line space
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15563 continue # next word
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15564
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15565 # word doesn't fit - output line (if not empty)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15566 if lbuff:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15567 lbuff = lbuff.rstrip() + "\n" # line full, append line break
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15568 text += lbuff # append to total text
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15569 just_tab.append(True) # can align-justify
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15570
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15571 lbuff = "" # re-init line buffer
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15572 rest = maxwidth # re-init avail. space
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15573
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15574 if pl_w <= maxwidth: # word shorter than 1 line?
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15575 lbuff = word + " " # start the line with it
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15576 rest = maxwidth - pl_w - blen # update free space
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15577 continue
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15578
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15579 # long word: split across multiple lines - char by char ...
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15580 if len(just_tab) > 0:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15581 just_tab[-1] = False # cannot align-justify
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15582 for c in word:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15583 if pixlen(lbuff) <= maxwidth - pixlen(c):
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15584 lbuff += c
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15585 else: # line full
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15586 lbuff += "\n" # close line
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15587 text += lbuff # append to text
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15588 just_tab.append(False) # cannot align-justify
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15589 lbuff = c # start new line with this char
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15590
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15591 lbuff += " " # finish long word
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15592 rest = maxwidth - pixlen(lbuff) # long word stored
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15593
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15594 if lbuff: # unprocessed line content?
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15595 text += lbuff.rstrip() # append to text
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15596 just_tab.append(False) # cannot align-justify
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15597
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15598 if i < len(t0) - 1: # not the last line?
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15599 text += "\n" # insert line break
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15600
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15601 # compute used part of the textbox
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15602 if text.endswith("\n"):
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15603 text = text[:-1]
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15604 lb_count = text.count("\n") + 1 # number of lines written
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15605
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15606 # text height = line count * line height plus one descender value
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15607 text_height = lheight * lb_count - descender * fontsize
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15608
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15609 more = text_height - maxheight # difference to height limit
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15610 if more > EPSILON: # landed too much outside rect
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15611 return (-1) * more # return deficit, don't output
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15612
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15613 more = abs(more)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15614 if more < EPSILON:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15615 more = 0 # don't bother with epsilons
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15616 nres = "\nq\n%s%sBT\n" % (bdc, alpha) + cm # initialize output buffer
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15617 templ = lambda a, b, c, d: f"1 0 0 1 {_format_g((a, b))} Tm /{c} {_format_g(d)} Tf "
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15618 # center, right, justify: output each line with its own specifics
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15619 text_t = text.splitlines() # split text in lines again
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15620 just_tab[-1] = False # never justify last line
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15621 for i, t in enumerate(text_t):
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15622 spacing = 0
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15623 pl = maxwidth - pixlen(t) # length of empty line part
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15624 pnt = point + c_pnt * (i * lheight_factor) # text start of line
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15625 if align == 1: # center: right shift by half width
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15626 if rot in (0, 180):
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15627 pnt = pnt + Point(pl / 2, 0) * progr
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15628 else:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15629 pnt = pnt - Point(0, pl / 2) * progr
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15630 elif align == 2: # right: right shift by full width
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15631 if rot in (0, 180):
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15632 pnt = pnt + Point(pl, 0) * progr
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15633 else:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15634 pnt = pnt - Point(0, pl) * progr
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15635 elif align == 3: # justify
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15636 spaces = t.count(" ") # number of spaces in line
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15637 if spaces > 0 and just_tab[i]: # if any, and we may justify
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15638 spacing = pl / spaces # make every space this much larger
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15639 else:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15640 spacing = 0 # keep normal space length
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15641 top = height - pnt.y - self.y
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15642 left = pnt.x + self.x
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15643 if rot == 90:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15644 left = height - pnt.y - self.y
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15645 top = -pnt.x - self.x
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15646 elif rot == 270:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15647 left = -height + pnt.y + self.y
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15648 top = pnt.x + self.x
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15649 elif rot == 180:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15650 left = -pnt.x - self.x
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15651 top = -height + pnt.y + self.y
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15652
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15653 nres += templ(left, top, fname, fontsize)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15654
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15655 if render_mode > 0:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15656 nres += "%i Tr " % render_mode
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15657 nres += _format_g(border_width * fontsize) + " w "
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15658 if miter_limit is not None:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15659 nres += _format_g(miter_limit) + " M "
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15660
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15661 if align == 3:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15662 nres += _format_g(spacing) + " Tw "
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15663
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15664 if color is not None:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15665 nres += color_str
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15666 if fill is not None:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15667 nres += fill_str
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15668 nres += "%sTJ\n" % getTJstr(t, tj_glyphs, simple, ordering)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15669
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15670 nres += "ET\n%sQ\n" % emc
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15671
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15672 self.text_cont += nres
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15673 self.updateRect(rect)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15674 return more
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15675
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15676 def finish(
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15677 self,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15678 width: float = 1,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15679 color: OptSeq = (0,),
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15680 fill: OptSeq = None,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15681 lineCap: int = 0,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15682 lineJoin: int = 0,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15683 dashes: OptStr = None,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15684 even_odd: bool = False,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15685 morph: OptSeq = None,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15686 closePath: bool = True,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15687 fill_opacity: float = 1,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15688 stroke_opacity: float = 1,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15689 oc: int = 0,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15690 ) -> None:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15691 """Finish the current drawing segment.
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15692
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15693 Notes:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15694 Apply colors, opacity, dashes, line style and width, or
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15695 morphing. Also whether to close the path
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15696 by connecting last to first point.
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15697 """
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15698 if self.draw_cont == "": # treat empty contents as no-op
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15699 return
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15700
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15701 if width == 0: # border color makes no sense then
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15702 color = None
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15703 elif color is None: # vice versa
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15704 width = 0
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15705 # if color == None and fill == None:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15706 # raise ValueError("at least one of 'color' or 'fill' must be given")
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15707 color_str = ColorCode(color, "c") # ensure proper color string
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15708 fill_str = ColorCode(fill, "f") # ensure proper fill string
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15709
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15710 optcont = self.page._get_optional_content(oc)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15711 if optcont is not None:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15712 self.draw_cont = "/OC /%s BDC\n" % optcont + self.draw_cont
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15713 emc = "EMC\n"
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15714 else:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15715 emc = ""
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15716
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15717 alpha = self.page._set_opacity(CA=stroke_opacity, ca=fill_opacity)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15718 if alpha is not None:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15719 self.draw_cont = "/%s gs\n" % alpha + self.draw_cont
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15720
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15721 if width != 1 and width != 0:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15722 self.draw_cont += _format_g(width) + " w\n"
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15723
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15724 if lineCap != 0:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15725 self.draw_cont = "%i J\n" % lineCap + self.draw_cont
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15726 if lineJoin != 0:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15727 self.draw_cont = "%i j\n" % lineJoin + self.draw_cont
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15728
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15729 if dashes not in (None, "", "[] 0"):
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15730 self.draw_cont = "%s d\n" % dashes + self.draw_cont
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15731
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15732 if closePath:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15733 self.draw_cont += "h\n"
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15734 self.last_point = None
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15735
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15736 if color is not None:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15737 self.draw_cont += color_str
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15738
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15739 if fill is not None:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15740 self.draw_cont += fill_str
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15741 if color is not None:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15742 if not even_odd:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15743 self.draw_cont += "B\n"
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15744 else:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15745 self.draw_cont += "B*\n"
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15746 else:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15747 if not even_odd:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15748 self.draw_cont += "f\n"
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15749 else:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15750 self.draw_cont += "f*\n"
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15751 else:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15752 self.draw_cont += "S\n"
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15753
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15754 self.draw_cont += emc
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15755 if CheckMorph(morph):
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15756 m1 = Matrix(
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15757 1, 0, 0, 1, morph[0].x + self.x, self.height - morph[0].y - self.y
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15758 )
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15759 mat = ~m1 * morph[1] * m1
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15760 self.draw_cont = _format_g(JM_TUPLE(mat)) + " cm\n" + self.draw_cont
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15761
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15762 self.totalcont += "\nq\n" + self.draw_cont + "Q\n"
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15763 self.draw_cont = ""
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15764 self.last_point = None
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15765 return
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15766
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15767 def commit(self, overlay: bool = True) -> None:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15768 """Update the page's /Contents object with Shape data.
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15769
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15770 The argument controls whether data appear in foreground (default)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15771 or background.
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15772 """
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15773 CheckParent(self.page) # doc may have died meanwhile
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15774 self.totalcont += self.text_cont
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15775 self.totalcont = self.totalcont.encode()
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15776
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15777 if self.totalcont:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15778 if overlay:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15779 self.page.wrap_contents() # ensure a balanced graphics state
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15780 # make /Contents object with dummy stream
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15781 xref = TOOLS._insert_contents(self.page, b" ", overlay)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15782 # update it with potential compression
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15783 self.doc.update_stream(xref, self.totalcont)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15784
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15785 self.last_point = None # clean up ...
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15786 self.rect = None #
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15787 self.draw_cont = "" # for potential ...
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15788 self.text_cont = "" # ...
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15789 self.totalcont = "" # re-use
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15790
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15791
1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
15792 class Story:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
15793
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
15794 def __init__( self, html='', user_css=None, em=12, archive=None):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
15795 buffer_ = mupdf.fz_new_buffer_from_copied_data( html.encode('utf-8'))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
15796 if archive and not isinstance(archive, Archive):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
15797 archive = Archive(archive)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
15798 arch = archive.this if archive else mupdf.FzArchive( None)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
15799 if hasattr(mupdf, 'FzStoryS'):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
15800 self.this = mupdf.FzStoryS( buffer_, user_css, em, arch)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
15801 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
15802 self.this = mupdf.FzStory( buffer_, user_css, em, arch)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
15803
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
15804 def add_header_ids(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
15805 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
15806 Look for `<h1..6>` items in `self` and adds unique `id`
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
15807 attributes if not already present.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
15808 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
15809 dom = self.body
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
15810 i = 0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
15811 x = dom.find(None, None, None)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
15812 while x:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
15813 name = x.tagname
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
15814 if len(name) == 2 and name[0]=="h" and name[1] in "123456":
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
15815 attr = x.get_attribute_value("id")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
15816 if not attr:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
15817 id_ = f"h_id_{i}"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
15818 #log(f"{name=}: setting {id_=}")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
15819 x.set_attribute("id", id_)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
15820 i += 1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
15821 x = x.find_next(None, None, None)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
15822
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
15823 @staticmethod
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
15824 def add_pdf_links(document_or_stream, positions):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
15825 """
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
15826 Adds links to PDF document.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
15827 Args:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
15828 document_or_stream:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
15829 A PDF `Document` or raw PDF content, for example an
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
15830 `io.BytesIO` instance.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
15831 positions:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
15832 List of `ElementPosition`'s for `document_or_stream`,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
15833 typically from Story.element_positions(). We raise an
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
15834 exception if two or more positions have same id.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
15835 Returns:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
15836 `document_or_stream` if a `Document` instance, otherwise a
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
15837 new `Document` instance.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
15838 We raise an exception if an `href` in `positions` refers to an
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
15839 internal position `#<name>` but no item in `positions` has `id =
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
15840 name`.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
15841 """
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
15842 if isinstance(document_or_stream, Document):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
15843 document = document_or_stream
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
15844 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
15845 document = Document("pdf", document_or_stream)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
15846
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
15847 # Create dict from id to position, which we will use to find
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
15848 # link destinations.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
15849 #
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
15850 id_to_position = dict()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
15851 #log(f"positions: {positions}")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
15852 for position in positions:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
15853 #log(f"add_pdf_links(): position: {position}")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
15854 if (position.open_close & 1) and position.id:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
15855 #log(f"add_pdf_links(): position with id: {position}")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
15856 if position.id in id_to_position:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
15857 #log(f"Ignoring duplicate positions with id={position.id!r}")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
15858 pass
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
15859 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
15860 id_to_position[ position.id] = position
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
15861
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
15862 # Insert links for all positions that have an `href`.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
15863 #
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
15864 for position_from in positions:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
15865
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
15866 if (position_from.open_close & 1) and position_from.href:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
15867
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
15868 #log(f"add_pdf_links(): position with href: {position}")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
15869 link = dict()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
15870 link['from'] = Rect(position_from.rect)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
15871
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
15872 if position_from.href.startswith("#"):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
15873 #`<a href="#...">...</a>` internal link.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
15874 target_id = position_from.href[1:]
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
15875 try:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
15876 position_to = id_to_position[ target_id]
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
15877 except Exception as e:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
15878 if g_exceptions_verbose > 1: exception_info()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
15879 raise RuntimeError(f"No destination with id={target_id}, required by position_from: {position_from}") from e
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
15880 # Make link from `position_from`'s rect to top-left of
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
15881 # `position_to`'s rect.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
15882 if 0:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
15883 log(f"add_pdf_links(): making link from:")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
15884 log(f"add_pdf_links(): {position_from}")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
15885 log(f"add_pdf_links(): to:")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
15886 log(f"add_pdf_links(): {position_to}")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
15887 link["kind"] = LINK_GOTO
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
15888 x0, y0, x1, y1 = position_to.rect
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
15889 # This appears to work well with viewers which scroll
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
15890 # to make destination point top-left of window.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
15891 link["to"] = Point(x0, y0)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
15892 link["page"] = position_to.page_num - 1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
15893
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
15894 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
15895 # `<a href="...">...</a>` external link.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
15896 if position_from.href.startswith('name:'):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
15897 link['kind'] = LINK_NAMED
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
15898 link['name'] = position_from.href[5:]
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
15899 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
15900 link['kind'] = LINK_URI
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
15901 link['uri'] = position_from.href
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
15902
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
15903 #log(f'Adding link: {position_from.page_num=} {link=}.')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
15904 document[position_from.page_num - 1].insert_link(link)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
15905
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
15906 return document
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
15907
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
15908 @property
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
15909 def body(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
15910 dom = self.document()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
15911 return dom.bodytag()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
15912
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
15913 def document( self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
15914 dom = mupdf.fz_story_document( self.this)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
15915 return Xml( dom)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
15916
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
15917 def draw( self, device, matrix=None):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
15918 ctm2 = JM_matrix_from_py( matrix)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
15919 dev = device.this if device else mupdf.FzDevice( None)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
15920 mupdf.fz_draw_story( self.this, dev, ctm2)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
15921
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
15922 def element_positions( self, function, args=None):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
15923 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
15924 Trigger a callback function to record where items have been placed.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
15925 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
15926 if type(args) is dict:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
15927 for k in args.keys():
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
15928 if not (type(k) is str and k.isidentifier()):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
15929 raise ValueError(f"invalid key '{k}'")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
15930 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
15931 args = {}
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
15932 if not callable(function) or function.__code__.co_argcount != 1:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
15933 raise ValueError("callback 'function' must be a callable with exactly one argument")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
15934
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
15935 def function2( position):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
15936 class Position2:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
15937 pass
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
15938 position2 = Position2()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
15939 position2.depth = position.depth
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
15940 position2.heading = position.heading
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
15941 position2.id = position.id
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
15942 position2.rect = JM_py_from_rect(position.rect)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
15943 position2.text = position.text
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
15944 position2.open_close = position.open_close
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
15945 position2.rect_num = position.rectangle_num
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
15946 position2.href = position.href
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
15947 if args:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
15948 for k, v in args.items():
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
15949 setattr( position2, k, v)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
15950 function( position2)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
15951 mupdf.fz_story_positions( self.this, function2)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
15952
39
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15953 def place( self, where, flags=0):
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15954 '''
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15955 Wrapper for fz_place_story_flags().
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15956 '''
1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
15957 where = JM_rect_from_py( where)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
15958 filled = mupdf.FzRect()
39
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
15959 more = mupdf.fz_place_story_flags( self.this, where, filled, flags)
1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
15960 return more, JM_py_from_rect( filled)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
15961
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
15962 def reset( self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
15963 mupdf.fz_reset_story( self.this)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
15964
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
15965 def write(self, writer, rectfn, positionfn=None, pagefn=None):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
15966 dev = None
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
15967 page_num = 0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
15968 rect_num = 0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
15969 filled = Rect(0, 0, 0, 0)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
15970 while 1:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
15971 mediabox, rect, ctm = rectfn(rect_num, filled)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
15972 rect_num += 1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
15973 if mediabox:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
15974 # new page.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
15975 page_num += 1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
15976 more, filled = self.place( rect)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
15977 if positionfn:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
15978 def positionfn2(position):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
15979 # We add a `.page_num` member to the
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
15980 # `ElementPosition` instance.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
15981 position.page_num = page_num
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
15982 positionfn(position)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
15983 self.element_positions(positionfn2)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
15984 if writer:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
15985 if mediabox:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
15986 # new page.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
15987 if dev:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
15988 if pagefn:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
15989 pagefn(page_num, mediabox, dev, 1)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
15990 writer.end_page()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
15991 dev = writer.begin_page( mediabox)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
15992 if pagefn:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
15993 pagefn(page_num, mediabox, dev, 0)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
15994 self.draw( dev, ctm)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
15995 if not more:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
15996 if pagefn:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
15997 pagefn( page_num, mediabox, dev, 1)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
15998 writer.end_page()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
15999 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16000 self.draw(None, ctm)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16001 if not more:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16002 break
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16003
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16004 @staticmethod
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16005 def write_stabilized(writer, contentfn, rectfn, user_css=None, em=12, positionfn=None, pagefn=None, archive=None, add_header_ids=True):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16006 positions = list()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16007 content = None
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16008 # Iterate until stable.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16009 while 1:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16010 content_prev = content
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16011 content = contentfn( positions)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16012 stable = False
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16013 if content == content_prev:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16014 stable = True
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16015 content2 = content
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16016 story = Story(content2, user_css, em, archive)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16017
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16018 if add_header_ids:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16019 story.add_header_ids()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16020
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16021 positions = list()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16022 def positionfn2(position):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16023 #log(f"write_stabilized(): {stable=} {positionfn=} {position=}")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16024 positions.append(position)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16025 if stable and positionfn:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16026 positionfn(position)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16027 story.write(
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16028 writer if stable else None,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16029 rectfn,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16030 positionfn2,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16031 pagefn,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16032 )
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16033 if stable:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16034 break
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16035
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16036 @staticmethod
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16037 def write_stabilized_with_links(contentfn, rectfn, user_css=None, em=12, positionfn=None, pagefn=None, archive=None, add_header_ids=True):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16038 #log("write_stabilized_with_links()")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16039 stream = io.BytesIO()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16040 writer = DocumentWriter(stream)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16041 positions = []
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16042 def positionfn2(position):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16043 #log(f"write_stabilized_with_links(): {position=}")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16044 positions.append(position)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16045 if positionfn:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16046 positionfn(position)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16047 Story.write_stabilized(writer, contentfn, rectfn, user_css, em, positionfn2, pagefn, archive, add_header_ids)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16048 writer.close()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16049 stream.seek(0)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16050 return Story.add_pdf_links(stream, positions)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16051
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16052 def write_with_links(self, rectfn, positionfn=None, pagefn=None):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16053 #log("write_with_links()")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16054 stream = io.BytesIO()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16055 writer = DocumentWriter(stream)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16056 positions = []
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16057 def positionfn2(position):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16058 #log(f"write_with_links(): {position=}")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16059 positions.append(position)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16060 if positionfn:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16061 positionfn(position)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16062 self.write(writer, rectfn, positionfn=positionfn2, pagefn=pagefn)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16063 writer.close()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16064 stream.seek(0)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16065 return Story.add_pdf_links(stream, positions)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16066
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16067 class FitResult:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16068 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16069 The result from a `Story.fit*()` method.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16070
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16071 Members:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16072
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16073 `big_enough`:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16074 `True` if the fit succeeded.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16075 `filled`:
39
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
16076 Tuple (x0, y0, x1, y1) from the last call to `Story.place()`. This
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
16077 will be wider than .rect if any single word (which we never split)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
16078 was too wide for .rect.
1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16079 `more`:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16080 `False` if the fit succeeded.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16081 `numcalls`:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16082 Number of calls made to `self.place()`.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16083 `parameter`:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16084 The successful parameter value, or the largest failing value.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16085 `rect`:
39
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
16086 The pumupdf.Rect created from `parameter`.
1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16087 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16088 def __init__(self, big_enough=None, filled=None, more=None, numcalls=None, parameter=None, rect=None):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16089 self.big_enough = big_enough
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16090 self.filled = filled
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16091 self.more = more
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16092 self.numcalls = numcalls
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16093 self.parameter = parameter
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16094 self.rect = rect
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16095
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16096 def __repr__(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16097 return (
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16098 f' big_enough={self.big_enough}'
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16099 f' filled={self.filled}'
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16100 f' more={self.more}'
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16101 f' numcalls={self.numcalls}'
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16102 f' parameter={self.parameter}'
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16103 f' rect={self.rect}'
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16104 )
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16105
39
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
16106 def fit(self, fn, pmin=None, pmax=None, delta=0.001, verbose=False, flags=0):
1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16107 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16108 Finds optimal rect that contains the story `self`.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16109
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16110 Returns a `Story.FitResult` instance.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16111
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16112 On success, the last call to `self.place()` will have been with the
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16113 returned rectangle, so `self.draw()` can be used directly.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16114
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16115 Args:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16116 :arg fn:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16117 A callable taking a floating point `parameter` and returning a
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16118 `pymupdf.Rect()`. If the rect is empty, we assume the story will
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16119 not fit and do not call `self.place()`.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16120
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16121 Must guarantee that `self.place()` behaves monotonically when
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16122 given rect `fn(parameter`) as `parameter` increases. This
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16123 usually means that both width and height increase or stay
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16124 unchanged as `parameter` increases.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16125 :arg pmin:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16126 Minimum parameter to consider; `None` for -infinity.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16127 :arg pmax:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16128 Maximum parameter to consider; `None` for +infinity.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16129 :arg delta:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16130 Maximum error in returned `parameter`.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16131 :arg verbose:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16132 If true we output diagnostics.
39
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
16133 :arg flags:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
16134 Passed to mupdf.fz_place_story_flags(). e.g.
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
16135 zero or `mupdf.FZ_PLACE_STORY_FLAG_NO_OVERFLOW`.
1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16136 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16137 def log(text):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16138 assert verbose
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16139 message(f'fit(): {text}')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16140
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16141 assert isinstance(pmin, (int, float)) or pmin is None
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16142 assert isinstance(pmax, (int, float)) or pmax is None
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16143
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16144 class State:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16145 def __init__(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16146 self.pmin = pmin
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16147 self.pmax = pmax
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16148 self.pmin_result = None
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16149 self.pmax_result = None
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16150 self.result = None
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16151 self.numcalls = 0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16152 if verbose:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16153 self.pmin0 = pmin
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16154 self.pmax0 = pmax
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16155 state = State()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16156
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16157 if verbose:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16158 log(f'starting. {state.pmin=} {state.pmax=}.')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16159
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16160 self.reset()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16161
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16162 def ret():
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16163 if state.pmax is not None:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16164 if state.last_p != state.pmax:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16165 if verbose:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16166 log(f'Calling update() with pmax, because was overwritten by later calls.')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16167 big_enough = update(state.pmax)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16168 assert big_enough
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16169 result = state.pmax_result
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16170 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16171 result = state.pmin_result if state.pmin_result else Story.FitResult(numcalls=state.numcalls)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16172 if verbose:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16173 log(f'finished. {state.pmin0=} {state.pmax0=} {state.pmax=}: returning {result=}')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16174 return result
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16175
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16176 def update(parameter):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16177 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16178 Evaluates `more, _ = self.place(fn(parameter))`. If `more` is
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16179 false, then `rect` is big enough to contain `self` and we
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16180 set `state.pmax=parameter` and return True. Otherwise we set
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16181 `state.pmin=parameter` and return False.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16182 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16183 rect = fn(parameter)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16184 assert isinstance(rect, Rect), f'{type(rect)=} {rect=}'
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16185 if rect.is_empty:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16186 big_enough = False
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16187 result = Story.FitResult(parameter=parameter, numcalls=state.numcalls)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16188 if verbose:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16189 log(f'update(): not calling self.place() because rect is empty.')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16190 else:
39
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
16191 more, filled = self.place(rect, flags)
1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16192 state.numcalls += 1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16193 big_enough = not more
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16194 result = Story.FitResult(
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16195 filled=filled,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16196 more=more,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16197 numcalls=state.numcalls,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16198 parameter=parameter,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16199 rect=rect,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16200 big_enough=big_enough,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16201 )
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16202 if verbose:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16203 log(f'update(): called self.place(): {state.numcalls:>2d}: {more=} {parameter=} {rect=}.')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16204 if big_enough:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16205 state.pmax = parameter
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16206 state.pmax_result = result
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16207 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16208 state.pmin = parameter
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16209 state.pmin_result = result
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16210 state.last_p = parameter
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16211 return big_enough
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16212
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16213 def opposite(p, direction):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16214 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16215 Returns same sign as `direction`, larger or smaller than `p` if
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16216 direction is positive or negative respectively.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16217 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16218 if p is None or p==0:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16219 return direction
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16220 if direction * p > 0:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16221 return 2 * p
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16222 return -p
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16223
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16224 if state.pmin is None:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16225 # Find an initial finite pmin value.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16226 if verbose: log(f'finding pmin.')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16227 parameter = opposite(state.pmax, -1)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16228 while 1:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16229 if not update(parameter):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16230 break
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16231 parameter *= 2
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16232 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16233 if update(state.pmin):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16234 if verbose: log(f'{state.pmin=} is big enough.')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16235 return ret()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16236
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16237 if state.pmax is None:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16238 # Find an initial finite pmax value.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16239 if verbose: log(f'finding pmax.')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16240 parameter = opposite(state.pmin, +1)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16241 while 1:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16242 if update(parameter):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16243 break
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16244 parameter *= 2
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16245 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16246 if not update(state.pmax):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16247 # No solution possible.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16248 state.pmax = None
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16249 if verbose: log(f'No solution possible {state.pmax=}.')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16250 return ret()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16251
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16252 # Do binary search in pmin..pmax.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16253 if verbose: log(f'doing binary search with {state.pmin=} {state.pmax=}.')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16254 while 1:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16255 if state.pmax - state.pmin < delta:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16256 return ret()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16257 parameter = (state.pmin + state.pmax) / 2
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16258 update(parameter)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16259
39
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
16260 def fit_scale(self, rect, scale_min=0, scale_max=None, delta=0.001, verbose=False, flags=0):
1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16261 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16262 Finds smallest value `scale` in range `scale_min..scale_max` where
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16263 `scale * rect` is large enough to contain the story `self`.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16264
39
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
16265 Returns a `Story.FitResult` instance with `.parameter` set to `scale`.
1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16266
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16267 :arg width:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16268 width of rect.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16269 :arg height:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16270 height of rect.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16271 :arg scale_min:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16272 Minimum scale to consider; must be >= 0.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16273 :arg scale_max:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16274 Maximum scale to consider, must be >= scale_min or `None` for
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16275 infinite.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16276 :arg delta:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16277 Maximum error in returned scale.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16278 :arg verbose:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16279 If true we output diagnostics.
39
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
16280 :arg flags:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
16281 Passed to Story.place().
1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16282 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16283 x0, y0, x1, y1 = rect
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16284 width = x1 - x0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16285 height = y1 - y0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16286 def fn(scale):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16287 return Rect(x0, y0, x0 + scale*width, y0 + scale*height)
39
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
16288 return self.fit(fn, scale_min, scale_max, delta, verbose, flags)
1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16289
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16290 def fit_height(self, width, height_min=0, height_max=None, origin=(0, 0), delta=0.001, verbose=False):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16291 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16292 Finds smallest height in range `height_min..height_max` where a rect
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16293 with size `(width, height)` is large enough to contain the story
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16294 `self`.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16295
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16296 Returns a `Story.FitResult` instance.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16297
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16298 :arg width:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16299 width of rect.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16300 :arg height_min:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16301 Minimum height to consider; must be >= 0.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16302 :arg height_max:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16303 Maximum height to consider, must be >= height_min or `None` for
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16304 infinite.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16305 :arg origin:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16306 `(x0, y0)` of rect.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16307 :arg delta:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16308 Maximum error in returned height.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16309 :arg verbose:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16310 If true we output diagnostics.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16311 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16312 x0, y0 = origin
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16313 x1 = x0 + width
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16314 def fn(height):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16315 return Rect(x0, y0, x1, y0+height)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16316 return self.fit(fn, height_min, height_max, delta, verbose)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16317
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16318 def fit_width(self, height, width_min=0, width_max=None, origin=(0, 0), delta=0.001, verbose=False):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16319 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16320 Finds smallest width in range `width_min..width_max` where a rect with size
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16321 `(width, height)` is large enough to contain the story `self`.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16322
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16323 Returns a `Story.FitResult` instance.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16324 Returns a `FitResult` instance.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16325
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16326 :arg height:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16327 height of rect.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16328 :arg width_min:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16329 Minimum width to consider; must be >= 0.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16330 :arg width_max:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16331 Maximum width to consider, must be >= width_min or `None` for
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16332 infinite.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16333 :arg origin:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16334 `(x0, y0)` of rect.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16335 :arg delta:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16336 Maximum error in returned width.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16337 :arg verbose:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16338 If true we output diagnostics.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16339 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16340 x0, y0 = origin
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16341 y1 = y0 + height
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16342 def fn(width):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16343 return Rect(x0, y0, x0+width, y1)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16344 return self.fit(fn, width_min, width_max, delta, verbose)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16345
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16346
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16347 class TextPage:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16348
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16349 def __init__(self, *args):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16350 if args_match(args, mupdf.FzRect):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16351 mediabox = args[0]
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16352 self.this = mupdf.FzStextPage( mediabox)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16353 elif args_match(args, mupdf.FzStextPage):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16354 self.this = args[0]
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16355 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16356 raise Exception(f'Unrecognised args: {args}')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16357 self.thisown = True
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16358 self.parent = None
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16359
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16360 def _extractText(self, format_):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16361 this_tpage = self.this
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16362 res = mupdf.fz_new_buffer(1024)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16363 out = mupdf.FzOutput( res)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16364 # fixme: mupdfwrap.py thinks fz_output is not copyable, possibly
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16365 # because there is no .refs member visible and no fz_keep_output() fn,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16366 # although there is an fz_drop_output(). So mupdf.fz_new_output_with_buffer()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16367 # doesn't convert the returned fz_output* into a mupdf.FzOutput.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16368 #out = mupdf.FzOutput(out)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16369 if format_ == 1:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16370 mupdf.fz_print_stext_page_as_html(out, this_tpage, 0)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16371 elif format_ == 3:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16372 mupdf.fz_print_stext_page_as_xml(out, this_tpage, 0)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16373 elif format_ == 4:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16374 mupdf.fz_print_stext_page_as_xhtml(out, this_tpage, 0)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16375 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16376 JM_print_stext_page_as_text(res, this_tpage)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16377 out.fz_close_output()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16378 text = JM_EscapeStrFromBuffer(res)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16379 return text
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16380
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16381 def _getNewBlockList(self, page_dict, raw):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16382 JM_make_textpage_dict(self.this, page_dict, raw)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16383
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16384 def _textpage_dict(self, raw=False):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16385 page_dict = {"width": self.rect.width, "height": self.rect.height}
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16386 self._getNewBlockList(page_dict, raw)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16387 return page_dict
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16388
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16389 def extractBLOCKS(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16390 """Return a list with text block information."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16391 if g_use_extra:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16392 return extra.extractBLOCKS(self.this)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16393 block_n = -1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16394 this_tpage = self.this
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16395 tp_rect = mupdf.FzRect(this_tpage.m_internal.mediabox)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16396 res = mupdf.fz_new_buffer(1024)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16397 lines = []
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16398 for block in this_tpage:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16399 block_n += 1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16400 blockrect = mupdf.FzRect(mupdf.FzRect.Fixed_EMPTY)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16401 if block.m_internal.type == mupdf.FZ_STEXT_BLOCK_TEXT:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16402 mupdf.fz_clear_buffer(res) # set text buffer to empty
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16403 line_n = -1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16404 last_char = 0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16405 for line in block:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16406 line_n += 1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16407 linerect = mupdf.FzRect(mupdf.FzRect.Fixed_EMPTY)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16408 for ch in line:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16409 cbbox = JM_char_bbox(line, ch)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16410 if (not JM_rects_overlap(tp_rect, cbbox)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16411 and not mupdf.fz_is_infinite_rect(tp_rect)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16412 ):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16413 continue
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16414 JM_append_rune(res, ch.m_internal.c)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16415 last_char = ch.m_internal.c
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16416 linerect = mupdf.fz_union_rect(linerect, cbbox)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16417 if last_char != 10 and not mupdf.fz_is_empty_rect(linerect):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16418 mupdf.fz_append_byte(res, 10)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16419 blockrect = mupdf.fz_union_rect(blockrect, linerect)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16420 text = JM_EscapeStrFromBuffer(res)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16421 elif (JM_rects_overlap(tp_rect, block.m_internal.bbox)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16422 or mupdf.fz_is_infinite_rect(tp_rect)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16423 ):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16424 img = block.i_image()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16425 cs = img.colorspace()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16426 text = "<image: %s, width: %d, height: %d, bpc: %d>" % (
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16427 mupdf.fz_colorspace_name(cs),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16428 img.w(), img.h(), img.bpc()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16429 )
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16430 blockrect = mupdf.fz_union_rect(blockrect, mupdf.FzRect(block.m_internal.bbox))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16431 if not mupdf.fz_is_empty_rect(blockrect):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16432 litem = (
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16433 blockrect.x0,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16434 blockrect.y0,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16435 blockrect.x1,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16436 blockrect.y1,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16437 text,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16438 block_n,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16439 block.m_internal.type,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16440 )
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16441 lines.append(litem)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16442 return lines
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16443
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16444 def extractDICT(self, cb=None, sort=False) -> dict:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16445 """Return page content as a Python dict of images and text spans."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16446 val = self._textpage_dict(raw=False)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16447 if cb is not None:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16448 val["width"] = cb.width
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16449 val["height"] = cb.height
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16450 if sort:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16451 blocks = val["blocks"]
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16452 blocks.sort(key=lambda b: (b["bbox"][3], b["bbox"][0]))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16453 val["blocks"] = blocks
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16454 return val
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16455
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16456 def extractHTML(self) -> str:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16457 """Return page content as a HTML string."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16458 return self._extractText(1)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16459
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16460 def extractIMGINFO(self, hashes=0):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16461 """Return a list with image meta information."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16462 block_n = -1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16463 this_tpage = self.this
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16464 rc = []
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16465 for block in this_tpage:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16466 block_n += 1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16467 if block.m_internal.type == mupdf.FZ_STEXT_BLOCK_TEXT:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16468 continue
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16469 img = block.i_image()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16470 img_size = 0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16471 mask = img.mask()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16472 if mask.m_internal:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16473 has_mask = True
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16474 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16475 has_mask = False
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16476 compr_buff = mupdf.fz_compressed_image_buffer(img)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16477 if compr_buff.m_internal:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16478 img_size = compr_buff.fz_compressed_buffer_size()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16479 compr_buff = None
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16480 if hashes:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16481 r = mupdf.FzIrect(FZ_MIN_INF_RECT, FZ_MIN_INF_RECT, FZ_MAX_INF_RECT, FZ_MAX_INF_RECT)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16482 assert mupdf.fz_is_infinite_irect(r)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16483 m = mupdf.FzMatrix(img.w(), 0, 0, img.h(), 0, 0)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16484 pix, w, h = mupdf.fz_get_pixmap_from_image(img, r, m)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16485 digest = mupdf.fz_md5_pixmap2(pix)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16486 digest = bytes(digest)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16487 if img_size == 0:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16488 img_size = img.w() * img.h() * img.n()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16489 cs = mupdf.FzColorspace(mupdf.ll_fz_keep_colorspace(img.m_internal.colorspace))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16490 block_dict = dict()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16491 block_dict[dictkey_number] = block_n
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16492 block_dict[dictkey_bbox] = JM_py_from_rect(block.m_internal.bbox)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16493 block_dict[dictkey_matrix] = JM_py_from_matrix(block.i_transform())
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16494 block_dict[dictkey_width] = img.w()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16495 block_dict[dictkey_height] = img.h()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16496 block_dict[dictkey_colorspace] = mupdf.fz_colorspace_n(cs)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16497 block_dict[dictkey_cs_name] = mupdf.fz_colorspace_name(cs)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16498 block_dict[dictkey_xres] = img.xres()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16499 block_dict[dictkey_yres] = img.yres()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16500 block_dict[dictkey_bpc] = img.bpc()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16501 block_dict[dictkey_size] = img_size
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16502 if hashes:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16503 block_dict["digest"] = digest
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16504 block_dict["has-mask"] = has_mask
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16505 rc.append(block_dict)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16506 return rc
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16507
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16508 def extractJSON(self, cb=None, sort=False) -> str:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16509 """Return 'extractDICT' converted to JSON format."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16510 import base64
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16511 import json
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16512 val = self._textpage_dict(raw=False)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16513
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16514 class b64encode(json.JSONEncoder):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16515 def default(self, s):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16516 if type(s) in (bytes, bytearray):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16517 return base64.b64encode(s).decode()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16518
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16519 if cb is not None:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16520 val["width"] = cb.width
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16521 val["height"] = cb.height
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16522 if sort:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16523 blocks = val["blocks"]
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16524 blocks.sort(key=lambda b: (b["bbox"][3], b["bbox"][0]))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16525 val["blocks"] = blocks
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16526
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16527 val = json.dumps(val, separators=(",", ":"), cls=b64encode, indent=1)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16528 return val
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16529
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16530 def extractRAWDICT(self, cb=None, sort=False) -> dict:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16531 """Return page content as a Python dict of images and text characters."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16532 val = self._textpage_dict(raw=True)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16533 if cb is not None:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16534 val["width"] = cb.width
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16535 val["height"] = cb.height
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16536 if sort:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16537 blocks = val["blocks"]
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16538 blocks.sort(key=lambda b: (b["bbox"][3], b["bbox"][0]))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16539 val["blocks"] = blocks
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16540 return val
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16541
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16542 def extractRAWJSON(self, cb=None, sort=False) -> str:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16543 """Return 'extractRAWDICT' converted to JSON format."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16544 import base64
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16545 import json
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16546 val = self._textpage_dict(raw=True)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16547
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16548 class b64encode(json.JSONEncoder):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16549 def default(self,s):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16550 if type(s) in (bytes, bytearray):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16551 return base64.b64encode(s).decode()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16552
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16553 if cb is not None:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16554 val["width"] = cb.width
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16555 val["height"] = cb.height
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16556 if sort:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16557 blocks = val["blocks"]
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16558 blocks.sort(key=lambda b: (b["bbox"][3], b["bbox"][0]))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16559 val["blocks"] = blocks
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16560 val = json.dumps(val, separators=(",", ":"), cls=b64encode, indent=1)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16561 return val
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16562
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16563 def extractSelection(self, pointa, pointb):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16564 a = JM_point_from_py(pointa)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16565 b = JM_point_from_py(pointb)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16566 found = mupdf.fz_copy_selection(self.this, a, b, 0)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16567 return found
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16568
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16569 def extractText(self, sort=False) -> str:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16570 """Return simple, bare text on the page."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16571 if not sort:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16572 return self._extractText(0)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16573 blocks = self.extractBLOCKS()[:]
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16574 blocks.sort(key=lambda b: (b[3], b[0]))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16575 return "".join([b[4] for b in blocks])
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16576
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16577 def extractTextbox(self, rect):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16578 this_tpage = self.this
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16579 assert isinstance(this_tpage, mupdf.FzStextPage)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16580 area = JM_rect_from_py(rect)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16581 found = JM_copy_rectangle(this_tpage, area)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16582 rc = PyUnicode_DecodeRawUnicodeEscape(found)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16583 return rc
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16584
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16585 def extractWORDS(self, delimiters=None):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16586 """Return a list with text word information."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16587 if g_use_extra:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16588 return extra.extractWORDS(self.this, delimiters)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16589 buflen = 0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16590 last_char_rtl = 0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16591 block_n = -1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16592 wbbox = mupdf.FzRect(mupdf.FzRect.Fixed_EMPTY) # word bbox
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16593 this_tpage = self.this
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16594 tp_rect = mupdf.FzRect(this_tpage.m_internal.mediabox)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16595
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16596 lines = None
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16597 buff = mupdf.fz_new_buffer(64)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16598 lines = []
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16599 for block in this_tpage:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16600 block_n += 1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16601 if block.m_internal.type != mupdf.FZ_STEXT_BLOCK_TEXT:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16602 continue
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16603 line_n = -1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16604 for line in block:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16605 line_n += 1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16606 word_n = 0 # word counter per line
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16607 mupdf.fz_clear_buffer(buff) # reset word buffer
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16608 buflen = 0 # reset char counter
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16609 for ch in line:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16610 cbbox = JM_char_bbox(line, ch)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16611 if (not JM_rects_overlap(tp_rect, cbbox)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16612 and not mupdf.fz_is_infinite_rect(tp_rect)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16613 ):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16614 continue
39
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
16615
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
16616 if buflen == 0 and ch.m_internal.c == 0x200d:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
16617 # ZERO WIDTH JOINER cannot start a word
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
16618 continue
1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16619 word_delimiter = JM_is_word_delimiter(ch.m_internal.c, delimiters)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16620 this_char_rtl = JM_is_rtl_char(ch.m_internal.c)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16621 if word_delimiter or this_char_rtl != last_char_rtl:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16622 if buflen == 0 and word_delimiter:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16623 continue # skip delimiters at line start
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16624 if not mupdf.fz_is_empty_rect(wbbox):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16625 word_n, wbbox = JM_append_word(lines, buff, wbbox, block_n, line_n, word_n)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16626 mupdf.fz_clear_buffer(buff)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16627 buflen = 0 # reset char counter
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16628 if word_delimiter:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16629 continue
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16630 # append one unicode character to the word
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16631 JM_append_rune(buff, ch.m_internal.c)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16632 last_char_rtl = this_char_rtl
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16633 buflen += 1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16634 # enlarge word bbox
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16635 wbbox = mupdf.fz_union_rect(wbbox, JM_char_bbox(line, ch))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16636 if buflen and not mupdf.fz_is_empty_rect(wbbox):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16637 word_n, wbbox = JM_append_word(lines, buff, wbbox, block_n, line_n, word_n)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16638 buflen = 0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16639 return lines
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16640
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16641 def extractXHTML(self) -> str:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16642 """Return page content as a XHTML string."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16643 return self._extractText(4)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16644
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16645 def extractXML(self) -> str:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16646 """Return page content as a XML string."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16647 return self._extractText(3)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16648
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16649 def poolsize(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16650 """TextPage current poolsize."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16651 tpage = self.this
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16652 pool = mupdf.Pool(tpage.m_internal.pool)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16653 size = mupdf.fz_pool_size( pool)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16654 pool.m_internal = None # Ensure that pool's destructor does not free the pool.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16655 return size
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16656
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16657 @property
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16658 def rect(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16659 """Page rectangle."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16660 this_tpage = self.this
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16661 mediabox = this_tpage.m_internal.mediabox
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16662 val = JM_py_from_rect(mediabox)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16663 val = Rect(val)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16664
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16665 return val
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16666
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16667 def search(self, needle, hit_max=0, quads=1):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16668 """Locate 'needle' returning rects or quads."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16669 val = JM_search_stext_page(self.this, needle)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16670 if not val:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16671 return val
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16672 items = len(val)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16673 for i in range(items): # change entries to quads or rects
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16674 q = Quad(val[i])
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16675 if quads:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16676 val[i] = q
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16677 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16678 val[i] = q.rect
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16679 if quads:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16680 return val
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16681 i = 0 # join overlapping rects on the same line
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16682 while i < items - 1:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16683 v1 = val[i]
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16684 v2 = val[i + 1]
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16685 if v1.y1 != v2.y1 or (v1 & v2).is_empty:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16686 i += 1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16687 continue # no overlap on same line
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16688 val[i] = v1 | v2 # join rectangles
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16689 del val[i + 1] # remove v2
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16690 items -= 1 # reduce item count
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16691 return val
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16692
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16693 extractTEXT = extractText
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16694
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16695
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16696 class TextWriter:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16697
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16698 def __init__(self, page_rect, opacity=1, color=None):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16699 """Stores text spans for later output on compatible PDF pages."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16700 self.this = mupdf.fz_new_text()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16701
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16702 self.opacity = opacity
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16703 self.color = color
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16704 self.rect = Rect(page_rect)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16705 self.ctm = Matrix(1, 0, 0, -1, 0, self.rect.height)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16706 self.ictm = ~self.ctm
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16707 self.last_point = Point()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16708 self.last_point.__doc__ = "Position following last text insertion."
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16709 self.text_rect = Rect()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16710
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16711 self.text_rect.__doc__ = "Accumulated area of text spans."
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16712 self.used_fonts = set()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16713 self.thisown = True
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16714
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16715 @property
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16716 def _bbox(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16717 val = JM_py_from_rect( mupdf.fz_bound_text( self.this, mupdf.FzStrokeState(None), mupdf.FzMatrix()))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16718 val = Rect(val)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16719 return val
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16720
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16721 def append(self, pos, text, font=None, fontsize=11, language=None, right_to_left=0, small_caps=0):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16722 """Store 'text' at point 'pos' using 'font' and 'fontsize'."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16723 pos = Point(pos) * self.ictm
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16724 #log( '{font=}')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16725 if font is None:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16726 font = Font("helv")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16727 if not font.is_writable:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16728 if 0:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16729 log( '{font.this.m_internal.name=}')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16730 log( '{font.this.m_internal.t3matrix=}')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16731 log( '{font.this.m_internal.bbox=}')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16732 log( '{font.this.m_internal.glyph_count=}')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16733 log( '{font.this.m_internal.use_glyph_bbox=}')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16734 log( '{font.this.m_internal.width_count=}')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16735 log( '{font.this.m_internal.width_default=}')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16736 log( '{font.this.m_internal.has_digest=}')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16737 log( 'Unsupported font {font.name=}')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16738 if mupdf_cppyy:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16739 import cppyy
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16740 log( f'Unsupported font {cppyy.gbl.mupdf_font_name(font.this.m_internal)=}')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16741 raise ValueError("Unsupported font '%s'." % font.name)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16742 if right_to_left:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16743 text = self.clean_rtl(text)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16744 text = "".join(reversed(text))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16745 right_to_left = 0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16746
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16747 lang = mupdf.fz_text_language_from_string(language)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16748 p = JM_point_from_py(pos)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16749 trm = mupdf.fz_make_matrix(fontsize, 0, 0, fontsize, p.x, p.y)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16750 markup_dir = 0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16751 wmode = 0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16752 if small_caps == 0:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16753 trm = mupdf.fz_show_string( self.this, font.this, trm, text, wmode, right_to_left, markup_dir, lang)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16754 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16755 trm = JM_show_string_cs( self.this, font.this, trm, text, wmode, right_to_left, markup_dir, lang)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16756 val = JM_py_from_matrix(trm)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16757
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16758 self.last_point = Point(val[-2:]) * self.ctm
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16759 self.text_rect = self._bbox * self.ctm
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16760 val = self.text_rect, self.last_point
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16761 if font.flags["mono"] == 1:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16762 self.used_fonts.add(font)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16763 return val
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16764
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16765 def appendv(self, pos, text, font=None, fontsize=11, language=None, small_caps=False):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16766 lheight = fontsize * 1.2
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16767 for c in text:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16768 self.append(pos, c, font=font, fontsize=fontsize,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16769 language=language, small_caps=small_caps)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16770 pos.y += lheight
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16771 return self.text_rect, self.last_point
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16772
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16773 def clean_rtl(self, text):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16774 """Revert the sequence of Latin text parts.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16775
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16776 Text with right-to-left writing direction (Arabic, Hebrew) often
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16777 contains Latin parts, which are written in left-to-right: numbers, names,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16778 etc. For output as PDF text we need *everything* in right-to-left.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16779 E.g. an input like "<arabic> ABCDE FG HIJ <arabic> KL <arabic>" will be
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16780 converted to "<arabic> JIH GF EDCBA <arabic> LK <arabic>". The Arabic
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16781 parts remain untouched.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16782
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16783 Args:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16784 text: str
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16785 Returns:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16786 Massaged string.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16787 """
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16788 if not text:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16789 return text
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16790 # split into words at space boundaries
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16791 words = text.split(" ")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16792 idx = []
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16793 for i in range(len(words)):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16794 w = words[i]
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16795 # revert character sequence for Latin only words
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16796 if not (len(w) < 2 or max([ord(c) for c in w]) > 255):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16797 words[i] = "".join(reversed(w))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16798 idx.append(i) # stored index of Latin word
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16799
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16800 # adjacent Latin words must revert their sequence, too
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16801 idx2 = [] # store indices of adjacent Latin words
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16802 for i in range(len(idx)):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16803 if idx2 == []: # empty yet?
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16804 idx2.append(idx[i]) # store Latin word number
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16805
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16806 elif idx[i] > idx2[-1] + 1: # large gap to last?
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16807 if len(idx2) > 1: # at least two consecutives?
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16808 words[idx2[0] : idx2[-1] + 1] = reversed(
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16809 words[idx2[0] : idx2[-1] + 1]
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16810 ) # revert their sequence
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16811 idx2 = [idx[i]] # re-initialize
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16812
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16813 elif idx[i] == idx2[-1] + 1: # new adjacent Latin word
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16814 idx2.append(idx[i])
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16815
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16816 text = " ".join(words)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16817 return text
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16818
39
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
16819 def fill_textbox(
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
16820 writer: 'TextWriter',
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
16821 rect: rect_like,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
16822 text: typing.Union[str, list],
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
16823 pos: point_like = None,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
16824 font: typing.Optional[Font] = None,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
16825 fontsize: float = 11,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
16826 lineheight: OptFloat = None,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
16827 align: int = 0,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
16828 warn: bool = None,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
16829 right_to_left: bool = False,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
16830 small_caps: bool = False,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
16831 ) -> tuple:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
16832 """Fill a rectangle with text.
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
16833
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
16834 Args:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
16835 writer: pymupdf.TextWriter object (= "self")
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
16836 rect: rect-like to receive the text.
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
16837 text: string or list/tuple of strings.
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
16838 pos: point-like start position of first word.
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
16839 font: pymupdf.Font object (default pymupdf.Font('helv')).
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
16840 fontsize: the fontsize.
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
16841 lineheight: overwrite the font property
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
16842 align: (int) 0 = left, 1 = center, 2 = right, 3 = justify
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
16843 warn: (bool) text overflow action: none, warn, or exception
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
16844 right_to_left: (bool) indicate right-to-left language.
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
16845 """
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
16846 rect = Rect(rect)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
16847 if rect.is_empty:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
16848 raise ValueError("fill rect must not empty.")
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
16849 if type(font) is not Font:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
16850 font = Font("helv")
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
16851
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
16852 def textlen(x):
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
16853 """Return length of a string."""
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
16854 return font.text_length(
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
16855 x, fontsize=fontsize, small_caps=small_caps
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
16856 ) # abbreviation
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
16857
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
16858 def char_lengths(x):
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
16859 """Return list of single character lengths for a string."""
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
16860 return font.char_lengths(x, fontsize=fontsize, small_caps=small_caps)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
16861
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
16862 def append_this(pos, text):
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
16863 ret = writer.append(
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
16864 pos, text, font=font, fontsize=fontsize, small_caps=small_caps
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
16865 )
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
16866 return ret
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
16867
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
16868 tolerance = fontsize * 0.2 # extra distance to left border
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
16869 space_len = textlen(" ")
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
16870 std_width = rect.width - tolerance
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
16871 std_start = rect.x0 + tolerance
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
16872
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
16873 def norm_words(width, words):
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
16874 """Cut any word in pieces no longer than 'width'."""
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
16875 nwords = []
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
16876 word_lengths = []
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
16877 for w in words:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
16878 wl_lst = char_lengths(w)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
16879 wl = sum(wl_lst)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
16880 if wl <= width: # nothing to do - copy over
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
16881 nwords.append(w)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
16882 word_lengths.append(wl)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
16883 continue
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
16884
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
16885 # word longer than rect width - split it in parts
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
16886 n = len(wl_lst)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
16887 while n > 0:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
16888 wl = sum(wl_lst[:n])
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
16889 if wl <= width:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
16890 nwords.append(w[:n])
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
16891 word_lengths.append(wl)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
16892 w = w[n:]
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
16893 wl_lst = wl_lst[n:]
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
16894 n = len(wl_lst)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
16895 else:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
16896 n -= 1
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
16897 return nwords, word_lengths
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
16898
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
16899 def output_justify(start, line):
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
16900 """Justified output of a line."""
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
16901 # ignore leading / trailing / multiple spaces
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
16902 words = [w for w in line.split(" ") if w != ""]
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
16903 nwords = len(words)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
16904 if nwords == 0:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
16905 return
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
16906 if nwords == 1: # single word cannot be justified
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
16907 append_this(start, words[0])
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
16908 return
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
16909 tl = sum([textlen(w) for w in words]) # total word lengths
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
16910 gaps = nwords - 1 # number of word gaps
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
16911 gapl = (std_width - tl) / gaps # width of each gap
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
16912 for w in words:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
16913 _, lp = append_this(start, w) # output one word
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
16914 start.x = lp.x + gapl # next start at word end plus gap
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
16915 return
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
16916
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
16917 asc = font.ascender
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
16918 dsc = font.descender
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
16919 if not lineheight:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
16920 if asc - dsc <= 1:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
16921 lheight = 1.2
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
16922 else:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
16923 lheight = asc - dsc
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
16924 else:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
16925 lheight = lineheight
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
16926
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
16927 LINEHEIGHT = fontsize * lheight # effective line height
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
16928 width = std_width # available horizontal space
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
16929
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
16930 # starting point of text
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
16931 if pos is not None:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
16932 pos = Point(pos)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
16933 else: # default is just below rect top-left
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
16934 pos = rect.tl + (tolerance, fontsize * asc)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
16935 if pos not in rect:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
16936 raise ValueError("Text must start in rectangle.")
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
16937
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
16938 # calculate displacement factor for alignment
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
16939 if align == TEXT_ALIGN_CENTER:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
16940 factor = 0.5
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
16941 elif align == TEXT_ALIGN_RIGHT:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
16942 factor = 1.0
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
16943 else:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
16944 factor = 0
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
16945
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
16946 # split in lines if just a string was given
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
16947 if type(text) is str:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
16948 textlines = text.splitlines()
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
16949 else:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
16950 textlines = []
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
16951 for line in text:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
16952 textlines.extend(line.splitlines())
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
16953
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
16954 max_lines = int((rect.y1 - pos.y) / LINEHEIGHT) + 1
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
16955
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
16956 new_lines = [] # the final list of textbox lines
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
16957 no_justify = [] # no justify for these line numbers
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
16958 for i, line in enumerate(textlines):
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
16959 if line in ("", " "):
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
16960 new_lines.append((line, space_len))
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
16961 width = rect.width - tolerance
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
16962 no_justify.append((len(new_lines) - 1))
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
16963 continue
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
16964 if i == 0:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
16965 width = rect.x1 - pos.x
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
16966 else:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
16967 width = rect.width - tolerance
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
16968
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
16969 if right_to_left: # reverses Arabic / Hebrew text front to back
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
16970 line = writer.clean_rtl(line)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
16971 tl = textlen(line)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
16972 if tl <= width: # line short enough
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
16973 new_lines.append((line, tl))
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
16974 no_justify.append((len(new_lines) - 1))
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
16975 continue
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
16976
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
16977 # we need to split the line in fitting parts
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
16978 words = line.split(" ") # the words in the line
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
16979
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
16980 # cut in parts any words that are longer than rect width
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
16981 words, word_lengths = norm_words(width, words)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
16982
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
16983 n = len(words)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
16984 while True:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
16985 line0 = " ".join(words[:n])
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
16986 wl = sum(word_lengths[:n]) + space_len * (n - 1)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
16987 if wl <= width:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
16988 new_lines.append((line0, wl))
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
16989 words = words[n:]
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
16990 word_lengths = word_lengths[n:]
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
16991 n = len(words)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
16992 line0 = None
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
16993 else:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
16994 n -= 1
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
16995
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
16996 if len(words) == 0:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
16997 break
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
16998 assert n
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
16999
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
17000 # -------------------------------------------------------------------------
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
17001 # List of lines created. Each item is (text, tl), where 'tl' is the PDF
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
17002 # output length (float) and 'text' is the text. Except for justified text,
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
17003 # this is output-ready.
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
17004 # -------------------------------------------------------------------------
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
17005 nlines = len(new_lines)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
17006 if nlines > max_lines:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
17007 msg = "Only fitting %i of %i lines." % (max_lines, nlines)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
17008 if warn is None:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
17009 pass
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
17010 elif warn:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
17011 message("Warning: " + msg)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
17012 else:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
17013 raise ValueError(msg)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
17014
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
17015 start = Point()
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
17016 no_justify += [len(new_lines) - 1] # no justifying of last line
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
17017 for i in range(max_lines):
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
17018 try:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
17019 line, tl = new_lines.pop(0)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
17020 except IndexError:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
17021 if g_exceptions_verbose >= 2: exception_info()
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
17022 break
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
17023
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
17024 if right_to_left: # Arabic, Hebrew
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
17025 line = "".join(reversed(line))
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
17026
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
17027 if i == 0: # may have different start for first line
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
17028 start = pos
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
17029
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
17030 if align == TEXT_ALIGN_JUSTIFY and i not in no_justify and tl < std_width:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
17031 output_justify(start, line)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
17032 start.x = std_start
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
17033 start.y += LINEHEIGHT
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
17034 continue
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
17035
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
17036 if i > 0 or pos.x == std_start: # left, center, right alignments
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
17037 start.x += (width - tl) * factor
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
17038
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
17039 append_this(start, line)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
17040 start.x = std_start
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
17041 start.y += LINEHEIGHT
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
17042
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
17043 return new_lines # return non-written lines
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
17044
1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17045 def write_text(self, page, color=None, opacity=-1, overlay=1, morph=None, matrix=None, render_mode=0, oc=0):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17046 """Write the text to a PDF page having the TextWriter's page size.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17047
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17048 Args:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17049 page: a PDF page having same size.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17050 color: override text color.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17051 opacity: override transparency.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17052 overlay: put in foreground or background.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17053 morph: tuple(Point, Matrix), apply a matrix with a fixpoint.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17054 matrix: Matrix to be used instead of 'morph' argument.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17055 render_mode: (int) PDF render mode operator 'Tr'.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17056 """
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17057 CheckParent(page)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17058 if abs(self.rect - page.rect) > 1e-3:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17059 raise ValueError("incompatible page rect")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17060 if morph is not None:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17061 if (type(morph) not in (tuple, list)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17062 or type(morph[0]) is not Point
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17063 or type(morph[1]) is not Matrix
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17064 ):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17065 raise ValueError("morph must be (Point, Matrix) or None")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17066 if matrix is not None and morph is not None:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17067 raise ValueError("only one of matrix, morph is allowed")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17068 if getattr(opacity, "__float__", None) is None or opacity == -1:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17069 opacity = self.opacity
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17070 if color is None:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17071 color = self.color
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17072
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17073 if 1:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17074 pdfpage = page._pdf_page()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17075 alpha = 1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17076 if opacity >= 0 and opacity < 1:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17077 alpha = opacity
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17078 ncol = 1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17079 dev_color = [0, 0, 0, 0]
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17080 if color:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17081 ncol, dev_color = JM_color_FromSequence(color)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17082 if ncol == 3:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17083 colorspace = mupdf.fz_device_rgb()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17084 elif ncol == 4:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17085 colorspace = mupdf.fz_device_cmyk()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17086 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17087 colorspace = mupdf.fz_device_gray()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17088
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17089 resources = mupdf.pdf_new_dict(pdfpage.doc(), 5)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17090 contents = mupdf.fz_new_buffer(1024)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17091 dev = mupdf.pdf_new_pdf_device( pdfpage.doc(), mupdf.FzMatrix(), resources, contents)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17092 #log( '=== {dev_color!r=}')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17093 mupdf.fz_fill_text(
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17094 dev,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17095 self.this,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17096 mupdf.FzMatrix(),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17097 colorspace,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17098 dev_color,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17099 alpha,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17100 mupdf.FzColorParams(mupdf.fz_default_color_params),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17101 )
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17102 mupdf.fz_close_device( dev)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17103
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17104 # copy generated resources into the one of the page
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17105 max_nums = JM_merge_resources( pdfpage, resources)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17106 cont_string = JM_EscapeStrFromBuffer( contents)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17107 result = (max_nums, cont_string)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17108 val = result
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17109
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17110 max_nums = val[0]
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17111 content = val[1]
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17112 max_alp, max_font = max_nums
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17113 old_cont_lines = content.splitlines()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17114
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17115 optcont = page._get_optional_content(oc)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17116 if optcont is not None:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17117 bdc = "/OC /%s BDC" % optcont
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17118 emc = "EMC"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17119 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17120 bdc = emc = ""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17121
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17122 new_cont_lines = ["q"]
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17123 if bdc:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17124 new_cont_lines.append(bdc)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17125
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17126 cb = page.cropbox_position
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17127 if page.rotation in (90, 270):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17128 delta = page.rect.height - page.rect.width
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17129 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17130 delta = 0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17131 mb = page.mediabox
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17132 if bool(cb) or mb.y0 != 0 or delta != 0:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17133 new_cont_lines.append(f"1 0 0 1 {_format_g((cb.x, cb.y + mb.y0 - delta))} cm")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17134
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17135 if morph:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17136 p = morph[0] * self.ictm
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17137 delta = Matrix(1, 1).pretranslate(p.x, p.y)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17138 matrix = ~delta * morph[1] * delta
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17139 if morph or matrix:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17140 new_cont_lines.append(_format_g(JM_TUPLE(matrix)) + " cm")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17141
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17142 for line in old_cont_lines:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17143 if line.endswith(" cm"):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17144 continue
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17145 if line == "BT":
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17146 new_cont_lines.append(line)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17147 new_cont_lines.append("%i Tr" % render_mode)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17148 continue
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17149 if line.endswith(" gs"):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17150 alp = int(line.split()[0][4:]) + max_alp
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17151 line = "/Alp%i gs" % alp
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17152 elif line.endswith(" Tf"):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17153 temp = line.split()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17154 fsize = float(temp[1])
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17155 if render_mode != 0:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17156 w = fsize * 0.05
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17157 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17158 w = 1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17159 new_cont_lines.append(_format_g(w) + " w")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17160 font = int(temp[0][2:]) + max_font
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17161 line = " ".join(["/F%i" % font] + temp[1:])
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17162 elif line.endswith(" rg"):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17163 new_cont_lines.append(line.replace("rg", "RG"))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17164 elif line.endswith(" g"):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17165 new_cont_lines.append(line.replace(" g", " G"))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17166 elif line.endswith(" k"):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17167 new_cont_lines.append(line.replace(" k", " K"))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17168 new_cont_lines.append(line)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17169 if emc:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17170 new_cont_lines.append(emc)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17171 new_cont_lines.append("Q\n")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17172 content = "\n".join(new_cont_lines).encode("utf-8")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17173 TOOLS._insert_contents(page, content, overlay=overlay)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17174 val = None
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17175 for font in self.used_fonts:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17176 repair_mono_font(page, font)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17177 return val
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17178
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17179
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17180 class IRect:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17181 """
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17182 IRect() - all zeros
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17183 IRect(x0, y0, x1, y1) - 4 coordinates
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17184 IRect(top-left, x1, y1) - point and 2 coordinates
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17185 IRect(x0, y0, bottom-right) - 2 coordinates and point
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17186 IRect(top-left, bottom-right) - 2 points
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17187 IRect(sequ) - new from sequence or rect-like
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17188 """
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17189
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17190 def __add__(self, p):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17191 return Rect.__add__(self, p).round()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17192
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17193 def __and__(self, x):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17194 return Rect.__and__(self, x).round()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17195
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17196 def __contains__(self, x):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17197 return Rect.__contains__(self, x)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17198
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17199 def __eq__(self, r):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17200 if not hasattr(r, "__len__"):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17201 return False
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17202 return len(r) == 4 and self.x0 == r[0] and self.y0 == r[1] and self.x1 == r[2] and self.y1 == r[3]
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17203
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17204 def __getitem__(self, i):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17205 return (self.x0, self.y0, self.x1, self.y1)[i]
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17206
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17207 def __hash__(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17208 return hash(tuple(self))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17209
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17210 def __init__(self, *args, p0=None, p1=None, x0=None, y0=None, x1=None, y1=None):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17211 self.x0, self.y0, self.x1, self.y1 = util_make_irect( *args, p0=p0, p1=p1, x0=x0, y0=y0, x1=x1, y1=y1)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17212
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17213 def __len__(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17214 return 4
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17215
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17216 def __mul__(self, m):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17217 return Rect.__mul__(self, m).round()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17218
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17219 def __neg__(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17220 return IRect(-self.x0, -self.y0, -self.x1, -self.y1)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17221
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17222 def __or__(self, x):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17223 return Rect.__or__(self, x).round()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17224
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17225 def __pos__(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17226 return IRect(self)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17227
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17228 def __repr__(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17229 return "IRect" + str(tuple(self))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17230
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17231 def __setitem__(self, i, v):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17232 v = int(v)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17233 if i == 0: self.x0 = v
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17234 elif i == 1: self.y0 = v
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17235 elif i == 2: self.x1 = v
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17236 elif i == 3: self.y1 = v
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17237 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17238 raise IndexError("index out of range")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17239 return None
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17240
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17241 def __sub__(self, p):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17242 return Rect.__sub__(self, p).round()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17243
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17244 def __truediv__(self, m):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17245 return Rect.__truediv__(self, m).round()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17246
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17247 @property
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17248 def bottom_left(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17249 """Bottom-left corner."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17250 return Point(self.x0, self.y1)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17251
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17252 @property
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17253 def bottom_right(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17254 """Bottom-right corner."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17255 return Point(self.x1, self.y1)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17256
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17257 @property
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17258 def height(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17259 return max(0, self.y1 - self.y0)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17260
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17261 def contains(self, x):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17262 """Check if x is in the rectangle."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17263 return self.__contains__(x)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17264
39
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
17265 def get_area(self, *args) -> float:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
17266 """Calculate area of rectangle.\nparameter is one of 'px' (default), 'in', 'cm', or 'mm'."""
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
17267 if args:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
17268 unit = args[0]
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
17269 else:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
17270 unit = "px"
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
17271 u = {"px": (1, 1), "in": (1.0, 72.0), "cm": (2.54, 72.0), "mm": (25.4, 72.0)}
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
17272 f = (u[unit][0] / u[unit][1]) ** 2
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
17273 return f * self.width * self.height
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
17274
1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17275 def include_point(self, p):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17276 """Extend rectangle to include point p."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17277 rect = self.rect.include_point(p)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17278 return rect.irect
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17279
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17280 def include_rect(self, r):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17281 """Extend rectangle to include rectangle r."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17282 rect = self.rect.include_rect(r)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17283 return rect.irect
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17284
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17285 def intersect(self, r):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17286 """Restrict rectangle to intersection with rectangle r."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17287 return Rect.intersect(self, r).round()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17288
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17289 def intersects(self, x):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17290 return Rect.intersects(self, x)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17291
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17292 @property
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17293 def is_empty(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17294 """True if rectangle area is empty."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17295 return self.x0 >= self.x1 or self.y0 >= self.y1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17296
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17297 @property
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17298 def is_infinite(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17299 """True if rectangle is infinite."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17300 return self.x0 == self.y0 == FZ_MIN_INF_RECT and self.x1 == self.y1 == FZ_MAX_INF_RECT
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17301
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17302 @property
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17303 def is_valid(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17304 """True if rectangle is valid."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17305 return self.x0 <= self.x1 and self.y0 <= self.y1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17306
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17307 def morph(self, p, m):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17308 """Morph with matrix-like m and point-like p.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17309
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17310 Returns a new quad."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17311 if self.is_infinite:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17312 return INFINITE_QUAD()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17313 return self.quad.morph(p, m)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17314
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17315 def norm(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17316 return math.sqrt(sum([c*c for c in self]))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17317
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17318 def normalize(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17319 """Replace rectangle with its valid version."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17320 if self.x1 < self.x0:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17321 self.x0, self.x1 = self.x1, self.x0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17322 if self.y1 < self.y0:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17323 self.y0, self.y1 = self.y1, self.y0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17324 return self
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17325
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17326 @property
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17327 def quad(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17328 """Return Quad version of rectangle."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17329 return Quad(self.tl, self.tr, self.bl, self.br)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17330
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17331 @property
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17332 def rect(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17333 return Rect(self)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17334
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17335 @property
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17336 def top_left(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17337 """Top-left corner."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17338 return Point(self.x0, self.y0)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17339
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17340 @property
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17341 def top_right(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17342 """Top-right corner."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17343 return Point(self.x1, self.y0)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17344
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17345 def torect(self, r):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17346 """Return matrix that converts to target rect."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17347 r = Rect(r)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17348 if self.is_infinite or self.is_empty or r.is_infinite or r.is_empty:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17349 raise ValueError("rectangles must be finite and not empty")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17350 return (
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17351 Matrix(1, 0, 0, 1, -self.x0, -self.y0)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17352 * Matrix(r.width / self.width, r.height / self.height)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17353 * Matrix(1, 0, 0, 1, r.x0, r.y0)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17354 )
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17355
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17356 def transform(self, m):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17357 return Rect.transform(self, m).round()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17358
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17359 @property
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17360 def width(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17361 return max(0, self.x1 - self.x0)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17362
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17363 br = bottom_right
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17364 bl = bottom_left
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17365 tl = top_left
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17366 tr = top_right
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17367
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17368
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17369 # Data
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17370 #
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17371
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17372 if 1:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17373 _self = sys.modules[__name__]
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17374 if 1:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17375 for _name, _value in mupdf.__dict__.items():
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17376 if _name.startswith(('PDF_', 'UCDN_SCRIPT_')):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17377 if _name.startswith('PDF_ENUM_NAME_'):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17378 # Not a simple enum.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17379 pass
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17380 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17381 #assert not inspect.isroutine(value)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17382 #log(f'importing {_name=} {_value=}.')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17383 setattr(_self, _name, _value)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17384 #log(f'{getattr( self, name, None)=}')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17385 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17386 # This is slow due to importing inspect, e.g. 0.019 instead of 0.004.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17387 for _name, _value in inspect.getmembers(mupdf):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17388 if _name.startswith(('PDF_', 'UCDN_SCRIPT_')):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17389 if _name.startswith('PDF_ENUM_NAME_'):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17390 # Not a simple enum.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17391 pass
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17392 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17393 #assert not inspect.isroutine(value)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17394 #log(f'importing {name}')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17395 setattr(_self, _name, _value)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17396 #log(f'{getattr( self, name, None)=}')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17397
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17398 # This is a macro so not preserved in mupdf C++/Python bindings.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17399 #
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17400 PDF_SIGNATURE_DEFAULT_APPEARANCE = (0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17401 | mupdf.PDF_SIGNATURE_SHOW_LABELS
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17402 | mupdf.PDF_SIGNATURE_SHOW_DN
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17403 | mupdf.PDF_SIGNATURE_SHOW_DATE
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17404 | mupdf.PDF_SIGNATURE_SHOW_TEXT_NAME
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17405 | mupdf.PDF_SIGNATURE_SHOW_GRAPHIC_NAME
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17406 | mupdf.PDF_SIGNATURE_SHOW_LOGO
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17407 )
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17408
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17409 #UCDN_SCRIPT_ADLAM = mupdf.UCDN_SCRIPT_ADLAM
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17410 #setattr(self, 'UCDN_SCRIPT_ADLAM', mupdf.UCDN_SCRIPT_ADLAM)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17411
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17412 assert mupdf.UCDN_EAST_ASIAN_H == 1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17413
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17414 # Flake8 incorrectly fails next two lines because we've dynamically added
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17415 # items to self.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17416 assert PDF_TX_FIELD_IS_MULTILINE == mupdf.PDF_TX_FIELD_IS_MULTILINE # noqa: F821
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17417 assert UCDN_SCRIPT_ADLAM == mupdf.UCDN_SCRIPT_ADLAM # noqa: F821
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17418 del _self, _name, _value
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17419
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17420 AnyType = typing.Any
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17421
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17422 Base14_fontnames = (
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17423 "Courier",
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17424 "Courier-Oblique",
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17425 "Courier-Bold",
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17426 "Courier-BoldOblique",
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17427 "Helvetica",
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17428 "Helvetica-Oblique",
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17429 "Helvetica-Bold",
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17430 "Helvetica-BoldOblique",
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17431 "Times-Roman",
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17432 "Times-Italic",
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17433 "Times-Bold",
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17434 "Times-BoldItalic",
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17435 "Symbol",
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17436 "ZapfDingbats",
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17437 )
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17438
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17439 Base14_fontdict = {}
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17440 for f in Base14_fontnames:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17441 Base14_fontdict[f.lower()] = f
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17442 Base14_fontdict["helv"] = "Helvetica"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17443 Base14_fontdict["heit"] = "Helvetica-Oblique"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17444 Base14_fontdict["hebo"] = "Helvetica-Bold"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17445 Base14_fontdict["hebi"] = "Helvetica-BoldOblique"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17446 Base14_fontdict["cour"] = "Courier"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17447 Base14_fontdict["coit"] = "Courier-Oblique"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17448 Base14_fontdict["cobo"] = "Courier-Bold"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17449 Base14_fontdict["cobi"] = "Courier-BoldOblique"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17450 Base14_fontdict["tiro"] = "Times-Roman"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17451 Base14_fontdict["tibo"] = "Times-Bold"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17452 Base14_fontdict["tiit"] = "Times-Italic"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17453 Base14_fontdict["tibi"] = "Times-BoldItalic"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17454 Base14_fontdict["symb"] = "Symbol"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17455 Base14_fontdict["zadb"] = "ZapfDingbats"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17456
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17457 EPSILON = 1e-5
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17458 FLT_EPSILON = 1e-5
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17459
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17460 # largest 32bit integers surviving C float conversion roundtrips
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17461 # used by MuPDF to define infinite rectangles
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17462 FZ_MIN_INF_RECT = -0x80000000
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17463 FZ_MAX_INF_RECT = 0x7fffff80
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17464
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17465 JM_annot_id_stem = "fitz"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17466 JM_mupdf_warnings_store = []
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17467 JM_mupdf_show_errors = 1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17468 JM_mupdf_show_warnings = 0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17469
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17470
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17471 # ------------------------------------------------------------------------------
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17472 # Image recompression constants
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17473 # ------------------------------------------------------------------------------
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17474 FZ_RECOMPRESS_NEVER = mupdf.FZ_RECOMPRESS_NEVER
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17475 FZ_RECOMPRESS_SAME = mupdf.FZ_RECOMPRESS_SAME
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17476 FZ_RECOMPRESS_LOSSLESS = mupdf.FZ_RECOMPRESS_LOSSLESS
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17477 FZ_RECOMPRESS_JPEG = mupdf.FZ_RECOMPRESS_JPEG
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17478 FZ_RECOMPRESS_J2K = mupdf.FZ_RECOMPRESS_J2K
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17479 FZ_RECOMPRESS_FAX = mupdf.FZ_RECOMPRESS_FAX
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17480 FZ_SUBSAMPLE_AVERAGE = mupdf.FZ_SUBSAMPLE_AVERAGE
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17481 FZ_SUBSAMPLE_BICUBIC = mupdf.FZ_SUBSAMPLE_BICUBIC
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17482
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17483 # ------------------------------------------------------------------------------
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17484 # Various PDF Optional Content Flags
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17485 # ------------------------------------------------------------------------------
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17486 PDF_OC_ON = 0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17487 PDF_OC_TOGGLE = 1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17488 PDF_OC_OFF = 2
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17489
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17490 # ------------------------------------------------------------------------------
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17491 # link kinds and link flags
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17492 # ------------------------------------------------------------------------------
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17493 LINK_NONE = 0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17494 LINK_GOTO = 1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17495 LINK_URI = 2
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17496 LINK_LAUNCH = 3
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17497 LINK_NAMED = 4
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17498 LINK_GOTOR = 5
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17499 LINK_FLAG_L_VALID = 1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17500 LINK_FLAG_T_VALID = 2
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17501 LINK_FLAG_R_VALID = 4
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17502 LINK_FLAG_B_VALID = 8
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17503 LINK_FLAG_FIT_H = 16
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17504 LINK_FLAG_FIT_V = 32
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17505 LINK_FLAG_R_IS_ZOOM = 64
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17506
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17507 SigFlag_SignaturesExist = 1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17508 SigFlag_AppendOnly = 2
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17509
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17510 STAMP_Approved = 0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17511 STAMP_AsIs = 1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17512 STAMP_Confidential = 2
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17513 STAMP_Departmental = 3
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17514 STAMP_Experimental = 4
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17515 STAMP_Expired = 5
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17516 STAMP_Final = 6
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17517 STAMP_ForComment = 7
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17518 STAMP_ForPublicRelease = 8
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17519 STAMP_NotApproved = 9
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17520 STAMP_NotForPublicRelease = 10
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17521 STAMP_Sold = 11
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17522 STAMP_TopSecret = 12
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17523 STAMP_Draft = 13
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17524
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17525 TEXT_ALIGN_LEFT = 0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17526 TEXT_ALIGN_CENTER = 1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17527 TEXT_ALIGN_RIGHT = 2
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17528 TEXT_ALIGN_JUSTIFY = 3
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17529
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17530 TEXT_FONT_SUPERSCRIPT = 1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17531 TEXT_FONT_ITALIC = 2
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17532 TEXT_FONT_SERIFED = 4
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17533 TEXT_FONT_MONOSPACED = 8
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17534 TEXT_FONT_BOLD = 16
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17535
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17536 TEXT_OUTPUT_TEXT = 0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17537 TEXT_OUTPUT_HTML = 1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17538 TEXT_OUTPUT_JSON = 2
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17539 TEXT_OUTPUT_XML = 3
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17540 TEXT_OUTPUT_XHTML = 4
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17541
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17542 TEXT_PRESERVE_LIGATURES = mupdf.FZ_STEXT_PRESERVE_LIGATURES
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17543 TEXT_PRESERVE_WHITESPACE = mupdf.FZ_STEXT_PRESERVE_WHITESPACE
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17544 TEXT_PRESERVE_IMAGES = mupdf.FZ_STEXT_PRESERVE_IMAGES
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17545 TEXT_INHIBIT_SPACES = mupdf.FZ_STEXT_INHIBIT_SPACES
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17546 TEXT_DEHYPHENATE = mupdf.FZ_STEXT_DEHYPHENATE
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17547 TEXT_PRESERVE_SPANS = mupdf.FZ_STEXT_PRESERVE_SPANS
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17548 TEXT_MEDIABOX_CLIP = mupdf.FZ_STEXT_MEDIABOX_CLIP
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17549 TEXT_USE_CID_FOR_UNKNOWN_UNICODE = mupdf.FZ_STEXT_USE_CID_FOR_UNKNOWN_UNICODE
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17550 TEXT_COLLECT_STRUCTURE = mupdf.FZ_STEXT_COLLECT_STRUCTURE
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17551 TEXT_ACCURATE_BBOXES = mupdf.FZ_STEXT_ACCURATE_BBOXES
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17552 TEXT_COLLECT_VECTORS = mupdf.FZ_STEXT_COLLECT_VECTORS
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17553 TEXT_IGNORE_ACTUALTEXT = mupdf.FZ_STEXT_IGNORE_ACTUALTEXT
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17554 TEXT_SEGMENT = mupdf.FZ_STEXT_SEGMENT
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17555
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17556 if mupdf_version_tuple >= (1, 26):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17557 TEXT_PARAGRAPH_BREAK = mupdf.FZ_STEXT_PARAGRAPH_BREAK
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17558 TEXT_TABLE_HUNT = mupdf.FZ_STEXT_TABLE_HUNT
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17559 TEXT_COLLECT_STYLES = mupdf.FZ_STEXT_COLLECT_STYLES
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17560 TEXT_USE_GID_FOR_UNKNOWN_UNICODE = mupdf.FZ_STEXT_USE_GID_FOR_UNKNOWN_UNICODE
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17561 TEXT_CLIP_RECT = mupdf.FZ_STEXT_CLIP_RECT
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17562 TEXT_ACCURATE_ASCENDERS = mupdf.FZ_STEXT_ACCURATE_ASCENDERS
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17563 TEXT_ACCURATE_SIDE_BEARINGS = mupdf.FZ_STEXT_ACCURATE_SIDE_BEARINGS
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17564
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17565 # 2025-05-07: Non-standard names preserved for backwards compatibility.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17566 TEXT_STEXT_SEGMENT = TEXT_SEGMENT
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17567 TEXT_CID_FOR_UNKNOWN_UNICODE = TEXT_USE_CID_FOR_UNKNOWN_UNICODE
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17568
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17569 TEXTFLAGS_WORDS = (0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17570 | TEXT_PRESERVE_LIGATURES
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17571 | TEXT_PRESERVE_WHITESPACE
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17572 | TEXT_MEDIABOX_CLIP
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17573 | TEXT_USE_CID_FOR_UNKNOWN_UNICODE
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17574 )
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17575
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17576 TEXTFLAGS_BLOCKS = (0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17577 | TEXT_PRESERVE_LIGATURES
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17578 | TEXT_PRESERVE_WHITESPACE
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17579 | TEXT_MEDIABOX_CLIP
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17580 | TEXT_USE_CID_FOR_UNKNOWN_UNICODE
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17581 )
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17582
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17583 TEXTFLAGS_DICT = (0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17584 | TEXT_PRESERVE_LIGATURES
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17585 | TEXT_PRESERVE_WHITESPACE
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17586 | TEXT_MEDIABOX_CLIP
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17587 | TEXT_PRESERVE_IMAGES
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17588 | TEXT_USE_CID_FOR_UNKNOWN_UNICODE
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17589 )
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17590
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17591 TEXTFLAGS_RAWDICT = TEXTFLAGS_DICT
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17592
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17593 TEXTFLAGS_SEARCH = (0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17594 | TEXT_PRESERVE_WHITESPACE
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17595 | TEXT_MEDIABOX_CLIP
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17596 | TEXT_DEHYPHENATE
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17597 | TEXT_USE_CID_FOR_UNKNOWN_UNICODE
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17598 )
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17599
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17600 TEXTFLAGS_HTML = (0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17601 | TEXT_PRESERVE_LIGATURES
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17602 | TEXT_PRESERVE_WHITESPACE
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17603 | TEXT_MEDIABOX_CLIP
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17604 | TEXT_PRESERVE_IMAGES
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17605 | TEXT_USE_CID_FOR_UNKNOWN_UNICODE
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17606 )
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17607
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17608 TEXTFLAGS_XHTML = (0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17609 | TEXT_PRESERVE_LIGATURES
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17610 | TEXT_PRESERVE_WHITESPACE
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17611 | TEXT_MEDIABOX_CLIP
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17612 | TEXT_PRESERVE_IMAGES
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17613 | TEXT_USE_CID_FOR_UNKNOWN_UNICODE
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17614 )
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17615
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17616 TEXTFLAGS_XML = (0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17617 | TEXT_PRESERVE_LIGATURES
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17618 | TEXT_PRESERVE_WHITESPACE
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17619 | TEXT_MEDIABOX_CLIP
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17620 | TEXT_USE_CID_FOR_UNKNOWN_UNICODE
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17621 )
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17622
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17623 TEXTFLAGS_TEXT = (0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17624 | TEXT_PRESERVE_LIGATURES
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17625 | TEXT_PRESERVE_WHITESPACE
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17626 | TEXT_MEDIABOX_CLIP
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17627 | TEXT_USE_CID_FOR_UNKNOWN_UNICODE
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17628 )
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17629
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17630 # Simple text encoding options
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17631 TEXT_ENCODING_LATIN = 0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17632 TEXT_ENCODING_GREEK = 1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17633 TEXT_ENCODING_CYRILLIC = 2
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17634
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17635 TOOLS_JM_UNIQUE_ID = 0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17636
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17637 # colorspace identifiers
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17638 CS_RGB = 1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17639 CS_GRAY = 2
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17640 CS_CMYK = 3
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17641
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17642 # PDF Blend Modes
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17643 PDF_BM_Color = "Color"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17644 PDF_BM_ColorBurn = "ColorBurn"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17645 PDF_BM_ColorDodge = "ColorDodge"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17646 PDF_BM_Darken = "Darken"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17647 PDF_BM_Difference = "Difference"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17648 PDF_BM_Exclusion = "Exclusion"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17649 PDF_BM_HardLight = "HardLight"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17650 PDF_BM_Hue = "Hue"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17651 PDF_BM_Lighten = "Lighten"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17652 PDF_BM_Luminosity = "Luminosity"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17653 PDF_BM_Multiply = "Multiply"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17654 PDF_BM_Normal = "Normal"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17655 PDF_BM_Overlay = "Overlay"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17656 PDF_BM_Saturation = "Saturation"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17657 PDF_BM_Screen = "Screen"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17658 PDF_BM_SoftLight = "Softlight"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17659
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17660
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17661 annot_skel = {
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17662 "goto1": lambda a, b, c, d, e: f"<</A<</S/GoTo/D[{a} 0 R/XYZ {_format_g((b, c, d))}]>>/Rect[{e}]/BS<</W 0>>/Subtype/Link>>",
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17663 "goto2": lambda a, b: f"<</A<</S/GoTo/D{a}>>/Rect[{b}]/BS<</W 0>>/Subtype/Link>>",
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17664 "gotor1": lambda a, b, c, d, e, f, g: f"<</A<</S/GoToR/D[{a} /XYZ {_format_g((b, c, d))}]/F<</F({e})/UF({f})/Type/Filespec>>>>/Rect[{g}]/BS<</W 0>>/Subtype/Link>>",
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17665 "gotor2": lambda a, b, c: f"<</A<</S/GoToR/D{a}/F({b})>>/Rect[{c}]/BS<</W 0>>/Subtype/Link>>",
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17666 "launch": lambda a, b, c: f"<</A<</S/Launch/F<</F({a})/UF({b})/Type/Filespec>>>>/Rect[{c}]/BS<</W 0>>/Subtype/Link>>",
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17667 "uri": lambda a, b: f"<</A<</S/URI/URI({a})>>/Rect[{b}]/BS<</W 0>>/Subtype/Link>>",
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17668 "named": lambda a, b: f"<</A<</S/GoTo/D({a})/Type/Action>>/Rect[{b}]/BS<</W 0>>/Subtype/Link>>",
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17669 }
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17670
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17671 class FileDataError(RuntimeError):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17672 """Raised for documents with file structure issues."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17673 pass
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17674
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17675 class FileNotFoundError(RuntimeError):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17676 """Raised if file does not exist."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17677 pass
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17678
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17679 class EmptyFileError(FileDataError):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17680 """Raised when creating documents from zero-length data."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17681 pass
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17682
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17683 # propagate exception class to C-level code
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17684 #_set_FileDataError(FileDataError)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17685
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17686 csRGB = Colorspace(CS_RGB)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17687 csGRAY = Colorspace(CS_GRAY)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17688 csCMYK = Colorspace(CS_CMYK)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17689
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17690 # These don't appear to be visible in classic, but are used
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17691 # internally.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17692 #
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17693 dictkey_align = "align"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17694 dictkey_asc = "ascender"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17695 dictkey_bidi = "bidi"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17696 dictkey_bbox = "bbox"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17697 dictkey_blocks = "blocks"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17698 dictkey_bpc = "bpc"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17699 dictkey_c = "c"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17700 dictkey_chars = "chars"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17701 dictkey_color = "color"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17702 dictkey_colorspace = "colorspace"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17703 dictkey_content = "content"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17704 dictkey_creationDate = "creationDate"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17705 dictkey_cs_name = "cs-name"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17706 dictkey_da = "da"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17707 dictkey_dashes = "dashes"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17708 dictkey_descr = "description"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17709 dictkey_desc = "descender"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17710 dictkey_dir = "dir"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17711 dictkey_effect = "effect"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17712 dictkey_ext = "ext"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17713 dictkey_filename = "filename"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17714 dictkey_fill = "fill"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17715 dictkey_flags = "flags"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17716 dictkey_char_flags = "char_flags"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17717 dictkey_font = "font"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17718 dictkey_glyph = "glyph"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17719 dictkey_height = "height"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17720 dictkey_id = "id"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17721 dictkey_image = "image"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17722 dictkey_items = "items"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17723 dictkey_length = "length"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17724 dictkey_lines = "lines"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17725 dictkey_matrix = "transform"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17726 dictkey_modDate = "modDate"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17727 dictkey_name = "name"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17728 dictkey_number = "number"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17729 dictkey_origin = "origin"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17730 dictkey_rect = "rect"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17731 dictkey_size = "size"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17732 dictkey_smask = "smask"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17733 dictkey_spans = "spans"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17734 dictkey_stroke = "stroke"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17735 dictkey_style = "style"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17736 dictkey_subject = "subject"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17737 dictkey_text = "text"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17738 dictkey_title = "title"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17739 dictkey_type = "type"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17740 dictkey_ufilename = "ufilename"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17741 dictkey_width = "width"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17742 dictkey_wmode = "wmode"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17743 dictkey_xref = "xref"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17744 dictkey_xres = "xres"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17745 dictkey_yres = "yres"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17746
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17747
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17748 try:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17749 from pymupdf_fonts import fontdescriptors, fontbuffers
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17750
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17751 fitz_fontdescriptors = fontdescriptors.copy()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17752 for k in fitz_fontdescriptors.keys():
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17753 fitz_fontdescriptors[k]["loader"] = fontbuffers[k]
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17754 del fontdescriptors, fontbuffers
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17755 except ImportError:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17756 fitz_fontdescriptors = {}
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17757
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17758 symbol_glyphs = ( # Glyph list for the built-in font 'Symbol'
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17759 (183, 0.46),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17760 (183, 0.46),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17761 (183, 0.46),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17762 (183, 0.46),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17763 (183, 0.46),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17764 (183, 0.46),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17765 (183, 0.46),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17766 (183, 0.46),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17767 (183, 0.46),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17768 (183, 0.46),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17769 (183, 0.46),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17770 (183, 0.46),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17771 (183, 0.46),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17772 (183, 0.46),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17773 (183, 0.46),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17774 (183, 0.46),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17775 (183, 0.46),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17776 (183, 0.46),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17777 (183, 0.46),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17778 (183, 0.46),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17779 (183, 0.46),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17780 (183, 0.46),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17781 (183, 0.46),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17782 (183, 0.46),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17783 (183, 0.46),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17784 (183, 0.46),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17785 (183, 0.46),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17786 (183, 0.46),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17787 (183, 0.46),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17788 (183, 0.46),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17789 (183, 0.46),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17790 (183, 0.46),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17791 (32, 0.25),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17792 (33, 0.333),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17793 (34, 0.713),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17794 (35, 0.5),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17795 (36, 0.549),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17796 (37, 0.833),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17797 (38, 0.778),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17798 (39, 0.439),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17799 (40, 0.333),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17800 (41, 0.333),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17801 (42, 0.5),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17802 (43, 0.549),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17803 (44, 0.25),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17804 (45, 0.549),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17805 (46, 0.25),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17806 (47, 0.278),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17807 (48, 0.5),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17808 (49, 0.5),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17809 (50, 0.5),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17810 (51, 0.5),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17811 (52, 0.5),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17812 (53, 0.5),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17813 (54, 0.5),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17814 (55, 0.5),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17815 (56, 0.5),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17816 (57, 0.5),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17817 (58, 0.278),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17818 (59, 0.278),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17819 (60, 0.549),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17820 (61, 0.549),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17821 (62, 0.549),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17822 (63, 0.444),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17823 (64, 0.549),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17824 (65, 0.722),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17825 (66, 0.667),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17826 (67, 0.722),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17827 (68, 0.612),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17828 (69, 0.611),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17829 (70, 0.763),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17830 (71, 0.603),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17831 (72, 0.722),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17832 (73, 0.333),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17833 (74, 0.631),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17834 (75, 0.722),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17835 (76, 0.686),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17836 (77, 0.889),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17837 (78, 0.722),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17838 (79, 0.722),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17839 (80, 0.768),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17840 (81, 0.741),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17841 (82, 0.556),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17842 (83, 0.592),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17843 (84, 0.611),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17844 (85, 0.69),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17845 (86, 0.439),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17846 (87, 0.768),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17847 (88, 0.645),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17848 (89, 0.795),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17849 (90, 0.611),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17850 (91, 0.333),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17851 (92, 0.863),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17852 (93, 0.333),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17853 (94, 0.658),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17854 (95, 0.5),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17855 (96, 0.5),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17856 (97, 0.631),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17857 (98, 0.549),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17858 (99, 0.549),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17859 (100, 0.494),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17860 (101, 0.439),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17861 (102, 0.521),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17862 (103, 0.411),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17863 (104, 0.603),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17864 (105, 0.329),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17865 (106, 0.603),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17866 (107, 0.549),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17867 (108, 0.549),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17868 (109, 0.576),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17869 (110, 0.521),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17870 (111, 0.549),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17871 (112, 0.549),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17872 (113, 0.521),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17873 (114, 0.549),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17874 (115, 0.603),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17875 (116, 0.439),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17876 (117, 0.576),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17877 (118, 0.713),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17878 (119, 0.686),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17879 (120, 0.493),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17880 (121, 0.686),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17881 (122, 0.494),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17882 (123, 0.48),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17883 (124, 0.2),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17884 (125, 0.48),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17885 (126, 0.549),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17886 (183, 0.46),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17887 (183, 0.46),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17888 (183, 0.46),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17889 (183, 0.46),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17890 (183, 0.46),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17891 (183, 0.46),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17892 (183, 0.46),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17893 (183, 0.46),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17894 (183, 0.46),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17895 (183, 0.46),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17896 (183, 0.46),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17897 (183, 0.46),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17898 (183, 0.46),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17899 (183, 0.46),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17900 (183, 0.46),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17901 (183, 0.46),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17902 (183, 0.46),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17903 (183, 0.46),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17904 (183, 0.46),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17905 (183, 0.46),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17906 (183, 0.46),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17907 (183, 0.46),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17908 (183, 0.46),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17909 (183, 0.46),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17910 (183, 0.46),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17911 (183, 0.46),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17912 (183, 0.46),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17913 (183, 0.46),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17914 (183, 0.46),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17915 (183, 0.46),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17916 (183, 0.46),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17917 (183, 0.46),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17918 (183, 0.46),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17919 (160, 0.25),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17920 (161, 0.62),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17921 (162, 0.247),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17922 (163, 0.549),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17923 (164, 0.167),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17924 (165, 0.713),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17925 (166, 0.5),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17926 (167, 0.753),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17927 (168, 0.753),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17928 (169, 0.753),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17929 (170, 0.753),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17930 (171, 1.042),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17931 (172, 0.713),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17932 (173, 0.603),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17933 (174, 0.987),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17934 (175, 0.603),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17935 (176, 0.4),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17936 (177, 0.549),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17937 (178, 0.411),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17938 (179, 0.549),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17939 (180, 0.549),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17940 (181, 0.576),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17941 (182, 0.494),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17942 (183, 0.46),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17943 (184, 0.549),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17944 (185, 0.549),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17945 (186, 0.549),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17946 (187, 0.549),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17947 (188, 1),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17948 (189, 0.603),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17949 (190, 1),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17950 (191, 0.658),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17951 (192, 0.823),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17952 (193, 0.686),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17953 (194, 0.795),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17954 (195, 0.987),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17955 (196, 0.768),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17956 (197, 0.768),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17957 (198, 0.823),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17958 (199, 0.768),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17959 (200, 0.768),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17960 (201, 0.713),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17961 (202, 0.713),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17962 (203, 0.713),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17963 (204, 0.713),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17964 (205, 0.713),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17965 (206, 0.713),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17966 (207, 0.713),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17967 (208, 0.768),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17968 (209, 0.713),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17969 (210, 0.79),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17970 (211, 0.79),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17971 (212, 0.89),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17972 (213, 0.823),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17973 (214, 0.549),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17974 (215, 0.549),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17975 (216, 0.713),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17976 (217, 0.603),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17977 (218, 0.603),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17978 (219, 1.042),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17979 (220, 0.987),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17980 (221, 0.603),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17981 (222, 0.987),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17982 (223, 0.603),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17983 (224, 0.494),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17984 (225, 0.329),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17985 (226, 0.79),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17986 (227, 0.79),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17987 (228, 0.786),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17988 (229, 0.713),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17989 (230, 0.384),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17990 (231, 0.384),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17991 (232, 0.384),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17992 (233, 0.384),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17993 (234, 0.384),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17994 (235, 0.384),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17995 (236, 0.494),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17996 (237, 0.494),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17997 (238, 0.494),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17998 (239, 0.494),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17999 (183, 0.46),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18000 (241, 0.329),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18001 (242, 0.274),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18002 (243, 0.686),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18003 (244, 0.686),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18004 (245, 0.686),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18005 (246, 0.384),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18006 (247, 0.549),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18007 (248, 0.384),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18008 (249, 0.384),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18009 (250, 0.384),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18010 (251, 0.384),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18011 (252, 0.494),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18012 (253, 0.494),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18013 (254, 0.494),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18014 (183, 0.46),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18015 )
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18016
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18017
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18018 zapf_glyphs = ( # Glyph list for the built-in font 'ZapfDingbats'
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18019 (183, 0.788),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18020 (183, 0.788),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18021 (183, 0.788),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18022 (183, 0.788),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18023 (183, 0.788),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18024 (183, 0.788),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18025 (183, 0.788),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18026 (183, 0.788),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18027 (183, 0.788),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18028 (183, 0.788),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18029 (183, 0.788),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18030 (183, 0.788),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18031 (183, 0.788),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18032 (183, 0.788),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18033 (183, 0.788),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18034 (183, 0.788),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18035 (183, 0.788),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18036 (183, 0.788),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18037 (183, 0.788),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18038 (183, 0.788),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18039 (183, 0.788),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18040 (183, 0.788),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18041 (183, 0.788),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18042 (183, 0.788),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18043 (183, 0.788),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18044 (183, 0.788),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18045 (183, 0.788),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18046 (183, 0.788),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18047 (183, 0.788),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18048 (183, 0.788),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18049 (183, 0.788),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18050 (183, 0.788),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18051 (32, 0.278),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18052 (33, 0.974),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18053 (34, 0.961),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18054 (35, 0.974),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18055 (36, 0.98),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18056 (37, 0.719),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18057 (38, 0.789),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18058 (39, 0.79),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18059 (40, 0.791),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18060 (41, 0.69),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18061 (42, 0.96),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18062 (43, 0.939),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18063 (44, 0.549),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18064 (45, 0.855),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18065 (46, 0.911),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18066 (47, 0.933),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18067 (48, 0.911),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18068 (49, 0.945),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18069 (50, 0.974),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18070 (51, 0.755),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18071 (52, 0.846),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18072 (53, 0.762),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18073 (54, 0.761),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18074 (55, 0.571),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18075 (56, 0.677),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18076 (57, 0.763),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18077 (58, 0.76),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18078 (59, 0.759),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18079 (60, 0.754),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18080 (61, 0.494),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18081 (62, 0.552),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18082 (63, 0.537),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18083 (64, 0.577),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18084 (65, 0.692),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18085 (66, 0.786),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18086 (67, 0.788),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18087 (68, 0.788),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18088 (69, 0.79),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18089 (70, 0.793),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18090 (71, 0.794),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18091 (72, 0.816),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18092 (73, 0.823),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18093 (74, 0.789),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18094 (75, 0.841),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18095 (76, 0.823),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18096 (77, 0.833),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18097 (78, 0.816),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18098 (79, 0.831),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18099 (80, 0.923),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18100 (81, 0.744),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18101 (82, 0.723),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18102 (83, 0.749),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18103 (84, 0.79),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18104 (85, 0.792),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18105 (86, 0.695),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18106 (87, 0.776),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18107 (88, 0.768),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18108 (89, 0.792),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18109 (90, 0.759),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18110 (91, 0.707),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18111 (92, 0.708),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18112 (93, 0.682),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18113 (94, 0.701),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18114 (95, 0.826),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18115 (96, 0.815),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18116 (97, 0.789),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18117 (98, 0.789),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18118 (99, 0.707),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18119 (100, 0.687),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18120 (101, 0.696),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18121 (102, 0.689),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18122 (103, 0.786),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18123 (104, 0.787),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18124 (105, 0.713),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18125 (106, 0.791),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18126 (107, 0.785),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18127 (108, 0.791),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18128 (109, 0.873),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18129 (110, 0.761),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18130 (111, 0.762),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18131 (112, 0.762),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18132 (113, 0.759),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18133 (114, 0.759),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18134 (115, 0.892),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18135 (116, 0.892),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18136 (117, 0.788),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18137 (118, 0.784),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18138 (119, 0.438),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18139 (120, 0.138),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18140 (121, 0.277),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18141 (122, 0.415),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18142 (123, 0.392),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18143 (124, 0.392),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18144 (125, 0.668),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18145 (126, 0.668),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18146 (183, 0.788),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18147 (183, 0.788),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18148 (183, 0.788),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18149 (183, 0.788),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18150 (183, 0.788),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18151 (183, 0.788),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18152 (183, 0.788),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18153 (183, 0.788),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18154 (183, 0.788),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18155 (183, 0.788),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18156 (183, 0.788),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18157 (183, 0.788),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18158 (183, 0.788),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18159 (183, 0.788),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18160 (183, 0.788),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18161 (183, 0.788),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18162 (183, 0.788),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18163 (183, 0.788),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18164 (183, 0.788),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18165 (183, 0.788),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18166 (183, 0.788),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18167 (183, 0.788),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18168 (183, 0.788),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18169 (183, 0.788),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18170 (183, 0.788),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18171 (183, 0.788),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18172 (183, 0.788),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18173 (183, 0.788),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18174 (183, 0.788),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18175 (183, 0.788),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18176 (183, 0.788),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18177 (183, 0.788),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18178 (183, 0.788),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18179 (183, 0.788),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18180 (161, 0.732),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18181 (162, 0.544),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18182 (163, 0.544),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18183 (164, 0.91),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18184 (165, 0.667),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18185 (166, 0.76),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18186 (167, 0.76),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18187 (168, 0.776),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18188 (169, 0.595),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18189 (170, 0.694),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18190 (171, 0.626),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18191 (172, 0.788),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18192 (173, 0.788),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18193 (174, 0.788),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18194 (175, 0.788),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18195 (176, 0.788),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18196 (177, 0.788),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18197 (178, 0.788),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18198 (179, 0.788),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18199 (180, 0.788),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18200 (181, 0.788),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18201 (182, 0.788),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18202 (183, 0.788),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18203 (184, 0.788),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18204 (185, 0.788),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18205 (186, 0.788),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18206 (187, 0.788),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18207 (188, 0.788),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18208 (189, 0.788),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18209 (190, 0.788),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18210 (191, 0.788),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18211 (192, 0.788),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18212 (193, 0.788),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18213 (194, 0.788),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18214 (195, 0.788),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18215 (196, 0.788),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18216 (197, 0.788),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18217 (198, 0.788),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18218 (199, 0.788),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18219 (200, 0.788),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18220 (201, 0.788),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18221 (202, 0.788),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18222 (203, 0.788),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18223 (204, 0.788),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18224 (205, 0.788),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18225 (206, 0.788),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18226 (207, 0.788),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18227 (208, 0.788),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18228 (209, 0.788),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18229 (210, 0.788),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18230 (211, 0.788),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18231 (212, 0.894),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18232 (213, 0.838),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18233 (214, 1.016),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18234 (215, 0.458),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18235 (216, 0.748),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18236 (217, 0.924),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18237 (218, 0.748),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18238 (219, 0.918),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18239 (220, 0.927),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18240 (221, 0.928),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18241 (222, 0.928),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18242 (223, 0.834),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18243 (224, 0.873),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18244 (225, 0.828),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18245 (226, 0.924),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18246 (227, 0.924),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18247 (228, 0.917),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18248 (229, 0.93),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18249 (230, 0.931),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18250 (231, 0.463),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18251 (232, 0.883),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18252 (233, 0.836),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18253 (234, 0.836),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18254 (235, 0.867),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18255 (236, 0.867),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18256 (237, 0.696),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18257 (238, 0.696),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18258 (239, 0.874),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18259 (183, 0.788),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18260 (241, 0.874),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18261 (242, 0.76),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18262 (243, 0.946),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18263 (244, 0.771),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18264 (245, 0.865),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18265 (246, 0.771),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18266 (247, 0.888),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18267 (248, 0.967),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18268 (249, 0.888),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18269 (250, 0.831),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18270 (251, 0.873),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18271 (252, 0.927),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18272 (253, 0.97),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18273 (183, 0.788),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18274 (183, 0.788),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18275 )
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18276
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18277
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18278 # Functions
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18279 #
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18280
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18281 def _read_samples( pixmap, offset, n):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18282 # fixme: need to be able to get a sample in one call, as a Python
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18283 # bytes or similar.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18284 ret = []
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18285 if not pixmap.samples():
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18286 # mupdf.fz_samples_get() gives a segv if pixmap->samples is null.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18287 return ret
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18288 for i in range( n):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18289 ret.append( mupdf.fz_samples_get( pixmap, offset + i))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18290 return bytes( ret)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18291
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18292
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18293 def _INRANGE(v, low, high):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18294 return low <= v and v <= high
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18295
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18296
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18297 def _remove_dest_range(pdf, numbers):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18298 pagecount = mupdf.pdf_count_pages(pdf)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18299 for i in range(pagecount):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18300 n1 = i
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18301 if n1 in numbers:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18302 continue
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18303
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18304 pageref = mupdf.pdf_lookup_page_obj( pdf, i)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18305 annots = mupdf.pdf_dict_get( pageref, PDF_NAME('Annots'))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18306 if not annots.m_internal:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18307 continue
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18308 len_ = mupdf.pdf_array_len(annots)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18309 for j in range(len_ - 1, -1, -1):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18310 o = mupdf.pdf_array_get( annots, j)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18311 if not mupdf.pdf_name_eq( mupdf.pdf_dict_get( o, PDF_NAME('Subtype')), PDF_NAME('Link')):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18312 continue
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18313 action = mupdf.pdf_dict_get( o, PDF_NAME('A'))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18314 dest = mupdf.pdf_dict_get( o, PDF_NAME('Dest'))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18315 if action.m_internal:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18316 if not mupdf.pdf_name_eq( mupdf.pdf_dict_get( action, PDF_NAME('S')), PDF_NAME('GoTo')):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18317 continue
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18318 dest = mupdf.pdf_dict_get( action, PDF_NAME('D'))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18319 pno = -1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18320 if mupdf.pdf_is_array( dest):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18321 target = mupdf.pdf_array_get( dest, 0)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18322 pno = mupdf.pdf_lookup_page_number( pdf, target)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18323 elif mupdf.pdf_is_string( dest):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18324 location, _, _ = mupdf.fz_resolve_link( pdf.super(), mupdf.pdf_to_text_string( dest))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18325 pno = location.page
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18326 if pno < 0: # page number lookup did not work
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18327 continue
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18328 n1 = pno
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18329 if n1 in numbers:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18330 mupdf.pdf_array_delete( annots, j)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18331
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18332
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18333 def ASSERT_PDF(cond):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18334 assert isinstance(cond, (mupdf.PdfPage, mupdf.PdfDocument)), f'{type(cond)=} {cond=}'
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18335 if not cond.m_internal:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18336 raise Exception(MSG_IS_NO_PDF)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18337
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18338
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18339 def EMPTY_IRECT():
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18340 return IRect(FZ_MAX_INF_RECT, FZ_MAX_INF_RECT, FZ_MIN_INF_RECT, FZ_MIN_INF_RECT)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18341
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18342
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18343 def EMPTY_QUAD():
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18344 return EMPTY_RECT().quad
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18345
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18346
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18347 def EMPTY_RECT():
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18348 return Rect(FZ_MAX_INF_RECT, FZ_MAX_INF_RECT, FZ_MIN_INF_RECT, FZ_MIN_INF_RECT)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18349
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18350
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18351 def ENSURE_OPERATION(pdf):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18352 if not JM_have_operation(pdf):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18353 raise Exception("No journalling operation started")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18354
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18355
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18356 def INFINITE_IRECT():
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18357 return IRect(FZ_MIN_INF_RECT, FZ_MIN_INF_RECT, FZ_MAX_INF_RECT, FZ_MAX_INF_RECT)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18358
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18359
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18360 def INFINITE_QUAD():
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18361 return INFINITE_RECT().quad
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18362
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18363
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18364 def INFINITE_RECT():
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18365 return Rect(FZ_MIN_INF_RECT, FZ_MIN_INF_RECT, FZ_MAX_INF_RECT, FZ_MAX_INF_RECT)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18366
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18367
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18368 def JM_BinFromBuffer(buffer_):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18369 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18370 Turn fz_buffer into a Python bytes object
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18371 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18372 assert isinstance(buffer_, mupdf.FzBuffer)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18373 ret = mupdf.fz_buffer_extract_copy(buffer_)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18374 return ret
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18375
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18376
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18377 def JM_EscapeStrFromStr(c):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18378 # `c` is typically from SWIG which will have converted a `const char*` from
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18379 # C into a Python `str` using `PyUnicode_DecodeUTF8(carray, static_cast<
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18380 # Py_ssize_t >(size), "surrogateescape")`. This gives us a Python `str`
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18381 # with some characters encoded as a \0xdcXY sequence, where `XY` are hex
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18382 # digits for an invalid byte in the original `const char*`.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18383 #
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18384 # This is actually a reasonable way of representing arbitrary
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18385 # strings from C, but we want to mimic what PyMuPDF does. It uses
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18386 # `PyUnicode_DecodeRawUnicodeEscape(c, (Py_ssize_t) strlen(c), "replace")`
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18387 # which gives a string containing actual unicode characters for any invalid
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18388 # bytes.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18389 #
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18390 # We mimic this by converting the `str` to a `bytes` with 'surrogateescape'
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18391 # to recognise \0xdcXY sequences, then convert the individual bytes into a
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18392 # `str` using `chr()`.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18393 #
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18394 # Would be good to have a more efficient way to do this.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18395 #
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18396 if c is None:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18397 return ''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18398 assert isinstance(c, str), f'{type(c)=}'
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18399 b = c.encode('utf8', 'surrogateescape')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18400 ret = ''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18401 for bb in b:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18402 ret += chr(bb)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18403 return ret
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18404
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18405
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18406 def JM_BufferFromBytes(stream):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18407 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18408 Make fz_buffer from a PyBytes, PyByteArray or io.BytesIO object. If a text
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18409 io.BytesIO, we convert to binary by encoding as utf8.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18410 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18411 if isinstance(stream, (bytes, bytearray)):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18412 data = stream
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18413 elif hasattr(stream, 'getvalue'):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18414 data = stream.getvalue()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18415 if isinstance(data, str):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18416 data = data.encode('utf-8')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18417 if not isinstance(data, (bytes, bytearray)):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18418 raise Exception(f'.getvalue() returned unexpected type: {type(data)}')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18419 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18420 return mupdf.FzBuffer()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18421 return mupdf.fz_new_buffer_from_copied_data(data)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18422
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18423
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18424 def JM_FLOAT_ITEM(obj, idx):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18425 if not PySequence_Check(obj):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18426 return None
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18427 return float(obj[idx])
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18428
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18429 def JM_INT_ITEM(obj, idx):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18430 if idx < len(obj):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18431 temp = obj[idx]
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18432 if isinstance(temp, (int, float)):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18433 return 0, temp
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18434 return 1, None
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18435
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18436
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18437 def JM_pixmap_from_page(doc, page, ctm, cs, alpha, annots, clip):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18438 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18439 Pixmap creation directly using a short-lived displaylist, so we can support
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18440 separations.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18441 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18442 SPOTS_NONE = 0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18443 SPOTS_OVERPRINT_SIM = 1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18444 SPOTS_FULL = 2
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18445
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18446 FZ_ENABLE_SPOT_RENDERING = True # fixme: this is a build-time setting in MuPDF's config.h.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18447 if FZ_ENABLE_SPOT_RENDERING:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18448 spots = SPOTS_OVERPRINT_SIM
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18449 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18450 spots = SPOTS_NONE
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18451
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18452 seps = None
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18453 colorspace = cs
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18454
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18455 matrix = JM_matrix_from_py(ctm)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18456 rect = mupdf.fz_bound_page(page)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18457 rclip = JM_rect_from_py(clip)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18458 rect = mupdf.fz_intersect_rect(rect, rclip) # no-op if clip is not given
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18459 rect = mupdf.fz_transform_rect(rect, matrix)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18460 bbox = mupdf.fz_round_rect(rect)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18461
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18462 # Pixmap of the document's /OutputIntents ("output intents")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18463 oi = mupdf.fz_document_output_intent(doc)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18464 # if present and compatible, use it instead of the parameter
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18465 if oi.m_internal:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18466 if mupdf.fz_colorspace_n(oi) == mupdf.fz_colorspace_n(cs):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18467 colorspace = mupdf.fz_keep_colorspace(oi)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18468
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18469 # check if spots rendering is available and if so use separations
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18470 if spots != SPOTS_NONE:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18471 seps = mupdf.fz_page_separations(page)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18472 if seps.m_internal:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18473 n = mupdf.fz_count_separations(seps)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18474 if spots == SPOTS_FULL:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18475 for i in range(n):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18476 mupdf.fz_set_separation_behavior(seps, i, mupdf.FZ_SEPARATION_SPOT)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18477 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18478 for i in range(n):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18479 mupdf.fz_set_separation_behavior(seps, i, mupdf.FZ_SEPARATION_COMPOSITE)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18480 elif mupdf.fz_page_uses_overprint(page):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18481 # This page uses overprint, so we need an empty
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18482 # sep object to force the overprint simulation on.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18483 seps = mupdf.fz_new_separations(0)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18484 elif oi.m_internal and mupdf.fz_colorspace_n(oi) != mupdf.fz_colorspace_n(colorspace):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18485 # We have an output intent, and it's incompatible
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18486 # with the colorspace our device needs. Force the
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18487 # overprint simulation on, because this ensures that
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18488 # we 'simulate' the output intent too.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18489 seps = mupdf.fz_new_separations(0)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18490
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18491 pix = mupdf.fz_new_pixmap_with_bbox(colorspace, bbox, seps, alpha)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18492
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18493 if alpha:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18494 mupdf.fz_clear_pixmap(pix)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18495 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18496 mupdf.fz_clear_pixmap_with_value(pix, 0xFF)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18497
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18498 dev = mupdf.fz_new_draw_device(matrix, pix)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18499 if annots:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18500 mupdf.fz_run_page(page, dev, mupdf.FzMatrix(), mupdf.FzCookie())
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18501 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18502 mupdf.fz_run_page_contents(page, dev, mupdf.FzMatrix(), mupdf.FzCookie())
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18503 mupdf.fz_close_device(dev)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18504 return pix
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18505
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18506
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18507 def JM_StrAsChar(x):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18508 # fixme: should encode, but swig doesn't pass bytes to C as const char*.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18509 return x
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18510 #return x.encode('utf8')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18511
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18512
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18513 def JM_TUPLE(o: typing.Sequence) -> tuple:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18514 return tuple(map(lambda x: round(x, 5) if abs(x) >= 1e-4 else 0, o))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18515
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18516
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18517 def JM_TUPLE3(o: typing.Sequence) -> tuple:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18518 return tuple(map(lambda x: round(x, 3) if abs(x) >= 1e-3 else 0, o))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18519
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18520
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18521 def JM_UnicodeFromStr(s):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18522 if s is None:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18523 return ''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18524 if isinstance(s, bytes):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18525 s = s.decode('utf8')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18526 assert isinstance(s, str), f'{type(s)=} {s=}'
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18527 return s
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18528
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18529
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18530 def JM_add_annot_id(annot, stem):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18531 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18532 Add a unique /NM key to an annotation or widget.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18533 Append a number to 'stem' such that the result is a unique name.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18534 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18535 assert isinstance(annot, mupdf.PdfAnnot)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18536 page = _pdf_annot_page(annot)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18537 annot_obj = mupdf.pdf_annot_obj( annot)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18538 names = JM_get_annot_id_list(page)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18539 i = 0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18540 while 1:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18541 stem_id = f'{JM_annot_id_stem}-{stem}{i}'
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18542 if stem_id not in names:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18543 break
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18544 i += 1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18545 response = JM_StrAsChar(stem_id)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18546 name = mupdf.pdf_new_string( response, len(response))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18547 mupdf.pdf_dict_puts(annot_obj, "NM", name)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18548 page.doc().m_internal.resynth_required = 0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18549
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18550
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18551 def JM_add_oc_object(pdf, ref, xref):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18552 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18553 Add OC object reference to a dictionary
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18554 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18555 indobj = mupdf.pdf_new_indirect(pdf, xref, 0)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18556 if not mupdf.pdf_is_dict(indobj):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18557 RAISEPY(MSG_BAD_OC_REF, PyExc_ValueError)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18558 type_ = mupdf.pdf_dict_get(indobj, PDF_NAME('Type'))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18559 if (mupdf.pdf_objcmp(type_, PDF_NAME('OCG')) == 0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18560 or mupdf.pdf_objcmp(type_, PDF_NAME('OCMD')) == 0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18561 ):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18562 mupdf.pdf_dict_put(ref, PDF_NAME('OC'), indobj)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18563 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18564 RAISEPY(MSG_BAD_OC_REF, PyExc_ValueError)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18565
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18566
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18567 def JM_annot_border(annot_obj):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18568 dash_py = list()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18569 style = None
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18570 width = -1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18571 clouds = -1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18572 obj = None
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18573
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18574 obj = mupdf.pdf_dict_get( annot_obj, PDF_NAME('Border'))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18575 if mupdf.pdf_is_array( obj):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18576 width = mupdf.pdf_to_real( mupdf.pdf_array_get( obj, 2))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18577 if mupdf.pdf_array_len( obj) == 4:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18578 dash = mupdf.pdf_array_get( obj, 3)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18579 for i in range( mupdf.pdf_array_len( dash)):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18580 val = mupdf.pdf_to_int( mupdf.pdf_array_get( dash, i))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18581 dash_py.append( val)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18582
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18583 bs_o = mupdf.pdf_dict_get( annot_obj, PDF_NAME('BS'))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18584 if bs_o.m_internal:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18585 width = mupdf.pdf_to_real( mupdf.pdf_dict_get( bs_o, PDF_NAME('W')))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18586 style = mupdf.pdf_to_name( mupdf.pdf_dict_get( bs_o, PDF_NAME('S')))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18587 if style == '':
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18588 style = None
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18589 obj = mupdf.pdf_dict_get( bs_o, PDF_NAME('D'))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18590 if obj.m_internal:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18591 for i in range( mupdf.pdf_array_len( obj)):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18592 val = mupdf.pdf_to_int( mupdf.pdf_array_get( obj, i))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18593 dash_py.append( val)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18594
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18595 obj = mupdf.pdf_dict_get( annot_obj, PDF_NAME('BE'))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18596 if obj.m_internal:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18597 clouds = mupdf.pdf_to_int( mupdf.pdf_dict_get( obj, PDF_NAME('I')))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18598
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18599 res = dict()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18600 res[ dictkey_width] = width
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18601 res[ dictkey_dashes] = tuple( dash_py)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18602 res[ dictkey_style] = style
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18603 res[ 'clouds'] = clouds
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18604 return res
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18605
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18606
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18607 def JM_annot_colors(annot_obj):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18608 res = dict()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18609 bc = list() # stroke colors
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18610 fc =list() # fill colors
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18611 o = mupdf.pdf_dict_get(annot_obj, mupdf.PDF_ENUM_NAME_C)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18612 if mupdf.pdf_is_array(o):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18613 n = mupdf.pdf_array_len(o)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18614 for i in range(n):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18615 col = mupdf.pdf_to_real( mupdf.pdf_array_get(o, i))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18616 bc.append(col)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18617 res[dictkey_stroke] = bc
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18618
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18619 o = mupdf.pdf_dict_gets(annot_obj, "IC")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18620 if mupdf.pdf_is_array(o):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18621 n = mupdf.pdf_array_len(o)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18622 for i in range(n):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18623 col = mupdf.pdf_to_real( mupdf.pdf_array_get(o, i))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18624 fc.append(col)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18625
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18626 res[dictkey_fill] = fc
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18627 return res
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18628
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18629
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18630 def JM_annot_set_border( border, doc, annot_obj):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18631 assert isinstance(border, dict)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18632 obj = None
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18633 dashlen = 0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18634 nwidth = border.get( dictkey_width) # new width
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18635 ndashes = border.get( dictkey_dashes) # new dashes
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18636 nstyle = border.get( dictkey_style) # new style
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18637 nclouds = border.get( 'clouds', -1) # new clouds value
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18638
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18639 # get old border properties
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18640 oborder = JM_annot_border( annot_obj)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18641
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18642 # delete border-related entries
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18643 mupdf.pdf_dict_del( annot_obj, PDF_NAME('BS'))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18644 mupdf.pdf_dict_del( annot_obj, PDF_NAME('BE'))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18645 mupdf.pdf_dict_del( annot_obj, PDF_NAME('Border'))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18646
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18647 # populate border items: keep old values for any omitted new ones
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18648 if nwidth < 0:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18649 nwidth = oborder.get( dictkey_width) # no new width: keep current
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18650 if ndashes is None:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18651 ndashes = oborder.get( dictkey_dashes) # no new dashes: keep old
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18652 if nstyle is None:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18653 nstyle = oborder.get( dictkey_style) # no new style: keep old
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18654 if nclouds < 0:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18655 nclouds = oborder.get( "clouds", -1) # no new clouds: keep old
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18656
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18657 if isinstance( ndashes, tuple) and len( ndashes) > 0:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18658 dashlen = len( ndashes)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18659 darr = mupdf.pdf_new_array( doc, dashlen)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18660 for d in ndashes:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18661 mupdf.pdf_array_push_int( darr, d)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18662 mupdf.pdf_dict_putl( annot_obj, darr, PDF_NAME('BS'), PDF_NAME('D'))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18663
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18664 mupdf.pdf_dict_putl(
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18665 annot_obj,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18666 mupdf.pdf_new_real( nwidth),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18667 PDF_NAME('BS'),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18668 PDF_NAME('W'),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18669 )
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18670
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18671 if dashlen == 0:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18672 obj = JM_get_border_style( nstyle)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18673 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18674 obj = PDF_NAME('D')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18675 mupdf.pdf_dict_putl( annot_obj, obj, PDF_NAME('BS'), PDF_NAME('S'))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18676
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18677 if nclouds > 0:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18678 mupdf.pdf_dict_put_dict( annot_obj, PDF_NAME('BE'), 2)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18679 obj = mupdf.pdf_dict_get( annot_obj, PDF_NAME('BE'))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18680 mupdf.pdf_dict_put( obj, PDF_NAME('S'), PDF_NAME('C'))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18681 mupdf.pdf_dict_put_int( obj, PDF_NAME('I'), nclouds)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18682
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18683
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18684 def make_escape(ch):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18685 if ch == 92:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18686 return "\\u005c"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18687 elif 32 <= ch <= 127 or ch == 10:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18688 return chr(ch)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18689 elif 0xd800 <= ch <= 0xdfff: # orphaned surrogate
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18690 return "\\ufffd"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18691 elif ch <= 0xffff:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18692 return "\\u%04x" % ch
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18693 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18694 return "\\U%08x" % ch
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18695
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18696
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18697 def JM_append_rune(buff, ch):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18698 """
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18699 APPEND non-ascii runes in unicode escape format to fz_buffer.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18700 """
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18701 mupdf.fz_append_string(buff, make_escape(ch))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18702
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18703
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18704 def JM_append_word(lines, buff, wbbox, block_n, line_n, word_n):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18705 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18706 Functions for wordlist output
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18707 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18708 s = JM_EscapeStrFromBuffer(buff)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18709 litem = (
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18710 wbbox.x0,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18711 wbbox.y0,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18712 wbbox.x1,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18713 wbbox.y1,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18714 s,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18715 block_n,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18716 line_n,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18717 word_n,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18718 )
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18719 lines.append(litem)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18720 return word_n + 1, mupdf.FzRect(mupdf.FzRect.Fixed_EMPTY) # word counter
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18721
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18722
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18723 def JM_add_layer_config( pdf, name, creator, ON):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18724 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18725 Add OC configuration to the PDF catalog
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18726 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18727 ocp = JM_ensure_ocproperties( pdf)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18728 configs = mupdf.pdf_dict_get( ocp, PDF_NAME('Configs'))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18729 if not mupdf.pdf_is_array( configs):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18730 configs = mupdf.pdf_dict_put_array( ocp, PDF_NAME('Configs'), 1)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18731 D = mupdf.pdf_new_dict( pdf, 5)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18732 mupdf.pdf_dict_put_text_string( D, PDF_NAME('Name'), name)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18733 if creator is not None:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18734 mupdf.pdf_dict_put_text_string( D, PDF_NAME('Creator'), creator)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18735 mupdf.pdf_dict_put( D, PDF_NAME('BaseState'), PDF_NAME('OFF'))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18736 onarray = mupdf.pdf_dict_put_array( D, PDF_NAME('ON'), 5)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18737 if not ON:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18738 pass
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18739 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18740 ocgs = mupdf.pdf_dict_get( ocp, PDF_NAME('OCGs'))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18741 n = len(ON)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18742 for i in range(n):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18743 xref = 0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18744 e, xref = JM_INT_ITEM(ON, i)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18745 if e == 1:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18746 continue
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18747 ind = mupdf.pdf_new_indirect( pdf, xref, 0)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18748 if mupdf.pdf_array_contains( ocgs, ind):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18749 mupdf.pdf_array_push( onarray, ind)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18750 mupdf.pdf_array_push( configs, D)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18751
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18752
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18753 def JM_char_bbox(line, ch):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18754 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18755 return rect of char quad
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18756 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18757 q = JM_char_quad(line, ch)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18758 r = mupdf.fz_rect_from_quad(q)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18759 if not line.m_internal.wmode:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18760 return r
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18761 if r.y1 < r.y0 + ch.m_internal.size:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18762 r.y0 = r.y1 - ch.m_internal.size
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18763 return r
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18764
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18765
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18766 def JM_char_font_flags(font, line, ch):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18767 flags = 0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18768 if line and ch:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18769 flags += detect_super_script(line, ch)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18770 flags += mupdf.fz_font_is_italic(font) * TEXT_FONT_ITALIC
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18771 flags += mupdf.fz_font_is_serif(font) * TEXT_FONT_SERIFED
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18772 flags += mupdf.fz_font_is_monospaced(font) * TEXT_FONT_MONOSPACED
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18773 flags += mupdf.fz_font_is_bold(font) * TEXT_FONT_BOLD
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18774 return flags
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18775
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18776
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18777 def JM_char_quad(line, ch):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18778 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18779 re-compute char quad if ascender/descender values make no sense
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18780 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18781 if 1 and g_use_extra:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18782 # This reduces time taken to extract text from PyMuPDF.pdf from 20s to
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18783 # 15s.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18784 return mupdf.FzQuad(extra.JM_char_quad( line.m_internal, ch.m_internal))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18785
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18786 assert isinstance(line, mupdf.FzStextLine)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18787 assert isinstance(ch, mupdf.FzStextChar)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18788 if _globals.skip_quad_corrections: # no special handling
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18789 return ch.quad
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18790 if line.m_internal.wmode: # never touch vertical write mode
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18791 return ch.quad
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18792 font = mupdf.FzFont(mupdf.ll_fz_keep_font(ch.m_internal.font))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18793 asc = JM_font_ascender(font)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18794 dsc = JM_font_descender(font)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18795 fsize = ch.m_internal.size
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18796 asc_dsc = asc - dsc + FLT_EPSILON
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18797 if asc_dsc >= 1 and _globals.small_glyph_heights == 0: # no problem
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18798 return mupdf.FzQuad(ch.m_internal.quad)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18799
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18800 # Re-compute quad with adjusted ascender / descender values:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18801 # Move ch->origin to (0,0) and de-rotate quad, then adjust the corners,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18802 # re-rotate and move back to ch->origin location.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18803 fsize = ch.m_internal.size
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18804 bbox = mupdf.fz_font_bbox(font)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18805 fwidth = bbox.x1 - bbox.x0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18806 if asc < 1e-3: # probably Tesseract glyphless font
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18807 dsc = -0.1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18808 asc = 0.9
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18809 asc_dsc = 1.0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18810
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18811 if _globals.small_glyph_heights or asc_dsc < 1:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18812 dsc = dsc / asc_dsc
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18813 asc = asc / asc_dsc
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18814 asc_dsc = asc - dsc
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18815 asc = asc * fsize / asc_dsc
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18816 dsc = dsc * fsize / asc_dsc
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18817
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18818 # Re-compute quad with the adjusted ascender / descender values:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18819 # Move ch->origin to (0,0) and de-rotate quad, then adjust the corners,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18820 # re-rotate and move back to ch->origin location.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18821 c = line.m_internal.dir.x # cosine
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18822 s = line.m_internal.dir.y # sine
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18823 trm1 = mupdf.fz_make_matrix(c, -s, s, c, 0, 0) # derotate
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18824 trm2 = mupdf.fz_make_matrix(c, s, -s, c, 0, 0) # rotate
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18825 if (c == -1): # left-right flip
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18826 trm1.d = 1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18827 trm2.d = 1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18828 xlate1 = mupdf.fz_make_matrix(1, 0, 0, 1, -ch.m_internal.origin.x, -ch.m_internal.origin.y)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18829 xlate2 = mupdf.fz_make_matrix(1, 0, 0, 1, ch.m_internal.origin.x, ch.m_internal.origin.y)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18830
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18831 quad = mupdf.fz_transform_quad(mupdf.FzQuad(ch.m_internal.quad), xlate1) # move origin to (0,0)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18832 quad = mupdf.fz_transform_quad(quad, trm1) # de-rotate corners
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18833
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18834 # adjust vertical coordinates
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18835 if c == 1 and quad.ul.y > 0: # up-down flip
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18836 quad.ul.y = asc
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18837 quad.ur.y = asc
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18838 quad.ll.y = dsc
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18839 quad.lr.y = dsc
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18840 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18841 quad.ul.y = -asc
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18842 quad.ur.y = -asc
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18843 quad.ll.y = -dsc
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18844 quad.lr.y = -dsc
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18845
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18846 # adjust horizontal coordinates that are too crazy:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18847 # (1) left x must be >= 0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18848 # (2) if bbox width is 0, lookup char advance in font.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18849 if quad.ll.x < 0:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18850 quad.ll.x = 0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18851 quad.ul.x = 0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18852
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18853 cwidth = quad.lr.x - quad.ll.x
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18854 if cwidth < FLT_EPSILON:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18855 glyph = mupdf.fz_encode_character( font, ch.m_internal.c)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18856 if glyph:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18857 fwidth = mupdf.fz_advance_glyph( font, glyph, line.m_internal.wmode)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18858 quad.lr.x = quad.ll.x + fwidth * fsize
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18859 quad.ur.x = quad.lr.x
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18860
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18861 quad = mupdf.fz_transform_quad(quad, trm2) # rotate back
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18862 quad = mupdf.fz_transform_quad(quad, xlate2) # translate back
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18863 return quad
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18864
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18865
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18866 def JM_choice_options(annot):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18867 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18868 return list of choices for list or combo boxes
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18869 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18870 annot_obj = mupdf.pdf_annot_obj( annot.this)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18871
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18872 opts = mupdf.pdf_choice_widget_options2( annot, 0)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18873 n = len( opts)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18874 if n == 0:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18875 return # wrong widget type
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18876
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18877 optarr = mupdf.pdf_dict_get( annot_obj, PDF_NAME('Opt'))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18878 liste = []
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18879
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18880 for i in range( n):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18881 m = mupdf.pdf_array_len( mupdf.pdf_array_get( optarr, i))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18882 if m == 2:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18883 val = (
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18884 mupdf.pdf_to_text_string( mupdf.pdf_array_get( mupdf.pdf_array_get( optarr, i), 0)),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18885 mupdf.pdf_to_text_string( mupdf.pdf_array_get( mupdf.pdf_array_get( optarr, i), 1)),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18886 )
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18887 liste.append( val)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18888 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18889 val = mupdf.pdf_to_text_string( mupdf.pdf_array_get( optarr, i))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18890 liste.append( val)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18891 return liste
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18892
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18893
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18894 def JM_clear_pixmap_rect_with_value(dest, value, b):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18895 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18896 Clear a pixmap rectangle - my version also supports non-alpha pixmaps
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18897 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18898 b = mupdf.fz_intersect_irect(b, mupdf.fz_pixmap_bbox(dest))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18899 w = b.x1 - b.x0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18900 y = b.y1 - b.y0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18901 if w <= 0 or y <= 0:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18902 return 0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18903
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18904 destspan = dest.stride()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18905 destp = destspan * (b.y0 - dest.y()) + dest.n() * (b.x0 - dest.x())
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18906
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18907 # CMYK needs special handling (and potentially any other subtractive colorspaces)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18908 if mupdf.fz_colorspace_n(dest.colorspace()) == 4:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18909 value = 255 - value
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18910 while 1:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18911 s = destp
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18912 for x in range(0, w):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18913 mupdf.fz_samples_set(dest, s, 0)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18914 s += 1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18915 mupdf.fz_samples_set(dest, s, 0)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18916 s += 1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18917 mupdf.fz_samples_set(dest, s, 0)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18918 s += 1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18919 mupdf.fz_samples_set(dest, s, value)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18920 s += 1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18921 if dest.alpha():
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18922 mupdf.fz_samples_set(dest, s, 255)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18923 s += 1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18924 destp += destspan
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18925 if y == 0:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18926 break
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18927 y -= 1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18928 return 1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18929
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18930 while 1:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18931 s = destp
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18932 for x in range(w):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18933 for k in range(dest.n()-1):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18934 mupdf.fz_samples_set(dest, s, value)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18935 s += 1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18936 if dest.alpha():
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18937 mupdf.fz_samples_set(dest, s, 255)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18938 s += 1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18939 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18940 mupdf.fz_samples_set(dest, s, value)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18941 s += 1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18942 destp += destspan
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18943 if y == 0:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18944 break
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18945 y -= 1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18946 return 1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18947
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18948
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18949 def JM_color_FromSequence(color):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18950
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18951 if isinstance(color, (int, float)): # maybe just a single float
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18952 color = [color]
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18953
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18954 if not isinstance( color, (list, tuple)):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18955 return -1, []
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18956
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18957 if len(color) not in (0, 1, 3, 4):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18958 return -1, []
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18959
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18960 ret = color[:]
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18961 for i in range(len(ret)):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18962 if ret[i] < 0 or ret[i] > 1:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18963 ret[i] = 1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18964 return len(ret), ret
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18965
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18966
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18967 def JM_color_count( pm, clip):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18968 if g_use_extra:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18969 return extra.ll_JM_color_count(pm.m_internal, clip)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18970
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18971 rc = dict()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18972 cnt = 0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18973 irect = mupdf.fz_pixmap_bbox( pm)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18974 irect = mupdf.fz_intersect_irect(irect, mupdf.fz_round_rect(JM_rect_from_py(clip)))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18975 stride = pm.stride()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18976 width = irect.x1 - irect.x0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18977 height = irect.y1 - irect.y0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18978 n = pm.n()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18979 substride = width * n
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18980 s = stride * (irect.y0 - pm.y()) + (irect.x0 - pm.x()) * n
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18981 oldpix = _read_samples( pm, s, n)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18982 cnt = 0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18983 if mupdf.fz_is_empty_irect(irect):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18984 return rc
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18985 for i in range( height):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18986 for j in range( 0, substride, n):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18987 newpix = _read_samples( pm, s + j, n)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18988 if newpix != oldpix:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18989 pixel = oldpix
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18990 c = rc.get( pixel, None)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18991 if c is not None:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18992 cnt += c
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18993 rc[ pixel] = cnt
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18994 cnt = 1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18995 oldpix = newpix
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18996 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18997 cnt += 1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18998 s += stride
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18999 pixel = oldpix
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19000 c = rc.get( pixel)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19001 if c is not None:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19002 cnt += c
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19003 rc[ pixel] = cnt
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19004 return rc
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19005
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19006
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19007 def JM_compress_buffer(inbuffer):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19008 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19009 compress char* into a new buffer
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19010 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19011 data, compressed_length = mupdf.fz_new_deflated_data_from_buffer(
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19012 inbuffer,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19013 mupdf.FZ_DEFLATE_BEST,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19014 )
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19015 #log( '{=data compressed_length}')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19016 if not data or compressed_length == 0:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19017 return None
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19018 buf = mupdf.FzBuffer(mupdf.fz_new_buffer_from_data(data, compressed_length))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19019 mupdf.fz_resize_buffer(buf, compressed_length)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19020 return buf
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19021
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19022
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19023 def JM_copy_rectangle(page, area):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19024 need_new_line = 0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19025 buffer = io.StringIO()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19026 for block in page:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19027 if block.m_internal.type != mupdf.FZ_STEXT_BLOCK_TEXT:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19028 continue
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19029 for line in block:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19030 line_had_text = 0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19031 for ch in line:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19032 r = JM_char_bbox(line, ch)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19033 if JM_rects_overlap(area, r):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19034 line_had_text = 1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19035 if need_new_line:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19036 buffer.write("\n")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19037 need_new_line = 0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19038 buffer.write(make_escape(ch.m_internal.c))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19039 if line_had_text:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19040 need_new_line = 1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19041
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19042 s = buffer.getvalue() # take over the data
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19043 return s
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19044
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19045
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19046 def JM_convert_to_pdf(doc, fp, tp, rotate):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19047 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19048 Convert any MuPDF document to a PDF
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19049 Returns bytes object containing the PDF, created via 'write' function.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19050 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19051 pdfout = mupdf.PdfDocument()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19052 incr = 1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19053 s = fp
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19054 e = tp
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19055 if fp > tp:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19056 incr = -1 # count backwards
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19057 s = tp # adjust ...
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19058 e = fp # ... range
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19059 rot = JM_norm_rotation(rotate)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19060 i = fp
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19061 while 1: # interpret & write document pages as PDF pages
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19062 if not _INRANGE(i, s, e):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19063 break
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19064 page = mupdf.fz_load_page(doc, i)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19065 mediabox = mupdf.fz_bound_page(page)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19066 dev, resources, contents = mupdf.pdf_page_write(pdfout, mediabox)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19067 mupdf.fz_run_page(page, dev, mupdf.FzMatrix(), mupdf.FzCookie())
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19068 mupdf.fz_close_device(dev)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19069 dev = None
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19070 page_obj = mupdf.pdf_add_page(pdfout, mediabox, rot, resources, contents)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19071 mupdf.pdf_insert_page(pdfout, -1, page_obj)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19072 i += incr
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19073 # PDF created - now write it to Python bytearray
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19074 # prepare write options structure
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19075 opts = mupdf.PdfWriteOptions()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19076 opts.do_garbage = 4
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19077 opts.do_compress = 1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19078 opts.do_compress_images = 1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19079 opts.do_compress_fonts = 1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19080 opts.do_sanitize = 1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19081 opts.do_incremental = 0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19082 opts.do_ascii = 0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19083 opts.do_decompress = 0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19084 opts.do_linear = 0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19085 opts.do_clean = 1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19086 opts.do_pretty = 0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19087
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19088 res = mupdf.fz_new_buffer(8192)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19089 out = mupdf.FzOutput(res)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19090 mupdf.pdf_write_document(pdfout, out, opts)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19091 out.fz_close_output()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19092 c = mupdf.fz_buffer_extract_copy(res)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19093 assert isinstance(c, bytes)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19094 return c
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19095
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19096
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19097 # Copied from MuPDF v1.14
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19098 # Create widget
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19099 def JM_create_widget(doc, page, type, fieldname):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19100 old_sigflags = mupdf.pdf_to_int(mupdf.pdf_dict_getp(mupdf.pdf_trailer(doc), "Root/AcroForm/SigFlags"))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19101 #log( '*** JM_create_widget()')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19102 #log( f'{mupdf.pdf_create_annot_raw=}')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19103 #log( f'{page=}')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19104 #log( f'{mupdf.PDF_ANNOT_WIDGET=}')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19105 annot = mupdf.pdf_create_annot_raw(page, mupdf.PDF_ANNOT_WIDGET)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19106 annot_obj = mupdf.pdf_annot_obj(annot)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19107 try:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19108 JM_set_field_type(doc, annot_obj, type)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19109 mupdf.pdf_dict_put_text_string(annot_obj, PDF_NAME('T'), fieldname)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19110
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19111 if type == mupdf.PDF_WIDGET_TYPE_SIGNATURE:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19112 sigflags = old_sigflags | (SigFlag_SignaturesExist | SigFlag_AppendOnly)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19113 mupdf.pdf_dict_putl(
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19114 mupdf.pdf_trailer(doc),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19115 mupdf.pdf_new_int(sigflags),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19116 PDF_NAME('Root'),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19117 PDF_NAME('AcroForm'),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19118 PDF_NAME('SigFlags'),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19119 )
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19120 # pdf_create_annot will have linked the new widget into the page's
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19121 # annot array. We also need it linked into the document's form
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19122 form = mupdf.pdf_dict_getp(mupdf.pdf_trailer(doc), "Root/AcroForm/Fields")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19123 if not form.m_internal:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19124 form = mupdf.pdf_new_array(doc, 1)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19125 mupdf.pdf_dict_putl(
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19126 mupdf.pdf_trailer(doc),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19127 form,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19128 PDF_NAME('Root'),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19129 PDF_NAME('AcroForm'),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19130 PDF_NAME('Fields'),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19131 )
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19132 mupdf.pdf_array_push(form, annot_obj) # Cleanup relies on this statement being last
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19133 except Exception:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19134 if g_exceptions_verbose: exception_info()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19135 mupdf.pdf_delete_annot(page, annot)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19136
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19137 if type == mupdf.PDF_WIDGET_TYPE_SIGNATURE:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19138 mupdf.pdf_dict_putl(
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19139 mupdf.pdf_trailer(doc),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19140 mupdf.pdf_new_int(old_sigflags),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19141 PDF_NAME('Root'),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19142 PDF_NAME('AcroForm'),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19143 PDF_NAME('SigFlags'),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19144 )
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19145 raise
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19146 return annot
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19147
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19148
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19149 def JM_cropbox(page_obj):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19150 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19151 return a PDF page's CropBox
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19152 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19153 if g_use_extra:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19154 return extra.JM_cropbox(page_obj)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19155
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19156 mediabox = JM_mediabox(page_obj)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19157 cropbox = mupdf.pdf_to_rect(
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19158 mupdf.pdf_dict_get_inheritable(page_obj, PDF_NAME('CropBox'))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19159 )
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19160 if mupdf.fz_is_infinite_rect(cropbox) or mupdf.fz_is_empty_rect(cropbox):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19161 cropbox = mediabox
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19162 y0 = mediabox.y1 - cropbox.y1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19163 y1 = mediabox.y1 - cropbox.y0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19164 cropbox.y0 = y0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19165 cropbox.y1 = y1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19166 return cropbox
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19167
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19168
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19169 def JM_cropbox_size(page_obj):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19170 rect = JM_cropbox(page_obj)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19171 w = abs(rect.x1 - rect.x0)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19172 h = abs(rect.y1 - rect.y0)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19173 size = mupdf.fz_make_point(w, h)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19174 return size
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19175
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19176
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19177 def JM_derotate_page_matrix(page):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19178 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19179 just the inverse of rotation
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19180 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19181 mp = JM_rotate_page_matrix(page)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19182 return mupdf.fz_invert_matrix(mp)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19183
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19184
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19185 def JM_embed_file(
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19186 pdf,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19187 buf,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19188 filename,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19189 ufilename,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19190 desc,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19191 compress,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19192 ):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19193 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19194 embed a new file in a PDF (not only /EmbeddedFiles entries)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19195 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19196 len_ = 0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19197 val = mupdf.pdf_new_dict(pdf, 6)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19198 mupdf.pdf_dict_put_dict(val, PDF_NAME('CI'), 4)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19199 ef = mupdf.pdf_dict_put_dict(val, PDF_NAME('EF'), 4)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19200 mupdf.pdf_dict_put_text_string(val, PDF_NAME('F'), filename)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19201 mupdf.pdf_dict_put_text_string(val, PDF_NAME('UF'), ufilename)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19202 mupdf.pdf_dict_put_text_string(val, PDF_NAME('Desc'), desc)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19203 mupdf.pdf_dict_put(val, PDF_NAME('Type'), PDF_NAME('Filespec'))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19204 bs = b' '
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19205 f = mupdf.pdf_add_stream(
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19206 pdf,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19207 #mupdf.fz_fz_new_buffer_from_copied_data(bs),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19208 mupdf.fz_new_buffer_from_copied_data(bs),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19209 mupdf.PdfObj(),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19210 0,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19211 )
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19212 mupdf.pdf_dict_put(ef, PDF_NAME('F'), f)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19213 JM_update_stream(pdf, f, buf, compress)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19214 len_, _ = mupdf.fz_buffer_storage(buf)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19215 mupdf.pdf_dict_put_int(f, PDF_NAME('DL'), len_)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19216 mupdf.pdf_dict_put_int(f, PDF_NAME('Length'), len_)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19217 params = mupdf.pdf_dict_put_dict(f, PDF_NAME('Params'), 4)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19218 mupdf.pdf_dict_put_int(params, PDF_NAME('Size'), len_)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19219 return val
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19220
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19221
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19222 def JM_embedded_clean(pdf):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19223 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19224 perform some cleaning if we have /EmbeddedFiles:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19225 (1) remove any /Limits if /Names exists
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19226 (2) remove any empty /Collection
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19227 (3) set /PageMode/UseAttachments
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19228 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19229 root = mupdf.pdf_dict_get( mupdf.pdf_trailer( pdf), PDF_NAME('Root'))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19230
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19231 # remove any empty /Collection entry
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19232 coll = mupdf.pdf_dict_get(root, PDF_NAME('Collection'))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19233 if coll.m_internal and mupdf.pdf_dict_len(coll) == 0:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19234 mupdf.pdf_dict_del(root, PDF_NAME('Collection'))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19235
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19236 efiles = mupdf.pdf_dict_getl(
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19237 root,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19238 PDF_NAME('Names'),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19239 PDF_NAME('EmbeddedFiles'),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19240 PDF_NAME('Names'),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19241 )
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19242 if efiles.m_internal:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19243 mupdf.pdf_dict_put_name(root, PDF_NAME('PageMode'), "UseAttachments")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19244
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19245
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19246 def JM_EscapeStrFromBuffer(buff):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19247 if not buff.m_internal:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19248 return ''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19249 s = mupdf.fz_buffer_extract_copy(buff)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19250 val = PyUnicode_DecodeRawUnicodeEscape(s, errors='replace')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19251 return val
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19252
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19253
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19254 def JM_ensure_identity(pdf):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19255 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19256 Store ID in PDF trailer
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19257 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19258 id_ = mupdf.pdf_dict_get( mupdf.pdf_trailer(pdf), PDF_NAME('ID'))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19259 if not id_.m_internal:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19260 rnd0 = mupdf.fz_memrnd2(16)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19261 # Need to convert raw bytes into a str to send to
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19262 # mupdf.pdf_new_string(). chr() seems to work for this.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19263 rnd = ''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19264 for i in rnd0:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19265 rnd += chr(i)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19266 id_ = mupdf.pdf_dict_put_array( mupdf.pdf_trailer( pdf), PDF_NAME('ID'), 2)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19267 mupdf.pdf_array_push( id_, mupdf.pdf_new_string( rnd, len(rnd)))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19268 mupdf.pdf_array_push( id_, mupdf.pdf_new_string( rnd, len(rnd)))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19269
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19270 def JM_ensure_ocproperties(pdf):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19271 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19272 Ensure OCProperties, return /OCProperties key
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19273 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19274 ocp = mupdf.pdf_dict_get(mupdf.pdf_dict_get(mupdf.pdf_trailer(pdf), PDF_NAME('Root')), PDF_NAME('OCProperties'))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19275 if ocp.m_internal:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19276 return ocp
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19277 root = mupdf.pdf_dict_get(mupdf.pdf_trailer(pdf), PDF_NAME('Root'))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19278 ocp = mupdf.pdf_dict_put_dict(root, PDF_NAME('OCProperties'), 2)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19279 mupdf.pdf_dict_put_array(ocp, PDF_NAME('OCGs'), 0)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19280 D = mupdf.pdf_dict_put_dict(ocp, PDF_NAME('D'), 5)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19281 mupdf.pdf_dict_put_array(D, PDF_NAME('ON'), 0)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19282 mupdf.pdf_dict_put_array(D, PDF_NAME('OFF'), 0)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19283 mupdf.pdf_dict_put_array(D, PDF_NAME('Order'), 0)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19284 mupdf.pdf_dict_put_array(D, PDF_NAME('RBGroups'), 0)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19285 return ocp
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19286
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19287
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19288 def JM_expand_fname(name):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19289 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19290 Make /DA string of annotation
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19291 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19292 if not name: return "Helv"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19293 if name.startswith("Co"): return "Cour"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19294 if name.startswith("co"): return "Cour"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19295 if name.startswith("Ti"): return "TiRo"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19296 if name.startswith("ti"): return "TiRo"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19297 if name.startswith("Sy"): return "Symb"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19298 if name.startswith("sy"): return "Symb"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19299 if name.startswith("Za"): return "ZaDb"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19300 if name.startswith("za"): return "ZaDb"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19301 return "Helv"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19302
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19303
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19304 def JM_field_type_text(wtype):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19305 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19306 String from widget type
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19307 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19308 if wtype == mupdf.PDF_WIDGET_TYPE_BUTTON:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19309 return "Button"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19310 if wtype == mupdf.PDF_WIDGET_TYPE_CHECKBOX:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19311 return "CheckBox"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19312 if wtype == mupdf.PDF_WIDGET_TYPE_RADIOBUTTON:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19313 return "RadioButton"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19314 if wtype == mupdf.PDF_WIDGET_TYPE_TEXT:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19315 return "Text"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19316 if wtype == mupdf.PDF_WIDGET_TYPE_LISTBOX:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19317 return "ListBox"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19318 if wtype == mupdf.PDF_WIDGET_TYPE_COMBOBOX:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19319 return "ComboBox"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19320 if wtype == mupdf.PDF_WIDGET_TYPE_SIGNATURE:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19321 return "Signature"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19322 return "unknown"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19323
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19324
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19325 def JM_fill_pixmap_rect_with_color(dest, col, b):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19326 assert isinstance(dest, mupdf.FzPixmap)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19327 # fill a rect with a color tuple
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19328 b = mupdf.fz_intersect_irect(b, mupdf.fz_pixmap_bbox( dest))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19329 w = b.x1 - b.x0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19330 y = b.y1 - b.y0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19331 if w <= 0 or y <= 0:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19332 return 0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19333 destspan = dest.stride()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19334 destp = destspan * (b.y0 - dest.y()) + dest.n() * (b.x0 - dest.x())
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19335 while 1:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19336 s = destp
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19337 for x in range(w):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19338 for i in range( dest.n()):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19339 mupdf.fz_samples_set(dest, s, col[i])
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19340 s += 1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19341 destp += destspan
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19342 y -= 1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19343 if y == 0:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19344 break
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19345 return 1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19346
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19347
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19348 def JM_find_annot_irt(annot):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19349 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19350 Return the first annotation whose /IRT key ("In Response To") points to
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19351 annot. Used to remove the response chain of a given annotation.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19352 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19353 assert isinstance(annot, mupdf.PdfAnnot)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19354 irt_annot = None # returning this
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19355 annot_obj = mupdf.pdf_annot_obj(annot)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19356 found = 0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19357 # loop thru MuPDF's internal annots array
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19358 page = _pdf_annot_page(annot)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19359 irt_annot = mupdf.pdf_first_annot(page)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19360 while 1:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19361 assert isinstance(irt_annot, mupdf.PdfAnnot)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19362 if not irt_annot.m_internal:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19363 break
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19364 irt_annot_obj = mupdf.pdf_annot_obj(irt_annot)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19365 o = mupdf.pdf_dict_gets(irt_annot_obj, 'IRT')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19366 if o.m_internal:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19367 if not mupdf.pdf_objcmp(o, annot_obj):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19368 found = 1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19369 break
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19370 irt_annot = mupdf.pdf_next_annot(irt_annot)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19371 if found:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19372 return irt_annot
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19373
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19374
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19375 def JM_font_ascender(font):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19376 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19377 need own versions of ascender / descender
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19378 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19379 assert isinstance(font, mupdf.FzFont)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19380 if _globals.skip_quad_corrections:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19381 return 0.8
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19382 return mupdf.fz_font_ascender(font)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19383
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19384
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19385 def JM_font_descender(font):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19386 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19387 need own versions of ascender / descender
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19388 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19389 assert isinstance(font, mupdf.FzFont)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19390 if _globals.skip_quad_corrections:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19391 return -0.2
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19392 ret = mupdf.fz_font_descender(font)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19393 return ret
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19394
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19395
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19396 def JM_is_word_delimiter(ch, delimiters):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19397 """Check if ch is an extra word delimiting character.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19398 """
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19399 if (0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19400 or ch <= 32
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19401 or ch == 160
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19402 or 0x202a <= ch <= 0x202e
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19403 ):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19404 # covers any whitespace plus unicodes that switch between
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19405 # right-to-left and left-to-right languages
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19406 return True
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19407 if not delimiters: # no extra delimiters provided
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19408 return False
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19409 char = chr(ch)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19410 for d in delimiters:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19411 if d == char:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19412 return True
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19413 return False
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19414
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19415
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19416 def JM_is_rtl_char(ch):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19417 if ch < 0x590 or ch > 0x900:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19418 return False
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19419 return True
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19420
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19421
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19422 def JM_font_name(font):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19423 assert isinstance(font, mupdf.FzFont)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19424 name = mupdf.fz_font_name(font)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19425 s = name.find('+')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19426 if _globals.subset_fontnames or s == -1 or s != 6:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19427 return name
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19428 return name[s + 1:]
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19429
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19430
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19431 def JM_gather_fonts(pdf, dict_, fontlist, stream_xref):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19432 rc = 1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19433 n = mupdf.pdf_dict_len(dict_)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19434 for i in range(n):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19435
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19436 refname = mupdf.pdf_dict_get_key(dict_, i)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19437 fontdict = mupdf.pdf_dict_get_val(dict_, i)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19438 if not mupdf.pdf_is_dict(fontdict):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19439 mupdf.fz_warn( f"'{mupdf.pdf_to_name(refname)}' is no font dict ({mupdf.pdf_to_num(fontdict)} 0 R)")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19440 continue
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19441
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19442 subtype = mupdf.pdf_dict_get(fontdict, mupdf.PDF_ENUM_NAME_Subtype)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19443 basefont = mupdf.pdf_dict_get(fontdict, mupdf.PDF_ENUM_NAME_BaseFont)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19444 if not basefont.m_internal or mupdf.pdf_is_null(basefont):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19445 name = mupdf.pdf_dict_get(fontdict, mupdf.PDF_ENUM_NAME_Name)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19446 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19447 name = basefont
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19448 encoding = mupdf.pdf_dict_get(fontdict, mupdf.PDF_ENUM_NAME_Encoding)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19449 if mupdf.pdf_is_dict(encoding):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19450 encoding = mupdf.pdf_dict_get(encoding, mupdf.PDF_ENUM_NAME_BaseEncoding)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19451 xref = mupdf.pdf_to_num(fontdict)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19452 ext = "n/a"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19453 if xref:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19454 ext = JM_get_fontextension(pdf, xref)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19455 entry = (
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19456 xref,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19457 ext,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19458 mupdf.pdf_to_name(subtype),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19459 JM_EscapeStrFromStr(mupdf.pdf_to_name(name)),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19460 mupdf.pdf_to_name(refname),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19461 mupdf.pdf_to_name(encoding),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19462 stream_xref,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19463 )
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19464 fontlist.append(entry)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19465 return rc
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19466
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19467
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19468 def JM_gather_forms(doc, dict_: mupdf.PdfObj, imagelist, stream_xref: int):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19469 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19470 Store info of a /Form xobject in Python list
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19471 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19472 assert isinstance(doc, mupdf.PdfDocument)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19473 rc = 1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19474 n = mupdf.pdf_dict_len(dict_)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19475 for i in range(n):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19476 refname = mupdf.pdf_dict_get_key( dict_, i)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19477 imagedict = mupdf.pdf_dict_get_val(dict_, i)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19478 if not mupdf.pdf_is_dict(imagedict):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19479 mupdf.fz_warn( f"'{mupdf.pdf_to_name(refname)}' is no form dict ({mupdf.pdf_to_num(imagedict)} 0 R)")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19480 continue
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19481
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19482 type_ = mupdf.pdf_dict_get(imagedict, PDF_NAME('Subtype'))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19483 if not mupdf.pdf_name_eq(type_, PDF_NAME('Form')):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19484 continue
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19485
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19486 o = mupdf.pdf_dict_get(imagedict, PDF_NAME('BBox'))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19487 m = mupdf.pdf_dict_get(imagedict, PDF_NAME('Matrix'))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19488 if m.m_internal:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19489 mat = mupdf.pdf_to_matrix(m)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19490 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19491 mat = mupdf.FzMatrix()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19492 if o.m_internal:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19493 bbox = mupdf.fz_transform_rect( mupdf.pdf_to_rect(o), mat)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19494 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19495 bbox = mupdf.FzRect(mupdf.FzRect.Fixed_INFINITE)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19496 xref = mupdf.pdf_to_num(imagedict)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19497
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19498 entry = (
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19499 xref,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19500 mupdf.pdf_to_name( refname),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19501 stream_xref,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19502 JM_py_from_rect(bbox),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19503 )
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19504 imagelist.append(entry)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19505 return rc
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19506
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19507
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19508 def JM_gather_images(doc: mupdf.PdfDocument, dict_: mupdf.PdfObj, imagelist, stream_xref: int):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19509 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19510 Store info of an image in Python list
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19511 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19512 rc = 1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19513 n = mupdf.pdf_dict_len( dict_)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19514 for i in range(n):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19515 refname = mupdf.pdf_dict_get_key(dict_, i)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19516 imagedict = mupdf.pdf_dict_get_val(dict_, i)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19517 if not mupdf.pdf_is_dict(imagedict):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19518 mupdf.fz_warn(f"'{mupdf.pdf_to_name(refname)}' is no image dict ({mupdf.pdf_to_num(imagedict)} 0 R)")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19519 continue
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19520
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19521 type_ = mupdf.pdf_dict_get(imagedict, PDF_NAME('Subtype'))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19522 if not mupdf.pdf_name_eq(type_, PDF_NAME('Image')):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19523 continue
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19524
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19525 xref = mupdf.pdf_to_num(imagedict)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19526 gen = 0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19527 smask = mupdf.pdf_dict_geta(imagedict, PDF_NAME('SMask'), PDF_NAME('Mask'))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19528 if smask.m_internal:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19529 gen = mupdf.pdf_to_num(smask)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19530
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19531 filter_ = mupdf.pdf_dict_geta(imagedict, PDF_NAME('Filter'), PDF_NAME('F'))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19532 if mupdf.pdf_is_array(filter_):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19533 filter_ = mupdf.pdf_array_get(filter_, 0)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19534
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19535 altcs = mupdf.PdfObj(0)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19536 cs = mupdf.pdf_dict_geta(imagedict, PDF_NAME('ColorSpace'), PDF_NAME('CS'))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19537 if mupdf.pdf_is_array(cs):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19538 cses = cs
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19539 cs = mupdf.pdf_array_get(cses, 0)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19540 if (mupdf.pdf_name_eq(cs, PDF_NAME('DeviceN'))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19541 or mupdf.pdf_name_eq(cs, PDF_NAME('Separation'))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19542 ):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19543 altcs = mupdf.pdf_array_get(cses, 2)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19544 if mupdf.pdf_is_array(altcs):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19545 altcs = mupdf.pdf_array_get(altcs, 0)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19546 width = mupdf.pdf_dict_geta(imagedict, PDF_NAME('Width'), PDF_NAME('W'))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19547 height = mupdf.pdf_dict_geta(imagedict, PDF_NAME('Height'), PDF_NAME('H'))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19548 bpc = mupdf.pdf_dict_geta(imagedict, PDF_NAME('BitsPerComponent'), PDF_NAME('BPC'))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19549
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19550 entry = (
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19551 xref,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19552 gen,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19553 mupdf.pdf_to_int(width),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19554 mupdf.pdf_to_int(height),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19555 mupdf.pdf_to_int(bpc),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19556 JM_EscapeStrFromStr(mupdf.pdf_to_name(cs)),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19557 JM_EscapeStrFromStr(mupdf.pdf_to_name(altcs)),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19558 JM_EscapeStrFromStr(mupdf.pdf_to_name(refname)),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19559 JM_EscapeStrFromStr(mupdf.pdf_to_name(filter_)),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19560 stream_xref,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19561 )
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19562 imagelist.append(entry)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19563 return rc
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19564
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19565
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19566 def JM_get_annot_by_xref(page, xref):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19567 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19568 retrieve annot by its xref
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19569 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19570 assert isinstance(page, mupdf.PdfPage)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19571 found = 0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19572 # loop thru MuPDF's internal annots array
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19573 annot = mupdf.pdf_first_annot(page)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19574 while 1:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19575 if not annot.m_internal:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19576 break
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19577 if xref == mupdf.pdf_to_num(mupdf.pdf_annot_obj(annot)):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19578 found = 1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19579 break
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19580 annot = mupdf.pdf_next_annot( annot)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19581 if not found:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19582 raise Exception("xref %d is not an annot of this page" % xref)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19583 return annot
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19584
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19585
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19586 def JM_get_annot_by_name(page, name):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19587 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19588 retrieve annot by name (/NM key)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19589 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19590 assert isinstance(page, mupdf.PdfPage)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19591 if not name:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19592 return
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19593 found = 0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19594 # loop thru MuPDF's internal annots and widget arrays
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19595 annot = mupdf.pdf_first_annot(page)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19596 while 1:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19597 if not annot.m_internal:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19598 break
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19599
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19600 response, len_ = mupdf.pdf_to_string(mupdf.pdf_dict_gets(mupdf.pdf_annot_obj(annot), "NM"))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19601 if name == response:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19602 found = 1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19603 break
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19604 annot = mupdf.pdf_next_annot(annot)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19605 if not found:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19606 raise Exception("'%s' is not an annot of this page" % name)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19607 return annot
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19608
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19609
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19610 def JM_get_annot_id_list(page):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19611 names = []
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19612 annots = mupdf.pdf_dict_get( page.obj(), mupdf.PDF_ENUM_NAME_Annots)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19613 if not annots.m_internal:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19614 return names
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19615 for i in range( mupdf.pdf_array_len(annots)):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19616 annot_obj = mupdf.pdf_array_get(annots, i)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19617 name = mupdf.pdf_dict_gets(annot_obj, "NM")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19618 if name.m_internal:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19619 names.append(
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19620 mupdf.pdf_to_text_string(name)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19621 )
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19622 return names
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19623
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19624 def JM_get_annot_xref_list( page_obj):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19625 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19626 return the xrefs and /NM ids of a page's annots, links and fields
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19627 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19628 if g_use_extra:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19629 names = extra.JM_get_annot_xref_list( page_obj)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19630 return names
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19631
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19632 names = []
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19633 annots = mupdf.pdf_dict_get( page_obj, PDF_NAME('Annots'))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19634 n = mupdf.pdf_array_len( annots)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19635 for i in range( n):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19636 annot_obj = mupdf.pdf_array_get( annots, i)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19637 xref = mupdf.pdf_to_num( annot_obj)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19638 subtype = mupdf.pdf_dict_get( annot_obj, PDF_NAME('Subtype'))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19639 if not subtype.m_internal:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19640 continue # subtype is required
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19641 type_ = mupdf.pdf_annot_type_from_string( mupdf.pdf_to_name( subtype))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19642 if type_ == mupdf.PDF_ANNOT_UNKNOWN:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19643 continue # only accept valid annot types
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19644 id_ = mupdf.pdf_dict_gets( annot_obj, "NM")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19645 names.append( (xref, type_, mupdf.pdf_to_text_string( id_)))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19646 return names
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19647
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19648
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19649 def JM_get_annot_xref_list2(page):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19650 page = page._pdf_page(required=False)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19651 if not page.m_internal:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19652 return list()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19653 return JM_get_annot_xref_list( page.obj())
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19654
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19655
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19656 def JM_get_border_style(style):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19657 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19658 return pdf_obj "border style" from Python str
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19659 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19660 val = mupdf.PDF_ENUM_NAME_S
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19661 if style is None:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19662 return val
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19663 s = style
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19664 if s.startswith("b") or s.startswith("B"): val = mupdf.PDF_ENUM_NAME_B
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19665 elif s.startswith("d") or s.startswith("D"): val = mupdf.PDF_ENUM_NAME_D
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19666 elif s.startswith("i") or s.startswith("I"): val = mupdf.PDF_ENUM_NAME_I
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19667 elif s.startswith("u") or s.startswith("U"): val = mupdf.PDF_ENUM_NAME_U
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19668 elif s.startswith("s") or s.startswith("S"): val = mupdf.PDF_ENUM_NAME_S
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19669 return val
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19670
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19671
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19672 def JM_get_font(
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19673 fontname,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19674 fontfile,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19675 fontbuffer,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19676 script,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19677 lang,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19678 ordering,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19679 is_bold,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19680 is_italic,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19681 is_serif,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19682 embed,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19683 ):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19684 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19685 return a fz_font from a number of parameters
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19686 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19687 def fertig(font):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19688 if not font.m_internal:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19689 raise RuntimeError(MSG_FONT_FAILED)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19690 # if font allows this, set embedding
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19691 if not font.m_internal.flags.never_embed:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19692 mupdf.fz_set_font_embedding(font, embed)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19693 return font
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19694
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19695 index = 0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19696 font = None
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19697 if fontfile:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19698 #goto have_file;
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19699 font = mupdf.fz_new_font_from_file( None, fontfile, index, 0)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19700 return fertig(font)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19701
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19702 if fontbuffer:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19703 #goto have_buffer;
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19704 res = JM_BufferFromBytes(fontbuffer)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19705 font = mupdf.fz_new_font_from_buffer( None, res, index, 0)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19706 return fertig(font)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19707
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19708 if ordering > -1:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19709 # goto have_cjk;
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19710 font = mupdf.fz_new_cjk_font(ordering)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19711 return fertig(font)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19712
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19713 if fontname:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19714 # goto have_base14;
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19715 # Base-14 or a MuPDF builtin font
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19716 font = mupdf.fz_new_base14_font(fontname)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19717 if font.m_internal:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19718 return fertig(font)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19719 font = mupdf.fz_new_builtin_font(fontname, is_bold, is_italic)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19720 return fertig(font)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19721
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19722 # Check for NOTO font
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19723 #have_noto:;
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19724 data, size, index = mupdf.fz_lookup_noto_font( script, lang)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19725 font = None
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19726 if data:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19727 font = mupdf.fz_new_font_from_memory( None, data, size, index, 0)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19728 if font.m_internal:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19729 return fertig(font)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19730 font = mupdf.fz_load_fallback_font( script, lang, is_serif, is_bold, is_italic)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19731 return fertig(font)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19732
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19733
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19734 def JM_get_fontbuffer(doc, xref):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19735 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19736 Return the contents of a font file, identified by xref
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19737 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19738 if xref < 1:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19739 return
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19740 o = mupdf.pdf_load_object(doc, xref)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19741 desft = mupdf.pdf_dict_get(o, PDF_NAME('DescendantFonts'))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19742 if desft.m_internal:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19743 obj = mupdf.pdf_resolve_indirect(mupdf.pdf_array_get(desft, 0))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19744 obj = mupdf.pdf_dict_get(obj, PDF_NAME('FontDescriptor'))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19745 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19746 obj = mupdf.pdf_dict_get(o, PDF_NAME('FontDescriptor'))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19747
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19748 if not obj.m_internal:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19749 message(f"invalid font - FontDescriptor missing")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19750 return
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19751
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19752 o = obj
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19753
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19754 stream = None
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19755
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19756 obj = mupdf.pdf_dict_get(o, PDF_NAME('FontFile'))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19757 if obj.m_internal:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19758 stream = obj # ext = "pfa"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19759
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19760 obj = mupdf.pdf_dict_get(o, PDF_NAME('FontFile2'))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19761 if obj.m_internal:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19762 stream = obj # ext = "ttf"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19763
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19764 obj = mupdf.pdf_dict_get(o, PDF_NAME('FontFile3'))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19765 if obj.m_internal:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19766 stream = obj
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19767
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19768 obj = mupdf.pdf_dict_get(obj, PDF_NAME('Subtype'))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19769 if obj.m_internal and not mupdf.pdf_is_name(obj):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19770 message("invalid font descriptor subtype")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19771 return
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19772
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19773 if mupdf.pdf_name_eq(obj, PDF_NAME('Type1C')):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19774 pass # Prev code did: ext = "cff", but this has no effect.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19775 elif mupdf.pdf_name_eq(obj, PDF_NAME('CIDFontType0C')):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19776 pass # Prev code did: ext = "cid", but this has no effect.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19777 elif mupdf.pdf_name_eq(obj, PDF_NAME('OpenType')):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19778 pass # Prev code did: ext = "otf", but this has no effect. */
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19779 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19780 message('warning: unhandled font type {pdf_to_name(ctx, obj)!r}')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19781
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19782 if not stream:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19783 message('warning: unhandled font type')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19784 return
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19785
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19786 return mupdf.pdf_load_stream(stream)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19787
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19788
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19789 def JM_get_resource_properties(ref):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19790 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19791 Return the items of Resources/Properties (used for Marked Content)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19792 Argument may be e.g. a page object or a Form XObject
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19793 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19794 properties = mupdf.pdf_dict_getl(ref, PDF_NAME('Resources'), PDF_NAME('Properties'))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19795 if not properties.m_internal:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19796 return ()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19797 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19798 n = mupdf.pdf_dict_len(properties)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19799 if n < 1:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19800 return ()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19801 rc = []
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19802 for i in range(n):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19803 key = mupdf.pdf_dict_get_key(properties, i)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19804 val = mupdf.pdf_dict_get_val(properties, i)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19805 c = mupdf.pdf_to_name(key)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19806 xref = mupdf.pdf_to_num(val)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19807 rc.append((c, xref))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19808 return rc
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19809
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19810
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19811 def JM_get_widget_by_xref( page, xref):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19812 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19813 retrieve widget by its xref
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19814 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19815 found = False
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19816 annot = mupdf.pdf_first_widget( page)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19817 while annot.m_internal:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19818 annot_obj = mupdf.pdf_annot_obj( annot)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19819 if xref == mupdf.pdf_to_num( annot_obj):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19820 found = True
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19821 break
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19822 annot = mupdf.pdf_next_widget( annot)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19823 if not found:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19824 raise Exception( f"xref {xref} is not a widget of this page")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19825 return Annot( annot)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19826
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19827
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19828 def JM_get_widget_properties(annot, Widget):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19829 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19830 Populate a Python Widget object with the values from a PDF form field.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19831 Called by "Page.first_widget" and "Widget.next".
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19832 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19833 #log( '{type(annot)=}')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19834 annot_obj = mupdf.pdf_annot_obj(annot.this)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19835 #log( 'Have called mupdf.pdf_annot_obj()')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19836 page = _pdf_annot_page(annot.this)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19837 pdf = page.doc()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19838 tw = annot
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19839
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19840 def SETATTR(key, value):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19841 setattr(Widget, key, value)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19842
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19843 def SETATTR_DROP(mod, key, value):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19844 # Original C code for this function deletes if PyObject* is NULL. We
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19845 # don't have a representation for that in Python - e.g. None is not
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19846 # represented by NULL.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19847 setattr(mod, key, value)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19848
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19849 #log( '=== + mupdf.pdf_widget_type(tw)')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19850 field_type = mupdf.pdf_widget_type(tw.this)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19851 #log( '=== - mupdf.pdf_widget_type(tw)')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19852 Widget.field_type = field_type
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19853 if field_type == mupdf.PDF_WIDGET_TYPE_SIGNATURE:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19854 if mupdf.pdf_signature_is_signed(pdf, annot_obj):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19855 SETATTR("is_signed", True)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19856 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19857 SETATTR("is_signed",False)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19858 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19859 SETATTR("is_signed", None)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19860 SETATTR_DROP(Widget, "border_style", JM_UnicodeFromStr(mupdf.pdf_field_border_style(annot_obj)))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19861 SETATTR_DROP(Widget, "field_type_string", JM_UnicodeFromStr(JM_field_type_text(field_type)))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19862
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19863 field_name = mupdf.pdf_load_field_name(annot_obj)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19864 SETATTR_DROP(Widget, "field_name", field_name)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19865
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19866 def pdf_dict_get_inheritable_nonempty_label(node, key):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19867 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19868 This is a modified version of MuPDF's pdf_dict_get_inheritable(), with
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19869 some changes:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19870 * Returns string from pdf_to_text_string() or None if not found.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19871 * Recurses to parent if current node exists but with empty string
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19872 value.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19873 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19874 slow = node
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19875 halfbeat = 11 # Don't start moving slow pointer for a while.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19876 while 1:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19877 if not node.m_internal:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19878 return
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19879 val = mupdf.pdf_dict_get(node, key)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19880 if val.m_internal:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19881 label = mupdf.pdf_to_text_string(val)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19882 if label:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19883 return label
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19884 node = mupdf.pdf_dict_get(node, PDF_NAME('Parent'))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19885 if node.m_internal == slow.m_internal:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19886 raise Exception("cycle in resources")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19887 halfbeat -= 1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19888 if halfbeat == 0:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19889 slow = mupdf.pdf_dict_get(slow, PDF_NAME('Parent'))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19890 halfbeat = 2
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19891
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19892 # In order to address #3950, we use our modified pdf_dict_get_inheritable()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19893 # to ignore empty-string child values.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19894 label = pdf_dict_get_inheritable_nonempty_label(annot_obj, PDF_NAME('TU'))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19895 if label is not None:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19896 SETATTR_DROP(Widget, "field_label", label)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19897
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19898 fvalue = None
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19899 if field_type == mupdf.PDF_WIDGET_TYPE_RADIOBUTTON:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19900 obj = mupdf.pdf_dict_get( annot_obj, PDF_NAME('Parent')) # owning RB group
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19901 if obj.m_internal:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19902 SETATTR_DROP(Widget, "rb_parent", mupdf.pdf_to_num( obj))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19903 obj = mupdf.pdf_dict_get(annot_obj, PDF_NAME('AS'))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19904 if obj.m_internal:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19905 fvalue = mupdf.pdf_to_name(obj)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19906 if not fvalue:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19907 fvalue = mupdf.pdf_field_value(annot_obj)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19908 SETATTR_DROP(Widget, "field_value", JM_UnicodeFromStr(fvalue))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19909
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19910 SETATTR_DROP(Widget, "field_display", mupdf.pdf_field_display(annot_obj))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19911
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19912 border_width = mupdf.pdf_to_real(mupdf.pdf_dict_getl(annot_obj, PDF_NAME('BS'), PDF_NAME('W')))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19913 if border_width == 0:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19914 border_width = 1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19915 SETATTR_DROP(Widget, "border_width", border_width)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19916
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19917 obj = mupdf.pdf_dict_getl(annot_obj, PDF_NAME('BS'), PDF_NAME('D'))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19918 if mupdf.pdf_is_array(obj):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19919 n = mupdf.pdf_array_len(obj)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19920 d = [0] * n
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19921 for i in range(n):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19922 d[i] = mupdf.pdf_to_int(mupdf.pdf_array_get(obj, i))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19923 SETATTR_DROP(Widget, "border_dashes", d)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19924
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19925 SETATTR_DROP(Widget, "text_maxlen", mupdf.pdf_text_widget_max_len(tw.this))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19926
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19927 SETATTR_DROP(Widget, "text_format", mupdf.pdf_text_widget_format(tw.this))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19928
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19929 obj = mupdf.pdf_dict_getl(annot_obj, PDF_NAME('MK'), PDF_NAME('BG'))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19930 if mupdf.pdf_is_array(obj):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19931 n = mupdf.pdf_array_len(obj)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19932 col = [0] * n
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19933 for i in range(n):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19934 col[i] = mupdf.pdf_to_real(mupdf.pdf_array_get(obj, i))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19935 SETATTR_DROP(Widget, "fill_color", col)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19936
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19937 obj = mupdf.pdf_dict_getl(annot_obj, PDF_NAME('MK'), PDF_NAME('BC'))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19938 if mupdf.pdf_is_array(obj):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19939 n = mupdf.pdf_array_len(obj)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19940 col = [0] * n
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19941 for i in range(n):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19942 col[i] = mupdf.pdf_to_real(mupdf.pdf_array_get(obj, i))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19943 SETATTR_DROP(Widget, "border_color", col)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19944
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19945 SETATTR_DROP(Widget, "choice_values", JM_choice_options(annot))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19946
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19947 da = mupdf.pdf_to_text_string(mupdf.pdf_dict_get_inheritable(annot_obj, PDF_NAME('DA')))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19948 SETATTR_DROP(Widget, "_text_da", JM_UnicodeFromStr(da))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19949
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19950 obj = mupdf.pdf_dict_getl(annot_obj, PDF_NAME('MK'), PDF_NAME('CA'))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19951 if obj.m_internal:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19952 SETATTR_DROP(Widget, "button_caption", JM_UnicodeFromStr(mupdf.pdf_to_text_string(obj)))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19953
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19954 SETATTR_DROP(Widget, "field_flags", mupdf.pdf_field_flags(annot_obj))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19955
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19956 # call Py method to reconstruct text color, font name, size
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19957 Widget._parse_da()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19958
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19959 # extract JavaScript action texts
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19960 s = mupdf.pdf_dict_get(annot_obj, PDF_NAME('A'))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19961 ss = JM_get_script(s)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19962 SETATTR_DROP(Widget, "script", ss)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19963
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19964 SETATTR_DROP(Widget, "script_stroke",
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19965 JM_get_script(mupdf.pdf_dict_getl(annot_obj, PDF_NAME('AA'), PDF_NAME('K')))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19966 )
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19967
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19968 SETATTR_DROP(Widget, "script_format",
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19969 JM_get_script(mupdf.pdf_dict_getl(annot_obj, PDF_NAME('AA'), PDF_NAME('F')))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19970 )
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19971
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19972 SETATTR_DROP(Widget, "script_change",
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19973 JM_get_script(mupdf.pdf_dict_getl(annot_obj, PDF_NAME('AA'), PDF_NAME('V')))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19974 )
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19975
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19976 SETATTR_DROP(Widget, "script_calc",
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19977 JM_get_script(mupdf.pdf_dict_getl(annot_obj, PDF_NAME('AA'), PDF_NAME('C')))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19978 )
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19979
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19980 SETATTR_DROP(Widget, "script_blur",
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19981 JM_get_script(mupdf.pdf_dict_getl(annot_obj, PDF_NAME('AA'), mupdf.pdf_new_name('Bl')))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19982 )
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19983
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19984 SETATTR_DROP(Widget, "script_focus",
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19985 JM_get_script(mupdf.pdf_dict_getl(annot_obj, PDF_NAME('AA'), mupdf.pdf_new_name('Fo')))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19986 )
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19987
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19988
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19989 def JM_get_fontextension(doc, xref):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19990 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19991 Return the file extension of a font file, identified by xref
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19992 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19993 if xref < 1:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19994 return "n/a"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19995 o = mupdf.pdf_load_object(doc, xref)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19996 desft = mupdf.pdf_dict_get(o, PDF_NAME('DescendantFonts'))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19997 if desft.m_internal:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19998 obj = mupdf.pdf_resolve_indirect(mupdf.pdf_array_get(desft, 0))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19999 obj = mupdf.pdf_dict_get(obj, PDF_NAME('FontDescriptor'))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20000 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20001 obj = mupdf.pdf_dict_get(o, PDF_NAME('FontDescriptor'))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20002 if not obj.m_internal:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20003 return "n/a" # this is a base-14 font
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20004
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20005 o = obj # we have the FontDescriptor
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20006
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20007 obj = mupdf.pdf_dict_get(o, PDF_NAME('FontFile'))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20008 if obj.m_internal:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20009 return "pfa"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20010
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20011 obj = mupdf.pdf_dict_get(o, PDF_NAME('FontFile2'))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20012 if obj.m_internal:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20013 return "ttf"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20014
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20015 obj = mupdf.pdf_dict_get(o, PDF_NAME('FontFile3'))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20016 if obj.m_internal:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20017 obj = mupdf.pdf_dict_get(obj, PDF_NAME('Subtype'))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20018 if obj.m_internal and not mupdf.pdf_is_name(obj):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20019 message("invalid font descriptor subtype")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20020 return "n/a"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20021 if mupdf.pdf_name_eq(obj, PDF_NAME('Type1C')):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20022 return "cff"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20023 elif mupdf.pdf_name_eq(obj, PDF_NAME('CIDFontType0C')):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20024 return "cid"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20025 elif mupdf.pdf_name_eq(obj, PDF_NAME('OpenType')):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20026 return "otf"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20027 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20028 message("unhandled font type '%s'", mupdf.pdf_to_name(obj))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20029
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20030 return "n/a"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20031
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20032
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20033 def JM_get_ocg_arrays_imp(arr):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20034 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20035 Get OCG arrays from OC configuration
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20036 Returns dict {"basestate":name, "on":list, "off":list, "rbg":list, "locked":list}
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20037 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20038 list_ = list()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20039 if mupdf.pdf_is_array( arr):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20040 n = mupdf.pdf_array_len( arr)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20041 for i in range(n):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20042 obj = mupdf.pdf_array_get( arr, i)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20043 item = mupdf.pdf_to_num( obj)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20044 if item not in list_:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20045 list_.append(item)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20046 return list_
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20047
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20048
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20049 def JM_get_ocg_arrays(conf):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20050
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20051 rc = dict()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20052 arr = mupdf.pdf_dict_get( conf, PDF_NAME('ON'))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20053 list_ = JM_get_ocg_arrays_imp( arr)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20054 if list_:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20055 rc["on"] = list_
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20056 arr = mupdf.pdf_dict_get( conf, PDF_NAME('OFF'))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20057 list_ = JM_get_ocg_arrays_imp( arr)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20058 if list_:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20059 rc["off"] = list_
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20060 arr = mupdf.pdf_dict_get( conf, PDF_NAME('Locked'))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20061 list_ = JM_get_ocg_arrays_imp( arr)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20062 if list_:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20063 rc['locked'] = list_
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20064 list_ = list()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20065 arr = mupdf.pdf_dict_get( conf, PDF_NAME('RBGroups'))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20066 if mupdf.pdf_is_array( arr):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20067 n = mupdf.pdf_array_len( arr)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20068 for i in range(n):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20069 obj = mupdf.pdf_array_get( arr, i)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20070 list1 = JM_get_ocg_arrays_imp( obj)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20071 list_.append(list1)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20072 if list_:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20073 rc["rbgroups"] = list_
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20074 obj = mupdf.pdf_dict_get( conf, PDF_NAME('BaseState'))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20075
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20076 if obj.m_internal:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20077 state = mupdf.pdf_to_name( obj)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20078 rc["basestate"] = state
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20079 return rc
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20080
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20081
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20082 def JM_get_page_labels(liste, nums):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20083 n = mupdf.pdf_array_len(nums)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20084 for i in range(0, n, 2):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20085 key = mupdf.pdf_resolve_indirect( mupdf.pdf_array_get(nums, i))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20086 pno = mupdf.pdf_to_int(key)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20087 val = mupdf.pdf_resolve_indirect( mupdf.pdf_array_get(nums, i + 1))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20088 res = JM_object_to_buffer(val, 1, 0)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20089 c = mupdf.fz_buffer_extract(res)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20090 assert isinstance(c, bytes)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20091 c = c.decode('utf-8')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20092 liste.append( (pno, c))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20093
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20094
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20095 def JM_get_script(key):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20096 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20097 JavaScript extractor
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20098 Returns either the script source or None. Parameter is a PDF action
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20099 dictionary, which must have keys /S and /JS. The value of /S must be
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20100 '/JavaScript'. The value of /JS is returned.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20101 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20102 if not key.m_internal:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20103 return
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20104
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20105 j = mupdf.pdf_dict_get(key, PDF_NAME('S'))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20106 jj = mupdf.pdf_to_name(j)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20107 if jj == "JavaScript":
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20108 js = mupdf.pdf_dict_get(key, PDF_NAME('JS'))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20109 if not js.m_internal:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20110 return
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20111 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20112 return
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20113
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20114 if mupdf.pdf_is_string(js):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20115 script = JM_UnicodeFromStr(mupdf.pdf_to_text_string(js))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20116 elif mupdf.pdf_is_stream(js):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20117 res = mupdf.pdf_load_stream(js)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20118 script = JM_EscapeStrFromBuffer(res)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20119 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20120 return
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20121 if script: # do not return an empty script
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20122 return script
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20123 return
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20124
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20125
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20126 def JM_have_operation(pdf):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20127 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20128 Ensure valid journalling state
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20129 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20130 if pdf.m_internal.journal and not mupdf.pdf_undoredo_step(pdf, 0):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20131 return 0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20132 return 1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20133
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20134
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20135 def JM_image_extension(type_):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20136 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20137 return extension for MuPDF image type
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20138 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20139 if type_ == mupdf.FZ_IMAGE_FAX: return "fax"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20140 if type_ == mupdf.FZ_IMAGE_RAW: return "raw"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20141 if type_ == mupdf.FZ_IMAGE_FLATE: return "flate"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20142 if type_ == mupdf.FZ_IMAGE_LZW: return "lzw"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20143 if type_ == mupdf.FZ_IMAGE_RLD: return "rld"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20144 if type_ == mupdf.FZ_IMAGE_BMP: return "bmp"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20145 if type_ == mupdf.FZ_IMAGE_GIF: return "gif"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20146 if type_ == mupdf.FZ_IMAGE_JBIG2: return "jb2"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20147 if type_ == mupdf.FZ_IMAGE_JPEG: return "jpeg"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20148 if type_ == mupdf.FZ_IMAGE_JPX: return "jpx"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20149 if type_ == mupdf.FZ_IMAGE_JXR: return "jxr"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20150 if type_ == mupdf.FZ_IMAGE_PNG: return "png"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20151 if type_ == mupdf.FZ_IMAGE_PNM: return "pnm"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20152 if type_ == mupdf.FZ_IMAGE_TIFF: return "tiff"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20153 #if type_ == mupdf.FZ_IMAGE_PSD: return "psd"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20154 return "n/a"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20155
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20156
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20157 # fixme: need to avoid using a global for this.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20158 g_img_info = None
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20159
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20160
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20161 def JM_image_filter(opaque, ctm, name, image):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20162 assert isinstance(ctm, mupdf.FzMatrix)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20163 r = mupdf.FzRect(mupdf.FzRect.Fixed_UNIT)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20164 q = mupdf.fz_transform_quad( mupdf.fz_quad_from_rect(r), ctm)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20165 q = mupdf.fz_transform_quad( q, g_img_info_matrix)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20166 temp = name, JM_py_from_quad(q)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20167 g_img_info.append(temp)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20168
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20169
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20170 def JM_image_profile( imagedata, keep_image):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20171 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20172 Return basic properties of an image provided as bytes or bytearray
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20173 The function creates an fz_image and optionally returns it.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20174 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20175 if not imagedata:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20176 return None # nothing given
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20177
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20178 len_ = len( imagedata)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20179 if len_ < 8:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20180 message( "bad image data")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20181 return None
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20182 c = imagedata
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20183 #log( 'calling mfz_recognize_image_format with {c!r=}')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20184 type_ = mupdf.fz_recognize_image_format( c)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20185 if type_ == mupdf.FZ_IMAGE_UNKNOWN:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20186 return None
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20187
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20188 if keep_image:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20189 res = mupdf.fz_new_buffer_from_copied_data( c, len_)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20190 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20191 res = mupdf.fz_new_buffer_from_shared_data( c, len_)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20192 image = mupdf.fz_new_image_from_buffer( res)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20193 ctm = mupdf.fz_image_orientation_matrix( image)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20194 xres, yres = mupdf.fz_image_resolution(image)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20195 orientation = mupdf.fz_image_orientation( image)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20196 cs_name = mupdf.fz_colorspace_name( image.colorspace())
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20197 result = dict()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20198 result[ dictkey_width] = image.w()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20199 result[ dictkey_height] = image.h()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20200 result[ "orientation"] = orientation
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20201 result[ dictkey_matrix] = JM_py_from_matrix(ctm)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20202 result[ dictkey_xres] = xres
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20203 result[ dictkey_yres] = yres
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20204 result[ dictkey_colorspace] = image.n()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20205 result[ dictkey_bpc] = image.bpc()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20206 result[ dictkey_ext] = JM_image_extension(type_)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20207 result[ dictkey_cs_name] = cs_name
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20208
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20209 if keep_image:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20210 result[ dictkey_image] = image
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20211 return result
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20212
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20213
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20214 def JM_image_reporter(page):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20215 doc = page.doc()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20216 global g_img_info_matrix
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20217 g_img_info_matrix = mupdf.FzMatrix()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20218 mediabox = mupdf.FzRect()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20219 mupdf.pdf_page_transform(page, mediabox, g_img_info_matrix)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20220
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20221 class SanitizeFilterOptions(mupdf.PdfSanitizeFilterOptions2):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20222 def __init__(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20223 super().__init__()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20224 self.use_virtual_image_filter()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20225 def image_filter(self, ctx, ctm, name, image, scissor):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20226 JM_image_filter(None, mupdf.FzMatrix(ctm), name, image)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20227
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20228 sanitize_filter_options = SanitizeFilterOptions()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20229
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20230 filter_options = _make_PdfFilterOptions(
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20231 instance_forms=1,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20232 ascii=1,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20233 no_update=1,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20234 sanitize=1,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20235 sopts=sanitize_filter_options,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20236 )
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20237
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20238 global g_img_info
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20239 g_img_info = []
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20240
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20241 mupdf.pdf_filter_page_contents( doc, page, filter_options)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20242
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20243 rc = tuple(g_img_info)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20244 g_img_info = []
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20245 return rc
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20246
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20247
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20248 def JM_fitz_config():
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20249 have_TOFU = not hasattr(mupdf, 'TOFU')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20250 have_TOFU_BASE14 = not hasattr(mupdf, 'TOFU_BASE14')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20251 have_TOFU_CJK = not hasattr(mupdf, 'TOFU_CJK')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20252 have_TOFU_CJK_EXT = not hasattr(mupdf, 'TOFU_CJK_EXT')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20253 have_TOFU_CJK_LANG = not hasattr(mupdf, 'TOFU_CJK_LANG')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20254 have_TOFU_EMOJI = not hasattr(mupdf, 'TOFU_EMOJI')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20255 have_TOFU_HISTORIC = not hasattr(mupdf, 'TOFU_HISTORIC')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20256 have_TOFU_SIL = not hasattr(mupdf, 'TOFU_SIL')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20257 have_TOFU_SYMBOL = not hasattr(mupdf, 'TOFU_SYMBOL')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20258
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20259 ret = dict()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20260 ret["base14"] = have_TOFU_BASE14
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20261 ret["cbz"] = bool(mupdf.FZ_ENABLE_CBZ)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20262 ret["epub"] = bool(mupdf.FZ_ENABLE_EPUB)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20263 ret["html"] = bool(mupdf.FZ_ENABLE_HTML)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20264 ret["icc"] = bool(mupdf.FZ_ENABLE_ICC)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20265 ret["img"] = bool(mupdf.FZ_ENABLE_IMG)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20266 ret["jpx"] = bool(mupdf.FZ_ENABLE_JPX)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20267 ret["js"] = bool(mupdf.FZ_ENABLE_JS)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20268 ret["pdf"] = bool(mupdf.FZ_ENABLE_PDF)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20269 ret["plotter-cmyk"] = bool(mupdf.FZ_PLOTTERS_CMYK)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20270 ret["plotter-g"] = bool(mupdf.FZ_PLOTTERS_G)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20271 ret["plotter-n"] = bool(mupdf.FZ_PLOTTERS_N)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20272 ret["plotter-rgb"] = bool(mupdf.FZ_PLOTTERS_RGB)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20273 ret["py-memory"] = bool(JM_MEMORY)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20274 ret["svg"] = bool(mupdf.FZ_ENABLE_SVG)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20275 ret["tofu"] = have_TOFU
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20276 ret["tofu-cjk"] = have_TOFU_CJK
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20277 ret["tofu-cjk-ext"] = have_TOFU_CJK_EXT
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20278 ret["tofu-cjk-lang"] = have_TOFU_CJK_LANG
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20279 ret["tofu-emoji"] = have_TOFU_EMOJI
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20280 ret["tofu-historic"] = have_TOFU_HISTORIC
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20281 ret["tofu-sil"] = have_TOFU_SIL
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20282 ret["tofu-symbol"] = have_TOFU_SYMBOL
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20283 ret["xps"] = bool(mupdf.FZ_ENABLE_XPS)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20284 return ret
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20285
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20286
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20287 def JM_insert_contents(pdf, pageref, newcont, overlay):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20288 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20289 Insert a buffer as a new separate /Contents object of a page.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20290 1. Create a new stream object from buffer 'newcont'
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20291 2. If /Contents already is an array, then just prepend or append this object
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20292 3. Else, create new array and put old content obj and this object into it.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20293 If the page had no /Contents before, just create a 1-item array.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20294 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20295 contents = mupdf.pdf_dict_get(pageref, PDF_NAME('Contents'))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20296 newconts = mupdf.pdf_add_stream(pdf, newcont, mupdf.PdfObj(), 0)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20297 xref = mupdf.pdf_to_num(newconts)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20298 if mupdf.pdf_is_array(contents):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20299 if overlay: # append new object
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20300 mupdf.pdf_array_push(contents, newconts)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20301 else: # prepend new object
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20302 mupdf.pdf_array_insert(contents, newconts, 0)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20303 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20304 carr = mupdf.pdf_new_array(pdf, 5)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20305 if overlay:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20306 if contents.m_internal:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20307 mupdf.pdf_array_push(carr, contents)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20308 mupdf.pdf_array_push(carr, newconts)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20309 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20310 mupdf.pdf_array_push(carr, newconts)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20311 if contents.m_internal:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20312 mupdf.pdf_array_push(carr, contents)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20313 mupdf.pdf_dict_put(pageref, PDF_NAME('Contents'), carr)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20314 return xref
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20315
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20316
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20317 def JM_insert_font(pdf, bfname, fontfile, fontbuffer, set_simple, idx, wmode, serif, encoding, ordering):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20318 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20319 Insert a font in a PDF
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20320 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20321 font = None
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20322 res = None
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20323 data = None
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20324 ixref = 0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20325 index = 0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20326 simple = 0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20327 value=None
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20328 name=None
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20329 subt=None
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20330 exto = None
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20331
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20332 ENSURE_OPERATION(pdf)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20333 # check for CJK font
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20334 if ordering > -1:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20335 data, size, index = mupdf.fz_lookup_cjk_font(ordering)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20336 if data:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20337 font = mupdf.fz_new_font_from_memory(None, data, size, index, 0)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20338 font_obj = mupdf.pdf_add_cjk_font(pdf, font, ordering, wmode, serif)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20339 exto = "n/a"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20340 simple = 0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20341 #goto weiter;
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20342 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20343
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20344 # check for PDF Base-14 font
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20345 if bfname:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20346 data, size = mupdf.fz_lookup_base14_font(bfname)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20347 if data:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20348 font = mupdf.fz_new_font_from_memory(bfname, data, size, 0, 0)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20349 font_obj = mupdf.pdf_add_simple_font(pdf, font, encoding)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20350 exto = "n/a"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20351 simple = 1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20352 #goto weiter;
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20353
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20354 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20355 if fontfile:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20356 font = mupdf.fz_new_font_from_file(None, fontfile, idx, 0)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20357 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20358 res = JM_BufferFromBytes(fontbuffer)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20359 if not res.m_internal:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20360 RAISEPY(MSG_FILE_OR_BUFFER, PyExc_ValueError)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20361 font = mupdf.fz_new_font_from_buffer(None, res, idx, 0)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20362
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20363 if not set_simple:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20364 font_obj = mupdf.pdf_add_cid_font(pdf, font)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20365 simple = 0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20366 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20367 font_obj = mupdf.pdf_add_simple_font(pdf, font, encoding)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20368 simple = 2
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20369 #weiter: ;
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20370 ixref = mupdf.pdf_to_num(font_obj)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20371 name = JM_EscapeStrFromStr( mupdf.pdf_to_name( mupdf.pdf_dict_get(font_obj, PDF_NAME('BaseFont'))))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20372
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20373 subt = JM_UnicodeFromStr( mupdf.pdf_to_name( mupdf.pdf_dict_get( font_obj, PDF_NAME('Subtype'))))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20374
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20375 if not exto:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20376 exto = JM_UnicodeFromStr(JM_get_fontextension(pdf, ixref))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20377
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20378 asc = mupdf.fz_font_ascender(font)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20379 dsc = mupdf.fz_font_descender(font)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20380 value = [
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20381 ixref,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20382 {
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20383 "name": name, # base font name
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20384 "type": subt, # subtype
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20385 "ext": exto, # file extension
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20386 "simple": bool(simple), # simple font?
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20387 "ordering": ordering, # CJK font?
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20388 "ascender": asc,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20389 "descender": dsc,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20390 },
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20391 ]
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20392 return value
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20393
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20394 def JM_irect_from_py(r):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20395 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20396 PySequence to mupdf.FzIrect. Default: infinite irect
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20397 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20398 if isinstance(r, mupdf.FzIrect):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20399 return r
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20400 if isinstance(r, IRect):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20401 r = mupdf.FzIrect( r.x0, r.y0, r.x1, r.y1)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20402 return r
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20403 if isinstance(r, Rect):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20404 ret = mupdf.FzRect(r.x0, r.y0, r.x1, r.y1)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20405 ret = mupdf.FzIrect(ret) # Uses fz_irect_from_rect().
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20406 return ret
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20407 if isinstance(r, mupdf.FzRect):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20408 ret = mupdf.FzIrect(r) # Uses fz_irect_from_rect().
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20409 return ret
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20410 if not r or not PySequence_Check(r) or PySequence_Size(r) != 4:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20411 return mupdf.FzIrect(mupdf.fz_infinite_irect)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20412 f = [0, 0, 0, 0]
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20413 for i in range(4):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20414 f[i] = r[i]
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20415 if f[i] is None:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20416 return mupdf.FzIrect(mupdf.fz_infinite_irect)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20417 if f[i] < FZ_MIN_INF_RECT:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20418 f[i] = FZ_MIN_INF_RECT
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20419 if f[i] > FZ_MAX_INF_RECT:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20420 f[i] = FZ_MAX_INF_RECT
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20421 return mupdf.fz_make_irect(f[0], f[1], f[2], f[3])
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20422
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20423 def JM_listbox_value( annot):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20424 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20425 ListBox retrieve value
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20426 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20427 # may be single value or array
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20428 annot_obj = mupdf.pdf_annot_obj( annot)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20429 optarr = mupdf.pdf_dict_get( annot_obj, PDF_NAME('V'))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20430 if mupdf.pdf_is_string( optarr): # a single string
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20431 return mupdf.pdf_to_text_string( optarr)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20432
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20433 # value is an array (may have len 0)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20434 n = mupdf.pdf_array_len( optarr)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20435 liste = []
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20436
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20437 # extract a list of strings
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20438 # each entry may again be an array: take second entry then
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20439 for i in range( n):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20440 elem = mupdf.pdf_array_get( optarr, i)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20441 if mupdf.pdf_is_array( elem):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20442 elem = mupdf.pdf_array_get( elem, 1)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20443 liste.append( JM_UnicodeFromStr( mupdf.pdf_to_text_string( elem)))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20444 return liste
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20445
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20446
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20447 def JM_make_annot_DA(annot, ncol, col, fontname, fontsize):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20448 # PyMuPDF uses a fz_buffer to build up the string, but it's non-trivial to
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20449 # convert the fz_buffer's `unsigned char*` into a `const char*` suitable
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20450 # for passing to pdf_dict_put_text_string(). So instead we build up the
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20451 # string directly in Python.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20452 buf = ''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20453 if ncol < 1:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20454 buf += f'0 g '
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20455 elif ncol == 1:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20456 buf += f'{col[0]:g} g '
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20457 elif ncol == 2:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20458 assert 0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20459 elif ncol == 3:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20460 buf += f'{col[0]:g} {col[1]:g} {col[2]:g} rg '
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20461 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20462 buf += f'{col[0]:g} {col[1]:g} {col[2]:g} {col[3]:g} k '
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20463 buf += f'/{JM_expand_fname(fontname)} {fontsize} Tf'
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20464 mupdf.pdf_dict_put_text_string(mupdf.pdf_annot_obj(annot), mupdf.PDF_ENUM_NAME_DA, buf)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20465
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20466
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20467 def JM_make_spanlist(line_dict, line, raw, buff, tp_rect):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20468 if g_use_extra:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20469 return extra.JM_make_spanlist(line_dict, line, raw, buff, tp_rect)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20470 char_list = None
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20471 span_list = []
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20472 mupdf.fz_clear_buffer(buff)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20473 span_rect = mupdf.FzRect(mupdf.FzRect.Fixed_EMPTY)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20474 line_rect = mupdf.FzRect(mupdf.FzRect.Fixed_EMPTY)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20475
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20476 class char_style:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20477 def __init__(self, rhs=None):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20478 if rhs:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20479 self.size = rhs.size
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20480 self.flags = rhs.flags
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20481 if mupdf_version_tuple >= (1, 25, 2):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20482 self.char_flags = rhs.char_flags
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20483 self.font = rhs.font
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20484 self.argb = rhs.argb
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20485 self.asc = rhs.asc
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20486 self.desc = rhs.desc
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20487 self.bidi = rhs.bidi
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20488 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20489 self.size = -1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20490 self.flags = -1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20491 if mupdf_version_tuple >= (1, 25, 2):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20492 self.char_flags = -1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20493 self.font = ''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20494 self.argb = -1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20495 self.asc = 0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20496 self.desc = 0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20497 self.bidi = 0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20498 def __str__(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20499 ret = f'{self.size} {self.flags}'
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20500 if mupdf_version_tuple >= (1, 25, 2):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20501 ret += f' {self.char_flags}'
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20502 ret += f' {self.font} {self.color} {self.asc} {self.desc}'
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20503 return ret
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20504
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20505 old_style = char_style()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20506 style = char_style()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20507 span = None
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20508 span_origin = None
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20509
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20510 for ch in line:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20511 # start-trace
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20512 r = JM_char_bbox(line, ch)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20513 if (not JM_rects_overlap(tp_rect, r)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20514 and not mupdf.fz_is_infinite_rect(tp_rect)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20515 ):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20516 continue
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20517
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20518 # Info from:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20519 # detect_super_script()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20520 # fz_font_is_italic()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20521 # fz_font_is_serif()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20522 # fz_font_is_monospaced()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20523 # fz_font_is_bold()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20524
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20525 flags = JM_char_font_flags(mupdf.FzFont(mupdf.ll_fz_keep_font(ch.m_internal.font)), line, ch)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20526 origin = mupdf.FzPoint(ch.m_internal.origin)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20527 style.size = ch.m_internal.size
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20528 style.flags = flags
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20529 if mupdf_version_tuple >= (1, 25, 2):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20530 # FZ_STEXT_SYNTHETIC is per-char, not per-span.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20531 style.char_flags = ch.m_internal.flags & ~mupdf.FZ_STEXT_SYNTHETIC
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20532 style.font = JM_font_name(mupdf.FzFont(mupdf.ll_fz_keep_font(ch.m_internal.font)))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20533 style.argb = ch.m_internal.argb
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20534 style.asc = JM_font_ascender(mupdf.FzFont(mupdf.ll_fz_keep_font(ch.m_internal.font)))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20535 style.desc = JM_font_descender(mupdf.FzFont(mupdf.ll_fz_keep_font(ch.m_internal.font)))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20536 style.bidi = ch.m_internal.bidi
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20537
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20538 if (style.size != old_style.size
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20539 or style.flags != old_style.flags
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20540 or (mupdf_version_tuple >= (1, 25, 2)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20541 and (style.char_flags != old_style.char_flags)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20542 )
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20543 or style.argb != old_style.argb
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20544 or style.font != old_style.font
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20545 or style.bidi != old_style.bidi
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20546 ):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20547 if old_style.size >= 0:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20548 # not first one, output previous
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20549 if raw:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20550 # put character list in the span
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20551 span[dictkey_chars] = char_list
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20552 char_list = None
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20553 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20554 # put text string in the span
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20555 span[dictkey_text] = JM_EscapeStrFromBuffer( buff)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20556 mupdf.fz_clear_buffer(buff)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20557
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20558 span[dictkey_origin] = JM_py_from_point(span_origin)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20559 span[dictkey_bbox] = JM_py_from_rect(span_rect)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20560 line_rect = mupdf.fz_union_rect(line_rect, span_rect)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20561 span_list.append( span)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20562 span = None
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20563
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20564 span = dict()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20565 asc = style.asc
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20566 desc = style.desc
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20567 if style.asc < 1e-3:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20568 asc = 0.9
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20569 desc = -0.1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20570
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20571 span[dictkey_size] = style.size
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20572 span[dictkey_flags] = style.flags
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20573 span[dictkey_bidi] = style.bidi
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20574 if mupdf_version_tuple >= (1, 25, 2):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20575 span[dictkey_char_flags] = style.char_flags
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20576 span[dictkey_font] = JM_EscapeStrFromStr(style.font)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20577 span[dictkey_color] = style.argb & 0xffffff
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20578 if mupdf_version_tuple >= (1, 25, 0):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20579 span['alpha'] = style.argb >> 24
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20580 span["ascender"] = asc
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20581 span["descender"] = desc
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20582
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20583 # Need to be careful here - doing 'old_style=style' does a shallow
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20584 # copy, but we need to keep old_style as a distinct instance.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20585 old_style = char_style(style)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20586 span_rect = r
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20587 span_origin = origin
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20588
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20589 span_rect = mupdf.fz_union_rect(span_rect, r)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20590
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20591 if raw: # make and append a char dict
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20592 char_dict = dict()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20593 char_dict[dictkey_origin] = JM_py_from_point( ch.m_internal.origin)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20594 char_dict[dictkey_bbox] = JM_py_from_rect(r)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20595 char_dict[dictkey_c] = chr(ch.m_internal.c)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20596 char_dict['synthetic'] = bool(ch.m_internal.flags & mupdf.FZ_STEXT_SYNTHETIC)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20597
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20598 if char_list is None:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20599 char_list = []
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20600 char_list.append(char_dict)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20601 else: # add character byte to buffer
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20602 JM_append_rune(buff, ch.m_internal.c)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20603
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20604 # all characters processed, now flush remaining span
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20605 if span:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20606 if raw:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20607 span[dictkey_chars] = char_list
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20608 char_list = None
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20609 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20610 span[dictkey_text] = JM_EscapeStrFromBuffer(buff)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20611 mupdf.fz_clear_buffer(buff)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20612 span[dictkey_origin] = JM_py_from_point(span_origin)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20613 span[dictkey_bbox] = JM_py_from_rect(span_rect)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20614
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20615 if not mupdf.fz_is_empty_rect(span_rect):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20616 span_list.append(span)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20617 line_rect = mupdf.fz_union_rect(line_rect, span_rect)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20618 span = None
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20619 if not mupdf.fz_is_empty_rect(line_rect):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20620 line_dict[dictkey_spans] = span_list
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20621 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20622 line_dict[dictkey_spans] = span_list
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20623 return line_rect
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20624
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20625 def _make_image_dict(img, img_dict):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20626 """Populate a dictionary with information extracted from a given image.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20627
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20628 Used by 'Document.extract_image' and by 'JM_make_image_block'.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20629 Both of these functions will add some more specific information.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20630 """
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20631 img_type = img.fz_compressed_image_type()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20632 ext = JM_image_extension(img_type)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20633
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20634 # compressed image buffer if present, else None
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20635 ll_cbuf = mupdf.ll_fz_compressed_image_buffer(img.m_internal)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20636
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20637 if (0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20638 or not ll_cbuf
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20639 or img_type in (mupdf.FZ_IMAGE_JBIG2, mupdf.FZ_IMAGE_UNKNOWN)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20640 or img_type < mupdf.FZ_IMAGE_BMP
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20641 ):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20642 # not an image with a compressed buffer: convert to PNG
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20643 res = mupdf.fz_new_buffer_from_image_as_png(
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20644 img,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20645 mupdf.FzColorParams(mupdf.fz_default_color_params),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20646 )
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20647 ext = "png"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20648 elif ext == "jpeg" and img.n() == 4:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20649 # JPEG with CMYK: invert colors
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20650 res = mupdf.fz_new_buffer_from_image_as_jpeg(
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20651 img, mupdf.FzColorParams(mupdf.fz_default_color_params), 95, 1)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20652 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20653 # copy the compressed buffer
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20654 res = mupdf.FzBuffer(mupdf.ll_fz_keep_buffer(ll_cbuf.buffer))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20655
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20656 bytes_ = JM_BinFromBuffer(res)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20657 img_dict[dictkey_width] = img.w()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20658 img_dict[dictkey_height] = img.h()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20659 img_dict[dictkey_ext] = ext
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20660 img_dict[dictkey_colorspace] = img.n()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20661 img_dict[dictkey_xres] = img.xres()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20662 img_dict[dictkey_yres] = img.yres()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20663 img_dict[dictkey_bpc] = img.bpc()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20664 img_dict[dictkey_size] = len(bytes_)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20665 img_dict[dictkey_image] = bytes_
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20666
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20667 def JM_make_image_block(block, block_dict):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20668 img = block.i_image()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20669 _make_image_dict(img, block_dict)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20670 # if the image has a mask, store it as a PNG buffer
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20671 mask = img.mask()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20672 if mask.m_internal:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20673 buff = mask.fz_new_buffer_from_image_as_png(mupdf.FzColorParams(mupdf.fz_default_color_params))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20674 block_dict["mask"] = buff.fz_buffer_extract()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20675 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20676 block_dict["mask"] = None
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20677 block_dict[dictkey_matrix] = JM_py_from_matrix(block.i_transform())
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20678
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20679
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20680 def JM_make_text_block(block, block_dict, raw, buff, tp_rect):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20681 if g_use_extra:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20682 return extra.JM_make_text_block(block.m_internal, block_dict, raw, buff.m_internal, tp_rect.m_internal)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20683 line_list = []
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20684 block_rect = mupdf.FzRect(mupdf.FzRect.Fixed_EMPTY)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20685 #log(f'{block=}')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20686 for line in block:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20687 #log(f'{line=}')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20688 if (mupdf.fz_is_empty_rect(mupdf.fz_intersect_rect(tp_rect, mupdf.FzRect(line.m_internal.bbox)))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20689 and not mupdf.fz_is_infinite_rect(tp_rect)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20690 ):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20691 continue
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20692 line_dict = dict()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20693 line_rect = JM_make_spanlist(line_dict, line, raw, buff, tp_rect)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20694 block_rect = mupdf.fz_union_rect(block_rect, line_rect)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20695 line_dict[dictkey_wmode] = line.m_internal.wmode
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20696 line_dict[dictkey_dir] = JM_py_from_point(line.m_internal.dir)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20697 line_dict[dictkey_bbox] = JM_py_from_rect(line_rect)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20698 line_list.append(line_dict)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20699 block_dict[dictkey_bbox] = JM_py_from_rect(block_rect)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20700 block_dict[dictkey_lines] = line_list
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20701
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20702
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20703 def JM_make_textpage_dict(tp, page_dict, raw):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20704 if g_use_extra:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20705 return extra.JM_make_textpage_dict(tp.m_internal, page_dict, raw)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20706 text_buffer = mupdf.fz_new_buffer(128)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20707 block_list = []
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20708 tp_rect = mupdf.FzRect(tp.m_internal.mediabox)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20709 block_n = -1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20710 #log( 'JM_make_textpage_dict {=tp}')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20711 for block in tp:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20712 block_n += 1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20713 if (not mupdf.fz_contains_rect(tp_rect, mupdf.FzRect(block.m_internal.bbox))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20714 and not mupdf.fz_is_infinite_rect(tp_rect)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20715 and block.m_internal.type == mupdf.FZ_STEXT_BLOCK_IMAGE
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20716 ):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20717 continue
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20718 if (not mupdf.fz_is_infinite_rect(tp_rect)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20719 and mupdf.fz_is_empty_rect(mupdf.fz_intersect_rect(tp_rect, mupdf.FzRect(block.m_internal.bbox)))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20720 ):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20721 continue
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20722
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20723 block_dict = dict()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20724 block_dict[dictkey_number] = block_n
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20725 block_dict[dictkey_type] = block.m_internal.type
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20726 if block.m_internal.type == mupdf.FZ_STEXT_BLOCK_IMAGE:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20727 block_dict[dictkey_bbox] = JM_py_from_rect(block.m_internal.bbox)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20728 JM_make_image_block(block, block_dict)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20729 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20730 JM_make_text_block(block, block_dict, raw, text_buffer, tp_rect)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20731
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20732 block_list.append(block_dict)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20733 page_dict[dictkey_blocks] = block_list
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20734
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20735
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20736 def JM_matrix_from_py(m):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20737 a = [0, 0, 0, 0, 0, 0]
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20738 if isinstance(m, mupdf.FzMatrix):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20739 return m
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20740 if isinstance(m, Matrix):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20741 return mupdf.FzMatrix(m.a, m.b, m.c, m.d, m.e, m.f)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20742 if not m or not PySequence_Check(m) or PySequence_Size(m) != 6:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20743 return mupdf.FzMatrix()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20744 for i in range(6):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20745 a[i] = JM_FLOAT_ITEM(m, i)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20746 if a[i] is None:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20747 return mupdf.FzRect()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20748 return mupdf.FzMatrix(a[0], a[1], a[2], a[3], a[4], a[5])
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20749
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20750
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20751 def JM_mediabox(page_obj):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20752 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20753 return a PDF page's MediaBox
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20754 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20755 page_mediabox = mupdf.FzRect(mupdf.FzRect.Fixed_UNIT)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20756 mediabox = mupdf.pdf_to_rect(
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20757 mupdf.pdf_dict_get_inheritable(page_obj, PDF_NAME('MediaBox'))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20758 )
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20759 if mupdf.fz_is_empty_rect(mediabox) or mupdf.fz_is_infinite_rect(mediabox):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20760 mediabox.x0 = 0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20761 mediabox.y0 = 0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20762 mediabox.x1 = 612
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20763 mediabox.y1 = 792
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20764
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20765 page_mediabox = mupdf.FzRect(
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20766 mupdf.fz_min(mediabox.x0, mediabox.x1),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20767 mupdf.fz_min(mediabox.y0, mediabox.y1),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20768 mupdf.fz_max(mediabox.x0, mediabox.x1),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20769 mupdf.fz_max(mediabox.y0, mediabox.y1),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20770 )
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20771
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20772 if (page_mediabox.x1 - page_mediabox.x0 < 1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20773 or page_mediabox.y1 - page_mediabox.y0 < 1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20774 ):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20775 page_mediabox = mupdf.FzRect(mupdf.FzRect.Fixed_UNIT)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20776
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20777 return page_mediabox
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20778
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20779
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20780 def JM_merge_range(
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20781 doc_des,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20782 doc_src,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20783 spage,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20784 epage,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20785 apage,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20786 rotate,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20787 links,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20788 annots,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20789 show_progress,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20790 graft_map,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20791 ):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20792 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20793 Copy a range of pages (spage, epage) from a source PDF to a specified
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20794 location (apage) of the target PDF.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20795 If spage > epage, the sequence of source pages is reversed.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20796 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20797 if g_use_extra:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20798 return extra.JM_merge_range(
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20799 doc_des,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20800 doc_src,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20801 spage,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20802 epage,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20803 apage,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20804 rotate,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20805 links,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20806 annots,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20807 show_progress,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20808 graft_map,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20809 )
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20810 afterpage = apage
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20811 counter = 0 # copied pages counter
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20812 total = mupdf.fz_absi(epage - spage) + 1 # total pages to copy
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20813
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20814 if spage < epage:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20815 page = spage
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20816 while page <= epage:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20817 page_merge(doc_des, doc_src, page, afterpage, rotate, links, annots, graft_map)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20818 counter += 1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20819 if show_progress > 0 and counter % show_progress == 0:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20820 message(f"Inserted {counter} of {total} pages.")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20821 page += 1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20822 afterpage += 1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20823 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20824 page = spage
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20825 while page >= epage:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20826 page_merge(doc_des, doc_src, page, afterpage, rotate, links, annots, graft_map)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20827 counter += 1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20828 if show_progress > 0 and counter % show_progress == 0:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20829 message(f"Inserted {counter} of {total} pages.")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20830 page -= 1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20831 afterpage += 1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20832
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20833
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20834 def JM_merge_resources( page, temp_res):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20835 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20836 Merge the /Resources object created by a text pdf device into the page.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20837 The device may have created multiple /ExtGState/Alp? and /Font/F? objects.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20838 These need to be renamed (renumbered) to not overwrite existing page
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20839 objects from previous executions.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20840 Returns the next available numbers n, m for objects /Alp<n>, /F<m>.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20841 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20842 # page objects /Resources, /Resources/ExtGState, /Resources/Font
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20843 resources = mupdf.pdf_dict_get(page.obj(), PDF_NAME('Resources'))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20844 if not resources.m_internal:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20845 resources = mupdf.pdf_dict_put_dict(page.obj(), PDF_NAME('Resources'), 5)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20846 main_extg = mupdf.pdf_dict_get(resources, PDF_NAME('ExtGState'))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20847 main_fonts = mupdf.pdf_dict_get(resources, PDF_NAME('Font'))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20848
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20849 # text pdf device objects /ExtGState, /Font
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20850 temp_extg = mupdf.pdf_dict_get(temp_res, PDF_NAME('ExtGState'))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20851 temp_fonts = mupdf.pdf_dict_get(temp_res, PDF_NAME('Font'))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20852
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20853 max_alp = -1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20854 max_fonts = -1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20855
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20856 # Handle /Alp objects
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20857 if mupdf.pdf_is_dict(temp_extg): # any created at all?
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20858 n = mupdf.pdf_dict_len(temp_extg)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20859 if mupdf.pdf_is_dict(main_extg): # does page have /ExtGState yet?
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20860 for i in range(mupdf.pdf_dict_len(main_extg)):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20861 # get highest number of objects named /Alpxxx
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20862 alp = mupdf.pdf_to_name( mupdf.pdf_dict_get_key(main_extg, i))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20863 if not alp.startswith('Alp'):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20864 continue
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20865 j = mupdf.fz_atoi(alp[3:])
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20866 if j > max_alp:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20867 max_alp = j
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20868 else: # create a /ExtGState for the page
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20869 main_extg = mupdf.pdf_dict_put_dict(resources, PDF_NAME('ExtGState'), n)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20870
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20871 max_alp += 1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20872 for i in range(n): # copy over renumbered /Alp objects
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20873 alp = mupdf.pdf_to_name( mupdf.pdf_dict_get_key( temp_extg, i))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20874 j = mupdf.fz_atoi(alp[3:]) + max_alp
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20875 text = f'Alp{j}'
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20876 val = mupdf.pdf_dict_get_val( temp_extg, i)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20877 mupdf.pdf_dict_puts(main_extg, text, val)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20878
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20879 if mupdf.pdf_is_dict(main_fonts): # has page any fonts yet?
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20880 for i in range(mupdf.pdf_dict_len(main_fonts)): # get max font number
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20881 font = mupdf.pdf_to_name( mupdf.pdf_dict_get_key( main_fonts, i))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20882 if not font.startswith("F"):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20883 continue
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20884 j = mupdf.fz_atoi(font[1:])
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20885 if j > max_fonts:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20886 max_fonts = j
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20887 else: # create a Resources/Font for the page
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20888 main_fonts = mupdf.pdf_dict_put_dict(resources, PDF_NAME('Font'), 2)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20889
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20890 max_fonts += 1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20891 for i in range(mupdf.pdf_dict_len(temp_fonts)): # copy renumbered fonts
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20892 font = mupdf.pdf_to_name( mupdf.pdf_dict_get_key( temp_fonts, i))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20893 j = mupdf.fz_atoi(font[1:]) + max_fonts
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20894 text = f'F{j}'
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20895 val = mupdf.pdf_dict_get_val(temp_fonts, i)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20896 mupdf.pdf_dict_puts(main_fonts, text, val)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20897 return (max_alp, max_fonts) # next available numbers
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20898
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20899
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20900 def JM_mupdf_warning( text):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20901 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20902 redirect MuPDF warnings
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20903 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20904 JM_mupdf_warnings_store.append(text)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20905 if JM_mupdf_show_warnings:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20906 message(f'MuPDF warning: {text}')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20907
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20908
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20909 def JM_mupdf_error( text):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20910 JM_mupdf_warnings_store.append(text)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20911 if JM_mupdf_show_errors:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20912 message(f'MuPDF error: {text}\n')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20913
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20914
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20915 def JM_new_bbox_device(rc, inc_layers):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20916 assert isinstance(rc, list)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20917 return JM_new_bbox_device_Device( rc, inc_layers)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20918
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20919
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20920 def JM_new_buffer_from_stext_page(page):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20921 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20922 make a buffer from an stext_page's text
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20923 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20924 assert isinstance(page, mupdf.FzStextPage)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20925 rect = mupdf.FzRect(page.m_internal.mediabox)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20926 buf = mupdf.fz_new_buffer(256)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20927 for block in page:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20928 if block.m_internal.type == mupdf.FZ_STEXT_BLOCK_TEXT:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20929 for line in block:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20930 for ch in line:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20931 if (not JM_rects_overlap(rect, JM_char_bbox(line, ch))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20932 and not mupdf.fz_is_infinite_rect(rect)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20933 ):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20934 continue
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20935 mupdf.fz_append_rune(buf, ch.m_internal.c)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20936 mupdf.fz_append_byte(buf, ord('\n'))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20937 mupdf.fz_append_byte(buf, ord('\n'))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20938 return buf
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20939
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20940
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20941 def JM_new_javascript(pdf, value):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20942 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20943 make new PDF action object from JavaScript source
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20944 Parameters are a PDF document and a Python string.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20945 Returns a PDF action object.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20946 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20947 if value is None:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20948 # no argument given
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20949 return
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20950 data = JM_StrAsChar(value)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20951 if data is None:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20952 # not convertible to char*
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20953 return
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20954
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20955 res = mupdf.fz_new_buffer_from_copied_data(data.encode('utf8'))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20956 source = mupdf.pdf_add_stream(pdf, res, mupdf.PdfObj(), 0)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20957 newaction = mupdf.pdf_add_new_dict(pdf, 4)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20958 mupdf.pdf_dict_put(newaction, PDF_NAME('S'), mupdf.pdf_new_name('JavaScript'))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20959 mupdf.pdf_dict_put(newaction, PDF_NAME('JS'), source)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20960 return newaction
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20961
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20962
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20963 def JM_new_output_fileptr(bio):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20964 return JM_new_output_fileptr_Output( bio)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20965
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20966
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20967 def JM_norm_rotation(rotate):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20968 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20969 # return normalized /Rotate value:one of 0, 90, 180, 270
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20970 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20971 while rotate < 0:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20972 rotate += 360
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20973 while rotate >= 360:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20974 rotate -= 360
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20975 if rotate % 90 != 0:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20976 return 0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20977 return rotate
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20978
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20979
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20980 def JM_object_to_buffer(what, compress, ascii):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20981 res = mupdf.fz_new_buffer(512)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20982 out = mupdf.FzOutput(res)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20983 mupdf.pdf_print_obj(out, what, compress, ascii)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20984 out.fz_close_output()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20985 mupdf.fz_terminate_buffer(res)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20986 return res
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20987
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20988
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20989 def JM_outline_xrefs(obj, xrefs):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20990 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20991 Return list of outline xref numbers. Recursive function. Arguments:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20992 'obj' first OL item
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20993 'xrefs' empty Python list
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20994 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20995 if not obj.m_internal:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20996 return xrefs
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20997 thisobj = obj
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20998 while thisobj.m_internal:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20999 newxref = mupdf.pdf_to_num( thisobj)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21000 if newxref in xrefs or mupdf.pdf_dict_get( thisobj, PDF_NAME('Type')).m_internal:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21001 # circular ref or top of chain: terminate
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21002 break
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21003 xrefs.append( newxref)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21004 first = mupdf.pdf_dict_get( thisobj, PDF_NAME('First')) # try go down
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21005 if mupdf.pdf_is_dict( first):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21006 xrefs = JM_outline_xrefs( first, xrefs)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21007 thisobj = mupdf.pdf_dict_get( thisobj, PDF_NAME('Next')) # try go next
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21008 parent = mupdf.pdf_dict_get( thisobj, PDF_NAME('Parent')) # get parent
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21009 if not mupdf.pdf_is_dict( thisobj):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21010 thisobj = parent
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21011 return xrefs
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21012
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21013
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21014 def JM_page_rotation(page):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21015 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21016 return a PDF page's /Rotate value: one of (0, 90, 180, 270)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21017 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21018 rotate = 0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21019
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21020 obj = mupdf.pdf_dict_get_inheritable( page.obj(), mupdf.PDF_ENUM_NAME_Rotate)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21021 rotate = mupdf.pdf_to_int(obj)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21022 rotate = JM_norm_rotation(rotate)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21023 return rotate
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21024
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21025
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21026 def JM_pdf_obj_from_str(doc, src):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21027 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21028 create PDF object from given string (new in v1.14.0: MuPDF dropped it)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21029 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21030 # fixme: seems inefficient to convert to bytes instance then make another
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21031 # copy inside fz_new_buffer_from_copied_data(), but no other way?
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21032 #
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21033 buffer_ = mupdf.fz_new_buffer_from_copied_data(bytes(src, 'utf8'))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21034 stream = mupdf.fz_open_buffer(buffer_)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21035 lexbuf = mupdf.PdfLexbuf(mupdf.PDF_LEXBUF_SMALL)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21036 result = mupdf.pdf_parse_stm_obj(doc, stream, lexbuf)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21037 return result
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21038
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21039
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21040 def JM_pixmap_from_display_list(
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21041 list_,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21042 ctm,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21043 cs,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21044 alpha,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21045 clip,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21046 seps,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21047 ):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21048 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21049 Version of fz_new_pixmap_from_display_list (util.c) to also support
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21050 rendering of only the 'clip' part of the displaylist rectangle
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21051 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21052 assert isinstance(list_, mupdf.FzDisplayList)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21053 if seps is None:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21054 seps = mupdf.FzSeparations()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21055 assert seps is None or isinstance(seps, mupdf.FzSeparations), f'{type(seps)=}: {seps}'
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21056
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21057 rect = mupdf.fz_bound_display_list(list_)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21058 matrix = JM_matrix_from_py(ctm)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21059 rclip = JM_rect_from_py(clip)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21060 rect = mupdf.fz_intersect_rect(rect, rclip) # no-op if clip is not given
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21061
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21062 rect = mupdf.fz_transform_rect(rect, matrix)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21063 irect = mupdf.fz_round_rect(rect)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21064
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21065 assert isinstance( cs, mupdf.FzColorspace)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21066
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21067 pix = mupdf.fz_new_pixmap_with_bbox(cs, irect, seps, alpha)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21068 if alpha:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21069 mupdf.fz_clear_pixmap(pix)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21070 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21071 mupdf.fz_clear_pixmap_with_value(pix, 0xFF)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21072
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21073 if not mupdf.fz_is_infinite_rect(rclip):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21074 dev = mupdf.fz_new_draw_device_with_bbox(matrix, pix, irect)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21075 mupdf.fz_run_display_list(list_, dev, mupdf.FzMatrix(), rclip, mupdf.FzCookie())
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21076 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21077 dev = mupdf.fz_new_draw_device(matrix, pix)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21078 mupdf.fz_run_display_list(list_, dev, mupdf.FzMatrix(), mupdf.FzRect(mupdf.FzRect.Fixed_INFINITE), mupdf.FzCookie())
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21079
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21080 mupdf.fz_close_device(dev)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21081 # Use special raw Pixmap constructor so we don't set alpha to true.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21082 return Pixmap( 'raw', pix)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21083
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21084
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21085 def JM_point_from_py(p):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21086 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21087 PySequence to fz_point. Default: (FZ_MIN_INF_RECT, FZ_MIN_INF_RECT)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21088 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21089 if isinstance(p, mupdf.FzPoint):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21090 return p
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21091 if isinstance(p, Point):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21092 return mupdf.FzPoint(p.x, p.y)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21093 if g_use_extra:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21094 return extra.JM_point_from_py( p)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21095
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21096 p0 = mupdf.FzPoint(0, 0)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21097 x = JM_FLOAT_ITEM(p, 0)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21098 y = JM_FLOAT_ITEM(p, 1)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21099 if x is None or y is None:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21100 return p0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21101 x = max( x, FZ_MIN_INF_RECT)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21102 y = max( y, FZ_MIN_INF_RECT)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21103 x = min( x, FZ_MAX_INF_RECT)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21104 y = min( y, FZ_MAX_INF_RECT)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21105 return mupdf.FzPoint(x, y)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21106
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21107
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21108 def JM_print_stext_page_as_text(res, page):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21109 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21110 Plain text output. An identical copy of fz_print_stext_page_as_text,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21111 but lines within a block are concatenated by space instead a new-line
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21112 character (which else leads to 2 new-lines).
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21113 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21114 if 1 and g_use_extra:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21115 return extra.JM_print_stext_page_as_text(res, page)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21116
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21117 assert isinstance(res, mupdf.FzBuffer)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21118 assert isinstance(page, mupdf.FzStextPage)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21119 rect = mupdf.FzRect(page.m_internal.mediabox)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21120 last_char = 0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21121
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21122 n_blocks = 0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21123 n_lines = 0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21124 n_chars = 0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21125 for n_blocks2, block in enumerate( page):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21126 if block.m_internal.type == mupdf.FZ_STEXT_BLOCK_TEXT:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21127 for n_lines2, line in enumerate( block):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21128 for n_chars2, ch in enumerate( line):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21129 pass
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21130 n_chars += n_chars2
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21131 n_lines += n_lines2
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21132 n_blocks += n_blocks2
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21133
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21134 for block in page:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21135 if block.m_internal.type == mupdf.FZ_STEXT_BLOCK_TEXT:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21136 for line in block:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21137 last_char = 0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21138 for ch in line:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21139 chbbox = JM_char_bbox(line, ch)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21140 if (mupdf.fz_is_infinite_rect(rect)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21141 or JM_rects_overlap(rect, chbbox)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21142 ):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21143 #raw += chr(ch.m_internal.c)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21144 last_char = ch.m_internal.c
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21145 #log( '{=last_char!r utf!r}')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21146 JM_append_rune(res, last_char)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21147 if last_char != 10 and last_char > 0:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21148 mupdf.fz_append_string(res, "\n")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21149
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21150
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21151 def JM_put_script(annot_obj, key1, key2, value):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21152 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21153 Create a JavaScript PDF action.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21154 Usable for all object types which support PDF actions, even if the
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21155 argument name suggests annotations. Up to 2 key values can be specified, so
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21156 JavaScript actions can be stored for '/A' and '/AA/?' keys.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21157 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21158 key1_obj = mupdf.pdf_dict_get(annot_obj, key1)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21159 pdf = mupdf.pdf_get_bound_document(annot_obj) # owning PDF
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21160
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21161 # if no new script given, just delete corresponding key
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21162 if not value:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21163 if key2 is None or not key2.m_internal:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21164 mupdf.pdf_dict_del(annot_obj, key1)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21165 elif key1_obj.m_internal:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21166 mupdf.pdf_dict_del(key1_obj, key2)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21167 return
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21168
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21169 # read any existing script as a PyUnicode string
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21170 if not key2.m_internal or not key1_obj.m_internal:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21171 script = JM_get_script(key1_obj)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21172 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21173 script = JM_get_script(mupdf.pdf_dict_get(key1_obj, key2))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21174
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21175 # replace old script, if different from new one
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21176 if value != script:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21177 newaction = JM_new_javascript(pdf, value)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21178 if not key2.m_internal:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21179 mupdf.pdf_dict_put(annot_obj, key1, newaction)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21180 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21181 mupdf.pdf_dict_putl(annot_obj, newaction, key1, key2)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21182
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21183
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21184 def JM_py_from_irect(r):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21185 return r.x0, r.y0, r.x1, r.y1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21186
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21187
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21188 def JM_py_from_matrix(m):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21189 return m.a, m.b, m.c, m.d, m.e, m.f
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21190
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21191
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21192 def JM_py_from_point(p):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21193 return p.x, p.y
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21194
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21195
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21196 def JM_py_from_quad(q):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21197 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21198 PySequence from fz_quad.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21199 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21200 return (
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21201 (q.ul.x, q.ul.y),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21202 (q.ur.x, q.ur.y),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21203 (q.ll.x, q.ll.y),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21204 (q.lr.x, q.lr.y),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21205 )
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21206
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21207
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21208 def JM_py_from_rect(r):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21209 return r.x0, r.y0, r.x1, r.y1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21210
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21211
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21212 def JM_quad_from_py(r):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21213 if isinstance(r, mupdf.FzQuad):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21214 return r
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21215 # cover all cases of 4-float-sequences
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21216 if hasattr(r, "__getitem__") and len(r) == 4 and hasattr(r[0], "__float__"):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21217 r = mupdf.FzRect(*tuple(r))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21218 if isinstance( r, mupdf.FzRect):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21219 return mupdf.fz_quad_from_rect( r)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21220 if isinstance( r, Quad):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21221 return mupdf.fz_make_quad(
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21222 r.ul.x, r.ul.y,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21223 r.ur.x, r.ur.y,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21224 r.ll.x, r.ll.y,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21225 r.lr.x, r.lr.y,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21226 )
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21227 q = mupdf.fz_make_quad(0, 0, 0, 0, 0, 0, 0, 0)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21228 p = [0,0,0,0]
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21229 if not r or not isinstance(r, (tuple, list)) or len(r) != 4:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21230 return q
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21231
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21232 if JM_FLOAT_ITEM(r, 0) is None:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21233 return mupdf.fz_quad_from_rect(JM_rect_from_py(r))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21234
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21235 for i in range(4):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21236 if i >= len(r):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21237 return q # invalid: cancel the rest
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21238 obj = r[i] # next point item
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21239 if not PySequence_Check(obj) or PySequence_Size(obj) != 2:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21240 return q # invalid: cancel the rest
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21241
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21242 p[i].x = JM_FLOAT_ITEM(obj, 0)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21243 p[i].y = JM_FLOAT_ITEM(obj, 1)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21244 if p[i].x is None or p[i].y is None:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21245 return q
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21246 p[i].x = max( p[i].x, FZ_MIN_INF_RECT)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21247 p[i].y = max( p[i].y, FZ_MIN_INF_RECT)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21248 p[i].x = min( p[i].x, FZ_MAX_INF_RECT)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21249 p[i].y = min( p[i].y, FZ_MAX_INF_RECT)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21250 q.ul = p[0]
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21251 q.ur = p[1]
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21252 q.ll = p[2]
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21253 q.lr = p[3]
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21254 return q
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21255
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21256
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21257 def JM_read_contents(pageref):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21258 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21259 Read and concatenate a PDF page's /Contents object(s) in a buffer
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21260 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21261 assert isinstance(pageref, mupdf.PdfObj), f'{type(pageref)}'
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21262 contents = mupdf.pdf_dict_get(pageref, mupdf.PDF_ENUM_NAME_Contents)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21263 if mupdf.pdf_is_array(contents):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21264 res = mupdf.FzBuffer(1024)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21265 for i in range(mupdf.pdf_array_len(contents)):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21266 if i > 0:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21267 mupdf.fz_append_byte(res, 32)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21268 obj = mupdf.pdf_array_get(contents, i)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21269 if mupdf.pdf_is_stream(obj):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21270 nres = mupdf.pdf_load_stream(obj)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21271 mupdf.fz_append_buffer(res, nres)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21272 elif contents.m_internal:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21273 res = mupdf.pdf_load_stream(contents)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21274 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21275 res = mupdf.FzBuffer(0)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21276 return res
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21277
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21278
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21279 def JM_rect_from_py(r):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21280 if isinstance(r, mupdf.FzRect):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21281 return r
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21282 if isinstance(r, mupdf.FzIrect):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21283 return mupdf.FzRect(r)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21284 if isinstance(r, Rect):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21285 return mupdf.fz_make_rect(r.x0, r.y0, r.x1, r.y1)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21286 if isinstance(r, IRect):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21287 return mupdf.fz_make_rect(r.x0, r.y0, r.x1, r.y1)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21288 if not r or not PySequence_Check(r) or PySequence_Size(r) != 4:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21289 return mupdf.FzRect(mupdf.FzRect.Fixed_INFINITE)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21290 f = [0, 0, 0, 0]
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21291 for i in range(4):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21292 f[i] = JM_FLOAT_ITEM(r, i)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21293 if f[i] is None:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21294 return mupdf.FzRect(mupdf.FzRect.Fixed_INFINITE)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21295 if f[i] < FZ_MIN_INF_RECT:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21296 f[i] = FZ_MIN_INF_RECT
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21297 if f[i] > FZ_MAX_INF_RECT:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21298 f[i] = FZ_MAX_INF_RECT
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21299 return mupdf.fz_make_rect(f[0], f[1], f[2], f[3])
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21300
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21301
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21302 def JM_rects_overlap(a, b):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21303 if (0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21304 or a.x0 >= b.x1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21305 or a.y0 >= b.y1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21306 or a.x1 <= b.x0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21307 or a.y1 <= b.y0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21308 ):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21309 return 0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21310 return 1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21311
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21312
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21313 def JM_refresh_links( page):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21314 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21315 refreshes the link and annotation tables of a page
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21316 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21317 if page is None or not page.m_internal:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21318 return
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21319 obj = mupdf.pdf_dict_get( page.obj(), PDF_NAME('Annots'))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21320 if obj.m_internal:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21321 pdf = page.doc()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21322 number = mupdf.pdf_lookup_page_number( pdf, page.obj())
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21323 page_mediabox = mupdf.FzRect()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21324 page_ctm = mupdf.FzMatrix()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21325 mupdf.pdf_page_transform( page, page_mediabox, page_ctm)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21326 link = mupdf.pdf_load_link_annots( pdf, page, obj, number, page_ctm)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21327 page.m_internal.links = mupdf.ll_fz_keep_link( link.m_internal)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21328
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21329
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21330 def JM_rotate_page_matrix(page):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21331 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21332 calculate page rotation matrices
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21333 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21334 if not page.m_internal:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21335 return mupdf.FzMatrix() # no valid pdf page given
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21336 rotation = JM_page_rotation(page)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21337 #log( '{rotation=}')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21338 if rotation == 0:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21339 return mupdf.FzMatrix() # no rotation
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21340 cb_size = JM_cropbox_size(page.obj())
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21341 w = cb_size.x
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21342 h = cb_size.y
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21343 #log( '{=h w}')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21344 if rotation == 90:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21345 m = mupdf.fz_make_matrix(0, 1, -1, 0, h, 0)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21346 elif rotation == 180:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21347 m = mupdf.fz_make_matrix(-1, 0, 0, -1, w, h)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21348 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21349 m = mupdf.fz_make_matrix(0, -1, 1, 0, 0, w)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21350 #log( 'returning {m=}')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21351 return m
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21352
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21353
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21354 def JM_search_stext_page(page, needle):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21355 if g_use_extra:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21356 return extra.JM_search_stext_page(page.m_internal, needle)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21357
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21358 rect = mupdf.FzRect(page.m_internal.mediabox)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21359 if not needle:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21360 return
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21361 quads = []
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21362 class Hits:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21363 def __str__(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21364 return f'Hits(len={self.len} quads={self.quads} hfuzz={self.hfuzz} vfuzz={self.vfuzz}'
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21365 hits = Hits()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21366 hits.len = 0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21367 hits.quads = quads
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21368 hits.hfuzz = 0.2 # merge kerns but not large gaps
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21369 hits.vfuzz = 0.1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21370
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21371 buffer_ = JM_new_buffer_from_stext_page(page)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21372 haystack_string = mupdf.fz_string_from_buffer(buffer_)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21373 haystack = 0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21374 begin, end = find_string(haystack_string[haystack:], needle)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21375 if begin is None:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21376 #goto no_more_matches;
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21377 return quads
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21378
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21379 begin += haystack
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21380 end += haystack
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21381 inside = 0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21382 i = 0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21383 for block in page:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21384 if block.m_internal.type != mupdf.FZ_STEXT_BLOCK_TEXT:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21385 continue
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21386 for line in block:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21387 for ch in line:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21388 i += 1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21389 if not mupdf.fz_is_infinite_rect(rect):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21390 r = JM_char_bbox(line, ch)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21391 if not JM_rects_overlap(rect, r):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21392 #goto next_char;
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21393 continue
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21394 while 1:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21395 #try_new_match:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21396 if not inside:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21397 if haystack >= begin:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21398 inside = 1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21399 if inside:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21400 if haystack < end:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21401 on_highlight_char(hits, line, ch)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21402 break
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21403 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21404 inside = 0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21405 begin, end = find_string(haystack_string[haystack:], needle)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21406 if begin is None:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21407 #goto no_more_matches;
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21408 return quads
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21409 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21410 #goto try_new_match;
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21411 begin += haystack
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21412 end += haystack
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21413 continue
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21414 break
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21415 haystack += 1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21416 #next_char:;
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21417 assert haystack_string[haystack] == '\n', \
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21418 f'{haystack=} {haystack_string[haystack]=}'
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21419 haystack += 1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21420 assert haystack_string[haystack] == '\n', \
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21421 f'{haystack=} {haystack_string[haystack]=}'
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21422 haystack += 1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21423 #no_more_matches:;
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21424 return quads
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21425
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21426
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21427 def JM_scan_resources(pdf, rsrc, liste, what, stream_xref, tracer):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21428 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21429 Step through /Resources, looking up image, xobject or font information
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21430 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21431 if mupdf.pdf_mark_obj(rsrc):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21432 mupdf.fz_warn('Circular dependencies! Consider page cleaning.')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21433 return # Circular dependencies!
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21434 try:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21435 xobj = mupdf.pdf_dict_get(rsrc, mupdf.PDF_ENUM_NAME_XObject)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21436
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21437 if what == 1: # lookup fonts
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21438 font = mupdf.pdf_dict_get(rsrc, mupdf.PDF_ENUM_NAME_Font)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21439 JM_gather_fonts(pdf, font, liste, stream_xref)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21440 elif what == 2: # look up images
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21441 JM_gather_images(pdf, xobj, liste, stream_xref)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21442 elif what == 3: # look up form xobjects
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21443 JM_gather_forms(pdf, xobj, liste, stream_xref)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21444 else: # should never happen
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21445 return
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21446
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21447 # check if we need to recurse into Form XObjects
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21448 n = mupdf.pdf_dict_len(xobj)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21449 for i in range(n):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21450 obj = mupdf.pdf_dict_get_val(xobj, i)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21451 if mupdf.pdf_is_stream(obj):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21452 sxref = mupdf.pdf_to_num(obj)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21453 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21454 sxref = 0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21455 subrsrc = mupdf.pdf_dict_get(obj, mupdf.PDF_ENUM_NAME_Resources)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21456 if subrsrc.m_internal:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21457 sxref_t = sxref
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21458 if sxref_t not in tracer:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21459 tracer.append(sxref_t)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21460 JM_scan_resources( pdf, subrsrc, liste, what, sxref, tracer)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21461 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21462 mupdf.fz_warn('Circular dependencies! Consider page cleaning.')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21463 return
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21464 finally:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21465 mupdf.pdf_unmark_obj(rsrc)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21466
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21467
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21468 def JM_set_choice_options(annot, liste):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21469 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21470 set ListBox / ComboBox values
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21471 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21472 if not liste:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21473 return
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21474 assert isinstance( liste, (tuple, list))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21475 n = len( liste)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21476 if n == 0:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21477 return
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21478 annot_obj = mupdf.pdf_annot_obj( annot)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21479 pdf = mupdf.pdf_get_bound_document( annot_obj)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21480 optarr = mupdf.pdf_new_array( pdf, n)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21481 for i in range(n):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21482 val = liste[i]
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21483 opt = val
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21484 if isinstance(opt, str):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21485 mupdf.pdf_array_push_text_string( optarr, opt)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21486 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21487 assert isinstance( val, (tuple, list)) and len( val) == 2, 'bad choice field list'
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21488 opt1, opt2 = val
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21489 assert opt1 and opt2, 'bad choice field list'
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21490 optarrsub = mupdf.pdf_array_push_array( optarr, 2)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21491 mupdf.pdf_array_push_text_string( optarrsub, opt1)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21492 mupdf.pdf_array_push_text_string( optarrsub, opt2)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21493 mupdf.pdf_dict_put( annot_obj, PDF_NAME('Opt'), optarr)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21494
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21495
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21496 def JM_set_field_type(doc, obj, type):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21497 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21498 Set the field type
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21499 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21500 setbits = 0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21501 clearbits = 0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21502 typename = None
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21503 if type == mupdf.PDF_WIDGET_TYPE_BUTTON:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21504 typename = PDF_NAME('Btn')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21505 setbits = mupdf.PDF_BTN_FIELD_IS_PUSHBUTTON
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21506 elif type == mupdf.PDF_WIDGET_TYPE_RADIOBUTTON:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21507 typename = PDF_NAME('Btn')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21508 clearbits = mupdf.PDF_BTN_FIELD_IS_PUSHBUTTON
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21509 setbits = mupdf.PDF_BTN_FIELD_IS_RADIO
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21510 elif type == mupdf.PDF_WIDGET_TYPE_CHECKBOX:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21511 typename = PDF_NAME('Btn')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21512 clearbits = (mupdf.PDF_BTN_FIELD_IS_PUSHBUTTON | mupdf.PDF_BTN_FIELD_IS_RADIO)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21513 elif type == mupdf.PDF_WIDGET_TYPE_TEXT:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21514 typename = PDF_NAME('Tx')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21515 elif type == mupdf.PDF_WIDGET_TYPE_LISTBOX:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21516 typename = PDF_NAME('Ch')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21517 clearbits = mupdf.PDF_CH_FIELD_IS_COMBO
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21518 elif type == mupdf.PDF_WIDGET_TYPE_COMBOBOX:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21519 typename = PDF_NAME('Ch')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21520 setbits = mupdf.PDF_CH_FIELD_IS_COMBO
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21521 elif type == mupdf.PDF_WIDGET_TYPE_SIGNATURE:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21522 typename = PDF_NAME('Sig')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21523
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21524 if typename is not None and typename.m_internal:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21525 mupdf.pdf_dict_put(obj, PDF_NAME('FT'), typename)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21526
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21527 if setbits != 0 or clearbits != 0:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21528 bits = mupdf.pdf_dict_get_int(obj, PDF_NAME('Ff'))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21529 bits &= ~clearbits
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21530 bits |= setbits
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21531 mupdf.pdf_dict_put_int(obj, PDF_NAME('Ff'), bits)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21532
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21533
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21534 def JM_set_object_value(obj, key, value):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21535 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21536 Set a PDF dict key to some value
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21537 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21538 eyecatcher = "fitz: replace me!"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21539 pdf = mupdf.pdf_get_bound_document(obj)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21540 # split PDF key at path seps and take last key part
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21541 list_ = key.split('/')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21542 len_ = len(list_)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21543 i = len_ - 1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21544 skey = list_[i]
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21545
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21546 del list_[i] # del the last sub-key
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21547 len_ = len(list_) # remaining length
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21548 testkey = mupdf.pdf_dict_getp(obj, key) # check if key already exists
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21549 if not testkey.m_internal:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21550 #No, it will be created here. But we cannot allow this happening if
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21551 #indirect objects are referenced. So we check all higher level
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21552 #sub-paths for indirect references.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21553 while len_ > 0:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21554 t = '/'.join(list_) # next high level
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21555 if mupdf.pdf_is_indirect(mupdf.pdf_dict_getp(obj, JM_StrAsChar(t))):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21556 raise Exception("path to '%s' has indirects", JM_StrAsChar(skey))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21557 del list_[len_ - 1] # del last sub-key
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21558 len_ = len(list_) # remaining length
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21559 # Insert our eyecatcher. Will create all sub-paths in the chain, or
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21560 # respectively remove old value of key-path.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21561 mupdf.pdf_dict_putp(obj, key, mupdf.pdf_new_text_string(eyecatcher))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21562 testkey = mupdf.pdf_dict_getp(obj, key)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21563 if not mupdf.pdf_is_string(testkey):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21564 raise Exception("cannot insert value for '%s'", key)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21565 temp = mupdf.pdf_to_text_string(testkey)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21566 if temp != eyecatcher:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21567 raise Exception("cannot insert value for '%s'", key)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21568 # read the result as a string
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21569 res = JM_object_to_buffer(obj, 1, 0)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21570 objstr = JM_EscapeStrFromBuffer(res)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21571
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21572 # replace 'eyecatcher' by desired 'value'
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21573 nullval = "/%s(%s)" % ( skey, eyecatcher)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21574 newval = "/%s %s" % (skey, value)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21575 newstr = objstr.replace(nullval, newval, 1)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21576
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21577 # make PDF object from resulting string
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21578 new_obj = JM_pdf_obj_from_str(pdf, newstr)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21579 return new_obj
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21580
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21581
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21582 def JM_set_ocg_arrays(conf, basestate, on, off, rbgroups, locked):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21583 if basestate:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21584 mupdf.pdf_dict_put_name( conf, PDF_NAME('BaseState'), basestate)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21585
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21586 if on is not None:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21587 mupdf.pdf_dict_del( conf, PDF_NAME('ON'))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21588 if on:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21589 arr = mupdf.pdf_dict_put_array( conf, PDF_NAME('ON'), 1)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21590 JM_set_ocg_arrays_imp( arr, on)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21591 if off is not None:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21592 mupdf.pdf_dict_del( conf, PDF_NAME('OFF'))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21593 if off:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21594 arr = mupdf.pdf_dict_put_array( conf, PDF_NAME('OFF'), 1)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21595 JM_set_ocg_arrays_imp( arr, off)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21596 if locked is not None:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21597 mupdf.pdf_dict_del( conf, PDF_NAME('Locked'))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21598 if locked:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21599 arr = mupdf.pdf_dict_put_array( conf, PDF_NAME('Locked'), 1)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21600 JM_set_ocg_arrays_imp( arr, locked)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21601 if rbgroups is not None:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21602 mupdf.pdf_dict_del( conf, PDF_NAME('RBGroups'))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21603 if rbgroups:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21604 arr = mupdf.pdf_dict_put_array( conf, PDF_NAME('RBGroups'), 1)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21605 n =len(rbgroups)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21606 for i in range(n):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21607 item0 = rbgroups[i]
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21608 obj = mupdf.pdf_array_push_array( arr, 1)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21609 JM_set_ocg_arrays_imp( obj, item0)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21610
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21611
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21612 def JM_set_ocg_arrays_imp(arr, list_):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21613 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21614 Set OCG arrays from dict of Python lists
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21615 Works with dict like {"basestate":name, "on":list, "off":list, "rbg":list}
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21616 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21617 pdf = mupdf.pdf_get_bound_document(arr)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21618 for xref in list_:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21619 obj = mupdf.pdf_new_indirect(pdf, xref, 0)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21620 mupdf.pdf_array_push(arr, obj)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21621
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21622
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21623 def JM_set_resource_property(ref, name, xref):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21624 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21625 Insert an item into Resources/Properties (used for Marked Content)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21626 Arguments:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21627 (1) e.g. page object, Form XObject
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21628 (2) marked content name
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21629 (3) xref of the referenced object (insert as indirect reference)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21630 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21631 pdf = mupdf.pdf_get_bound_document(ref)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21632 ind = mupdf.pdf_new_indirect(pdf, xref, 0)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21633 if not ind.m_internal:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21634 RAISEPY(MSG_BAD_XREF, PyExc_ValueError)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21635 resources = mupdf.pdf_dict_get(ref, PDF_NAME('Resources'))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21636 if not resources.m_internal:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21637 resources = mupdf.pdf_dict_put_dict(ref, PDF_NAME('Resources'), 1)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21638 properties = mupdf.pdf_dict_get(resources, PDF_NAME('Properties'))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21639 if not properties.m_internal:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21640 properties = mupdf.pdf_dict_put_dict(resources, PDF_NAME('Properties'), 1)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21641 mupdf.pdf_dict_put(properties, mupdf.pdf_new_name(name), ind)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21642
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21643
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21644 def JM_set_widget_properties(annot, Widget):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21645 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21646 Update the PDF form field with the properties from a Python Widget object.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21647 Called by "Page.add_widget" and "Annot.update_widget".
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21648 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21649 if isinstance( annot, Annot):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21650 annot = annot.this
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21651 assert isinstance( annot, mupdf.PdfAnnot), f'{type(annot)=} {type=}'
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21652 page = _pdf_annot_page(annot)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21653 assert page.m_internal, 'Annot is not bound to a page'
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21654 annot_obj = mupdf.pdf_annot_obj(annot)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21655 pdf = page.doc()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21656 def GETATTR(name):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21657 return getattr(Widget, name, None)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21658
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21659 value = GETATTR("field_type")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21660 field_type = value
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21661
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21662 # rectangle --------------------------------------------------------------
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21663 value = GETATTR("rect")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21664 rect = JM_rect_from_py(value)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21665 rot_mat = JM_rotate_page_matrix(page)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21666 rect = mupdf.fz_transform_rect(rect, rot_mat)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21667 mupdf.pdf_set_annot_rect(annot, rect)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21668
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21669 # fill color -------------------------------------------------------------
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21670 value = GETATTR("fill_color")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21671 if value and PySequence_Check(value):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21672 n = len(value)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21673 fill_col = mupdf.pdf_new_array(pdf, n)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21674 col = 0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21675 for i in range(n):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21676 col = value[i]
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21677 mupdf.pdf_array_push_real(fill_col, col)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21678 mupdf.pdf_field_set_fill_color(annot_obj, fill_col)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21679
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21680 # dashes -----------------------------------------------------------------
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21681 value = GETATTR("border_dashes")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21682 if value and PySequence_Check(value):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21683 n = len(value)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21684 dashes = mupdf.pdf_new_array(pdf, n)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21685 for i in range(n):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21686 mupdf.pdf_array_push_int(dashes, value[i])
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21687 mupdf.pdf_dict_putl(annot_obj, dashes, PDF_NAME('BS'), PDF_NAME('D'))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21688
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21689 # border color -----------------------------------------------------------
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21690 value = GETATTR("border_color")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21691 if value and PySequence_Check(value):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21692 n = len(value)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21693 border_col = mupdf.pdf_new_array(pdf, n)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21694 col = 0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21695 for i in range(n):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21696 col = value[i]
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21697 mupdf.pdf_array_push_real(border_col, col)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21698 mupdf.pdf_dict_putl(annot_obj, border_col, PDF_NAME('MK'), PDF_NAME('BC'))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21699
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21700 # entry ignored - may be used later
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21701 #
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21702 #int text_format = (int) PyInt_AsLong(GETATTR("text_format"));
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21703 #
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21704
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21705 # field label -----------------------------------------------------------
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21706 value = GETATTR("field_label")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21707 if value is not None:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21708 label = JM_StrAsChar(value)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21709 mupdf.pdf_dict_put_text_string(annot_obj, PDF_NAME('TU'), label)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21710
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21711 # field name -------------------------------------------------------------
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21712 value = GETATTR("field_name")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21713 if value is not None:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21714 name = JM_StrAsChar(value)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21715 old_name = mupdf.pdf_load_field_name(annot_obj)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21716 if name != old_name:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21717 mupdf.pdf_dict_put_text_string(annot_obj, PDF_NAME('T'), name)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21718
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21719 # max text len -----------------------------------------------------------
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21720 if field_type == mupdf.PDF_WIDGET_TYPE_TEXT:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21721 value = GETATTR("text_maxlen")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21722 text_maxlen = value
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21723 if text_maxlen:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21724 mupdf.pdf_dict_put_int(annot_obj, PDF_NAME('MaxLen'), text_maxlen)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21725 value = GETATTR("field_display")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21726 d = value
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21727 mupdf.pdf_field_set_display(annot_obj, d)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21728
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21729 # choice values ----------------------------------------------------------
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21730 if field_type in (mupdf.PDF_WIDGET_TYPE_LISTBOX, mupdf.PDF_WIDGET_TYPE_COMBOBOX):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21731 value = GETATTR("choice_values")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21732 JM_set_choice_options(annot, value)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21733
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21734 # border style -----------------------------------------------------------
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21735 value = GETATTR("border_style")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21736 val = JM_get_border_style(value)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21737 mupdf.pdf_dict_putl(annot_obj, val, PDF_NAME('BS'), PDF_NAME('S'))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21738
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21739 # border width -----------------------------------------------------------
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21740 value = GETATTR("border_width")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21741 border_width = value
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21742 mupdf.pdf_dict_putl(
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21743 annot_obj,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21744 mupdf.pdf_new_real(border_width),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21745 PDF_NAME('BS'),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21746 PDF_NAME('W'),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21747 )
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21748
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21749 # /DA string -------------------------------------------------------------
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21750 value = GETATTR("_text_da")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21751 da = JM_StrAsChar(value)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21752 mupdf.pdf_dict_put_text_string(annot_obj, PDF_NAME('DA'), da)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21753 mupdf.pdf_dict_del(annot_obj, PDF_NAME('DS')) # not supported by MuPDF
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21754 mupdf.pdf_dict_del(annot_obj, PDF_NAME('RC')) # not supported by MuPDF
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21755
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21756 # field flags ------------------------------------------------------------
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21757 field_flags = GETATTR("field_flags")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21758 if field_flags is not None:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21759 if field_type == mupdf.PDF_WIDGET_TYPE_COMBOBOX:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21760 field_flags |= mupdf.PDF_CH_FIELD_IS_COMBO
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21761 elif field_type == mupdf.PDF_WIDGET_TYPE_RADIOBUTTON:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21762 field_flags |= mupdf.PDF_BTN_FIELD_IS_RADIO
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21763 elif field_type == mupdf.PDF_WIDGET_TYPE_BUTTON:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21764 field_flags |= mupdf.PDF_BTN_FIELD_IS_PUSHBUTTON
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21765 mupdf.pdf_dict_put_int( annot_obj, PDF_NAME('Ff'), field_flags)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21766
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21767 # button caption ---------------------------------------------------------
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21768 value = GETATTR("button_caption")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21769 ca = JM_StrAsChar(value)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21770 if ca:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21771 mupdf.pdf_field_set_button_caption(annot_obj, ca)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21772
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21773 # script (/A) -------------------------------------------------------
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21774 value = GETATTR("script")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21775 JM_put_script(annot_obj, PDF_NAME('A'), mupdf.PdfObj(), value)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21776
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21777 # script (/AA/K) -------------------------------------------------------
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21778 value = GETATTR("script_stroke")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21779 JM_put_script(annot_obj, PDF_NAME('AA'), PDF_NAME('K'), value)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21780
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21781 # script (/AA/F) -------------------------------------------------------
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21782 value = GETATTR("script_format")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21783 JM_put_script(annot_obj, PDF_NAME('AA'), PDF_NAME('F'), value)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21784
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21785 # script (/AA/V) -------------------------------------------------------
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21786 value = GETATTR("script_change")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21787 JM_put_script(annot_obj, PDF_NAME('AA'), PDF_NAME('V'), value)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21788
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21789 # script (/AA/C) -------------------------------------------------------
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21790 value = GETATTR("script_calc")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21791 JM_put_script(annot_obj, PDF_NAME('AA'), PDF_NAME('C'), value)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21792
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21793 # script (/AA/Bl) -------------------------------------------------------
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21794 value = GETATTR("script_blur")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21795 JM_put_script(annot_obj, PDF_NAME('AA'), mupdf.pdf_new_name('Bl'), value)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21796
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21797 # script (/AA/Fo) codespell:ignore --------------------------------------
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21798 value = GETATTR("script_focus")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21799 JM_put_script(annot_obj, PDF_NAME('AA'), mupdf.pdf_new_name('Fo'), value)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21800
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21801 # field value ------------------------------------------------------------
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21802 value = GETATTR("field_value") # field value
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21803 text = JM_StrAsChar(value) # convert to text (may fail!)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21804 if field_type == mupdf.PDF_WIDGET_TYPE_RADIOBUTTON:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21805 if not value:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21806 mupdf.pdf_set_field_value(pdf, annot_obj, "Off", 1)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21807 mupdf.pdf_dict_put_name(annot_obj, PDF_NAME('AS'), "Off")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21808 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21809 # TODO check if another button in the group is ON and if so set it Off
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21810 onstate = mupdf.pdf_button_field_on_state(annot_obj)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21811 if onstate.m_internal:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21812 on = mupdf.pdf_to_name(onstate)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21813 mupdf.pdf_set_field_value(pdf, annot_obj, on, 1)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21814 mupdf.pdf_dict_put_name(annot_obj, PDF_NAME('AS'), on)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21815 elif text:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21816 mupdf.pdf_dict_put_name(annot_obj, PDF_NAME('AS'), text)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21817 elif field_type == mupdf.PDF_WIDGET_TYPE_CHECKBOX:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21818 onstate = mupdf.pdf_button_field_on_state(annot_obj)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21819 on = onstate.pdf_to_name()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21820 if value in (True, on) or text == 'Yes':
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21821 mupdf.pdf_set_field_value(pdf, annot_obj, on, 1)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21822 mupdf.pdf_dict_put_name(annot_obj, PDF_NAME('AS'), on)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21823 mupdf.pdf_dict_put_name(annot_obj, PDF_NAME('V'), on)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21824 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21825 mupdf.pdf_dict_put_name( annot_obj, PDF_NAME('AS'), 'Off')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21826 mupdf.pdf_dict_put_name( annot_obj, PDF_NAME('V'), 'Off')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21827 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21828 if text:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21829 mupdf.pdf_set_field_value(pdf, annot_obj, text, 1)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21830 if field_type in (mupdf.PDF_WIDGET_TYPE_COMBOBOX, mupdf.PDF_WIDGET_TYPE_LISTBOX):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21831 mupdf.pdf_dict_del(annot_obj, PDF_NAME('I'))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21832 mupdf.pdf_dirty_annot(annot)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21833 mupdf.pdf_set_annot_hot(annot, 1)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21834 mupdf.pdf_set_annot_active(annot, 1)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21835 mupdf.pdf_update_annot(annot)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21836
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21837
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21838 def JM_show_string_cs(
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21839 text,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21840 user_font,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21841 trm,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21842 s,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21843 wmode,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21844 bidi_level,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21845 markup_dir,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21846 language,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21847 ):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21848 i = 0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21849 while i < len(s):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21850 l, ucs = mupdf.fz_chartorune(s[i:])
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21851 i += l
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21852 gid = mupdf.fz_encode_character_sc(user_font, ucs)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21853 if gid == 0:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21854 gid, font = mupdf.fz_encode_character_with_fallback(user_font, ucs, 0, language)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21855 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21856 font = user_font
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21857 mupdf.fz_show_glyph(text, font, trm, gid, ucs, wmode, bidi_level, markup_dir, language)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21858 adv = mupdf.fz_advance_glyph(font, gid, wmode)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21859 if wmode == 0:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21860 trm = mupdf.fz_pre_translate(trm, adv, 0)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21861 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21862 trm = mupdf.fz_pre_translate(trm, 0, -adv)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21863 return trm
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21864
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21865
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21866 def JM_UnicodeFromBuffer(buff):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21867 buff_bytes = mupdf.fz_buffer_extract_copy(buff)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21868 val = buff_bytes.decode(errors='replace')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21869 z = val.find(chr(0))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21870 if z >= 0:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21871 val = val[:z]
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21872 return val
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21873
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21874
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21875 def message_warning(text):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21876 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21877 Generate a warning.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21878 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21879 message(f'warning: {text}')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21880
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21881
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21882 def JM_update_stream(doc, obj, buffer_, compress):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21883 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21884 update a stream object
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21885 compress stream when beneficial
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21886 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21887 if compress:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21888 length, _ = mupdf.fz_buffer_storage(buffer_)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21889 if length > 30: # ignore small stuff
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21890 buffer_compressed = JM_compress_buffer(buffer_)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21891 assert isinstance(buffer_compressed, mupdf.FzBuffer)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21892 if buffer_compressed.m_internal:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21893 length_compressed, _ = mupdf.fz_buffer_storage(buffer_compressed)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21894 if length_compressed < length: # was it worth the effort?
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21895 mupdf.pdf_dict_put(
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21896 obj,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21897 mupdf.PDF_ENUM_NAME_Filter,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21898 mupdf.PDF_ENUM_NAME_FlateDecode,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21899 )
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21900 mupdf.pdf_update_stream(doc, obj, buffer_compressed, 1)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21901 return
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21902
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21903 mupdf.pdf_update_stream(doc, obj, buffer_, 0)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21904
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21905
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21906 def JM_xobject_from_page(pdfout, fsrcpage, xref, gmap):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21907 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21908 Make an XObject from a PDF page
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21909 For a positive xref assume that its object can be used instead
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21910 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21911 assert isinstance(gmap, mupdf.PdfGraftMap), f'{type(gmap)=}'
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21912 if xref > 0:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21913 xobj1 = mupdf.pdf_new_indirect(pdfout, xref, 0)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21914 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21915 srcpage = _as_pdf_page(fsrcpage.this)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21916 spageref = srcpage.obj()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21917 mediabox = mupdf.pdf_to_rect(mupdf.pdf_dict_get_inheritable(spageref, PDF_NAME('MediaBox')))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21918 # Deep-copy resources object of source page
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21919 o = mupdf.pdf_dict_get_inheritable(spageref, PDF_NAME('Resources'))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21920 if gmap.m_internal:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21921 # use graftmap when possible
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21922 resources = mupdf.pdf_graft_mapped_object(gmap, o)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21923 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21924 resources = mupdf.pdf_graft_object(pdfout, o)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21925
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21926 # get spgage contents source
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21927 res = JM_read_contents(spageref)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21928
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21929 #-------------------------------------------------------------
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21930 # create XObject representing the source page
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21931 #-------------------------------------------------------------
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21932 xobj1 = mupdf.pdf_new_xobject(pdfout, mediabox, mupdf.FzMatrix(), mupdf.PdfObj(0), res)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21933 # store spage contents
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21934 JM_update_stream(pdfout, xobj1, res, 1)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21935
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21936 # store spage resources
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21937 mupdf.pdf_dict_put(xobj1, PDF_NAME('Resources'), resources)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21938 return xobj1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21939
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21940
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21941 def PySequence_Check(s):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21942 return isinstance(s, (tuple, list))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21943
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21944
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21945 def PySequence_Size(s):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21946 return len(s)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21947
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21948
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21949 # constants: error messages. These are also in extra.i.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21950 #
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21951 MSG_BAD_ANNOT_TYPE = "bad annot type"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21952 MSG_BAD_APN = "bad or missing annot AP/N"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21953 MSG_BAD_ARG_INK_ANNOT = "arg must be seq of seq of float pairs"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21954 MSG_BAD_ARG_POINTS = "bad seq of points"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21955 MSG_BAD_BUFFER = "bad type: 'buffer'"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21956 MSG_BAD_COLOR_SEQ = "bad color sequence"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21957 MSG_BAD_DOCUMENT = "cannot open broken document"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21958 MSG_BAD_FILETYPE = "bad filetype"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21959 MSG_BAD_LOCATION = "bad location"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21960 MSG_BAD_OC_CONFIG = "bad config number"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21961 MSG_BAD_OC_LAYER = "bad layer number"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21962 MSG_BAD_OC_REF = "bad 'oc' reference"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21963 MSG_BAD_PAGEID = "bad page id"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21964 MSG_BAD_PAGENO = "bad page number(s)"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21965 MSG_BAD_PDFROOT = "PDF has no root"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21966 MSG_BAD_RECT = "rect is infinite or empty"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21967 MSG_BAD_TEXT = "bad type: 'text'"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21968 MSG_BAD_XREF = "bad xref"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21969 MSG_COLOR_COUNT_FAILED = "color count failed"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21970 MSG_FILE_OR_BUFFER = "need font file or buffer"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21971 MSG_FONT_FAILED = "cannot create font"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21972 MSG_IS_NO_ANNOT = "is no annotation"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21973 MSG_IS_NO_IMAGE = "is no image"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21974 MSG_IS_NO_PDF = "is no PDF"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21975 MSG_IS_NO_DICT = "object is no PDF dict"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21976 MSG_PIX_NOALPHA = "source pixmap has no alpha"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21977 MSG_PIXEL_OUTSIDE = "pixel(s) outside image"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21978
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21979
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21980 JM_Exc_FileDataError = 'FileDataError'
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21981 PyExc_ValueError = 'ValueError'
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21982
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21983 def RAISEPY( msg, exc):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21984 #JM_Exc_CurrentException=exc
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21985 #fz_throw(context, FZ_ERROR_GENERIC, msg)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21986 raise Exception( msg)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21987
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21988
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21989 def PyUnicode_DecodeRawUnicodeEscape(s, errors='strict'):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21990 # FIXED: handle raw unicode escape sequences
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21991 if not s:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21992 return ""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21993 if isinstance(s, str):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21994 rc = s.encode("utf8", errors=errors)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21995 elif isinstance(s, bytes):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21996 rc = s[:]
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21997 ret = rc.decode('raw_unicode_escape', errors=errors)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21998 return ret
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21999
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22000
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22001 def CheckColor(c: OptSeq):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22002 if c:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22003 if (
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22004 type(c) not in (list, tuple)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22005 or len(c) not in (1, 3, 4)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22006 or min(c) < 0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22007 or max(c) > 1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22008 ):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22009 raise ValueError("need 1, 3 or 4 color components in range 0 to 1")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22010
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22011
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22012 def CheckFont(page: Page, fontname: str) -> tuple:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22013 """Return an entry in the page's font list if reference name matches.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22014 """
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22015 for f in page.get_fonts():
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22016 if f[4] == fontname:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22017 return f
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22018
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22019
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22020 def CheckFontInfo(doc: Document, xref: int) -> list:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22021 """Return a font info if present in the document.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22022 """
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22023 for f in doc.FontInfos:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22024 if xref == f[0]:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22025 return f
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22026
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22027
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22028 def CheckMarkerArg(quads: typing.Any) -> tuple:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22029 if CheckRect(quads):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22030 r = Rect(quads)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22031 return (r.quad,)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22032 if CheckQuad(quads):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22033 return (quads,)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22034 for q in quads:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22035 if not (CheckRect(q) or CheckQuad(q)):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22036 raise ValueError("bad quads entry")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22037 return quads
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22038
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22039
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22040 def CheckMorph(o: typing.Any) -> bool:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22041 if not bool(o):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22042 return False
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22043 if not (type(o) in (list, tuple) and len(o) == 2):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22044 raise ValueError("morph must be a sequence of length 2")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22045 if not (len(o[0]) == 2 and len(o[1]) == 6):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22046 raise ValueError("invalid morph param 0")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22047 if not o[1][4] == o[1][5] == 0:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22048 raise ValueError("invalid morph param 1")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22049 return True
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22050
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22051
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22052 def CheckParent(o: typing.Any):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22053 return
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22054 if not hasattr(o, "parent") or o.parent is None:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22055 raise ValueError(f"orphaned object {type(o)=}: parent is None")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22056
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22057
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22058 def CheckQuad(q: typing.Any) -> bool:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22059 """Check whether an object is convex, not empty quad-like.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22060
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22061 It must be a sequence of 4 number pairs.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22062 """
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22063 try:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22064 q0 = Quad(q)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22065 except Exception:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22066 if g_exceptions_verbose > 1: exception_info()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22067 return False
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22068 return q0.is_convex
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22069
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22070
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22071 def CheckRect(r: typing.Any) -> bool:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22072 """Check whether an object is non-degenerate rect-like.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22073
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22074 It must be a sequence of 4 numbers.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22075 """
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22076 try:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22077 r = Rect(r)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22078 except Exception:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22079 if g_exceptions_verbose > 1: exception_info()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22080 return False
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22081 return not (r.is_empty or r.is_infinite)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22082
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22083
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22084 def ColorCode(c: typing.Union[list, tuple, float, None], f: str) -> str:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22085 if not c:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22086 return ""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22087 if hasattr(c, "__float__"):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22088 c = (c,)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22089 CheckColor(c)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22090 if len(c) == 1:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22091 s = _format_g(c[0]) + " "
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22092 return s + "G " if f == "c" else s + "g "
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22093
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22094 if len(c) == 3:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22095 s = _format_g(tuple(c)) + " "
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22096 return s + "RG " if f == "c" else s + "rg "
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22097
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22098 s = _format_g(tuple(c)) + " "
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22099 return s + "K " if f == "c" else s + "k "
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22100
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22101
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22102 def Page__add_text_marker(self, quads, annot_type):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22103 pdfpage = self._pdf_page()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22104 rotation = JM_page_rotation(pdfpage)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22105 def final():
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22106 if rotation != 0:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22107 mupdf.pdf_dict_put_int(pdfpage.obj(), PDF_NAME('Rotate'), rotation)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22108 try:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22109 if rotation != 0:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22110 mupdf.pdf_dict_put_int(pdfpage.obj(), PDF_NAME('Rotate'), 0)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22111 annot = mupdf.pdf_create_annot(pdfpage, annot_type)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22112 for item in quads:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22113 q = JM_quad_from_py(item)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22114 mupdf.pdf_add_annot_quad_point(annot, q)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22115 mupdf.pdf_update_annot(annot)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22116 JM_add_annot_id(annot, "A")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22117 final()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22118 except Exception:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22119 if g_exceptions_verbose: exception_info()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22120 final()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22121 return
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22122 return Annot(annot)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22123
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22124
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22125 def PDF_NAME(x):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22126 assert isinstance(x, str)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22127 ret = getattr(mupdf, f'PDF_ENUM_NAME_{x}')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22128 # Note that we return a (swig proxy for) pdf_obj*, not a mupdf.PdfObj. In
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22129 # the C++ API, the constructor PdfObj::PdfObj(pdf_obj*) is marked as
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22130 # explicit, but this seems to be ignored by SWIG. If SWIG started to
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22131 # generate code that respected `explicit`, we would need to do `return
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22132 # mupdf.PdfObj(ret)`.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22133 #
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22134 # [Compare with extra.i, where we define our own PDF_NAME2() macro that
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22135 # returns a mupdf::PdfObj.]
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22136 return ret
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22137
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22138
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22139 def UpdateFontInfo(doc: Document, info: typing.Sequence):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22140 xref = info[0]
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22141 found = False
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22142 for i, fi in enumerate(doc.FontInfos):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22143 if fi[0] == xref:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22144 found = True
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22145 break
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22146 if found:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22147 doc.FontInfos[i] = info
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22148 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22149 doc.FontInfos.append(info)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22150
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22151
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22152 def args_match(args, *types):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22153 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22154 Returns true if <args> matches <types>.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22155
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22156 Each item in <types> is a type or tuple of types. Any of these types will
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22157 match an item in <args>. `None` will match anything in <args>. `type(None)`
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22158 will match an arg whose value is `None`.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22159 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22160 j = 0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22161 for i in range(len(types)):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22162 type_ = types[i]
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22163 if j >= len(args):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22164 if isinstance(type_, tuple) and None in type_:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22165 # arg is missing but has default value.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22166 continue
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22167 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22168 return False
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22169 if type_ is not None and not isinstance(args[j], type_):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22170 return False
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22171 j += 1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22172 if j != len(args):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22173 return False
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22174 return True
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22175
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22176
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22177 def calc_image_matrix(width, height, tr, rotate, keep):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22178 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22179 # compute image insertion matrix
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22180 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22181 trect = JM_rect_from_py(tr)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22182 rot = mupdf.fz_rotate(rotate)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22183 trw = trect.x1 - trect.x0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22184 trh = trect.y1 - trect.y0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22185 w = trw
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22186 h = trh
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22187 if keep:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22188 large = max(width, height)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22189 fw = width / large
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22190 fh = height / large
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22191 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22192 fw = fh = 1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22193 small = min(fw, fh)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22194 if rotate != 0 and rotate != 180:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22195 f = fw
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22196 fw = fh
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22197 fh = f
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22198 if fw < 1:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22199 if trw / fw > trh / fh:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22200 w = trh * small
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22201 h = trh
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22202 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22203 w = trw
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22204 h = trw / small
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22205 elif fw != fh:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22206 if trw / fw > trh / fh:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22207 w = trh / small
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22208 h = trh
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22209 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22210 w = trw
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22211 h = trw * small
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22212 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22213 w = trw
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22214 h = trh
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22215 tmp = mupdf.fz_make_point(
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22216 (trect.x0 + trect.x1) / 2,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22217 (trect.y0 + trect.y1) / 2,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22218 )
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22219 mat = mupdf.fz_make_matrix(1, 0, 0, 1, -0.5, -0.5)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22220 mat = mupdf.fz_concat(mat, rot)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22221 mat = mupdf.fz_concat(mat, mupdf.fz_scale(w, h))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22222 mat = mupdf.fz_concat(mat, mupdf.fz_translate(tmp.x, tmp.y))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22223 return mat
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22224
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22225
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22226 def detect_super_script(line, ch):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22227 if line.m_internal.wmode == 0 and line.m_internal.dir.x == 1 and line.m_internal.dir.y == 0:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22228 return ch.m_internal.origin.y < line.m_internal.first_char.origin.y - ch.m_internal.size * 0.1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22229 return 0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22230
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22231
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22232 def dir_str(x):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22233 ret = f'{x} {type(x)} ({len(dir(x))}):\n'
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22234 for i in dir(x):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22235 ret += f' {i}\n'
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22236 return ret
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22237
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22238
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22239 def getTJstr(text: str, glyphs: typing.Union[list, tuple, None], simple: bool, ordering: int) -> str:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22240 """ Return a PDF string enclosed in [] brackets, suitable for the PDF TJ
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22241 operator.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22242
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22243 Notes:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22244 The input string is converted to either 2 or 4 hex digits per character.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22245 Args:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22246 simple: no glyphs: 2-chars, use char codes as the glyph
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22247 glyphs: 2-chars, use glyphs instead of char codes (Symbol,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22248 ZapfDingbats)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22249 not simple: ordering < 0: 4-chars, use glyphs not char codes
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22250 ordering >=0: a CJK font! 4 chars, use char codes as glyphs
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22251 """
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22252 if text.startswith("[<") and text.endswith(">]"): # already done
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22253 return text
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22254
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22255 if not bool(text):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22256 return "[<>]"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22257
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22258 if simple: # each char or its glyph is coded as a 2-byte hex
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22259 if glyphs is None: # not Symbol, not ZapfDingbats: use char code
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22260 otxt = "".join(["%02x" % ord(c) if ord(c) < 256 else "b7" for c in text])
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22261 else: # Symbol or ZapfDingbats: use glyphs
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22262 otxt = "".join(
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22263 ["%02x" % glyphs[ord(c)][0] if ord(c) < 256 else "b7" for c in text]
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22264 )
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22265 return "[<" + otxt + ">]"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22266
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22267 # non-simple fonts: each char or its glyph is coded as 4-byte hex
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22268 if ordering < 0: # not a CJK font: use the glyphs
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22269 otxt = "".join(["%04x" % glyphs[ord(c)][0] for c in text])
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22270 else: # CJK: use the char codes
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22271 otxt = "".join(["%04x" % ord(c) for c in text])
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22272
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22273 return "[<" + otxt + ">]"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22274
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22275
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22276 def get_pdf_str(s: str) -> str:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22277 """ Return a PDF string depending on its coding.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22278
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22279 Notes:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22280 Returns a string bracketed with either "()" or "<>" for hex values.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22281 If only ascii then "(original)" is returned, else if only 8 bit chars
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22282 then "(original)" with interspersed octal strings \nnn is returned,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22283 else a string "<FEFF[hexstring]>" is returned, where [hexstring] is the
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22284 UTF-16BE encoding of the original.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22285 """
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22286 if not bool(s):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22287 return "()"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22288
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22289 def make_utf16be(s):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22290 r = bytearray([254, 255]) + bytearray(s, "UTF-16BE")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22291 return "<" + r.hex() + ">" # brackets indicate hex
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22292
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22293 # The following either returns the original string with mixed-in
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22294 # octal numbers \nnn for chars outside the ASCII range, or returns
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22295 # the UTF-16BE BOM version of the string.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22296 r = ""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22297 for c in s:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22298 oc = ord(c)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22299 if oc > 255: # shortcut if beyond 8-bit code range
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22300 return make_utf16be(s)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22301
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22302 if oc > 31 and oc < 127: # in ASCII range
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22303 if c in ("(", ")", "\\"): # these need to be escaped
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22304 r += "\\"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22305 r += c
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22306 continue
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22307
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22308 if oc > 127: # beyond ASCII
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22309 r += "\\%03o" % oc
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22310 continue
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22311
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22312 # now the white spaces
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22313 if oc == 8: # backspace
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22314 r += "\\b"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22315 elif oc == 9: # tab
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22316 r += "\\t"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22317 elif oc == 10: # line feed
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22318 r += "\\n"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22319 elif oc == 12: # form feed
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22320 r += "\\f"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22321 elif oc == 13: # carriage return
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22322 r += "\\r"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22323 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22324 r += "\\267" # unsupported: replace by 0xB7
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22325
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22326 return "(" + r + ")"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22327
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22328
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22329 def get_tessdata(tessdata=None):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22330 """Detect Tesseract language support folder.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22331
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22332 This function is used to enable OCR via Tesseract even if the language
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22333 support folder is not specified directly or in environment variable
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22334 TESSDATA_PREFIX.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22335
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22336 * If <tessdata> is set we return it directly.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22337
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22338 * Otherwise we return `os.environ['TESSDATA_PREFIX']` if set.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22339
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22340 * Otherwise we search for a Tesseract installation and return its language
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22341 support folder.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22342
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22343 * Otherwise we raise an exception.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22344 """
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22345 if tessdata:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22346 return tessdata
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22347 tessdata = os.getenv("TESSDATA_PREFIX")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22348 if tessdata: # use environment variable if set
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22349 return tessdata
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22350
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22351 # Try to locate the tesseract-ocr installation.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22352
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22353 import subprocess
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22354
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22355 cp = subprocess.run('tesseract --list-langs', shell=1, capture_output=1, check=0, text=True)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22356 if cp.returncode == 0:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22357 m = re.search('List of available languages in "(.+)"', cp.stdout)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22358 if m:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22359 tessdata = m.group(1)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22360 return tessdata
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22361
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22362 # Windows systems:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22363 if sys.platform == "win32":
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22364 cp = subprocess.run("where tesseract", shell=1, capture_output=1, check=0, text=True)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22365 response = cp.stdout.strip()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22366 if cp.returncode or not response:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22367 raise RuntimeError("No tessdata specified and Tesseract is not installed")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22368 dirname = os.path.dirname(response) # path of tesseract.exe
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22369 tessdata = os.path.join(dirname, "tessdata") # language support
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22370 if os.path.exists(tessdata): # all ok?
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22371 return tessdata
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22372 else: # should not happen!
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22373 raise RuntimeError("No tessdata specified and Tesseract installation has no {tessdata} folder")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22374
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22375 # Unix-like systems:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22376 attempts = list()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22377 for path in 'tesseract-ocr', 'tesseract':
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22378 cp = subprocess.run(f'whereis {path}', shell=1, capture_output=1, check=0, text=True)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22379 if cp.returncode == 0:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22380 response = cp.stdout.strip().split()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22381 if len(response) == 2:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22382 # search tessdata in folder structure
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22383 dirname = response[1] # contains tesseract-ocr installation folder
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22384 pattern = f"{dirname}/*/tessdata"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22385 attempts.append(pattern)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22386 tessdatas = glob.glob(pattern)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22387 tessdatas.sort()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22388 if tessdatas:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22389 return tessdatas[-1]
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22390 if attempts:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22391 text = 'No tessdata specified and no match for:\n'
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22392 for attempt in attempts:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22393 text += f' {attempt}'
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22394 raise RuntimeError(text)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22395 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22396 raise RuntimeError('No tessdata specified and Tesseract is not installed')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22397
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22398
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22399 def css_for_pymupdf_font(
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22400 fontcode: str, *, CSS: OptStr = None, archive: AnyType = None, name: OptStr = None
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22401 ) -> str:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22402 """Create @font-face items for the given fontcode of pymupdf-fonts.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22403
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22404 Adds @font-face support for fonts contained in package pymupdf-fonts.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22405
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22406 Creates a CSS font-family for all fonts starting with string 'fontcode'.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22407
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22408 Note:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22409 The font naming convention in package pymupdf-fonts is "fontcode<sf>",
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22410 where the suffix "sf" is either empty or one of "it", "bo" or "bi".
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22411 These suffixes thus represent the regular, italic, bold or bold-italic
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22412 variants of a font. For example, font code "notos" refers to fonts
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22413 "notos" - "Noto Sans Regular"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22414 "notosit" - "Noto Sans Italic"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22415 "notosbo" - "Noto Sans Bold"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22416 "notosbi" - "Noto Sans Bold Italic"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22417
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22418 This function creates four CSS @font-face definitions and collectively
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22419 assigns the font-family name "notos" to them (or the "name" value).
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22420
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22421 All fitting font buffers of the pymupdf-fonts package are placed / added
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22422 to the archive provided as parameter.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22423 To use the font in pymupdf.Story, execute 'set_font(fontcode)'. The correct
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22424 font weight (bold) or style (italic) will automatically be selected.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22425 Expects and returns the CSS source, with the new CSS definitions appended.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22426
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22427 Args:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22428 fontcode: (str) font code for naming the font variants to include.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22429 E.g. "fig" adds notos, notosi, notosb, notosbi fonts.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22430 A maximum of 4 font variants is accepted.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22431 CSS: (str) CSS string to add @font-face definitions to.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22432 archive: (Archive, mandatory) where to place the font buffers.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22433 name: (str) use this as family-name instead of 'fontcode'.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22434 Returns:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22435 Modified CSS, with appended @font-face statements for each font variant
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22436 of fontcode.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22437 Fontbuffers associated with "fontcode" will be added to 'archive'.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22438 """
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22439 # @font-face template string
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22440 CSSFONT = "\n@font-face {font-family: %s; src: url(%s);%s%s}\n"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22441
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22442 if not type(archive) is Archive:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22443 raise ValueError("'archive' must be an Archive")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22444 if CSS is None:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22445 CSS = ""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22446
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22447 # select font codes starting with the pass-in string
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22448 font_keys = [k for k in fitz_fontdescriptors.keys() if k.startswith(fontcode)]
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22449 if font_keys == []:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22450 raise ValueError(f"No font code '{fontcode}' found in pymupdf-fonts.")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22451 if len(font_keys) > 4:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22452 raise ValueError("fontcode too short")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22453 if name is None: # use this name for font-family
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22454 name = fontcode
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22455
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22456 for fkey in font_keys:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22457 font = fitz_fontdescriptors[fkey]
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22458 bold = font["bold"] # determine font property
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22459 italic = font["italic"] # determine font property
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22460 fbuff = font["loader"]() # load the fontbuffer
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22461 archive.add(fbuff, fkey) # update the archive
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22462 bold_text = "font-weight: bold;" if bold else ""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22463 italic_text = "font-style: italic;" if italic else ""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22464 CSS += CSSFONT % (name, fkey, bold_text, italic_text)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22465 return CSS
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22466
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22467
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22468 def get_text_length(text: str, fontname: str ="helv", fontsize: float =11, encoding: int =0) -> float:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22469 """Calculate length of a string for a built-in font.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22470
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22471 Args:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22472 fontname: name of the font.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22473 fontsize: font size points.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22474 encoding: encoding to use, 0=Latin (default), 1=Greek, 2=Cyrillic.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22475 Returns:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22476 (float) length of text.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22477 """
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22478 fontname = fontname.lower()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22479 basename = Base14_fontdict.get(fontname, None)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22480
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22481 glyphs = None
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22482 if basename == "Symbol":
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22483 glyphs = symbol_glyphs
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22484 if basename == "ZapfDingbats":
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22485 glyphs = zapf_glyphs
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22486 if glyphs is not None:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22487 w = sum([glyphs[ord(c)][1] if ord(c) < 256 else glyphs[183][1] for c in text])
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22488 return w * fontsize
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22489
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22490 if fontname in Base14_fontdict.keys():
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22491 return util_measure_string(
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22492 text, Base14_fontdict[fontname], fontsize, encoding
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22493 )
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22494
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22495 if fontname in (
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22496 "china-t",
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22497 "china-s",
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22498 "china-ts",
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22499 "china-ss",
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22500 "japan",
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22501 "japan-s",
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22502 "korea",
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22503 "korea-s",
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22504 ):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22505 return len(text) * fontsize
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22506
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22507 raise ValueError("Font '%s' is unsupported" % fontname)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22508
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22509
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22510 def image_profile(img: ByteString) -> dict:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22511 """ Return basic properties of an image.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22512
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22513 Args:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22514 img: bytes, bytearray, io.BytesIO object or an opened image file.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22515 Returns:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22516 A dictionary with keys width, height, colorspace.n, bpc, type, ext and size,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22517 where 'type' is the MuPDF image type (0 to 14) and 'ext' the suitable
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22518 file extension.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22519 """
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22520 if type(img) is io.BytesIO:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22521 stream = img.getvalue()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22522 elif hasattr(img, "read"):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22523 stream = img.read()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22524 elif type(img) in (bytes, bytearray):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22525 stream = img
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22526 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22527 raise ValueError("bad argument 'img'")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22528
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22529 return TOOLS.image_profile(stream)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22530
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22531
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22532 def jm_append_merge(dev):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22533 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22534 Append current path to list or merge into last path of the list.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22535 (1) Append if first path, different item lists or not a 'stroke' version
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22536 of previous path
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22537 (2) If new path has the same items, merge its content into previous path
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22538 and change path["type"] to "fs".
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22539 (3) If "out" is callable, skip the previous and pass dictionary to it.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22540 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22541 #log(f'{getattr(dev, "pathdict", None)=}')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22542 assert isinstance(dev.out, list)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22543 #log( f'{dev.out=}')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22544
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22545 if callable(dev.method) or dev.method: # function or method
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22546 # callback.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22547 if dev.method is None:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22548 # fixme, this surely cannot happen?
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22549 assert 0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22550 #resp = PyObject_CallFunctionObjArgs(out, dev.pathdict, NULL)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22551 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22552 #log(f'calling {dev.out=} {dev.method=} {dev.pathdict=}')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22553 resp = getattr(dev.out, dev.method)(dev.pathdict)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22554 if not resp:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22555 message("calling cdrawings callback function/method failed!")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22556 dev.pathdict = None
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22557 return
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22558
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22559 def append():
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22560 #log(f'jm_append_merge(): clearing dev.pathdict')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22561 dev.out.append(dev.pathdict.copy())
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22562 dev.pathdict.clear()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22563 assert isinstance(dev.out, list)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22564 len_ = len(dev.out) # len of output list so far
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22565 #log('{len_=}')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22566 if len_ == 0: # always append first path
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22567 return append()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22568 #log(f'{getattr(dev, "pathdict", None)=}')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22569 thistype = dev.pathdict[ dictkey_type]
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22570 #log(f'{thistype=}')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22571 if thistype != 's': # if not stroke, then append
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22572 return append()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22573 prev = dev.out[ len_-1] # get prev path
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22574 #log( f'{prev=}')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22575 prevtype = prev[ dictkey_type]
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22576 #log( f'{prevtype=}')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22577 if prevtype != 'f': # if previous not fill, append
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22578 return append()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22579 # last check: there must be the same list of items for "f" and "s".
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22580 previtems = prev[ dictkey_items]
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22581 thisitems = dev.pathdict[ dictkey_items]
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22582 if previtems != thisitems:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22583 return append()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22584
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22585 #rc = PyDict_Merge(prev, dev.pathdict, 0); // merge with no override
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22586 try:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22587 for k, v in dev.pathdict.items():
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22588 if k not in prev:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22589 prev[k] = v
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22590 rc = 0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22591 except Exception:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22592 if g_exceptions_verbose: exception_info()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22593 #raise
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22594 rc = -1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22595 if rc == 0:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22596 prev[ dictkey_type] = 'fs'
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22597 dev.pathdict.clear()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22598 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22599 message("could not merge stroke and fill path")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22600 append()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22601
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22602
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22603 def jm_bbox_add_rect( dev, ctx, rect, code):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22604 if not dev.layers:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22605 dev.result.append( (code, JM_py_from_rect(rect)))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22606 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22607 dev.result.append( (code, JM_py_from_rect(rect), dev.layer_name))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22608
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22609
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22610 def jm_bbox_fill_image( dev, ctx, image, ctm, alpha, color_params):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22611 r = mupdf.FzRect(mupdf.FzRect.Fixed_UNIT)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22612 r = mupdf.ll_fz_transform_rect( r.internal(), ctm)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22613 jm_bbox_add_rect( dev, ctx, r, "fill-image")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22614
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22615
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22616 def jm_bbox_fill_image_mask( dev, ctx, image, ctm, colorspace, color, alpha, color_params):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22617 try:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22618 jm_bbox_add_rect( dev, ctx, mupdf.ll_fz_transform_rect(mupdf.fz_unit_rect, ctm), "fill-imgmask")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22619 except Exception:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22620 if g_exceptions_verbose: exception_info()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22621 raise
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22622
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22623
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22624 def jm_bbox_fill_path( dev, ctx, path, even_odd, ctm, colorspace, color, alpha, color_params):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22625 even_odd = True if even_odd else False
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22626 try:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22627 jm_bbox_add_rect( dev, ctx, mupdf.ll_fz_bound_path(path, None, ctm), "fill-path")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22628 except Exception:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22629 if g_exceptions_verbose: exception_info()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22630 raise
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22631
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22632
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22633 def jm_bbox_fill_shade( dev, ctx, shade, ctm, alpha, color_params):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22634 try:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22635 jm_bbox_add_rect( dev, ctx, mupdf.ll_fz_bound_shade( shade, ctm), "fill-shade")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22636 except Exception:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22637 if g_exceptions_verbose: exception_info()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22638 raise
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22639
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22640
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22641 def jm_bbox_stroke_text( dev, ctx, text, stroke, ctm, *args):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22642 try:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22643 jm_bbox_add_rect( dev, ctx, mupdf.ll_fz_bound_text( text, stroke, ctm), "stroke-text")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22644 except Exception:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22645 if g_exceptions_verbose: exception_info()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22646 raise
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22647
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22648
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22649 def jm_bbox_fill_text( dev, ctx, text, ctm, *args):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22650 try:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22651 jm_bbox_add_rect( dev, ctx, mupdf.ll_fz_bound_text( text, None, ctm), "fill-text")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22652 except Exception:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22653 if g_exceptions_verbose: exception_info()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22654 raise
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22655
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22656
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22657 def jm_bbox_ignore_text( dev, ctx, text, ctm):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22658 jm_bbox_add_rect( dev, ctx, mupdf.ll_fz_bound_text(text, None, ctm), "ignore-text")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22659
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22660
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22661 def jm_bbox_stroke_path( dev, ctx, path, stroke, ctm, colorspace, color, alpha, color_params):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22662 try:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22663 jm_bbox_add_rect( dev, ctx, mupdf.ll_fz_bound_path( path, stroke, ctm), "stroke-path")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22664 except Exception:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22665 if g_exceptions_verbose: exception_info()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22666 raise
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22667
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22668
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22669 def jm_checkquad(dev):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22670 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22671 Check whether the last 4 lines represent a quad.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22672 Because of how we count, the lines are a polyline already, i.e. last point
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22673 of a line equals 1st point of next line.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22674 So we check for a polygon (last line's end point equals start point).
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22675 If not true we return 0.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22676 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22677 #log(f'{getattr(dev, "pathdict", None)=}')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22678 items = dev.pathdict[ dictkey_items]
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22679 len_ = len(items)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22680 f = [0] * 8 # coordinates of the 4 corners
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22681 # fill the 8 floats in f, start from items[-4:]
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22682 for i in range( 4): # store line start points
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22683 line = items[ len_ - 4 + i]
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22684 temp = JM_point_from_py( line[1])
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22685 f[i * 2] = temp.x
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22686 f[i * 2 + 1] = temp.y
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22687 lp = JM_point_from_py( line[ 2])
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22688 if lp.x != f[0] or lp.y != f[1]:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22689 # not a polygon!
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22690 #dev.linecount -= 1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22691 return 0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22692
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22693 # we have detected a quad
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22694 dev.linecount = 0 # reset this
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22695 # a quad item is ("qu", (ul, ur, ll, lr)), where the tuple items
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22696 # are pairs of floats representing a quad corner each.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22697
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22698 # relationship of float array to quad points:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22699 # (0, 1) = ul, (2, 3) = ll, (6, 7) = ur, (4, 5) = lr
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22700 q = mupdf.fz_make_quad(f[0], f[1], f[6], f[7], f[2], f[3], f[4], f[5])
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22701 rect = ('qu', JM_py_from_quad(q))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22702
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22703 items[ len_ - 4] = rect # replace item -4 by rect
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22704 del items[ len_ - 3 : len_] # delete remaining 3 items
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22705 return 1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22706
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22707
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22708 def jm_checkrect(dev):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22709 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22710 Check whether the last 3 path items represent a rectangle.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22711 Returns 1 if we have modified the path, otherwise 0.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22712 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22713 #log(f'{getattr(dev, "pathdict", None)=}')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22714 dev.linecount = 0 # reset line count
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22715 orientation = 0 # area orientation of rectangle
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22716 items = dev.pathdict[ dictkey_items]
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22717 len_ = len(items)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22718
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22719 line0 = items[ len_ - 3]
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22720 ll = JM_point_from_py( line0[ 1])
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22721 lr = JM_point_from_py( line0[ 2])
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22722
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22723 # no need to extract "line1"!
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22724 line2 = items[ len_ - 1]
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22725 ur = JM_point_from_py( line2[ 1])
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22726 ul = JM_point_from_py( line2[ 2])
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22727
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22728 # Assumption:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22729 # When decomposing rects, MuPDF always starts with a horizontal line,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22730 # followed by a vertical line, followed by a horizontal line.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22731 # First line: (ll, lr), third line: (ul, ur).
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22732 # If 1st line is below 3rd line, we record anti-clockwise (+1), else
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22733 # clockwise (-1) orientation.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22734
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22735 if (0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22736 or ll.y != lr.y
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22737 or ll.x != ul.x
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22738 or ur.y != ul.y
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22739 or ur.x != lr.x
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22740 ):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22741 return 0 # not a rectangle
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22742
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22743 # we have a rect, replace last 3 "l" items by one "re" item.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22744 if ul.y < lr.y:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22745 r = mupdf.fz_make_rect(ul.x, ul.y, lr.x, lr.y)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22746 orientation = 1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22747 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22748 r = mupdf.fz_make_rect(ll.x, ll.y, ur.x, ur.y)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22749 orientation = -1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22750
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22751 rect = ( 're', JM_py_from_rect(r), orientation)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22752 items[ len_ - 3] = rect # replace item -3 by rect
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22753 del items[ len_ - 2 : len_] # delete remaining 2 items
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22754 return 1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22755
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22756
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22757 def jm_trace_text( dev, text, type_, ctm, colorspace, color, alpha, seqno):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22758 span = text.head
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22759 while 1:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22760 if not span:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22761 break
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22762 jm_trace_text_span( dev, span, type_, ctm, colorspace, color, alpha, seqno)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22763 span = span.next
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22764
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22765
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22766 def jm_trace_text_span(dev, span, type_, ctm, colorspace, color, alpha, seqno):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22767 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22768 jm_trace_text_span(fz_context *ctx, PyObject *out, fz_text_span *span, int type, fz_matrix ctm, fz_colorspace *colorspace, const float *color, float alpha, size_t seqno)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22769 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22770 out_font = None
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22771 assert isinstance( span, mupdf.fz_text_span)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22772 span = mupdf.FzTextSpan( span)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22773 assert isinstance( ctm, mupdf.fz_matrix)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22774 ctm = mupdf.FzMatrix( ctm)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22775 fontname = JM_font_name( span.font())
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22776 #float rgb[3];
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22777 #PyObject *chars = PyTuple_New(span->len);
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22778
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22779 mat = mupdf.fz_concat(span.trm(), ctm) # text transformation matrix
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22780 dir = mupdf.fz_transform_vector(mupdf.fz_make_point(1, 0), mat) # writing direction
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22781 fsize = math.sqrt(dir.x * dir.x + dir.y * dir.y) # font size
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22782
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22783 dir = mupdf.fz_normalize_vector(dir)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22784
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22785 space_adv = 0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22786 asc = JM_font_ascender( span.font())
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22787 dsc = JM_font_descender( span.font())
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22788 if asc < 1e-3: # probably Tesseract font
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22789 dsc = -0.1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22790 asc = 0.9
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22791
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22792 # compute effective ascender / descender
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22793 ascsize = asc * fsize / (asc - dsc)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22794 dscsize = dsc * fsize / (asc - dsc)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22795 fflags = 0 # font flags
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22796 mono = mupdf.fz_font_is_monospaced( span.font())
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22797 fflags += mono * TEXT_FONT_MONOSPACED
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22798 fflags += mupdf.fz_font_is_italic( span.font()) * TEXT_FONT_ITALIC
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22799 fflags += mupdf.fz_font_is_serif( span.font()) * TEXT_FONT_SERIFED
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22800 fflags += mupdf.fz_font_is_bold( span.font()) * TEXT_FONT_BOLD
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22801
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22802 last_adv = 0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22803
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22804 # walk through characters of span
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22805 span_bbox = mupdf.FzRect()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22806 rot = mupdf.fz_make_matrix(dir.x, dir.y, -dir.y, dir.x, 0, 0)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22807 if dir.x == -1: # left-right flip
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22808 rot.d = 1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22809
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22810 chars = []
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22811 for i in range( span.m_internal.len):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22812 adv = 0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22813 if span.items(i).gid >= 0:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22814 adv = mupdf.fz_advance_glyph( span.font(), span.items(i).gid, span.m_internal.wmode)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22815 adv *= fsize
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22816 last_adv = adv
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22817 if span.items(i).ucs == 32:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22818 space_adv = adv
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22819 char_orig = mupdf.fz_make_point(span.items(i).x, span.items(i).y)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22820 char_orig = mupdf.fz_transform_point(char_orig, ctm)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22821 m1 = mupdf.fz_make_matrix(1, 0, 0, 1, -char_orig.x, -char_orig.y)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22822 m1 = mupdf.fz_concat(m1, rot)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22823 m1 = mupdf.fz_concat(m1, mupdf.FzMatrix(1, 0, 0, 1, char_orig.x, char_orig.y))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22824 x0 = char_orig.x
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22825 x1 = x0 + adv
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22826 if (
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22827 (mat.d > 0 and (dir.x == 1 or dir.x == -1))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22828 or
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22829 (mat.b != 0 and mat.b == -mat.c)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22830 ): # up-down flip
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22831 y0 = char_orig.y + dscsize
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22832 y1 = char_orig.y + ascsize
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22833 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22834 y0 = char_orig.y - ascsize
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22835 y1 = char_orig.y - dscsize
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22836 char_bbox = mupdf.fz_make_rect(x0, y0, x1, y1)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22837 char_bbox = mupdf.fz_transform_rect(char_bbox, m1)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22838 chars.append(
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22839 (
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22840 span.items(i).ucs,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22841 span.items(i).gid,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22842 (
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22843 char_orig.x,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22844 char_orig.y,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22845 ),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22846 (
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22847 char_bbox.x0,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22848 char_bbox.y0,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22849 char_bbox.x1,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22850 char_bbox.y1,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22851 ),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22852 )
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22853 )
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22854 if i > 0:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22855 span_bbox = mupdf.fz_union_rect(span_bbox, char_bbox)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22856 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22857 span_bbox = char_bbox
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22858 chars = tuple(chars)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22859
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22860 if not space_adv:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22861 if not (fflags & TEXT_FONT_MONOSPACED):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22862 c, out_font = mupdf.fz_encode_character_with_fallback( span.font(), 32, 0, 0)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22863 space_adv = mupdf.fz_advance_glyph(
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22864 span.font(),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22865 c,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22866 span.m_internal.wmode,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22867 )
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22868 space_adv *= fsize
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22869 if not space_adv:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22870 space_adv = last_adv
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22871 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22872 space_adv = last_adv # for mono, any char width suffices
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22873
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22874 # make the span dictionary
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22875 span_dict = dict()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22876 span_dict[ 'dir'] = JM_py_from_point(dir)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22877 span_dict[ 'font'] = JM_EscapeStrFromStr(fontname)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22878 span_dict[ 'wmode'] = span.m_internal.wmode
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22879 span_dict[ 'flags'] =fflags
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22880 span_dict[ "bidi_lvl"] =span.m_internal.bidi_level
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22881 span_dict[ "bidi_dir"] = span.m_internal.markup_dir
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22882 span_dict[ 'ascender'] = asc
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22883 span_dict[ 'descender'] = dsc
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22884 span_dict[ 'colorspace'] = 3
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22885
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22886 if colorspace:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22887 rgb = mupdf.fz_convert_color(
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22888 mupdf.FzColorspace( mupdf.ll_fz_keep_colorspace( colorspace)),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22889 color,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22890 mupdf.fz_device_rgb(),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22891 mupdf.FzColorspace(),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22892 mupdf.FzColorParams(),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22893 )
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22894 rgb = rgb[:3] # mupdf.fz_convert_color() always returns 4 items.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22895 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22896 rgb = (0, 0, 0)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22897
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22898 if dev.linewidth > 0: # width of character border
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22899 linewidth = dev.linewidth
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22900 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22901 linewidth = fsize * 0.05 # default: 5% of font size
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22902 #log(f'{dev.linewidth=:.4f} {fsize=:.4f} {linewidth=:.4f}')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22903
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22904 span_dict[ 'color'] = rgb
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22905 span_dict[ 'size'] = fsize
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22906 span_dict[ "opacity"] = alpha
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22907 span_dict[ "linewidth"] = linewidth
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22908 span_dict[ "spacewidth"] = space_adv
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22909 span_dict[ 'type'] = type_
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22910 span_dict[ 'bbox'] = JM_py_from_rect(span_bbox)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22911 span_dict[ 'layer'] = dev.layer_name
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22912 span_dict[ "seqno"] = seqno
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22913 span_dict[ 'chars'] = chars
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22914 #log(f'{span_dict=}')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22915 dev.out.append( span_dict)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22916
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22917
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22918 def jm_lineart_color(colorspace, color):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22919 #log(f' ')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22920 if colorspace:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22921 try:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22922 # Need to be careful to use a named Python object to ensure
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22923 # that the `params` we pass to mupdf.ll_fz_convert_color() is
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22924 # valid. E.g. doing:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22925 #
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22926 # rgb = mupdf.ll_fz_convert_color(..., mupdf.FzColorParams().internal())
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22927 #
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22928 # - seems to end up with a corrupted `params`.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22929 #
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22930 cs = mupdf.FzColorspace( mupdf.FzColorspace.Fixed_RGB)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22931 cp = mupdf.FzColorParams()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22932 rgb = mupdf.ll_fz_convert_color(
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22933 colorspace,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22934 color,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22935 cs.m_internal,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22936 None,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22937 cp.internal(),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22938 )
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22939 except Exception:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22940 if g_exceptions_verbose: exception_info()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22941 raise
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22942 return rgb[:3]
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22943 return ()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22944
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22945
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22946 def jm_lineart_drop_device(dev, ctx):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22947 if isinstance(dev.out, list):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22948 dev.out = []
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22949 dev.scissors = []
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22950
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22951
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22952 def jm_lineart_fill_path( dev, ctx, path, even_odd, ctm, colorspace, color, alpha, color_params):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22953 #log(f'{getattr(dev, "pathdict", None)=}')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22954 #log(f'jm_lineart_fill_path(): {dev.seqno=}')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22955 even_odd = True if even_odd else False
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22956 try:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22957 assert isinstance( ctm, mupdf.fz_matrix)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22958 dev.ctm = mupdf.FzMatrix( ctm) # fz_concat(ctm, dev_ptm);
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22959 dev.path_type = trace_device_FILL_PATH
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22960 jm_lineart_path( dev, ctx, path)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22961 if dev.pathdict is None:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22962 return
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22963 #item_count = len(dev.pathdict[ dictkey_items])
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22964 #if item_count == 0:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22965 # return
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22966 dev.pathdict[ dictkey_type] ="f"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22967 dev.pathdict[ "even_odd"] = even_odd
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22968 dev.pathdict[ "fill_opacity"] = alpha
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22969 #log(f'setting dev.pathdict[ "closePath"] to false')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22970 #dev.pathdict[ "closePath"] = False
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22971 dev.pathdict[ "fill"] = jm_lineart_color( colorspace, color)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22972 dev.pathdict[ dictkey_rect] = JM_py_from_rect(dev.pathrect)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22973 dev.pathdict[ "seqno"] = dev.seqno
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22974 #jm_append_merge(dev)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22975 dev.pathdict[ 'layer'] = dev.layer_name
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22976 if dev.clips:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22977 dev.pathdict[ 'level'] = dev.depth
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22978 jm_append_merge(dev)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22979 dev.seqno += 1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22980 #log(f'jm_lineart_fill_path() end: {getattr(dev, "pathdict", None)=}')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22981 except Exception:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22982 if g_exceptions_verbose: exception_info()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22983 raise
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22984
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22985
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22986 # There are 3 text trace types:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22987 # 0 - fill text (PDF Tr 0)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22988 # 1 - stroke text (PDF Tr 1)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22989 # 3 - ignore text (PDF Tr 3)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22990
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22991 def jm_lineart_fill_text( dev, ctx, text, ctm, colorspace, color, alpha, color_params):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22992 if 0:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22993 log(f'{type(ctx)=} {ctx=}')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22994 log(f'{type(dev)=} {dev=}')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22995 log(f'{type(text)=} {text=}')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22996 log(f'{type(ctm)=} {ctm=}')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22997 log(f'{type(colorspace)=} {colorspace=}')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22998 log(f'{type(color)=} {color=}')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22999 log(f'{type(alpha)=} {alpha=}')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23000 log(f'{type(color_params)=} {color_params=}')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23001 jm_trace_text(dev, text, 0, ctm, colorspace, color, alpha, dev.seqno)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23002 dev.seqno += 1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23003
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23004
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23005 def jm_lineart_ignore_text(dev, text, ctm):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23006 #log(f'{getattr(dev, "pathdict", None)=}')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23007 jm_trace_text(dev, text, 3, ctm, None, None, 1, dev.seqno)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23008 dev.seqno += 1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23009
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23010
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23011 class Walker(mupdf.FzPathWalker2):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23012
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23013 def __init__(self, dev):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23014 super().__init__()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23015 self.use_virtual_moveto()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23016 self.use_virtual_lineto()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23017 self.use_virtual_curveto()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23018 self.use_virtual_closepath()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23019 self.dev = dev
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23020
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23021 def closepath(self, ctx): # trace_close().
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23022 #log(f'Walker(): {self.dev.pathdict=}')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23023 try:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23024 if self.dev.linecount == 3:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23025 if jm_checkrect(self.dev):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23026 #log(f'end1: {self.dev.pathdict=}')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23027 return
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23028 self.dev.linecount = 0 # reset # of consec. lines
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23029
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23030 if self.dev.havemove:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23031 if self.dev.lastpoint != self.dev.firstpoint:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23032 item = ("l", JM_py_from_point(self.dev.lastpoint),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23033 JM_py_from_point(self.dev.firstpoint))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23034 self.dev.pathdict[dictkey_items].append(item)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23035 self.dev.lastpoint = self.dev.firstpoint
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23036 self.dev.pathdict["closePath"] = False
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23037
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23038 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23039 #log('setting self.dev.pathdict[ "closePath"] to true')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23040 self.dev.pathdict[ "closePath"] = True
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23041 #log(f'end2: {self.dev.pathdict=}')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23042
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23043 self.dev.havemove = 0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23044
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23045 except Exception:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23046 if g_exceptions_verbose: exception_info()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23047 raise
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23048
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23049 def curveto(self, ctx, x1, y1, x2, y2, x3, y3): # trace_curveto().
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23050 #log(f'Walker(): {self.dev.pathdict=}')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23051 try:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23052 self.dev.linecount = 0 # reset # of consec. lines
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23053 p1 = mupdf.fz_make_point(x1, y1)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23054 p2 = mupdf.fz_make_point(x2, y2)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23055 p3 = mupdf.fz_make_point(x3, y3)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23056 p1 = mupdf.fz_transform_point(p1, self.dev.ctm)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23057 p2 = mupdf.fz_transform_point(p2, self.dev.ctm)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23058 p3 = mupdf.fz_transform_point(p3, self.dev.ctm)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23059 self.dev.pathrect = mupdf.fz_include_point_in_rect(self.dev.pathrect, p1)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23060 self.dev.pathrect = mupdf.fz_include_point_in_rect(self.dev.pathrect, p2)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23061 self.dev.pathrect = mupdf.fz_include_point_in_rect(self.dev.pathrect, p3)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23062
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23063 list_ = (
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23064 "c",
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23065 JM_py_from_point(self.dev.lastpoint),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23066 JM_py_from_point(p1),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23067 JM_py_from_point(p2),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23068 JM_py_from_point(p3),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23069 )
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23070 self.dev.lastpoint = p3
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23071 self.dev.pathdict[ dictkey_items].append( list_)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23072 except Exception:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23073 if g_exceptions_verbose: exception_info()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23074 raise
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23075
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23076 def lineto(self, ctx, x, y): # trace_lineto().
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23077 #log(f'Walker(): {self.dev.pathdict=}')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23078 try:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23079 p1 = mupdf.fz_transform_point( mupdf.fz_make_point(x, y), self.dev.ctm)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23080 self.dev.pathrect = mupdf.fz_include_point_in_rect( self.dev.pathrect, p1)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23081 list_ = (
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23082 'l',
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23083 JM_py_from_point( self.dev.lastpoint),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23084 JM_py_from_point(p1),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23085 )
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23086 self.dev.lastpoint = p1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23087 items = self.dev.pathdict[ dictkey_items]
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23088 items.append( list_)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23089 self.dev.linecount += 1 # counts consecutive lines
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23090 if self.dev.linecount == 4 and self.dev.path_type != trace_device_FILL_PATH:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23091 # shrink to "re" or "qu" item
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23092 jm_checkquad(self.dev)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23093 except Exception:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23094 if g_exceptions_verbose: exception_info()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23095 raise
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23096
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23097 def moveto(self, ctx, x, y): # trace_moveto().
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23098 if 0 and isinstance(self.dev.pathdict, dict):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23099 log(f'self.dev.pathdict:')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23100 for n, v in self.dev.pathdict.items():
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23101 log( ' {type(n)=} {len(n)=} {n!r} {n}: {v!r}: {v}')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23102
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23103 #log(f'Walker(): {type(self.dev.pathdict)=} {self.dev.pathdict=}')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23104
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23105 try:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23106 #log( '{=dev.ctm type(dev.ctm)}')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23107 self.dev.lastpoint = mupdf.fz_transform_point(
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23108 mupdf.fz_make_point(x, y),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23109 self.dev.ctm,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23110 )
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23111 if mupdf.fz_is_infinite_rect( self.dev.pathrect):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23112 self.dev.pathrect = mupdf.fz_make_rect(
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23113 self.dev.lastpoint.x,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23114 self.dev.lastpoint.y,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23115 self.dev.lastpoint.x,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23116 self.dev.lastpoint.y,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23117 )
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23118 self.dev.firstpoint = self.dev.lastpoint
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23119 self.dev.havemove = 1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23120 self.dev.linecount = 0 # reset # of consec. lines
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23121 except Exception:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23122 if g_exceptions_verbose: exception_info()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23123 raise
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23124
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23125
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23126 def jm_lineart_path(dev, ctx, path):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23127 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23128 Create the "items" list of the path dictionary
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23129 * either create or empty the path dictionary
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23130 * reset the end point of the path
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23131 * reset count of consecutive lines
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23132 * invoke fz_walk_path(), which create the single items
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23133 * if no items detected, empty path dict again
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23134 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23135 #log(f'{getattr(dev, "pathdict", None)=}')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23136 try:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23137 dev.pathrect = mupdf.FzRect( mupdf.FzRect.Fixed_INFINITE)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23138 dev.linecount = 0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23139 dev.lastpoint = mupdf.FzPoint( 0, 0)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23140 dev.pathdict = dict()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23141 dev.pathdict[ dictkey_items] = []
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23142
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23143 # First time we create a Walker instance is slow, e.g. 0.3s, then later
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23144 # times run in around 0.01ms. If Walker is defined locally instead of
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23145 # globally, each time takes 0.3s.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23146 #
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23147 walker = Walker(dev)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23148 # Unlike fz_run_page(), fz_path_walker callbacks are not passed
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23149 # a pointer to the struct, instead they get an arbitrary
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23150 # void*. The underlying C++ Director callbacks use this void* to
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23151 # identify the fz_path_walker instance so in turn we need to pass
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23152 # arg=walker.m_internal.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23153 mupdf.fz_walk_path( mupdf.FzPath(mupdf.ll_fz_keep_path(path)), walker, walker.m_internal)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23154 # Check if any items were added ...
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23155 if not dev.pathdict[ dictkey_items]:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23156 dev.pathdict = None
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23157 except Exception:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23158 if g_exceptions_verbose: exception_info()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23159 raise
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23160
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23161
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23162 def jm_lineart_stroke_path( dev, ctx, path, stroke, ctm, colorspace, color, alpha, color_params):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23163 #log(f'{dev.pathdict=} {dev.clips=}')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23164 try:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23165 assert isinstance( ctm, mupdf.fz_matrix)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23166 dev.pathfactor = 1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23167 if ctm.a != 0 and abs(ctm.a) == abs(ctm.d):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23168 dev.pathfactor = abs(ctm.a)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23169 elif ctm.b != 0 and abs(ctm.b) == abs(ctm.c):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23170 dev.pathfactor = abs(ctm.b)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23171 dev.ctm = mupdf.FzMatrix( ctm) # fz_concat(ctm, dev_ptm);
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23172 dev.path_type = trace_device_STROKE_PATH
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23173
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23174 jm_lineart_path( dev, ctx, path)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23175 if dev.pathdict is None:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23176 return
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23177 dev.pathdict[ dictkey_type] = 's'
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23178 dev.pathdict[ 'stroke_opacity'] = alpha
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23179 dev.pathdict[ 'color'] = jm_lineart_color( colorspace, color)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23180 dev.pathdict[ dictkey_width] = dev.pathfactor * stroke.linewidth
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23181 dev.pathdict[ 'lineCap'] = (
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23182 stroke.start_cap,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23183 stroke.dash_cap,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23184 stroke.end_cap,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23185 )
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23186 dev.pathdict[ 'lineJoin'] = dev.pathfactor * stroke.linejoin
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23187 if 'closePath' not in dev.pathdict:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23188 #log('setting dev.pathdict["closePath"] to false')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23189 dev.pathdict['closePath'] = False
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23190
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23191 # output the "dashes" string
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23192 if stroke.dash_len:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23193 buff = mupdf.fz_new_buffer( 256)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23194 mupdf.fz_append_string( buff, "[ ") # left bracket
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23195 for i in range( stroke.dash_len):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23196 # We use mupdf python's SWIG-generated floats_getitem() fn to
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23197 # access float *stroke.dash_list[].
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23198 value = mupdf.floats_getitem( stroke.dash_list, i) # stroke.dash_list[i].
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23199 mupdf.fz_append_string( buff, f'{_format_g(dev.pathfactor * value)} ')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23200 mupdf.fz_append_string( buff, f'] {_format_g(dev.pathfactor * stroke.dash_phase)}')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23201 dev.pathdict[ 'dashes'] = buff
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23202 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23203 dev.pathdict[ 'dashes'] = '[] 0'
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23204 dev.pathdict[ dictkey_rect] = JM_py_from_rect(dev.pathrect)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23205 dev.pathdict['layer'] = dev.layer_name
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23206 dev.pathdict[ 'seqno'] = dev.seqno
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23207 if dev.clips:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23208 dev.pathdict[ 'level'] = dev.depth
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23209 jm_append_merge(dev)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23210 dev.seqno += 1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23211
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23212 except Exception:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23213 if g_exceptions_verbose: exception_info()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23214 raise
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23215
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23216
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23217 def jm_lineart_clip_path(dev, ctx, path, even_odd, ctm, scissor):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23218 if not dev.clips:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23219 return
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23220 dev.ctm = mupdf.FzMatrix(ctm) # fz_concat(ctm, trace_device_ptm);
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23221 dev.path_type = trace_device_CLIP_PATH
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23222 jm_lineart_path(dev, ctx, path)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23223 if dev.pathdict is None:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23224 return
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23225 dev.pathdict[ dictkey_type] = 'clip'
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23226 dev.pathdict[ 'even_odd'] = bool(even_odd)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23227 if 'closePath' not in dev.pathdict:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23228 #log(f'setting dev.pathdict["closePath"] to False')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23229 dev.pathdict['closePath'] = False
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23230
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23231 dev.pathdict['scissor'] = JM_py_from_rect(compute_scissor(dev))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23232 dev.pathdict['level'] = dev.depth
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23233 dev.pathdict['layer'] = dev.layer_name
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23234 jm_append_merge(dev)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23235 dev.depth += 1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23236
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23237
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23238 def jm_lineart_clip_stroke_path(dev, ctx, path, stroke, ctm, scissor):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23239 if not dev.clips:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23240 return
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23241 dev.ctm = mupdf.FzMatrix(ctm) # fz_concat(ctm, trace_device_ptm);
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23242 dev.path_type = trace_device_CLIP_STROKE_PATH
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23243 jm_lineart_path(dev, ctx, path)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23244 if dev.pathdict is None:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23245 return
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23246 dev.pathdict['dictkey_type'] = 'clip'
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23247 dev.pathdict['even_odd'] = None
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23248 if 'closePath' not in dev.pathdict:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23249 #log(f'setting dev.pathdict["closePath"] to False')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23250 dev.pathdict['closePath'] = False
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23251 dev.pathdict['scissor'] = JM_py_from_rect(compute_scissor(dev))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23252 dev.pathdict['level'] = dev.depth
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23253 dev.pathdict['layer'] = dev.layer_name
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23254 jm_append_merge(dev)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23255 dev.depth += 1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23256
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23257
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23258 def jm_lineart_clip_stroke_text(dev, ctx, text, stroke, ctm, scissor):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23259 if not dev.clips:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23260 return
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23261 compute_scissor(dev)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23262 dev.depth += 1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23263
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23264
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23265 def jm_lineart_clip_text(dev, ctx, text, ctm, scissor):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23266 if not dev.clips:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23267 return
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23268 compute_scissor(dev)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23269 dev.depth += 1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23270
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23271
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23272 def jm_lineart_clip_image_mask( dev, ctx, image, ctm, scissor):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23273 if not dev.clips:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23274 return
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23275 compute_scissor(dev)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23276 dev.depth += 1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23277
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23278
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23279 def jm_lineart_pop_clip(dev, ctx):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23280 if not dev.clips or not dev.scissors:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23281 return
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23282 len_ = len(dev.scissors)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23283 if len_ < 1:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23284 return
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23285 del dev.scissors[-1]
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23286 dev.depth -= 1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23287
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23288
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23289 def jm_lineart_begin_layer(dev, ctx, name):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23290 if name:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23291 dev.layer_name = name
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23292 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23293 dev.layer_name = ""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23294
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23295
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23296 def jm_lineart_end_layer(dev, ctx):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23297 dev.layer_name = ""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23298
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23299
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23300 def jm_lineart_begin_group(dev, ctx, bbox, cs, isolated, knockout, blendmode, alpha):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23301 #log(f'{dev.pathdict=} {dev.clips=}')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23302 if not dev.clips:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23303 return
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23304 dev.pathdict = { # Py_BuildValue("{s:s,s:N,s:N,s:N,s:s,s:f,s:i,s:N}",
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23305 "type": "group",
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23306 "rect": JM_py_from_rect(bbox),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23307 "isolated": bool(isolated),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23308 "knockout": bool(knockout),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23309 "blendmode": mupdf.fz_blendmode_name(blendmode),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23310 "opacity": alpha,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23311 "level": dev.depth,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23312 "layer": dev.layer_name
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23313 }
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23314 jm_append_merge(dev)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23315 dev.depth += 1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23316
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23317
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23318 def jm_lineart_end_group(dev, ctx):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23319 #log(f'{dev.pathdict=} {dev.clips=}')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23320 if not dev.clips:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23321 return
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23322 dev.depth -= 1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23323
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23324
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23325 def jm_lineart_stroke_text(dev, ctx, text, stroke, ctm, colorspace, color, alpha, color_params):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23326 jm_trace_text(dev, text, 1, ctm, colorspace, color, alpha, dev.seqno)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23327 dev.seqno += 1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23328
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23329
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23330 def jm_dev_linewidth( dev, ctx, path, stroke, matrix, colorspace, color, alpha, color_params):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23331 dev.linewidth = stroke.linewidth
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23332 jm_increase_seqno( dev, ctx)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23333
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23334
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23335 def jm_increase_seqno( dev, ctx, *vargs):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23336 try:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23337 dev.seqno += 1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23338 except Exception:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23339 if g_exceptions_verbose: exception_info()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23340 raise
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23341
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23342
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23343 def planish_line(p1: point_like, p2: point_like) -> Matrix:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23344 """Compute matrix which maps line from p1 to p2 to the x-axis, such that it
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23345 maintains its length and p1 * matrix = Point(0, 0).
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23346
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23347 Args:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23348 p1, p2: point_like
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23349 Returns:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23350 Matrix which maps p1 to Point(0, 0) and p2 to a point on the x axis at
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23351 the same distance to Point(0,0). Will always combine a rotation and a
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23352 transformation.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23353 """
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23354 p1 = Point(p1)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23355 p2 = Point(p2)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23356 return Matrix(util_hor_matrix(p1, p2))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23357
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23358
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23359 class JM_image_reporter_Filter(mupdf.PdfFilterOptions2):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23360 def __init__(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23361 super().__init__()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23362 self.use_virtual_image_filter()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23363
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23364 def image_filter( self, ctx, ctm, name, image):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23365 assert isinstance(ctm, mupdf.fz_matrix)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23366 JM_image_filter(self, mupdf.FzMatrix(ctm), name, image)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23367 if mupdf_cppyy:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23368 # cppyy doesn't appear to treat returned None as nullptr,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23369 # resulting in obscure 'python exception' exception.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23370 return 0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23371
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23372
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23373 class JM_new_bbox_device_Device(mupdf.FzDevice2):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23374 def __init__(self, result, layers):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23375 super().__init__()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23376 self.result = result
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23377 self.layers = layers
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23378 self.layer_name = ""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23379 self.use_virtual_fill_path()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23380 self.use_virtual_stroke_path()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23381 self.use_virtual_fill_text()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23382 self.use_virtual_stroke_text()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23383 self.use_virtual_ignore_text()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23384 self.use_virtual_fill_shade()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23385 self.use_virtual_fill_image()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23386 self.use_virtual_fill_image_mask()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23387
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23388 self.use_virtual_begin_layer()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23389 self.use_virtual_end_layer()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23390
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23391 begin_layer = jm_lineart_begin_layer
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23392 end_layer = jm_lineart_end_layer
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23393
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23394 fill_path = jm_bbox_fill_path
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23395 stroke_path = jm_bbox_stroke_path
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23396 fill_text = jm_bbox_fill_text
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23397 stroke_text = jm_bbox_stroke_text
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23398 ignore_text = jm_bbox_ignore_text
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23399 fill_shade = jm_bbox_fill_shade
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23400 fill_image = jm_bbox_fill_image
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23401 fill_image_mask = jm_bbox_fill_image_mask
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23402
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23403
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23404 class JM_new_output_fileptr_Output(mupdf.FzOutput2):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23405 def __init__(self, bio):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23406 super().__init__()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23407 self.bio = bio
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23408 self.use_virtual_write()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23409 self.use_virtual_seek()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23410 self.use_virtual_tell()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23411 self.use_virtual_truncate()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23412
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23413 def seek( self, ctx, offset, whence):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23414 return self.bio.seek( offset, whence)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23415
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23416 def tell( self, ctx):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23417 ret = self.bio.tell()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23418 return ret
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23419
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23420 def truncate( self, ctx):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23421 return self.bio.truncate()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23422
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23423 def write(self, ctx, data_raw, data_length):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23424 data = mupdf.raw_to_python_bytes(data_raw, data_length)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23425 return self.bio.write(data)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23426
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23427
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23428 def compute_scissor(dev):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23429 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23430 Every scissor of a clip is a sub rectangle of the preceding clip scissor
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23431 if the clip level is larger.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23432 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23433 if dev.scissors is None:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23434 dev.scissors = list()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23435 num_scissors = len(dev.scissors)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23436 if num_scissors > 0:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23437 last_scissor = dev.scissors[num_scissors-1]
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23438 scissor = JM_rect_from_py(last_scissor)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23439 scissor = mupdf.fz_intersect_rect(scissor, dev.pathrect)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23440 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23441 scissor = dev.pathrect
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23442 dev.scissors.append(JM_py_from_rect(scissor))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23443 return scissor
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23444
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23445
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23446 class JM_new_lineart_device_Device(mupdf.FzDevice2):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23447 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23448 LINEART device for Python method Page.get_cdrawings()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23449 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23450 #log(f'JM_new_lineart_device_Device()')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23451 def __init__(self, out, clips, method):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23452 #log(f'JM_new_lineart_device_Device.__init__()')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23453 super().__init__()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23454 # fixme: this results in "Unexpected call of unimplemented virtual_fnptrs fn FzDevice2::drop_device().".
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23455 #self.use_virtual_drop_device()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23456 self.use_virtual_fill_path()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23457 self.use_virtual_stroke_path()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23458 self.use_virtual_clip_path()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23459 self.use_virtual_clip_image_mask()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23460 self.use_virtual_clip_stroke_path()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23461 self.use_virtual_clip_stroke_text()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23462 self.use_virtual_clip_text()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23463
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23464 self.use_virtual_fill_text
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23465 self.use_virtual_stroke_text
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23466 self.use_virtual_ignore_text
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23467
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23468 self.use_virtual_fill_shade()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23469 self.use_virtual_fill_image()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23470 self.use_virtual_fill_image_mask()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23471
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23472 self.use_virtual_pop_clip()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23473
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23474 self.use_virtual_begin_group()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23475 self.use_virtual_end_group()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23476
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23477 self.use_virtual_begin_layer()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23478 self.use_virtual_end_layer()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23479
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23480 self.out = out
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23481 self.seqno = 0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23482 self.depth = 0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23483 self.clips = clips
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23484 self.method = method
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23485
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23486 self.scissors = None
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23487 self.layer_name = "" # optional content name
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23488 self.pathrect = None
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23489
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23490 self.linewidth = 0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23491 self.ptm = mupdf.FzMatrix()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23492 self.ctm = mupdf.FzMatrix()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23493 self.rot = mupdf.FzMatrix()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23494 self.lastpoint = mupdf.FzPoint()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23495 self.firstpoint = mupdf.FzPoint()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23496 self.havemove = 0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23497 self.pathrect = mupdf.FzRect()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23498 self.pathfactor = 0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23499 self.linecount = 0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23500 self.path_type = 0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23501
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23502 #drop_device = jm_lineart_drop_device
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23503
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23504 fill_path = jm_lineart_fill_path
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23505 stroke_path = jm_lineart_stroke_path
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23506 clip_image_mask = jm_lineart_clip_image_mask
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23507 clip_path = jm_lineart_clip_path
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23508 clip_stroke_path = jm_lineart_clip_stroke_path
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23509 clip_text = jm_lineart_clip_text
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23510 clip_stroke_text = jm_lineart_clip_stroke_text
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23511
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23512 fill_text = jm_increase_seqno
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23513 stroke_text = jm_increase_seqno
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23514 ignore_text = jm_increase_seqno
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23515
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23516 fill_shade = jm_increase_seqno
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23517 fill_image = jm_increase_seqno
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23518 fill_image_mask = jm_increase_seqno
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23519
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23520 pop_clip = jm_lineart_pop_clip
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23521
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23522 begin_group = jm_lineart_begin_group
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23523 end_group = jm_lineart_end_group
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23524
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23525 begin_layer = jm_lineart_begin_layer
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23526 end_layer = jm_lineart_end_layer
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23527
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23528
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23529 class JM_new_texttrace_device(mupdf.FzDevice2):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23530 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23531 Trace TEXT device for Python method Page.get_texttrace()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23532 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23533
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23534 def __init__(self, out):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23535 super().__init__()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23536 self.use_virtual_fill_path()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23537 self.use_virtual_stroke_path()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23538 self.use_virtual_fill_text()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23539 self.use_virtual_stroke_text()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23540 self.use_virtual_ignore_text()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23541 self.use_virtual_fill_shade()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23542 self.use_virtual_fill_image()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23543 self.use_virtual_fill_image_mask()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23544
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23545 self.use_virtual_begin_layer()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23546 self.use_virtual_end_layer()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23547
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23548 self.out = out
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23549
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23550 self.seqno = 0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23551 self.depth = 0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23552 self.clips = 0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23553 self.method = None
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23554
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23555 self.seqno = 0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23556
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23557 self.pathdict = dict()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23558 self.scissors = list()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23559 self.linewidth = 0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23560 self.ptm = mupdf.FzMatrix()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23561 self.ctm = mupdf.FzMatrix()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23562 self.rot = mupdf.FzMatrix()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23563 self.lastpoint = mupdf.FzPoint()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23564 self.pathrect = mupdf.FzRect()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23565 self.pathfactor = 0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23566 self.linecount = 0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23567 self.path_type = 0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23568 self.layer_name = ""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23569
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23570 fill_path = jm_increase_seqno
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23571 stroke_path = jm_dev_linewidth
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23572 fill_text = jm_lineart_fill_text
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23573 stroke_text = jm_lineart_stroke_text
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23574 ignore_text = jm_lineart_ignore_text
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23575 fill_shade = jm_increase_seqno
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23576 fill_image = jm_increase_seqno
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23577 fill_image_mask = jm_increase_seqno
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23578
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23579 begin_layer = jm_lineart_begin_layer
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23580 end_layer = jm_lineart_end_layer
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23581
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23582
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23583 def ConversionHeader(i: str, filename: OptStr ="unknown"):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23584 t = i.lower()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23585 import textwrap
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23586 html = textwrap.dedent("""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23587 <!DOCTYPE html>
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23588 <html>
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23589 <head>
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23590 <style>
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23591 body{background-color:gray}
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23592 div{position:relative;background-color:white;margin:1em auto}
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23593 p{position:absolute;margin:0}
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23594 img{position:absolute}
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23595 </style>
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23596 </head>
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23597 <body>
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23598 """)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23599
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23600 xml = textwrap.dedent("""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23601 <?xml version="1.0"?>
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23602 <document name="%s">
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23603 """
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23604 % filename
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23605 )
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23606
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23607 xhtml = textwrap.dedent("""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23608 <?xml version="1.0"?>
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23609 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23610 <html xmlns="http://www.w3.org/1999/xhtml">
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23611 <head>
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23612 <style>
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23613 body{background-color:gray}
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23614 div{background-color:white;margin:1em;padding:1em}
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23615 p{white-space:pre-wrap}
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23616 </style>
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23617 </head>
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23618 <body>
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23619 """)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23620
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23621 text = ""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23622 json = '{"document": "%s", "pages": [\n' % filename
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23623 if t == "html":
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23624 r = html
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23625 elif t == "json":
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23626 r = json
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23627 elif t == "xml":
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23628 r = xml
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23629 elif t == "xhtml":
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23630 r = xhtml
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23631 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23632 r = text
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23633
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23634 return r
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23635
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23636
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23637 def ConversionTrailer(i: str):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23638 t = i.lower()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23639 text = ""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23640 json = "]\n}"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23641 html = "</body>\n</html>\n"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23642 xml = "</document>\n"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23643 xhtml = html
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23644 if t == "html":
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23645 r = html
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23646 elif t == "json":
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23647 r = json
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23648 elif t == "xml":
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23649 r = xml
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23650 elif t == "xhtml":
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23651 r = xhtml
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23652 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23653 r = text
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23654
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23655 return r
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23656
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23657
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23658 def annot_preprocess(page: "Page") -> int:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23659 """Prepare for annotation insertion on the page.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23660
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23661 Returns:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23662 Old page rotation value. Temporarily sets rotation to 0 when required.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23663 """
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23664 CheckParent(page)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23665 if not page.parent.is_pdf:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23666 raise ValueError("is no PDF")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23667 old_rotation = page.rotation
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23668 if old_rotation != 0:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23669 page.set_rotation(0)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23670 return old_rotation
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23671
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23672
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23673 def annot_postprocess(page: "Page", annot: "Annot") -> None:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23674 """Clean up after annotation insertion.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23675
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23676 Set ownership flag and store annotation in page annotation dictionary.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23677 """
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23678 #annot.parent = weakref.proxy(page)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23679 assert isinstance( page, Page)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23680 assert isinstance( annot, Annot)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23681 annot.parent = page
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23682 page._annot_refs[id(annot)] = annot
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23683 annot.thisown = True
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23684
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23685
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23686 def canon(c):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23687 assert isinstance(c, int)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23688 # TODO: proper unicode case folding
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23689 # TODO: character equivalence (a matches ä, etc)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23690 if c == 0xA0 or c == 0x2028 or c == 0x2029:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23691 return ord(' ')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23692 if c == ord('\r') or c == ord('\n') or c == ord('\t'):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23693 return ord(' ')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23694 if c >= ord('A') and c <= ord('Z'):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23695 return c - ord('A') + ord('a')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23696 return c
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23697
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23698
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23699 def chartocanon(s):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23700 assert isinstance(s, str)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23701 n, c = mupdf.fz_chartorune(s)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23702 c = canon(c)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23703 return n, c
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23704
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23705
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23706 def dest_is_valid(o, page_count, page_object_nums, names_list):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23707 p = mupdf.pdf_dict_get( o, PDF_NAME('A'))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23708 if (
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23709 mupdf.pdf_name_eq(
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23710 mupdf.pdf_dict_get( p, PDF_NAME('S')),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23711 PDF_NAME('GoTo')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23712 )
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23713 and not string_in_names_list(
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23714 mupdf.pdf_dict_get( p, PDF_NAME('D')),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23715 names_list
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23716 )
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23717 ):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23718 return 0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23719
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23720 p = mupdf.pdf_dict_get( o, PDF_NAME('Dest'))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23721 if not p.m_internal:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23722 pass
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23723 elif mupdf.pdf_is_string( p):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23724 return string_in_names_list( p, names_list)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23725 elif not dest_is_valid_page(
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23726 mupdf.pdf_array_get( p, 0),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23727 page_object_nums,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23728 page_count,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23729 ):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23730 return 0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23731 return 1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23732
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23733
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23734 def dest_is_valid_page(obj, page_object_nums, pagecount):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23735 num = mupdf.pdf_to_num(obj)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23736
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23737 if num == 0:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23738 return 0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23739 for i in range(pagecount):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23740 if page_object_nums[i] == num:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23741 return 1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23742 return 0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23743
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23744
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23745 def find_string(s, needle):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23746 assert isinstance(s, str)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23747 for i in range(len(s)):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23748 end = match_string(s[i:], needle)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23749 if end is not None:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23750 end += i
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23751 return i, end
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23752 return None, None
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23753
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23754
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23755 def get_pdf_now() -> str:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23756 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23757 "Now" timestamp in PDF Format
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23758 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23759 import time
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23760 tz = "%s'%s'" % (
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23761 str(abs(time.altzone // 3600)).rjust(2, "0"),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23762 str((abs(time.altzone // 60) % 60)).rjust(2, "0"),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23763 )
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23764 tstamp = time.strftime("D:%Y%m%d%H%M%S", time.localtime())
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23765 if time.altzone > 0:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23766 tstamp += "-" + tz
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23767 elif time.altzone < 0:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23768 tstamp += "+" + tz
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23769 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23770 pass
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23771 return tstamp
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23772
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23773
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23774 class ElementPosition(object):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23775 """Convert a dictionary with element position information to an object."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23776
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23777 def __init__(self):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23778 pass
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23779
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23780
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23781 def make_story_elpos():
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23782 return ElementPosition()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23783
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23784
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23785 def get_highlight_selection(page, start: point_like =None, stop: point_like =None, clip: rect_like =None) -> list:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23786 """Return rectangles of text lines between two points.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23787
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23788 Notes:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23789 The default of 'start' is top-left of 'clip'. The default of 'stop'
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23790 is bottom-reight of 'clip'.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23791
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23792 Args:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23793 start: start point_like
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23794 stop: end point_like, must be 'below' start
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23795 clip: consider this rect_like only, default is page rectangle
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23796 Returns:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23797 List of line bbox intersections with the area established by the
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23798 parameters.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23799 """
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23800 # validate and normalize arguments
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23801 if clip is None:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23802 clip = page.rect
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23803 clip = Rect(clip)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23804 if start is None:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23805 start = clip.tl
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23806 if stop is None:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23807 stop = clip.br
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23808 clip.y0 = start.y
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23809 clip.y1 = stop.y
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23810 if clip.is_empty or clip.is_infinite:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23811 return []
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23812
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23813 # extract text of page, clip only, no images, expand ligatures
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23814 blocks = page.get_text(
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23815 "dict", flags=0, clip=clip,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23816 )["blocks"]
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23817
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23818 lines = [] # will return this list of rectangles
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23819 for b in blocks:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23820 bbox = Rect(b["bbox"])
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23821 if bbox.is_infinite or bbox.is_empty:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23822 continue
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23823 for line in b["lines"]:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23824 bbox = Rect(line["bbox"])
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23825 if bbox.is_infinite or bbox.is_empty:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23826 continue
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23827 lines.append(bbox)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23828
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23829 if lines == []: # did not select anything
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23830 return lines
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23831
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23832 lines.sort(key=lambda bbox: bbox.y1) # sort by vertical positions
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23833
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23834 # cut off prefix from first line if start point is close to its top
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23835 bboxf = lines.pop(0)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23836 if bboxf.y0 - start.y <= 0.1 * bboxf.height: # close enough?
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23837 r = Rect(start.x, bboxf.y0, bboxf.br) # intersection rectangle
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23838 if not (r.is_empty or r.is_infinite):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23839 lines.insert(0, r) # insert again if not empty
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23840 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23841 lines.insert(0, bboxf) # insert again
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23842
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23843 if lines == []: # the list might have been emptied
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23844 return lines
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23845
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23846 # cut off suffix from last line if stop point is close to its bottom
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23847 bboxl = lines.pop()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23848 if stop.y - bboxl.y1 <= 0.1 * bboxl.height: # close enough?
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23849 r = Rect(bboxl.tl, stop.x, bboxl.y1) # intersection rectangle
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23850 if not (r.is_empty or r.is_infinite):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23851 lines.append(r) # append if not empty
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23852 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23853 lines.append(bboxl) # append again
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23854
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23855 return lines
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23856
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23857
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23858 def glyph_name_to_unicode(name: str) -> int:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23859 """Convenience function accessing unicodedata."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23860 import unicodedata
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23861 try:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23862 unc = ord(unicodedata.lookup(name))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23863 except Exception:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23864 unc = 65533
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23865 return unc
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23866
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23867
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23868 def hdist(dir, a, b):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23869 dx = b.x - a.x
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23870 dy = b.y - a.y
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23871 return mupdf.fz_abs(dx * dir.x + dy * dir.y)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23872
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23873
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23874 def make_table(rect: rect_like =(0, 0, 1, 1), cols: int =1, rows: int =1) -> list:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23875 """Return a list of (rows x cols) equal sized rectangles.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23876
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23877 Notes:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23878 A utility to fill a given area with table cells of equal size.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23879 Args:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23880 rect: rect_like to use as the table area
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23881 rows: number of rows
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23882 cols: number of columns
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23883 Returns:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23884 A list with <rows> items, where each item is a list of <cols>
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23885 PyMuPDF Rect objects of equal sizes.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23886 """
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23887 rect = Rect(rect) # ensure this is a Rect
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23888 if rect.is_empty or rect.is_infinite:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23889 raise ValueError("rect must be finite and not empty")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23890 tl = rect.tl
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23891
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23892 height = rect.height / rows # height of one table cell
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23893 width = rect.width / cols # width of one table cell
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23894 delta_h = (width, 0, width, 0) # diff to next right rect
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23895 delta_v = (0, height, 0, height) # diff to next lower rect
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23896
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23897 r = Rect(tl, tl.x + width, tl.y + height) # first rectangle
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23898
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23899 # make the first row
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23900 row = [r]
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23901 for i in range(1, cols):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23902 r += delta_h # build next rect to the right
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23903 row.append(r)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23904
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23905 # make result, starts with first row
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23906 rects = [row]
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23907 for i in range(1, rows):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23908 row = rects[i - 1] # take previously appended row
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23909 nrow = [] # the new row to append
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23910 for r in row: # for each previous cell add its downward copy
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23911 nrow.append(r + delta_v)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23912 rects.append(nrow) # append new row to result
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23913
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23914 return rects
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23915
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23916
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23917 def util_ensure_widget_calc(annot):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23918 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23919 Ensure that widgets with /AA/C JavaScript are in array AcroForm/CO
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23920 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23921 annot_obj = mupdf.pdf_annot_obj(annot.this)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23922 pdf = mupdf.pdf_get_bound_document(annot_obj)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23923 PDFNAME_CO = mupdf.pdf_new_name("CO") # = PDF_NAME(CO)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23924 acro = mupdf.pdf_dict_getl( # get AcroForm dict
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23925 mupdf.pdf_trailer(pdf),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23926 PDF_NAME('Root'),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23927 PDF_NAME('AcroForm'),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23928 )
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23929
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23930 CO = mupdf.pdf_dict_get(acro, PDFNAME_CO) # = AcroForm/CO
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23931 if not mupdf.pdf_is_array(CO):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23932 CO = mupdf.pdf_dict_put_array(acro, PDFNAME_CO, 2)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23933 n = mupdf.pdf_array_len(CO)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23934 found = 0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23935 xref = mupdf.pdf_to_num(annot_obj)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23936 for i in range(n):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23937 nxref = mupdf.pdf_to_num(mupdf.pdf_array_get(CO, i))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23938 if xref == nxref:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23939 found = 1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23940 break
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23941 if not found:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23942 mupdf.pdf_array_push(CO, mupdf.pdf_new_indirect(pdf, xref, 0))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23943
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23944
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23945 def util_make_rect( *args, p0=None, p1=None, x0=None, y0=None, x1=None, y1=None):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23946 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23947 Helper for initialising rectangle classes.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23948
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23949 2022-09-02: This is quite different from PyMuPDF's util_make_rect(), which
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23950 uses `goto` in ways that don't easily translate to Python.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23951
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23952 Returns (x0, y0, x1, y1) derived from <args>, then override with p0, p1,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23953 x0, y0, x1, y1 if they are not None.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23954
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23955 Accepts following forms for <args>:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23956 () returns all zeros.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23957 (top-left, bottom-right)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23958 (top-left, x1, y1)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23959 (x0, y0, bottom-right)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23960 (x0, y0, x1, y1)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23961 (rect)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23962
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23963 Where top-left and bottom-right are (x, y) or something with .x, .y
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23964 members; rect is something with .x0, .y0, .x1, and .y1 members.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23965
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23966 2023-11-18: we now override with p0, p1, x0, y0, x1, y1 if not None.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23967 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23968 def get_xy( arg):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23969 if isinstance( arg, (list, tuple)) and len( arg) == 2:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23970 return arg[0], arg[1]
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23971 if isinstance( arg, (Point, mupdf.FzPoint, mupdf.fz_point)):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23972 return arg.x, arg.y
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23973 return None, None
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23974 def make_tuple( a):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23975 if isinstance( a, tuple):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23976 return a
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23977 if isinstance( a, Point):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23978 return a.x, a.y
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23979 elif isinstance( a, (Rect, IRect, mupdf.FzRect, mupdf.fz_rect)):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23980 return a.x0, a.y0, a.x1, a.y1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23981 if not isinstance( a, (list, tuple)):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23982 a = a,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23983 return a
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23984 def handle_args():
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23985 if len(args) == 0:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23986 return 0, 0, 0, 0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23987 elif len(args) == 1:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23988 arg = args[0]
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23989 if isinstance( arg, (list, tuple)) and len( arg) == 2:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23990 p1, p2 = arg
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23991 ret = *p1, *p2
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23992 assert len(ret) == 4
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23993 return ret
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23994 if isinstance( arg, (list, tuple)) and len( arg) == 3:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23995 a, b, c = arg
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23996 a = make_tuple(a)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23997 b = make_tuple(b)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23998 c = make_tuple(c)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23999 ret = *a, *b, *c
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24000 assert len(ret) == 4
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24001 return ret
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24002 ret = make_tuple( arg)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24003 assert len(ret) == 4, f'{arg=} {ret=}'
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24004 return ret
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24005 elif len(args) == 2:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24006 ret = get_xy( args[0]) + get_xy( args[1])
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24007 assert len(ret) == 4
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24008 return ret
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24009 elif len(args) == 3:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24010 x0, y0 = get_xy( args[0])
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24011 if (x0, y0) != (None, None):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24012 return x0, y0, args[1], args[2]
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24013 x1, y1 = get_xy( args[2])
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24014 if (x1, y1) != (None, None):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24015 return args[0], args[1], x1, y1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24016 elif len(args) == 4:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24017 return args[0], args[1], args[2], args[3]
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24018 raise Exception( f'Unrecognised args: {args}')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24019 ret_x0, ret_y0, ret_x1, ret_y1 = handle_args()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24020 if p0 is not None: ret_x0, ret_y0 = get_xy(p0)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24021 if p1 is not None: ret_x1, ret_y1 = get_xy(p1)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24022 if x0 is not None: ret_x0 = x0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24023 if y0 is not None: ret_y0 = y0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24024 if x1 is not None: ret_x1 = x1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24025 if y1 is not None: ret_y1 = y1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24026 return ret_x0, ret_y0, ret_x1, ret_y1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24027
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24028
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24029 def util_make_irect( *args, p0=None, p1=None, x0=None, y0=None, x1=None, y1=None):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24030 a, b, c, d = util_make_rect( *args, p0=p0, p1=p1, x0=x0, y0=y0, x1=x1, y1=y1)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24031 def convert(x, ceil):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24032 if ceil:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24033 return int(math.ceil(x))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24034 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24035 return int(math.floor(x))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24036 a = convert(a, False)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24037 b = convert(b, False)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24038 c = convert(c, True)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24039 d = convert(d, True)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24040 return a, b, c, d
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24041
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24042
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24043 def util_round_rect( rect):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24044 return JM_py_from_irect(mupdf.fz_round_rect(JM_rect_from_py(rect)))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24045
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24046
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24047 def util_transform_rect( rect, matrix):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24048 if g_use_extra:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24049 return extra.util_transform_rect( rect, matrix)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24050 return JM_py_from_rect(mupdf.fz_transform_rect(JM_rect_from_py(rect), JM_matrix_from_py(matrix)))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24051
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24052
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24053 def util_intersect_rect( r1, r2):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24054 return JM_py_from_rect(
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24055 mupdf.fz_intersect_rect(
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24056 JM_rect_from_py(r1),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24057 JM_rect_from_py(r2),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24058 )
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24059 )
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24060
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24061
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24062 def util_is_point_in_rect( p, r):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24063 return mupdf.fz_is_point_inside_rect(
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24064 JM_point_from_py(p),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24065 JM_rect_from_py(r),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24066 )
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24067
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24068 def util_include_point_in_rect( r, p):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24069 return JM_py_from_rect(
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24070 mupdf.fz_include_point_in_rect(
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24071 JM_rect_from_py(r),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24072 JM_point_from_py(p),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24073 )
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24074 )
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24075
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24076
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24077 def util_point_in_quad( P, Q):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24078 p = JM_point_from_py(P)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24079 q = JM_quad_from_py(Q)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24080 return mupdf.fz_is_point_inside_quad(p, q)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24081
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24082
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24083 def util_transform_point( point, matrix):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24084 return JM_py_from_point(
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24085 mupdf.fz_transform_point(
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24086 JM_point_from_py(point),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24087 JM_matrix_from_py(matrix),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24088 )
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24089 )
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24090
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24091
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24092 def util_union_rect( r1, r2):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24093 return JM_py_from_rect(
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24094 mupdf.fz_union_rect(
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24095 JM_rect_from_py(r1),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24096 JM_rect_from_py(r2),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24097 )
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24098 )
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24099
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24100
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24101 def util_concat_matrix( m1, m2):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24102 return JM_py_from_matrix(
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24103 mupdf.fz_concat(
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24104 JM_matrix_from_py(m1),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24105 JM_matrix_from_py(m2),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24106 )
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24107 )
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24108
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24109
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24110 def util_invert_matrix(matrix):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24111 if 0:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24112 # Use MuPDF's fz_invert_matrix().
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24113 if isinstance( matrix, (tuple, list)):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24114 matrix = mupdf.FzMatrix( *matrix)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24115 elif isinstance( matrix, mupdf.fz_matrix):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24116 matrix = mupdf.FzMatrix( matrix)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24117 elif isinstance( matrix, Matrix):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24118 matrix = mupdf.FzMatrix( matrix.a, matrix.b, matrix.c, matrix.d, matrix.e, matrix.f)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24119 assert isinstance( matrix, mupdf.FzMatrix), f'{type(matrix)=}: {matrix}'
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24120 ret = mupdf.fz_invert_matrix( matrix)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24121 if ret == matrix and (0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24122 or abs( matrix.a - 1) >= sys.float_info.epsilon
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24123 or abs( matrix.b - 0) >= sys.float_info.epsilon
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24124 or abs( matrix.c - 0) >= sys.float_info.epsilon
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24125 or abs( matrix.d - 1) >= sys.float_info.epsilon
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24126 ):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24127 # Inversion not possible.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24128 return 1, ()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24129 return 0, (ret.a, ret.b, ret.c, ret.d, ret.e, ret.f)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24130 # Do inversion in python.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24131 src = JM_matrix_from_py(matrix)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24132 a = src.a
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24133 det = a * src.d - src.b * src.c
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24134 if det < -sys.float_info.epsilon or det > sys.float_info.epsilon:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24135 dst = mupdf.FzMatrix()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24136 rdet = 1 / det
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24137 dst.a = src.d * rdet
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24138 dst.b = -src.b * rdet
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24139 dst.c = -src.c * rdet
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24140 dst.d = a * rdet
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24141 a = -src.e * dst.a - src.f * dst.c
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24142 dst.f = -src.e * dst.b - src.f * dst.d
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24143 dst.e = a
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24144 return 0, (dst.a, dst.b, dst.c, dst.d, dst.e, dst.f)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24145
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24146 return 1, ()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24147
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24148
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24149 def util_measure_string( text, fontname, fontsize, encoding):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24150 font = mupdf.fz_new_base14_font(fontname)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24151 w = 0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24152 pos = 0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24153 while pos < len(text):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24154 t, c = mupdf.fz_chartorune(text[pos:])
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24155 pos += t
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24156 if encoding == mupdf.PDF_SIMPLE_ENCODING_GREEK:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24157 c = mupdf.fz_iso8859_7_from_unicode(c)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24158 elif encoding == mupdf.PDF_SIMPLE_ENCODING_CYRILLIC:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24159 c = mupdf.fz_windows_1251_from_unicode(c)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24160 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24161 c = mupdf.fz_windows_1252_from_unicode(c)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24162 if c < 0:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24163 c = 0xB7
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24164 g = mupdf.fz_encode_character(font, c)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24165 dw = mupdf.fz_advance_glyph(font, g, 0)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24166 w += dw
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24167 ret = w * fontsize
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24168 return ret
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24169
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24170
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24171 def util_sine_between(C, P, Q):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24172 # for points C, P, Q compute the sine between lines CP and QP
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24173 c = JM_point_from_py(C)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24174 p = JM_point_from_py(P)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24175 q = JM_point_from_py(Q)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24176 s = mupdf.fz_normalize_vector(mupdf.fz_make_point(q.x - p.x, q.y - p.y))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24177 m1 = mupdf.fz_make_matrix(1, 0, 0, 1, -p.x, -p.y)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24178 m2 = mupdf.fz_make_matrix(s.x, -s.y, s.y, s.x, 0, 0)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24179 m1 = mupdf.fz_concat(m1, m2)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24180 c = mupdf.fz_transform_point(c, m1)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24181 c = mupdf.fz_normalize_vector(c)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24182 return c.y
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24183
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24184
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24185 def util_hor_matrix(C, P):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24186 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24187 Return the matrix that maps two points C, P to the x-axis such that
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24188 C -> (0,0) and the image of P have the same distance.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24189 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24190 c = JM_point_from_py(C)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24191 p = JM_point_from_py(P)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24192
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24193 # compute (cosine, sine) of vector P-C with double precision:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24194 s = mupdf.fz_normalize_vector(mupdf.fz_make_point(p.x - c.x, p.y - c.y))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24195
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24196 m1 = mupdf.fz_make_matrix(1, 0, 0, 1, -c.x, -c.y)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24197 m2 = mupdf.fz_make_matrix(s.x, -s.y, s.y, s.x, 0, 0)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24198 return JM_py_from_matrix(mupdf.fz_concat(m1, m2))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24199
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24200
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24201 def match_string(h0, n0):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24202 h = 0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24203 n = 0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24204 e = h
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24205 delta_h, hc = chartocanon(h0[h:])
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24206 h += delta_h
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24207 delta_n, nc = chartocanon(n0[n:])
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24208 n += delta_n
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24209 while hc == nc:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24210 e = h
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24211 if hc == ord(' '):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24212 while 1:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24213 delta_h, hc = chartocanon(h0[h:])
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24214 h += delta_h
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24215 if hc != ord(' '):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24216 break
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24217 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24218 delta_h, hc = chartocanon(h0[h:])
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24219 h += delta_h
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24220 if nc == ord(' '):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24221 while 1:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24222 delta_n, nc = chartocanon(n0[n:])
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24223 n += delta_n
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24224 if nc != ord(' '):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24225 break
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24226 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24227 delta_n, nc = chartocanon(n0[n:])
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24228 n += delta_n
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24229 return None if nc != 0 else e
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24230
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24231
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24232 def on_highlight_char(hits, line, ch):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24233 assert hits
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24234 assert isinstance(line, mupdf.FzStextLine)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24235 assert isinstance(ch, mupdf.FzStextChar)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24236 vfuzz = ch.m_internal.size * hits.vfuzz
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24237 hfuzz = ch.m_internal.size * hits.hfuzz
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24238 ch_quad = JM_char_quad(line, ch)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24239 if hits.len > 0:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24240 # fixme: end = hits.quads[-1]
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24241 quad = hits.quads[hits.len - 1]
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24242 end = JM_quad_from_py(quad)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24243 if ( 1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24244 and hdist(line.m_internal.dir, end.lr, ch_quad.ll) < hfuzz
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24245 and vdist(line.m_internal.dir, end.lr, ch_quad.ll) < vfuzz
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24246 and hdist(line.m_internal.dir, end.ur, ch_quad.ul) < hfuzz
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24247 and vdist(line.m_internal.dir, end.ur, ch_quad.ul) < vfuzz
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24248 ):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24249 end.ur = ch_quad.ur
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24250 end.lr = ch_quad.lr
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24251 assert hits.quads[-1] == end
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24252 return
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24253 hits.quads.append(ch_quad)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24254 hits.len += 1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24255
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24256
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24257 def page_merge(doc_des, doc_src, page_from, page_to, rotate, links, copy_annots, graft_map):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24258 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24259 Deep-copies a source page to the target.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24260 Modified version of function of pdfmerge.c: we also copy annotations, but
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24261 we skip some subtypes. In addition we rotate output.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24262 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24263 if g_use_extra:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24264 #log( 'Calling C++ extra.page_merge()')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24265 return extra.page_merge( doc_des, doc_src, page_from, page_to, rotate, links, copy_annots, graft_map)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24266
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24267 # list of object types (per page) we want to copy
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24268 known_page_objs = [
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24269 PDF_NAME('Contents'),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24270 PDF_NAME('Resources'),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24271 PDF_NAME('MediaBox'),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24272 PDF_NAME('CropBox'),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24273 PDF_NAME('BleedBox'),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24274 PDF_NAME('TrimBox'),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24275 PDF_NAME('ArtBox'),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24276 PDF_NAME('Rotate'),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24277 PDF_NAME('UserUnit'),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24278 ]
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24279 page_ref = mupdf.pdf_lookup_page_obj(doc_src, page_from)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24280
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24281 # make new page dict in dest doc
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24282 page_dict = mupdf.pdf_new_dict(doc_des, 4)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24283 mupdf.pdf_dict_put(page_dict, PDF_NAME('Type'), PDF_NAME('Page'))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24284
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24285 # copy objects of source page into it
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24286 for i in range( len(known_page_objs)):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24287 obj = mupdf.pdf_dict_get_inheritable( page_ref, known_page_objs[i])
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24288 if obj.m_internal:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24289 #log( '{=type(graft_map) type(graft_map.this)}')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24290 mupdf.pdf_dict_put( page_dict, known_page_objs[i], mupdf.pdf_graft_mapped_object(graft_map.this, obj))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24291
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24292 # Copy annotations, but skip Link, Popup, IRT, Widget types
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24293 # If selected, remove dict keys P (parent) and Popup
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24294 if copy_annots:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24295 old_annots = mupdf.pdf_dict_get( page_ref, PDF_NAME('Annots'))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24296 n = mupdf.pdf_array_len( old_annots)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24297 if n > 0:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24298 new_annots = mupdf.pdf_dict_put_array( page_dict, PDF_NAME('Annots'), n)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24299 for i in range(n):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24300 o = mupdf.pdf_array_get( old_annots, i)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24301 if not o.m_internal or not mupdf.pdf_is_dict(o):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24302 continue # skip non-dict items
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24303 if mupdf.pdf_dict_gets( o, "IRT").m_internal:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24304 continue
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24305 subtype = mupdf.pdf_dict_get( o, PDF_NAME('Subtype'))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24306 if mupdf.pdf_name_eq( subtype, PDF_NAME('Link')):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24307 continue
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24308 if mupdf.pdf_name_eq( subtype, PDF_NAME('Popup')):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24309 continue
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24310 if mupdf.pdf_name_eq(subtype, PDF_NAME('Widget')):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24311 continue
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24312 mupdf.pdf_dict_del( o, PDF_NAME('Popup'))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24313 mupdf.pdf_dict_del( o, PDF_NAME('P'))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24314 copy_o = mupdf.pdf_graft_mapped_object( graft_map.this, o)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24315 annot = mupdf.pdf_new_indirect( doc_des, mupdf.pdf_to_num( copy_o), 0)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24316 mupdf.pdf_array_push( new_annots, annot)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24317
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24318 # rotate the page
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24319 if rotate != -1:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24320 mupdf.pdf_dict_put_int( page_dict, PDF_NAME('Rotate'), rotate)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24321 # Now add the page dictionary to dest PDF
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24322 ref = mupdf.pdf_add_object( doc_des, page_dict)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24323
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24324 # Insert new page at specified location
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24325 mupdf.pdf_insert_page( doc_des, page_to, ref)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24326
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24327
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24328 def paper_rect(s: str) -> Rect:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24329 """Return a Rect for the paper size indicated in string 's'. Must conform to the argument of method 'PaperSize', which will be invoked.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24330 """
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24331 width, height = paper_size(s)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24332 return Rect(0.0, 0.0, width, height)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24333
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24334
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24335 def paper_size(s: str) -> tuple:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24336 """Return a tuple (width, height) for a given paper format string.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24337
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24338 Notes:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24339 'A4-L' will return (842, 595), the values for A4 landscape.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24340 Suffix '-P' and no suffix return the portrait tuple.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24341 """
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24342 size = s.lower()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24343 f = "p"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24344 if size.endswith("-l"):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24345 f = "l"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24346 size = size[:-2]
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24347 if size.endswith("-p"):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24348 size = size[:-2]
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24349 rc = paper_sizes().get(size, (-1, -1))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24350 if f == "p":
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24351 return rc
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24352 return (rc[1], rc[0])
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24353
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24354
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24355 def paper_sizes():
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24356 """Known paper formats @ 72 dpi as a dictionary. Key is the format string
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24357 like "a4" for ISO-A4. Value is the tuple (width, height).
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24358
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24359 Information taken from the following web sites:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24360 www.din-formate.de
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24361 www.din-formate.info/amerikanische-formate.html
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24362 www.directtools.de/wissen/normen/iso.htm
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24363 """
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24364 return {
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24365 "a0": (2384, 3370),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24366 "a1": (1684, 2384),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24367 "a10": (74, 105),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24368 "a2": (1191, 1684),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24369 "a3": (842, 1191),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24370 "a4": (595, 842),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24371 "a5": (420, 595),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24372 "a6": (298, 420),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24373 "a7": (210, 298),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24374 "a8": (147, 210),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24375 "a9": (105, 147),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24376 "b0": (2835, 4008),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24377 "b1": (2004, 2835),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24378 "b10": (88, 125),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24379 "b2": (1417, 2004),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24380 "b3": (1001, 1417),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24381 "b4": (709, 1001),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24382 "b5": (499, 709),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24383 "b6": (354, 499),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24384 "b7": (249, 354),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24385 "b8": (176, 249),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24386 "b9": (125, 176),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24387 "c0": (2599, 3677),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24388 "c1": (1837, 2599),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24389 "c10": (79, 113),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24390 "c2": (1298, 1837),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24391 "c3": (918, 1298),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24392 "c4": (649, 918),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24393 "c5": (459, 649),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24394 "c6": (323, 459),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24395 "c7": (230, 323),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24396 "c8": (162, 230),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24397 "c9": (113, 162),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24398 "card-4x6": (288, 432),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24399 "card-5x7": (360, 504),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24400 "commercial": (297, 684),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24401 "executive": (522, 756),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24402 "invoice": (396, 612),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24403 "ledger": (792, 1224),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24404 "legal": (612, 1008),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24405 "legal-13": (612, 936),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24406 "letter": (612, 792),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24407 "monarch": (279, 540),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24408 "tabloid-extra": (864, 1296),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24409 }
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24410
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24411 def pdf_lookup_page_loc(doc, needle):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24412 return mupdf.pdf_lookup_page_loc(doc, needle)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24413
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24414
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24415 def pdfobj_string(o, prefix=''):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24416 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24417 Returns description of mupdf.PdfObj (wrapper for pdf_obj) <o>.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24418 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24419 assert 0, 'use mupdf.pdf_debug_obj() ?'
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24420 ret = ''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24421 if mupdf.pdf_is_array(o):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24422 l = mupdf.pdf_array_len(o)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24423 ret += f'array {l}\n'
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24424 for i in range(l):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24425 oo = mupdf.pdf_array_get(o, i)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24426 ret += pdfobj_string(oo, prefix + ' ')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24427 ret += '\n'
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24428 elif mupdf.pdf_is_bool(o):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24429 ret += f'bool: {o.array_get_bool()}\n'
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24430 elif mupdf.pdf_is_dict(o):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24431 l = mupdf.pdf_dict_len(o)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24432 ret += f'dict {l}\n'
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24433 for i in range(l):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24434 key = mupdf.pdf_dict_get_key(o, i)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24435 value = mupdf.pdf_dict_get( o, key)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24436 ret += f'{prefix} {key}: '
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24437 ret += pdfobj_string( value, prefix + ' ')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24438 ret += '\n'
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24439 elif mupdf.pdf_is_embedded_file(o):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24440 ret += f'embedded_file: {o.embedded_file_name()}\n'
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24441 elif mupdf.pdf_is_indirect(o):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24442 ret += f'indirect: ...\n'
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24443 elif mupdf.pdf_is_int(o):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24444 ret += f'int: {mupdf.pdf_to_int(o)}\n'
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24445 elif mupdf.pdf_is_jpx_image(o):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24446 ret += f'jpx_image:\n'
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24447 elif mupdf.pdf_is_name(o):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24448 ret += f'name: {mupdf.pdf_to_name(o)}\n'
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24449 elif o.pdf_is_null:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24450 ret += f'null\n'
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24451 #elif o.pdf_is_number:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24452 # ret += f'number\n'
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24453 elif o.pdf_is_real:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24454 ret += f'real: {o.pdf_to_real()}\n'
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24455 elif mupdf.pdf_is_stream(o):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24456 ret += f'stream\n'
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24457 elif mupdf.pdf_is_string(o):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24458 ret += f'string: {mupdf.pdf_to_string(o)}\n'
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24459 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24460 ret += '<>\n'
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24461
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24462 return ret
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24463
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24464
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24465 def repair_mono_font(page: "Page", font: "Font") -> None:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24466 """Repair character spacing for mono fonts.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24467
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24468 Notes:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24469 Some mono-spaced fonts are displayed with a too large character
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24470 distance, e.g. "a b c" instead of "abc". This utility adds an entry
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24471 "/W[0 65535 w]" to the descendent font(s) of font. The float w is
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24472 taken to be the width of 0x20 (space).
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24473 This should enforce viewers to use 'w' as the character width.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24474
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24475 Args:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24476 page: pymupdf.Page object.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24477 font: pymupdf.Font object.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24478 """
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24479 if not font.flags["mono"]: # font not flagged as monospaced
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24480 return None
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24481 doc = page.parent # the document
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24482 fontlist = page.get_fonts() # list of fonts on page
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24483 xrefs = [ # list of objects referring to font
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24484 f[0]
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24485 for f in fontlist
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24486 if (f[3] == font.name and f[4].startswith("F") and f[5].startswith("Identity"))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24487 ]
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24488 if xrefs == []: # our font does not occur
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24489 return
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24490 xrefs = set(xrefs) # drop any double counts
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24491 width = int(round((font.glyph_advance(32) * 1000)))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24492 for xref in xrefs:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24493 if not TOOLS.set_font_width(doc, xref, width):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24494 log("Cannot set width for '%s' in xref %i" % (font.name, xref))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24495
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24496
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24497 def sRGB_to_pdf(srgb: int) -> tuple:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24498 """Convert sRGB color code to a PDF color triple.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24499
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24500 There is **no error checking** for performance reasons!
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24501
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24502 Args:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24503 srgb: (int) RRGGBB (red, green, blue), each color in range(255).
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24504 Returns:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24505 Tuple (red, green, blue) each item in interval 0 <= item <= 1.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24506 """
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24507 t = sRGB_to_rgb(srgb)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24508 return t[0] / 255.0, t[1] / 255.0, t[2] / 255.0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24509
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24510
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24511 def sRGB_to_rgb(srgb: int) -> tuple:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24512 """Convert sRGB color code to an RGB color triple.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24513
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24514 There is **no error checking** for performance reasons!
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24515
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24516 Args:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24517 srgb: (int) SSRRGGBB (red, green, blue), each color in range(255).
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24518 With MuPDF < 1.26, `s` is always 0.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24519 Returns:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24520 Tuple (red, green, blue) each item in interval 0 <= item <= 255.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24521 """
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24522 srgb &= 0xffffff
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24523 r = srgb >> 16
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24524 g = (srgb - (r << 16)) >> 8
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24525 b = srgb - (r << 16) - (g << 8)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24526 return (r, g, b)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24527
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24528
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24529 def string_in_names_list(p, names_list):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24530 n = mupdf.pdf_array_len( names_list) if names_list else 0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24531 str_ = mupdf.pdf_to_text_string( p)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24532 for i in range(0, n, 2):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24533 if mupdf.pdf_to_text_string( mupdf.pdf_array_get( names_list, i)) == str_:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24534 return 1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24535 return 0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24536
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24537
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24538 def strip_outline(doc, outlines, page_count, page_object_nums, names_list):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24539 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24540 Returns (count, first, prev).
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24541 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24542 first = None
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24543 count = 0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24544 current = outlines
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24545 prev = None
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24546 while current.m_internal:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24547 # Strip any children to start with. This takes care of
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24548 # First / Last / Count for us.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24549 nc = strip_outlines(doc, current, page_count, page_object_nums, names_list)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24550
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24551 if not dest_is_valid(current, page_count, page_object_nums, names_list):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24552 if nc == 0:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24553 # Outline with invalid dest and no children. Drop it by
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24554 # pulling the next one in here.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24555 next = mupdf.pdf_dict_get(current, PDF_NAME('Next'))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24556 if not next.m_internal:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24557 # There is no next one to pull in
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24558 if prev.m_internal:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24559 mupdf.pdf_dict_del(prev, PDF_NAME('Next'))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24560 elif prev.m_internal:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24561 mupdf.pdf_dict_put(prev, PDF_NAME('Next'), next)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24562 mupdf.pdf_dict_put(next, PDF_NAME('Prev'), prev)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24563 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24564 mupdf.pdf_dict_del(next, PDF_NAME('Prev'))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24565 current = next
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24566 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24567 # Outline with invalid dest, but children. Just drop the dest.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24568 mupdf.pdf_dict_del(current, PDF_NAME('Dest'))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24569 mupdf.pdf_dict_del(current, PDF_NAME('A'))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24570 current = mupdf.pdf_dict_get(current, PDF_NAME('Next'))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24571 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24572 # Keep this one
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24573 if not first or not first.m_internal:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24574 first = current
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24575 prev = current
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24576 current = mupdf.pdf_dict_get(current, PDF_NAME('Next'))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24577 count += 1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24578
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24579 return count, first, prev
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24580
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24581
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24582 def strip_outlines(doc, outlines, page_count, page_object_nums, names_list):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24583 if not outlines.m_internal:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24584 return 0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24585
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24586 first = mupdf.pdf_dict_get(outlines, PDF_NAME('First'))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24587 if not first.m_internal:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24588 nc = 0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24589 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24590 nc, first, last = strip_outline(doc, first, page_count, page_object_nums, names_list)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24591
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24592 if nc == 0:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24593 mupdf.pdf_dict_del(outlines, PDF_NAME('First'))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24594 mupdf.pdf_dict_del(outlines, PDF_NAME('Last'))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24595 mupdf.pdf_dict_del(outlines, PDF_NAME('Count'))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24596 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24597 old_count = mupdf.pdf_to_int(mupdf.pdf_dict_get(outlines, PDF_NAME('Count')))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24598 mupdf.pdf_dict_put(outlines, PDF_NAME('First'), first)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24599 mupdf.pdf_dict_put(outlines, PDF_NAME('Last'), last)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24600 mupdf.pdf_dict_put(outlines, PDF_NAME('Count'), mupdf.pdf_new_int(nc if old_count > 0 else -nc))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24601 return nc
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24602
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24603
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24604 trace_device_FILL_PATH = 1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24605 trace_device_STROKE_PATH = 2
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24606 trace_device_CLIP_PATH = 3
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24607 trace_device_CLIP_STROKE_PATH = 4
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24608
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24609
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24610 def unicode_to_glyph_name(ch: int) -> str:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24611 """
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24612 Convenience function accessing unicodedata.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24613 """
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24614 import unicodedata
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24615 try:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24616 name = unicodedata.name(chr(ch))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24617 except ValueError:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24618 name = ".notdef"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24619 return name
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24620
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24621
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24622 def vdist(dir, a, b):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24623 dx = b.x - a.x
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24624 dy = b.y - a.y
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24625 return mupdf.fz_abs(dx * dir.y + dy * dir.x)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24626
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24627
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24628 def apply_pages(
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24629 path,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24630 pagefn,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24631 *,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24632 pagefn_args=(),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24633 pagefn_kwargs=dict(),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24634 initfn=None,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24635 initfn_args=(),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24636 initfn_kwargs=dict(),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24637 pages=None,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24638 method='single',
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24639 concurrency=None,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24640 _stats=False,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24641 ):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24642 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24643 Returns list of results from `pagefn()`, optionally using concurrency for
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24644 speed.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24645
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24646 Args:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24647 path:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24648 Path of document.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24649 pagefn:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24650 Function to call for each page; is passed (page, *pagefn_args,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24651 **pagefn_kwargs). Return value is added to list that we return. If
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24652 `method` is not 'single', must be a top-level function - nested
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24653 functions don't work with concurrency.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24654 pagefn_args
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24655 pagefn_kwargs:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24656 Additional args to pass to `pagefn`. Must be picklable.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24657 initfn:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24658 If true, called once in each worker process; is passed
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24659 (*initfn_args, **initfn_kwargs).
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24660 initfn_args
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24661 initfn_kwargs:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24662 Args to pass to initfn. Must be picklable.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24663 pages:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24664 List of page numbers to process, or None to include all pages.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24665 method:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24666 'single'
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24667 Do not use concurrency.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24668 'mp'
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24669 Operate concurrently using Python's `multiprocessing` module.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24670 'fork'
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24671 Operate concurrently using custom implementation with
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24672 `os.fork()`. Does not work on Windows.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24673 concurrency:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24674 Number of worker processes to use when operating concurrently. If
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24675 None, we use the number of available CPUs.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24676 _stats:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24677 Internal, may change or be removed. If true, we output simple
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24678 timing diagnostics.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24679
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24680 Note: We require a file path rather than a Document, because Document
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24681 instances do not work properly after a fork - internal file descriptor
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24682 offsets are shared between the parent and child processes.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24683 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24684 if _stats:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24685 t0 = time.time()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24686
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24687 if method == 'single':
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24688 if initfn:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24689 initfn(*initfn_args, **initfn_kwargs)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24690 ret = list()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24691 document = Document(path)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24692 if pages is None:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24693 pages = range(len(document))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24694 for pno in pages:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24695 page = document[pno]
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24696 r = pagefn(page, *pagefn_args, **initfn_kwargs)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24697 ret.append(r)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24698
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24699 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24700 # Use concurrency.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24701 #
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24702 from . import _apply_pages
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24703
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24704 if pages is None:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24705 if _stats:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24706 t = time.time()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24707 with Document(path) as document:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24708 num_pages = len(document)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24709 pages = list(range(num_pages))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24710 if _stats:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24711 t = time.time() - t
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24712 log(f'{t:.2f}s: count pages.')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24713
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24714 if _stats:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24715 t = time.time()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24716
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24717 if method == 'mp':
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24718 ret = _apply_pages._multiprocessing(
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24719 path,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24720 pages,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24721 pagefn,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24722 pagefn_args,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24723 pagefn_kwargs,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24724 initfn,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24725 initfn_args,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24726 initfn_kwargs,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24727 concurrency,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24728 _stats,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24729 )
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24730
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24731 elif method == 'fork':
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24732 ret = _apply_pages._fork(
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24733 path,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24734 pages,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24735 pagefn,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24736 pagefn_args,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24737 pagefn_kwargs,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24738 initfn,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24739 initfn_args,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24740 initfn_kwargs,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24741 concurrency,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24742 _stats,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24743 )
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24744
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24745 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24746 assert 0, f'Unrecognised {method=}.'
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24747
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24748 if _stats:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24749 t = time.time() - t
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24750 log(f'{t:.2f}s: work.')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24751
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24752 if _stats:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24753 t = time.time() - t0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24754 log(f'{t:.2f}s: total.')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24755 return ret
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24756
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24757
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24758 def get_text(
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24759 path,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24760 *,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24761 pages=None,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24762 method='single',
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24763 concurrency=None,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24764
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24765 option='text',
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24766 clip=None,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24767 flags=None,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24768 textpage=None,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24769 sort=False,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24770 delimiters=None,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24771
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24772 _stats=False,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24773 ):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24774 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24775 Returns list of results from `Page.get_text()`, optionally using
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24776 concurrency for speed.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24777
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24778 Args:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24779 path:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24780 Path of document.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24781 pages:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24782 List of page numbers to process, or None to include all pages.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24783 method:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24784 'single'
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24785 Do not use concurrency.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24786 'mp'
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24787 Operate concurrently using Python's `multiprocessing` module.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24788 'fork'
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24789 Operate concurrently using custom implementation with
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24790 `os.fork`. Does not work on Windows.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24791 concurrency:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24792 Number of worker processes to use when operating concurrently. If
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24793 None, we use the number of available CPUs.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24794 option
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24795 clip
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24796 flags
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24797 textpage
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24798 sort
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24799 delimiters:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24800 Passed to internal calls to `Page.get_text()`.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24801 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24802 args_dict = dict(
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24803 option=option,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24804 clip=clip,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24805 flags=flags,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24806 textpage=textpage,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24807 sort=sort,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24808 delimiters=delimiters,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24809 )
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24810
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24811 return apply_pages(
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24812 path,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24813 Page.get_text,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24814 pagefn_kwargs=args_dict,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24815 pages=pages,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24816 method=method,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24817 concurrency=concurrency,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24818 _stats=_stats,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24819 )
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24820
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24821
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24822 class TOOLS:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24823 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24824 We use @staticmethod to avoid the need to create an instance of this class.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24825 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24826
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24827 def _derotate_matrix(page):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24828 if isinstance(page, mupdf.PdfPage):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24829 return JM_py_from_matrix(JM_derotate_page_matrix(page))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24830 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24831 return JM_py_from_matrix(mupdf.FzMatrix())
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24832
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24833 @staticmethod
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24834 def _fill_widget(annot, widget):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24835 val = JM_get_widget_properties(annot, widget)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24836
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24837 widget.rect = Rect(annot.rect)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24838 widget.xref = annot.xref
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24839 widget.parent = annot.parent
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24840 widget._annot = annot # backpointer to annot object
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24841 if not widget.script:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24842 widget.script = None
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24843 if not widget.script_stroke:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24844 widget.script_stroke = None
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24845 if not widget.script_format:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24846 widget.script_format = None
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24847 if not widget.script_change:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24848 widget.script_change = None
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24849 if not widget.script_calc:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24850 widget.script_calc = None
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24851 if not widget.script_blur:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24852 widget.script_blur = None
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24853 if not widget.script_focus:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24854 widget.script_focus = None
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24855 return val
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24856
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24857 @staticmethod
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24858 def _get_all_contents(page):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24859 page = _as_pdf_page(page.this)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24860 res = JM_read_contents(page.obj())
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24861 result = JM_BinFromBuffer( res)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24862 return result
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24863
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24864 @staticmethod
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24865 def _insert_contents(page, newcont, overlay=1):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24866 """Add bytes as a new /Contents object for a page, and return its xref."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24867 pdfpage = _as_pdf_page(page, required=1)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24868 contbuf = JM_BufferFromBytes(newcont)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24869 xref = JM_insert_contents(pdfpage.doc(), pdfpage.obj(), contbuf, overlay)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24870 #fixme: pdfpage->doc->dirty = 1;
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24871 return xref
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24872
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24873 @staticmethod
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24874 def _le_annot_parms(annot, p1, p2, fill_color):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24875 """Get common parameters for making annot line end symbols.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24876
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24877 Returns:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24878 m: matrix that maps p1, p2 to points L, P on the x-axis
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24879 im: its inverse
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24880 L, P: transformed p1, p2
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24881 w: line width
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24882 scol: stroke color string
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24883 fcol: fill color store_shrink
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24884 opacity: opacity string (gs command)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24885 """
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24886 w = annot.border["width"] # line width
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24887 sc = annot.colors["stroke"] # stroke color
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24888 if not sc: # black if missing
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24889 sc = (0,0,0)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24890 scol = " ".join(map(str, sc)) + " RG\n"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24891 if fill_color:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24892 fc = fill_color
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24893 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24894 fc = annot.colors["fill"] # fill color
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24895 if not fc:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24896 fc = (1,1,1) # white if missing
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24897 fcol = " ".join(map(str, fc)) + " rg\n"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24898 # nr = annot.rect
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24899 np1 = p1 # point coord relative to annot rect
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24900 np2 = p2 # point coord relative to annot rect
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24901 m = Matrix(util_hor_matrix(np1, np2)) # matrix makes the line horizontal
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24902 im = ~m # inverted matrix
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24903 L = np1 * m # converted start (left) point
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24904 R = np2 * m # converted end (right) point
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24905 if 0 <= annot.opacity < 1:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24906 opacity = "/H gs\n"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24907 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24908 opacity = ""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24909 return m, im, L, R, w, scol, fcol, opacity
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24910
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24911 @staticmethod
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24912 def _le_butt(annot, p1, p2, lr, fill_color):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24913 """Make stream commands for butt line end symbol. "lr" denotes left (False) or right point.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24914 """
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24915 m, im, L, R, w, scol, fcol, opacity = TOOLS._le_annot_parms(annot, p1, p2, fill_color)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24916 shift = 3
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24917 d = shift * max(1, w)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24918 M = R if lr else L
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24919 top = (M + (0, -d/2.)) * im
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24920 bot = (M + (0, d/2.)) * im
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24921 ap = "\nq\n%s%f %f m\n" % (opacity, top.x, top.y)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24922 ap += "%f %f l\n" % (bot.x, bot.y)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24923 ap += _format_g(w) + " w\n"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24924 ap += scol + "s\nQ\n"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24925 return ap
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24926
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24927 @staticmethod
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24928 def _le_circle(annot, p1, p2, lr, fill_color):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24929 """Make stream commands for circle line end symbol. "lr" denotes left (False) or right point.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24930 """
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24931 m, im, L, R, w, scol, fcol, opacity = TOOLS._le_annot_parms(annot, p1, p2, fill_color)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24932 shift = 2.5 # 2*shift*width = length of square edge
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24933 d = shift * max(1, w)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24934 M = R - (d/2., 0) if lr else L + (d/2., 0)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24935 r = Rect(M, M) + (-d, -d, d, d) # the square
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24936 ap = "q\n" + opacity + TOOLS._oval_string(r.tl * im, r.tr * im, r.br * im, r.bl * im)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24937 ap += _format_g(w) + " w\n"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24938 ap += scol + fcol + "b\nQ\n"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24939 return ap
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24940
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24941 @staticmethod
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24942 def _le_closedarrow(annot, p1, p2, lr, fill_color):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24943 """Make stream commands for closed arrow line end symbol. "lr" denotes left (False) or right point.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24944 """
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24945 m, im, L, R, w, scol, fcol, opacity = TOOLS._le_annot_parms(annot, p1, p2, fill_color)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24946 shift = 2.5
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24947 d = shift * max(1, w)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24948 p2 = R + (d/2., 0) if lr else L - (d/2., 0)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24949 p1 = p2 + (-2*d, -d) if lr else p2 + (2*d, -d)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24950 p3 = p2 + (-2*d, d) if lr else p2 + (2*d, d)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24951 p1 *= im
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24952 p2 *= im
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24953 p3 *= im
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24954 ap = "\nq\n%s%f %f m\n" % (opacity, p1.x, p1.y)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24955 ap += "%f %f l\n" % (p2.x, p2.y)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24956 ap += "%f %f l\n" % (p3.x, p3.y)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24957 ap += _format_g(w) + " w\n"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24958 ap += scol + fcol + "b\nQ\n"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24959 return ap
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24960
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24961 @staticmethod
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24962 def _le_diamond(annot, p1, p2, lr, fill_color):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24963 """Make stream commands for diamond line end symbol. "lr" denotes left (False) or right point.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24964 """
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24965 m, im, L, R, w, scol, fcol, opacity = TOOLS._le_annot_parms(annot, p1, p2, fill_color)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24966 shift = 2.5 # 2*shift*width = length of square edge
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24967 d = shift * max(1, w)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24968 M = R - (d/2., 0) if lr else L + (d/2., 0)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24969 r = Rect(M, M) + (-d, -d, d, d) # the square
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24970 # the square makes line longer by (2*shift - 1)*width
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24971 p = (r.tl + (r.bl - r.tl) * 0.5) * im
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24972 ap = "q\n%s%f %f m\n" % (opacity, p.x, p.y)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24973 p = (r.tl + (r.tr - r.tl) * 0.5) * im
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24974 ap += "%f %f l\n" % (p.x, p.y)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24975 p = (r.tr + (r.br - r.tr) * 0.5) * im
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24976 ap += "%f %f l\n" % (p.x, p.y)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24977 p = (r.br + (r.bl - r.br) * 0.5) * im
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24978 ap += "%f %f l\n" % (p.x, p.y)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24979 ap += _format_g(w) + " w\n"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24980 ap += scol + fcol + "b\nQ\n"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24981 return ap
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24982
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24983 @staticmethod
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24984 def _le_openarrow(annot, p1, p2, lr, fill_color):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24985 """Make stream commands for open arrow line end symbol. "lr" denotes left (False) or right point.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24986 """
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24987 m, im, L, R, w, scol, fcol, opacity = TOOLS._le_annot_parms(annot, p1, p2, fill_color)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24988 shift = 2.5
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24989 d = shift * max(1, w)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24990 p2 = R + (d/2., 0) if lr else L - (d/2., 0)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24991 p1 = p2 + (-2*d, -d) if lr else p2 + (2*d, -d)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24992 p3 = p2 + (-2*d, d) if lr else p2 + (2*d, d)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24993 p1 *= im
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24994 p2 *= im
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24995 p3 *= im
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24996 ap = "\nq\n%s%f %f m\n" % (opacity, p1.x, p1.y)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24997 ap += "%f %f l\n" % (p2.x, p2.y)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24998 ap += "%f %f l\n" % (p3.x, p3.y)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24999 ap += _format_g(w) + " w\n"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25000 ap += scol + "S\nQ\n"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25001 return ap
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25002
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25003 @staticmethod
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25004 def _le_rclosedarrow(annot, p1, p2, lr, fill_color):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25005 """Make stream commands for right closed arrow line end symbol. "lr" denotes left (False) or right point.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25006 """
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25007 m, im, L, R, w, scol, fcol, opacity = TOOLS._le_annot_parms(annot, p1, p2, fill_color)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25008 shift = 2.5
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25009 d = shift * max(1, w)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25010 p2 = R - (2*d, 0) if lr else L + (2*d, 0)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25011 p1 = p2 + (2*d, -d) if lr else p2 + (-2*d, -d)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25012 p3 = p2 + (2*d, d) if lr else p2 + (-2*d, d)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25013 p1 *= im
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25014 p2 *= im
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25015 p3 *= im
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25016 ap = "\nq\n%s%f %f m\n" % (opacity, p1.x, p1.y)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25017 ap += "%f %f l\n" % (p2.x, p2.y)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25018 ap += "%f %f l\n" % (p3.x, p3.y)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25019 ap += _format_g(w) + " w\n"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25020 ap += scol + fcol + "b\nQ\n"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25021 return ap
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25022
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25023 @staticmethod
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25024 def _le_ropenarrow(annot, p1, p2, lr, fill_color):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25025 """Make stream commands for right open arrow line end symbol. "lr" denotes left (False) or right point.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25026 """
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25027 m, im, L, R, w, scol, fcol, opacity = TOOLS._le_annot_parms(annot, p1, p2, fill_color)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25028 shift = 2.5
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25029 d = shift * max(1, w)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25030 p2 = R - (d/3., 0) if lr else L + (d/3., 0)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25031 p1 = p2 + (2*d, -d) if lr else p2 + (-2*d, -d)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25032 p3 = p2 + (2*d, d) if lr else p2 + (-2*d, d)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25033 p1 *= im
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25034 p2 *= im
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25035 p3 *= im
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25036 ap = "\nq\n%s%f %f m\n" % (opacity, p1.x, p1.y)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25037 ap += "%f %f l\n" % (p2.x, p2.y)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25038 ap += "%f %f l\n" % (p3.x, p3.y)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25039 ap += _format_g(w) + " w\n"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25040 ap += scol + fcol + "S\nQ\n"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25041 return ap
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25042
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25043 @staticmethod
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25044 def _le_slash(annot, p1, p2, lr, fill_color):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25045 """Make stream commands for slash line end symbol. "lr" denotes left (False) or right point.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25046 """
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25047 m, im, L, R, w, scol, fcol, opacity = TOOLS._le_annot_parms(annot, p1, p2, fill_color)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25048 rw = 1.1547 * max(1, w) * 1.0 # makes rect diagonal a 30 deg inclination
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25049 M = R if lr else L
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25050 r = Rect(M.x - rw, M.y - 2 * w, M.x + rw, M.y + 2 * w)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25051 top = r.tl * im
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25052 bot = r.br * im
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25053 ap = "\nq\n%s%f %f m\n" % (opacity, top.x, top.y)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25054 ap += "%f %f l\n" % (bot.x, bot.y)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25055 ap += _format_g(w) + " w\n"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25056 ap += scol + "s\nQ\n"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25057 return ap
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25058
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25059 @staticmethod
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25060 def _le_square(annot, p1, p2, lr, fill_color):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25061 """Make stream commands for square line end symbol. "lr" denotes left (False) or right point.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25062 """
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25063 m, im, L, R, w, scol, fcol, opacity = TOOLS._le_annot_parms(annot, p1, p2, fill_color)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25064 shift = 2.5 # 2*shift*width = length of square edge
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25065 d = shift * max(1, w)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25066 M = R - (d/2., 0) if lr else L + (d/2., 0)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25067 r = Rect(M, M) + (-d, -d, d, d) # the square
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25068 # the square makes line longer by (2*shift - 1)*width
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25069 p = r.tl * im
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25070 ap = "q\n%s%f %f m\n" % (opacity, p.x, p.y)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25071 p = r.tr * im
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25072 ap += "%f %f l\n" % (p.x, p.y)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25073 p = r.br * im
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25074 ap += "%f %f l\n" % (p.x, p.y)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25075 p = r.bl * im
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25076 ap += "%f %f l\n" % (p.x, p.y)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25077 ap += _format_g(w) + " w\n"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25078 ap += scol + fcol + "b\nQ\n"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25079 return ap
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25080
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25081 @staticmethod
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25082 def _oval_string(p1, p2, p3, p4):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25083 """Return /AP string defining an oval within a 4-polygon provided as points
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25084 """
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25085 def bezier(p, q, r):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25086 f = "%f %f %f %f %f %f c\n"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25087 return f % (p.x, p.y, q.x, q.y, r.x, r.y)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25088
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25089 kappa = 0.55228474983 # magic number
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25090 ml = p1 + (p4 - p1) * 0.5 # middle points ...
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25091 mo = p1 + (p2 - p1) * 0.5 # for each ...
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25092 mr = p2 + (p3 - p2) * 0.5 # polygon ...
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25093 mu = p4 + (p3 - p4) * 0.5 # side
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25094 ol1 = ml + (p1 - ml) * kappa # the 8 bezier
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25095 ol2 = mo + (p1 - mo) * kappa # helper points
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25096 or1 = mo + (p2 - mo) * kappa
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25097 or2 = mr + (p2 - mr) * kappa
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25098 ur1 = mr + (p3 - mr) * kappa
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25099 ur2 = mu + (p3 - mu) * kappa
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25100 ul1 = mu + (p4 - mu) * kappa
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25101 ul2 = ml + (p4 - ml) * kappa
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25102 # now draw, starting from middle point of left side
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25103 ap = "%f %f m\n" % (ml.x, ml.y)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25104 ap += bezier(ol1, ol2, mo)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25105 ap += bezier(or1, or2, mr)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25106 ap += bezier(ur1, ur2, mu)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25107 ap += bezier(ul1, ul2, ml)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25108 return ap
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25109
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25110 @staticmethod
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25111 def _parse_da(annot):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25112
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25113 if g_use_extra:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25114 val = extra.Tools_parse_da( annot.this)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25115 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25116 def Tools__parse_da(annot):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25117 this_annot = annot.this
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25118 assert isinstance(this_annot, mupdf.PdfAnnot)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25119 this_annot_obj = mupdf.pdf_annot_obj( this_annot)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25120 pdf = mupdf.pdf_get_bound_document( this_annot_obj)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25121 try:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25122 da = mupdf.pdf_dict_get_inheritable( this_annot_obj, PDF_NAME('DA'))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25123 if not da.m_internal:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25124 trailer = mupdf.pdf_trailer(pdf)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25125 da = mupdf.pdf_dict_getl(trailer,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25126 PDF_NAME('Root'),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25127 PDF_NAME('AcroForm'),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25128 PDF_NAME('DA'),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25129 )
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25130 da_str = mupdf.pdf_to_text_string(da)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25131 except Exception:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25132 if g_exceptions_verbose: exception_info()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25133 return
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25134 return da_str
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25135 val = Tools__parse_da(annot)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25136
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25137 if not val:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25138 return ((0,), "", 0)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25139 font = "Helv"
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25140 fsize = 12
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25141 col = (0, 0, 0)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25142 dat = val.split() # split on any whitespace
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25143 for i, item in enumerate(dat):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25144 if item == "Tf":
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25145 font = dat[i - 2][1:]
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25146 fsize = float(dat[i - 1])
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25147 dat[i] = dat[i-1] = dat[i-2] = ""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25148 continue
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25149 if item == "g": # unicolor text
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25150 col = [(float(dat[i - 1]))]
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25151 dat[i] = dat[i-1] = ""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25152 continue
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25153 if item == "rg": # RGB colored text
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25154 col = [float(f) for f in dat[i - 3:i]]
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25155 dat[i] = dat[i-1] = dat[i-2] = dat[i-3] = ""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25156 continue
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25157 if item == "k": # CMYK colored text
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25158 col = [float(f) for f in dat[i - 4:i]]
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25159 dat[i] = dat[i-1] = dat[i-2] = dat[i-3] = dat[i-4] = ""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25160 continue
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25161
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25162 val = (col, font, fsize)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25163 return val
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25164
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25165 @staticmethod
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25166 def _reset_widget(annot):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25167 this_annot = annot
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25168 this_annot_obj = mupdf.pdf_annot_obj(this_annot)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25169 pdf = mupdf.pdf_get_bound_document(this_annot_obj)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25170 mupdf.pdf_field_reset(pdf, this_annot_obj)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25171
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25172 @staticmethod
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25173 def _rotate_matrix(page):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25174 pdfpage = page._pdf_page(required=False)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25175 if not pdfpage.m_internal:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25176 return JM_py_from_matrix(mupdf.FzMatrix())
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25177 return JM_py_from_matrix(JM_rotate_page_matrix(pdfpage))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25178
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25179 @staticmethod
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25180 def _save_widget(annot, widget):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25181 JM_set_widget_properties(annot, widget)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25182
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25183 def _update_da(annot, da_str):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25184 if g_use_extra:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25185 extra.Tools_update_da( annot.this, da_str)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25186 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25187 try:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25188 this_annot = annot.this
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25189 assert isinstance(this_annot, mupdf.PdfAnnot)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25190 mupdf.pdf_dict_put_text_string(mupdf.pdf_annot_obj(this_annot), PDF_NAME('DA'), da_str)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25191 mupdf.pdf_dict_del(mupdf.pdf_annot_obj(this_annot), PDF_NAME('DS')) # /* not supported */
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25192 mupdf.pdf_dict_del(mupdf.pdf_annot_obj(this_annot), PDF_NAME('RC')) # /* not supported */
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25193 except Exception:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25194 if g_exceptions_verbose: exception_info()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25195 return
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25196 return
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25197
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25198 @staticmethod
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25199 def gen_id():
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25200 global TOOLS_JM_UNIQUE_ID
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25201 TOOLS_JM_UNIQUE_ID += 1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25202 return TOOLS_JM_UNIQUE_ID
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25203
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25204 @staticmethod
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25205 def glyph_cache_empty():
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25206 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25207 Empty the glyph cache.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25208 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25209 mupdf.fz_purge_glyph_cache()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25210
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25211 @staticmethod
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25212 def image_profile(stream, keep_image=0):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25213 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25214 Metadata of an image binary stream.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25215 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25216 return JM_image_profile(stream, keep_image)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25217
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25218 @staticmethod
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25219 def mupdf_display_errors(on=None):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25220 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25221 Set MuPDF error display to True or False.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25222 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25223 global JM_mupdf_show_errors
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25224 if on is not None:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25225 JM_mupdf_show_errors = bool(on)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25226 return JM_mupdf_show_errors
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25227
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25228 @staticmethod
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25229 def mupdf_display_warnings(on=None):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25230 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25231 Set MuPDF warnings display to True or False.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25232 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25233 global JM_mupdf_show_warnings
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25234 if on is not None:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25235 JM_mupdf_show_warnings = bool(on)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25236 return JM_mupdf_show_warnings
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25237
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25238 @staticmethod
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25239 def mupdf_version():
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25240 '''Get version of MuPDF binary build.'''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25241 return mupdf.FZ_VERSION
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25242
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25243 @staticmethod
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25244 def mupdf_warnings(reset=1):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25245 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25246 Get the MuPDF warnings/errors with optional reset (default).
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25247 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25248 # Get any trailing `... repeated <N> times...` message.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25249 mupdf.fz_flush_warnings()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25250 ret = '\n'.join( JM_mupdf_warnings_store)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25251 if reset:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25252 TOOLS.reset_mupdf_warnings()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25253 return ret
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25254
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25255 @staticmethod
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25256 def reset_mupdf_warnings():
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25257 global JM_mupdf_warnings_store
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25258 JM_mupdf_warnings_store = list()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25259
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25260 @staticmethod
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25261 def set_aa_level(level):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25262 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25263 Set anti-aliasing level.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25264 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25265 mupdf.fz_set_aa_level(level)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25266
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25267 @staticmethod
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25268 def set_annot_stem( stem=None):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25269 global JM_annot_id_stem
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25270 if stem is None:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25271 return JM_annot_id_stem
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25272 len_ = len(stem) + 1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25273 if len_ > 50:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25274 len_ = 50
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25275 JM_annot_id_stem = stem[:50]
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25276 return JM_annot_id_stem
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25277
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25278 @staticmethod
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25279 def set_font_width(doc, xref, width):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25280 pdf = _as_pdf_document(doc, required=0)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25281 if not pdf.m_internal:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25282 return False
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25283 font = mupdf.pdf_load_object(pdf, xref)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25284 dfonts = mupdf.pdf_dict_get(font, PDF_NAME('DescendantFonts'))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25285 if mupdf.pdf_is_array(dfonts):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25286 n = mupdf.pdf_array_len(dfonts)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25287 for i in range(n):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25288 dfont = mupdf.pdf_array_get(dfonts, i)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25289 warray = mupdf.pdf_new_array(pdf, 3)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25290 mupdf.pdf_array_push(warray, mupdf.pdf_new_int(0))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25291 mupdf.pdf_array_push(warray, mupdf.pdf_new_int(65535))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25292 mupdf.pdf_array_push(warray, mupdf.pdf_new_int(width))
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25293 mupdf.pdf_dict_put(dfont, PDF_NAME('W'), warray)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25294 return True
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25295
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25296 @staticmethod
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25297 def set_graphics_min_line_width(min_line_width):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25298 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25299 Set the graphics minimum line width.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25300 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25301 mupdf.fz_set_graphics_min_line_width(min_line_width)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25302
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25303 @staticmethod
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25304 def set_icc( on=0):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25305 """Set ICC color handling on or off."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25306 if on:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25307 if mupdf.FZ_ENABLE_ICC:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25308 mupdf.fz_enable_icc()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25309 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25310 RAISEPY( "MuPDF built w/o ICC support",PyExc_ValueError)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25311 elif mupdf.FZ_ENABLE_ICC:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25312 mupdf.fz_disable_icc()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25313
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25314 @staticmethod
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25315 def set_low_memory( on=None):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25316 """Set / unset MuPDF device caching."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25317 if on is not None:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25318 _globals.no_device_caching = bool(on)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25319 return _globals.no_device_caching
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25320
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25321 @staticmethod
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25322 def set_small_glyph_heights(on=None):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25323 """Set / unset small glyph heights."""
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25324 if on is not None:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25325 _globals.small_glyph_heights = bool(on)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25326 if g_use_extra:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25327 extra.set_small_glyph_heights(_globals.small_glyph_heights)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25328 return _globals.small_glyph_heights
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25329
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25330 @staticmethod
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25331 def set_subset_fontnames(on=None):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25332 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25333 Set / unset returning fontnames with their subset prefix.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25334 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25335 if on is not None:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25336 _globals.subset_fontnames = bool(on)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25337 if g_use_extra:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25338 extra.set_subset_fontnames(_globals.subset_fontnames)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25339 return _globals.subset_fontnames
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25340
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25341 @staticmethod
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25342 def show_aa_level():
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25343 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25344 Show anti-aliasing values.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25345 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25346 return dict(
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25347 graphics = mupdf.fz_graphics_aa_level(),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25348 text = mupdf.fz_text_aa_level(),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25349 graphics_min_line_width = mupdf.fz_graphics_min_line_width(),
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25350 )
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25351
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25352 @staticmethod
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25353 def store_maxsize():
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25354 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25355 MuPDF store size limit.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25356 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25357 # fixme: return gctx->store->max.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25358 return None
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25359
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25360 @staticmethod
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25361 def store_shrink(percent):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25362 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25363 Free 'percent' of current store size.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25364 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25365 if percent >= 100:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25366 mupdf.fz_empty_store()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25367 return 0
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25368 if percent > 0:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25369 mupdf.fz_shrink_store( 100 - percent)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25370 # fixme: return gctx->store->size.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25371
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25372 @staticmethod
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25373 def store_size():
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25374 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25375 MuPDF current store size.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25376 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25377 # fixme: return gctx->store->size.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25378 return None
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25379
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25380 @staticmethod
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25381 def unset_quad_corrections(on=None):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25382 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25383 Set ascender / descender corrections on or off.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25384 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25385 if on is not None:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25386 _globals.skip_quad_corrections = bool(on)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25387 if g_use_extra:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25388 extra.set_skip_quad_corrections(_globals.skip_quad_corrections)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25389 return _globals.skip_quad_corrections
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25390
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25391 # fixme: also defined at top-level.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25392 JM_annot_id_stem = 'fitz'
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25393
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25394 fitz_config = JM_fitz_config()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25395
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25396
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25397 # Callbacks not yet supported with cppyy.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25398 if not mupdf_cppyy:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25399 mupdf.fz_set_warning_callback(JM_mupdf_warning)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25400 mupdf.fz_set_error_callback(JM_mupdf_error)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25401
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25402
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25403 # If there are pending warnings when we exit, we end up in this sequence:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25404 #
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25405 # atexit()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25406 # -> mupdf::internal_thread_state::~internal_thread_state()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25407 # -> fz_drop_context()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25408 # -> fz_flush_warnings()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25409 # -> SWIG Director code
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25410 # -> Python calling JM_mupdf_warning().
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25411 #
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25412 # Unfortunately this causes a SEGV, seemingly because the SWIG Director code has
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25413 # already been torn down.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25414 #
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25415 # So we use a Python atexit handler to explicitly call fz_flush_warnings();
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25416 # this appears to happen early enough for the Director machinery to still
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25417 # work. So in the sequence above, fz_flush_warnings() will find that there are
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25418 # no pending warnings and will not attempt to call JM_mupdf_warning().
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25419 #
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25420 def _atexit():
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25421 #log( 'PyMuPDF/src/__init__.py:_atexit() called')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25422 mupdf.fz_flush_warnings()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25423 mupdf.fz_set_warning_callback(None)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25424 mupdf.fz_set_error_callback(None)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25425 #log( '_atexit() returning')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25426 atexit.register( _atexit)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25427
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25428
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25429 # List of (name, red, green, blue) where:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25430 # name: upper-case name.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25431 # red, green, blue: integer in range 0..255.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25432 #
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25433 from . import _wxcolors
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25434 _wxcolors = _wxcolors._wxcolors
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25435
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25436
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25437 # Dict mapping from name to (red, green, blue).
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25438 # name: lower-case name.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25439 # red, green, blue: float in range 0..1.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25440 #
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25441 pdfcolor = dict()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25442 for name, r, g, b in _wxcolors:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25443 pdfcolor[name.lower()] = (r/255, g/255, b/255)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25444
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25445
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25446 def colors_pdf_dict():
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25447 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25448 Returns dict mapping from name to (red, green, blue).
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25449 name: lower-case name.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25450 red, green, blue: float in range 0..1.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25451 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25452 return pdfcolor
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25453
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25454
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25455 def colors_wx_list():
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25456 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25457 Returns list of (name, red, green, blue) tuples:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25458 name: upper-case name.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25459 red, green, blue: integers in range 0..255.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25460 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25461 return _wxcolors
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25462
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25463
39
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
25464 def _mupdf_devel(make_links=True):
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
25465 '''
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
25466 Allows PyMuPDF installation to be used to compile and link programmes that
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
25467 use the MuPDF C/C++ API.
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
25468
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
25469 Args:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
25470 make_links:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
25471 If true, then on non-windows we also create softlinks to any shared
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
25472 libraries that are supplied with a version suffix; this allows them
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
25473 to be used in a link command.
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
25474
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
25475 For example we create links such as:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
25476
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
25477 site-packages/pymupdf/
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
25478 libmupdf.so -> libmupdf.so.26.7
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
25479 libmupdfcpp.so -> libmupdfcpp.so.26.7
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
25480
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
25481 Returns: (mupdf_include, mupdf_lib).
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
25482 mupdf_include:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
25483 Path of MuPDF include directory within PyMuPDF install.
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
25484 mupdf_lib
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
25485 Path of MuPDF library directory within PyMuPDF install.
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
25486 '''
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
25487 import platform
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
25488
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
25489 log(f'{mupdf_version=}')
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
25490
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
25491 p = os.path.normpath(f'{__file__}/..')
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
25492
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
25493 mupdf_include = f'{p}/mupdf-devel/include'
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
25494
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
25495 if platform.system() == 'Windows':
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
25496 # Separate .lib files are used at build time.
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
25497 mupdf_lib = f'{p}/mupdf-devel/lib'
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
25498 else:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
25499 # .so files are used for both buildtime and runtime linking.
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
25500 mupdf_lib = p
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
25501 log(f'Within installed PyMuPDF:')
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
25502 log(f' {mupdf_include=}')
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
25503 log(f' {mupdf_lib=}')
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
25504
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
25505 assert os.path.isdir(mupdf_include), f'Not a directory: {mupdf_include=}.'
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
25506 assert os.path.isdir(mupdf_lib), f'Not a directory: {mupdf_lib=}.'
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
25507
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
25508 if platform.system() != 'Windows' and make_links:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
25509 # Make symbolic links within the installed pymupdf module so
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
25510 # that ld can find libmupdf.so etc. This is a bit of a hack, but
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
25511 # necessary because wheels cannot contain symbolic links.
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
25512 #
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
25513 # For example we create `libmupdf.so -> libmupdf.so.24.8`.
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
25514 #
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
25515 # We are careful to only create symlinks for the expected MuPDF
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
25516 # version, in case old .so files from a previous install are still
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
25517 # in place.
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
25518 #
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
25519 log(f'Creating symlinks in {mupdf_lib=} for MuPDF-{mupdf_version} .so files.')
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
25520 regex_suffix = mupdf_version.split('.')[1:3]
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
25521 regex_suffix = '[.]'.join(regex_suffix)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
25522 mupdf_lib_regex = f'^(lib[^.]+[.]so)[.]{regex_suffix}$'
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
25523 log(f'{mupdf_lib_regex=}.')
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
25524 for leaf in os.listdir(mupdf_lib):
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
25525 m = re.match(mupdf_lib_regex, leaf)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
25526 if m:
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
25527 pfrom = f'{mupdf_lib}/{m.group(1)}'
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
25528 # os.path.exists() can return false if softlink exists
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
25529 # but points to non-existent file, so we also use
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
25530 # `os.path.islink()`.
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
25531 if os.path.islink(pfrom) or os.path.exists(pfrom):
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
25532 log(f'Removing existing link {pfrom=}.')
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
25533 os.remove(pfrom)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
25534 log(f'Creating symlink: {pfrom} -> {leaf}')
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
25535 os.symlink(leaf, pfrom)
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
25536
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
25537 return mupdf_include, mupdf_lib
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
25538
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
25539
1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25540 # We cannot import utils earlier because it imports this .py file itself and
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25541 # uses some pymupdf.* types in function typing.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25542 #
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25543 from . import utils
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25544
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25545
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25546 # Use utils.*() fns for some class methods.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25547 #
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25548 recover_bbox_quad = utils.recover_bbox_quad
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25549 recover_char_quad = utils.recover_char_quad
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25550 recover_line_quad = utils.recover_line_quad
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25551 recover_quad = utils.recover_quad
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25552 recover_span_quad = utils.recover_span_quad
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25553
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25554 from .table import find_tables
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25555 Page.find_tables = find_tables
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25556
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25557
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25558 class FitzDeprecation(DeprecationWarning):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25559 pass
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25560
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25561 def restore_aliases():
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25562 warnings.filterwarnings( "once", category=FitzDeprecation)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25563
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25564 def showthis(msg, cat, filename, lineno, file=None, line=None):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25565 text = warnings.formatwarning(msg, cat, filename, lineno, line=line)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25566 s = text.find("FitzDeprecation")
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25567 if s < 0:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25568 log(text)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25569 return
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25570 text = text[s:].splitlines()[0][4:]
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25571 log(text)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25572
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25573 warnings.showwarning = showthis
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25574
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25575 def _alias(class_, new_name, legacy_name=None):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25576 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25577 Adds an alias for a class_ or module item clled <class_>.<new>.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25578
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25579 class_:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25580 Class/module to modify; use None for the current module.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25581 new_name:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25582 String name of existing item, e.g. name of method.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25583 legacy_name:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25584 Name of legacy object to create in <class_>. If None, we generate
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25585 from <item> by removing underscores and capitalising the next
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25586 letter.
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25587 '''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25588 if class_ is None:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25589 class_ = sys.modules[__name__]
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25590 if not legacy_name:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25591 legacy_name = ''
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25592 capitalise_next = False
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25593 for c in new_name:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25594 if c == '_':
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25595 capitalise_next = True
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25596 elif capitalise_next:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25597 legacy_name += c.upper()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25598 capitalise_next = False
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25599 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25600 legacy_name += c
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25601 new_object = getattr( class_, new_name)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25602 assert not getattr( class_, legacy_name, None), f'class {class_} already has {legacy_name}'
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25603 if callable( new_object):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25604 def deprecated_function( *args, **kwargs):
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25605 warnings.warn(
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25606 f'"{legacy_name=}" removed from {class_} after v1.19.0 - use "{new_name}".',
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25607 category=FitzDeprecation,
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25608 )
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25609 return new_object( *args, **kwargs)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25610 setattr( class_, legacy_name, deprecated_function)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25611 deprecated_function.__doc__ = (
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25612 f'*** Deprecated and removed in version after v1.19.0 - use "{new_name}". ***\n'
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25613 f'{new_object.__doc__}'
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25614 )
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25615 else:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25616 setattr( class_, legacy_name, new_object)
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25617
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25618 _alias( Annot, 'get_file', 'fileGet')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25619 _alias( Annot, 'get_pixmap')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25620 _alias( Annot, 'get_sound', 'soundGet')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25621 _alias( Annot, 'get_text')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25622 _alias( Annot, 'get_textbox')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25623 _alias( Annot, 'get_textpage', 'getTextPage')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25624 _alias( Annot, 'line_ends')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25625 _alias( Annot, 'set_blendmode', 'setBlendMode')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25626 _alias( Annot, 'set_border')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25627 _alias( Annot, 'set_colors')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25628 _alias( Annot, 'set_flags')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25629 _alias( Annot, 'set_info')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25630 _alias( Annot, 'set_line_ends')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25631 _alias( Annot, 'set_name')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25632 _alias( Annot, 'set_oc', 'setOC')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25633 _alias( Annot, 'set_opacity')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25634 _alias( Annot, 'set_rect')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25635 _alias( Annot, 'update_file', 'fileUpd')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25636 _alias( DisplayList, 'get_pixmap')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25637 _alias( DisplayList, 'get_textpage', 'getTextPage')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25638 _alias( Document, 'chapter_count')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25639 _alias( Document, 'chapter_page_count')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25640 _alias( Document, 'convert_to_pdf', 'convertToPDF')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25641 _alias( Document, 'copy_page')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25642 _alias( Document, 'delete_page')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25643 _alias( Document, 'delete_pages', 'deletePageRange')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25644 _alias( Document, 'embfile_add', 'embeddedFileAdd')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25645 _alias( Document, 'embfile_count', 'embeddedFileCount')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25646 _alias( Document, 'embfile_del', 'embeddedFileDel')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25647 _alias( Document, 'embfile_get', 'embeddedFileGet')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25648 _alias( Document, 'embfile_info', 'embeddedFileInfo')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25649 _alias( Document, 'embfile_names', 'embeddedFileNames')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25650 _alias( Document, 'embfile_upd', 'embeddedFileUpd')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25651 _alias( Document, 'extract_font')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25652 _alias( Document, 'extract_image')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25653 _alias( Document, 'find_bookmark')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25654 _alias( Document, 'fullcopy_page')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25655 _alias( Document, 'get_char_widths')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25656 _alias( Document, 'get_ocgs', 'getOCGs')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25657 _alias( Document, 'get_page_fonts', 'getPageFontList')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25658 _alias( Document, 'get_page_images', 'getPageImageList')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25659 _alias( Document, 'get_page_pixmap')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25660 _alias( Document, 'get_page_text')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25661 _alias( Document, 'get_page_xobjects', 'getPageXObjectList')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25662 _alias( Document, 'get_sigflags', 'getSigFlags')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25663 _alias( Document, 'get_toc', 'getToC')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25664 _alias( Document, 'get_xml_metadata')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25665 _alias( Document, 'insert_page')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25666 _alias( Document, 'insert_pdf', 'insertPDF')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25667 _alias( Document, 'is_dirty')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25668 _alias( Document, 'is_form_pdf', 'isFormPDF')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25669 _alias( Document, 'is_pdf', 'isPDF')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25670 _alias( Document, 'is_reflowable')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25671 _alias( Document, 'is_repaired')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25672 _alias( Document, 'last_location')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25673 _alias( Document, 'load_page')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25674 _alias( Document, 'make_bookmark')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25675 _alias( Document, 'move_page')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25676 _alias( Document, 'needs_pass')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25677 _alias( Document, 'new_page')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25678 _alias( Document, 'next_location')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25679 _alias( Document, 'page_count')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25680 _alias( Document, 'page_cropbox', 'pageCropBox')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25681 _alias( Document, 'page_xref')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25682 _alias( Document, 'pdf_catalog', 'PDFCatalog')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25683 _alias( Document, 'pdf_trailer', 'PDFTrailer')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25684 _alias( Document, 'prev_location', 'previousLocation')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25685 _alias( Document, 'resolve_link')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25686 _alias( Document, 'search_page_for')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25687 _alias( Document, 'set_language')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25688 _alias( Document, 'set_metadata')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25689 _alias( Document, 'set_toc', 'setToC')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25690 _alias( Document, 'set_xml_metadata')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25691 _alias( Document, 'update_object')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25692 _alias( Document, 'update_stream')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25693 _alias( Document, 'xref_is_stream', 'isStream')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25694 _alias( Document, 'xref_length')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25695 _alias( Document, 'xref_object')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25696 _alias( Document, 'xref_stream')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25697 _alias( Document, 'xref_stream_raw')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25698 _alias( Document, 'xref_xml_metadata', 'metadataXML')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25699 _alias( IRect, 'get_area')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25700 _alias( IRect, 'get_area', 'getRectArea')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25701 _alias( IRect, 'include_point')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25702 _alias( IRect, 'include_rect')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25703 _alias( IRect, 'is_empty')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25704 _alias( IRect, 'is_infinite')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25705 _alias( Link, 'is_external')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25706 _alias( Link, 'set_border')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25707 _alias( Link, 'set_colors')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25708 _alias( Matrix, 'is_rectilinear')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25709 _alias( Matrix, 'prerotate', 'preRotate')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25710 _alias( Matrix, 'prescale', 'preScale')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25711 _alias( Matrix, 'preshear', 'preShear')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25712 _alias( Matrix, 'pretranslate', 'preTranslate')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25713 _alias( None, 'get_pdf_now', 'getPDFnow')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25714 _alias( None, 'get_pdf_str', 'getPDFstr')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25715 _alias( None, 'get_text_length')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25716 _alias( None, 'get_text_length', 'getTextlength')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25717 _alias( None, 'image_profile', 'ImageProperties')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25718 _alias( None, 'paper_rect', 'PaperRect')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25719 _alias( None, 'paper_size', 'PaperSize')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25720 _alias( None, 'paper_sizes')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25721 _alias( None, 'planish_line')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25722 _alias( Outline, 'is_external')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25723 _alias( Outline, 'is_open')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25724 _alias( Page, 'add_caret_annot')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25725 _alias( Page, 'add_circle_annot')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25726 _alias( Page, 'add_file_annot')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25727 _alias( Page, 'add_freetext_annot')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25728 _alias( Page, 'add_highlight_annot')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25729 _alias( Page, 'add_ink_annot')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25730 _alias( Page, 'add_line_annot')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25731 _alias( Page, 'add_polygon_annot')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25732 _alias( Page, 'add_polyline_annot')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25733 _alias( Page, 'add_rect_annot')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25734 _alias( Page, 'add_redact_annot')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25735 _alias( Page, 'add_squiggly_annot')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25736 _alias( Page, 'add_stamp_annot')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25737 _alias( Page, 'add_strikeout_annot')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25738 _alias( Page, 'add_text_annot')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25739 _alias( Page, 'add_underline_annot')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25740 _alias( Page, 'add_widget')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25741 _alias( Page, 'clean_contents')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25742 _alias( Page, 'cropbox', 'CropBox')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25743 _alias( Page, 'cropbox_position', 'CropBoxPosition')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25744 _alias( Page, 'delete_annot')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25745 _alias( Page, 'delete_link')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25746 _alias( Page, 'delete_widget')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25747 _alias( Page, 'derotation_matrix')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25748 _alias( Page, 'draw_bezier')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25749 _alias( Page, 'draw_circle')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25750 _alias( Page, 'draw_curve')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25751 _alias( Page, 'draw_line')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25752 _alias( Page, 'draw_oval')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25753 _alias( Page, 'draw_polyline')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25754 _alias( Page, 'draw_quad')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25755 _alias( Page, 'draw_rect')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25756 _alias( Page, 'draw_sector')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25757 _alias( Page, 'draw_squiggle')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25758 _alias( Page, 'draw_zigzag')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25759 _alias( Page, 'first_annot')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25760 _alias( Page, 'first_link')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25761 _alias( Page, 'first_widget')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25762 _alias( Page, 'get_contents')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25763 _alias( Page, 'get_displaylist', 'getDisplayList')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25764 _alias( Page, 'get_drawings')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25765 _alias( Page, 'get_fonts', 'getFontList')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25766 _alias( Page, 'get_image_bbox')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25767 _alias( Page, 'get_images', 'getImageList')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25768 _alias( Page, 'get_links')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25769 _alias( Page, 'get_pixmap')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25770 _alias( Page, 'get_svg_image', 'getSVGimage')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25771 _alias( Page, 'get_text')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25772 _alias( Page, 'get_text_blocks')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25773 _alias( Page, 'get_text_words')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25774 _alias( Page, 'get_textbox')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25775 _alias( Page, 'get_textpage', 'getTextPage')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25776 _alias( Page, 'insert_font')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25777 _alias( Page, 'insert_image')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25778 _alias( Page, 'insert_link')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25779 _alias( Page, 'insert_text')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25780 _alias( Page, 'insert_textbox')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25781 _alias( Page, 'is_wrapped', '_isWrapped')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25782 _alias( Page, 'load_annot')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25783 _alias( Page, 'load_links')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25784 _alias( Page, 'mediabox', 'MediaBox')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25785 _alias( Page, 'mediabox_size', 'MediaBoxSize')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25786 _alias( Page, 'new_shape')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25787 _alias( Page, 'read_contents')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25788 _alias( Page, 'rotation_matrix')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25789 _alias( Page, 'search_for')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25790 _alias( Page, 'set_cropbox', 'setCropBox')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25791 _alias( Page, 'set_mediabox', 'setMediaBox')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25792 _alias( Page, 'set_rotation')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25793 _alias( Page, 'show_pdf_page', 'showPDFpage')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25794 _alias( Page, 'transformation_matrix')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25795 _alias( Page, 'update_link')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25796 _alias( Page, 'wrap_contents')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25797 _alias( Page, 'write_text')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25798 _alias( Pixmap, 'clear_with')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25799 _alias( Pixmap, 'copy', 'copyPixmap')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25800 _alias( Pixmap, 'gamma_with')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25801 _alias( Pixmap, 'invert_irect', 'invertIRect')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25802 _alias( Pixmap, 'pil_save', 'pillowWrite')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25803 _alias( Pixmap, 'pil_tobytes', 'pillowData')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25804 _alias( Pixmap, 'save', 'writeImage')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25805 _alias( Pixmap, 'save', 'writePNG')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25806 _alias( Pixmap, 'set_alpha')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25807 _alias( Pixmap, 'set_dpi', 'setResolution')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25808 _alias( Pixmap, 'set_origin')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25809 _alias( Pixmap, 'set_pixel')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25810 _alias( Pixmap, 'set_rect')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25811 _alias( Pixmap, 'tint_with')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25812 _alias( Pixmap, 'tobytes', 'getImageData')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25813 _alias( Pixmap, 'tobytes', 'getPNGData')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25814 _alias( Pixmap, 'tobytes', 'getPNGdata')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25815 _alias( Quad, 'is_convex')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25816 _alias( Quad, 'is_empty')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25817 _alias( Quad, 'is_rectangular')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25818 _alias( Rect, 'get_area')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25819 _alias( Rect, 'get_area', 'getRectArea')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25820 _alias( Rect, 'include_point')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25821 _alias( Rect, 'include_rect')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25822 _alias( Rect, 'is_empty')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25823 _alias( Rect, 'is_infinite')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25824 _alias( TextWriter, 'fill_textbox')
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25825 _alias( TextWriter, 'write_text')
39
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
25826 _alias( Shape, 'draw_bezier')
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
25827 _alias( Shape, 'draw_circle')
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
25828 _alias( Shape, 'draw_curve')
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
25829 _alias( Shape, 'draw_line')
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
25830 _alias( Shape, 'draw_oval')
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
25831 _alias( Shape, 'draw_polyline')
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
25832 _alias( Shape, 'draw_quad')
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
25833 _alias( Shape, 'draw_rect')
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
25834 _alias( Shape, 'draw_sector')
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
25835 _alias( Shape, 'draw_squiggle')
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
25836 _alias( Shape, 'draw_zigzag')
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
25837 _alias( Shape, 'insert_text')
a6bc019ac0b2 ADD: PyMuPDF v1.26.5: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents: 1
diff changeset
25838 _alias( Shape, 'insert_textbox')
1
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25839
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25840 if 0:
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25841 restore_aliases()
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25842
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25843 __version__ = VersionBind
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25844 __doc__ = (
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25845 f'PyMuPDF {VersionBind}: Python bindings for the MuPDF {VersionFitz} library (rebased implementation).\n'
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25846 f'Python {sys.version_info[0]}.{sys.version_info[1]} running on {sys.platform} ({64 if sys.maxsize > 2**32 else 32}-bit).\n'
1d09e1dec1d9 ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25847 )