PyPDFForm 1.5.3__py3-none-any.whl → 1.5.5__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of PyPDFForm might be problematic. Click here for more details.
- PyPDFForm/__init__.py +1 -1
- PyPDFForm/constants.py +1 -0
- PyPDFForm/middleware/image.py +1 -12
- PyPDFForm/middleware/radio.py +1 -10
- PyPDFForm/middleware/signature.py +2 -2
- PyPDFForm/utils.py +15 -1
- PyPDFForm/wrapper.py +9 -5
- {PyPDFForm-1.5.3.dist-info → pypdfform-1.5.5.dist-info}/METADATA +1 -1
- {PyPDFForm-1.5.3.dist-info → pypdfform-1.5.5.dist-info}/RECORD +12 -12
- {PyPDFForm-1.5.3.dist-info → pypdfform-1.5.5.dist-info}/WHEEL +1 -1
- {PyPDFForm-1.5.3.dist-info → pypdfform-1.5.5.dist-info}/LICENSE +0 -0
- {PyPDFForm-1.5.3.dist-info → pypdfform-1.5.5.dist-info}/top_level.txt +0 -0
PyPDFForm/__init__.py
CHANGED
PyPDFForm/constants.py
CHANGED
PyPDFForm/middleware/image.py
CHANGED
|
@@ -1,21 +1,10 @@
|
|
|
1
1
|
# -*- coding: utf-8 -*-
|
|
2
2
|
"""Contains image field middleware."""
|
|
3
3
|
|
|
4
|
-
from typing import BinaryIO, Union
|
|
5
|
-
|
|
6
4
|
from .signature import Signature
|
|
7
5
|
|
|
8
6
|
|
|
9
7
|
class Image(Signature):
|
|
10
8
|
"""A class to represent an image field widget."""
|
|
11
9
|
|
|
12
|
-
|
|
13
|
-
self,
|
|
14
|
-
name: str,
|
|
15
|
-
value: Union[bytes, str, BinaryIO] = None,
|
|
16
|
-
) -> None:
|
|
17
|
-
"""Constructs all attributes for the image field."""
|
|
18
|
-
|
|
19
|
-
super().__init__(name, value)
|
|
20
|
-
|
|
21
|
-
self.preserve_aspect_ratio = False
|
|
10
|
+
preserve_aspect_ratio = False
|
PyPDFForm/middleware/radio.py
CHANGED
|
@@ -7,16 +7,7 @@ from .checkbox import Checkbox
|
|
|
7
7
|
class Radio(Checkbox):
|
|
8
8
|
"""A class to represent a radiobutton widget."""
|
|
9
9
|
|
|
10
|
-
|
|
11
|
-
self,
|
|
12
|
-
name: str,
|
|
13
|
-
value: int = None,
|
|
14
|
-
) -> None:
|
|
15
|
-
"""Constructs all attributes for the radiobutton."""
|
|
16
|
-
|
|
17
|
-
super().__init__(name, value)
|
|
18
|
-
|
|
19
|
-
self.number_of_options = 0
|
|
10
|
+
number_of_options = 0
|
|
20
11
|
|
|
21
12
|
@property
|
|
22
13
|
def schema_definition(self) -> dict:
|
|
@@ -11,6 +11,8 @@ from .base import Widget
|
|
|
11
11
|
class Signature(Widget):
|
|
12
12
|
"""A class to represent a signature field widget."""
|
|
13
13
|
|
|
14
|
+
preserve_aspect_ratio = True
|
|
15
|
+
|
|
14
16
|
def __init__(
|
|
15
17
|
self,
|
|
16
18
|
name: str,
|
|
@@ -20,8 +22,6 @@ class Signature(Widget):
|
|
|
20
22
|
|
|
21
23
|
super().__init__(name, value)
|
|
22
24
|
|
|
23
|
-
self.preserve_aspect_ratio = True
|
|
24
|
-
|
|
25
25
|
@property
|
|
26
26
|
def schema_definition(self) -> dict:
|
|
27
27
|
"""Json schema definition of the signature field."""
|
PyPDFForm/utils.py
CHANGED
|
@@ -2,6 +2,8 @@
|
|
|
2
2
|
"""Contains utility helpers."""
|
|
3
3
|
|
|
4
4
|
from io import BytesIO
|
|
5
|
+
from secrets import choice
|
|
6
|
+
from string import ascii_letters, digits, punctuation
|
|
5
7
|
from typing import BinaryIO, List, Union
|
|
6
8
|
|
|
7
9
|
from pypdf import PdfReader, PdfWriter
|
|
@@ -9,7 +11,8 @@ from pypdf.generic import DictionaryObject
|
|
|
9
11
|
|
|
10
12
|
from .constants import (BUTTON_STYLES, DEFAULT_CHECKBOX_STYLE, DEFAULT_FONT,
|
|
11
13
|
DEFAULT_FONT_COLOR, DEFAULT_FONT_SIZE,
|
|
12
|
-
DEFAULT_RADIO_STYLE, PREVIEW_FONT_COLOR,
|
|
14
|
+
DEFAULT_RADIO_STYLE, PREVIEW_FONT_COLOR,
|
|
15
|
+
UNIQUE_SUFFIX_LENGTH, WIDGET_TYPES)
|
|
13
16
|
from .middleware.checkbox import Checkbox
|
|
14
17
|
from .middleware.radio import Radio
|
|
15
18
|
from .middleware.text import Text
|
|
@@ -150,3 +153,14 @@ def traverse_pattern(
|
|
|
150
153
|
if result:
|
|
151
154
|
return result
|
|
152
155
|
return None
|
|
156
|
+
|
|
157
|
+
|
|
158
|
+
def generate_unique_suffix() -> str:
|
|
159
|
+
"""Generates a unique suffix string for widgets during form merging."""
|
|
160
|
+
|
|
161
|
+
return "".join(
|
|
162
|
+
[
|
|
163
|
+
choice(ascii_letters + digits + punctuation.replace("-", ""))
|
|
164
|
+
for _ in range(UNIQUE_SUFFIX_LENGTH)
|
|
165
|
+
]
|
|
166
|
+
)
|
PyPDFForm/wrapper.py
CHANGED
|
@@ -19,8 +19,8 @@ from .middleware.text import Text
|
|
|
19
19
|
from .template import (build_widgets, dropdown_to_text,
|
|
20
20
|
set_character_x_paddings, update_text_field_attributes,
|
|
21
21
|
update_widget_keys, widget_rect_watermarks)
|
|
22
|
-
from .utils import (get_page_streams, merge_two_pdfs,
|
|
23
|
-
remove_all_widgets)
|
|
22
|
+
from .utils import (generate_unique_suffix, get_page_streams, merge_two_pdfs,
|
|
23
|
+
preview_widget_to_draw, remove_all_widgets)
|
|
24
24
|
from .watermark import create_watermarks_and_draw, merge_watermarks_with_pdf
|
|
25
25
|
from .widgets.base import handle_non_acro_form_params
|
|
26
26
|
from .widgets.checkbox import CheckBoxWidget
|
|
@@ -166,10 +166,14 @@ class PdfWrapper(FormWrapper):
|
|
|
166
166
|
if not other.stream:
|
|
167
167
|
return self
|
|
168
168
|
|
|
169
|
-
|
|
170
|
-
|
|
169
|
+
unique_suffix = generate_unique_suffix()
|
|
170
|
+
for k in self.widgets:
|
|
171
|
+
if k in other.widgets:
|
|
172
|
+
other.update_widget_key(k, f"{k}-{unique_suffix}", defer=True)
|
|
171
173
|
|
|
172
|
-
|
|
174
|
+
other.commit_widget_key_updates()
|
|
175
|
+
|
|
176
|
+
return self.__class__(merge_two_pdfs(self.stream, other.stream))
|
|
173
177
|
|
|
174
178
|
@property
|
|
175
179
|
def preview(self) -> bytes:
|
|
@@ -1,30 +1,30 @@
|
|
|
1
|
-
PyPDFForm/__init__.py,sha256=
|
|
1
|
+
PyPDFForm/__init__.py,sha256=VxRRjNYIxOegNyxVGwbWiwcQptP0jdjpW_aJjF-nZYY,178
|
|
2
2
|
PyPDFForm/adapter.py,sha256=qt0lqd7zRzaMHD2As47oiIhungO3AyWbAkxx1ZAZi9A,862
|
|
3
|
-
PyPDFForm/constants.py,sha256=
|
|
3
|
+
PyPDFForm/constants.py,sha256=iHCwbnypwgMe5T_hMZIJJixySkOlXgtXuNlI2UUptJ8,1775
|
|
4
4
|
PyPDFForm/coordinate.py,sha256=uZGGFiTUIrD9VX-bzgUpKlFAzK7VJppW1corGXvT-pY,7712
|
|
5
5
|
PyPDFForm/filler.py,sha256=wPVd6lwCPyZ8qPIKK1rLlKFLEWWPcYNPjuXqpC04Cws,7657
|
|
6
6
|
PyPDFForm/font.py,sha256=TbFLY4G72d7cQ3VG2g4HaYKROzQPQUmh6-8ynN6hzXY,5713
|
|
7
7
|
PyPDFForm/image.py,sha256=SflPlzoTFZro2Fvd7u7bF-1mmg7D0e8YjePbQXW8YyY,1429
|
|
8
8
|
PyPDFForm/patterns.py,sha256=Z548TjpQpaVepctvlRYe0-2i7Aws96fo-ncG82CUX14,5423
|
|
9
9
|
PyPDFForm/template.py,sha256=LlnZTNF5UPLkiGqnSgHNcVr_Af6vJyg6vBf7jVD5wAM,15470
|
|
10
|
-
PyPDFForm/utils.py,sha256=
|
|
10
|
+
PyPDFForm/utils.py,sha256=hMWGLyTZJSQG4gItlnQLq8RxnV4bM2sL6_-RmLqSwtE,4721
|
|
11
11
|
PyPDFForm/watermark.py,sha256=L4LfzjjyJ6TDq9ad2dbtQYheBOic1_oZ7smhFFekNog,4725
|
|
12
|
-
PyPDFForm/wrapper.py,sha256=
|
|
12
|
+
PyPDFForm/wrapper.py,sha256=B0L0aj9ed7jLlPEaUG-xqkEfQzIoZuSxTnCeVFmxfJQ,11774
|
|
13
13
|
PyPDFForm/middleware/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
14
14
|
PyPDFForm/middleware/base.py,sha256=Sjo8O9RrdBu73r4BCMPuLXnrl1hzjb1dlTOPeIgrhOU,1150
|
|
15
15
|
PyPDFForm/middleware/checkbox.py,sha256=0EWFECXYdz9SNxgGe1QCcRrdxLVUIJpzRYwKfGRA9e4,1346
|
|
16
16
|
PyPDFForm/middleware/dropdown.py,sha256=_RXs9o3vWH_a402zhTOYE_mcWbtFfVU7bReYcEFAIyk,793
|
|
17
|
-
PyPDFForm/middleware/image.py,sha256=
|
|
18
|
-
PyPDFForm/middleware/radio.py,sha256=
|
|
19
|
-
PyPDFForm/middleware/signature.py,sha256=
|
|
17
|
+
PyPDFForm/middleware/image.py,sha256=tQrLKZUKOz90jKxuUQpTP4Awuvtf0I92LeANH0k6mzQ,212
|
|
18
|
+
PyPDFForm/middleware/radio.py,sha256=KfwOtlnMk5B2y8KbqD-ONN5AbkHa4TF5NzdcZlbNyDk,598
|
|
19
|
+
PyPDFForm/middleware/signature.py,sha256=1ZOkBKectZ7kptJMQ-EuOA_xI7j8dlwseo2p2Z0FS2o,1138
|
|
20
20
|
PyPDFForm/middleware/text.py,sha256=7HFHy_lfBFfYbSUzgVKovSoShbNP6L7tiILIw-9_kpo,1549
|
|
21
21
|
PyPDFForm/widgets/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
22
22
|
PyPDFForm/widgets/base.py,sha256=nb6HEfRdWSjZc_Th1XI62PIlgREn_JiApGC-epb6jAg,3348
|
|
23
23
|
PyPDFForm/widgets/checkbox.py,sha256=MGB6NGI-XMBz4j2erykgYOCd1pswvthuQ6UFowQOd4o,503
|
|
24
24
|
PyPDFForm/widgets/dropdown.py,sha256=2_R5xcLUWAL0G4raVgWWtE7TJdiWJITay-Gtl8YI2QI,705
|
|
25
25
|
PyPDFForm/widgets/text.py,sha256=sCB8CQAjh30QOGr8FTIDSk3X6dXSHJztOz6YkKEBDss,691
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
26
|
+
pypdfform-1.5.5.dist-info/LICENSE,sha256=43awmYkI6opyTpg19me731iO1WfXZwViqb67oWtCsFY,1065
|
|
27
|
+
pypdfform-1.5.5.dist-info/METADATA,sha256=Bx7Ty8G_SSx9AL9z27NrwRVAWYudmtmRf1xULqfteK4,4376
|
|
28
|
+
pypdfform-1.5.5.dist-info/WHEEL,sha256=jB7zZ3N9hIM9adW7qlTAyycLYW9npaWKLRzaoVcLKcM,91
|
|
29
|
+
pypdfform-1.5.5.dist-info/top_level.txt,sha256=GQQKuWqPUjT9YZqwK95NlAQzxjwoQrsxQ8ureM8lWOY,10
|
|
30
|
+
pypdfform-1.5.5.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|