PyPDFForm 1.5.2__py3-none-any.whl → 1.5.3__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 CHANGED
@@ -1,7 +1,7 @@
1
1
  # -*- coding: utf-8 -*-
2
2
  """Contains any object users might need."""
3
3
 
4
- __version__ = "1.5.2"
4
+ __version__ = "1.5.3"
5
5
 
6
6
  from .wrapper import FormWrapper, PdfWrapper
7
7
 
PyPDFForm/coordinate.py CHANGED
@@ -40,6 +40,9 @@ def get_draw_checkbox_radio_coordinates(
40
40
 
41
41
  def get_draw_image_coordinates_resolutions(
42
42
  widget: dict,
43
+ preserve_aspect_ratio: bool,
44
+ image_width: float,
45
+ image_height: float,
43
46
  ) -> Tuple[float, float, float, float]:
44
47
  """
45
48
  Returns coordinates and resolutions to draw image at given a PDF form signature/image widget.
@@ -50,6 +53,18 @@ def get_draw_image_coordinates_resolutions(
50
53
  width = abs(float(widget[Rect][0]) - float(widget[Rect][2]))
51
54
  height = abs(float(widget[Rect][1]) - float(widget[Rect][3]))
52
55
 
56
+ if preserve_aspect_ratio:
57
+ ratio = max(image_width / width, image_height / height)
58
+
59
+ new_width = image_width / ratio
60
+ new_height = image_height / ratio
61
+
62
+ x += abs(new_width - width) / 2
63
+ y += abs(new_height - height) / 2
64
+
65
+ width = new_width
66
+ height = new_height
67
+
53
68
  return x, y, width, height
54
69
 
55
70
 
PyPDFForm/filler.py CHANGED
@@ -13,7 +13,7 @@ from .coordinate import (get_draw_checkbox_radio_coordinates,
13
13
  get_draw_text_coordinates,
14
14
  get_text_line_x_coordinates)
15
15
  from .font import checkbox_radio_font_size
16
- from .image import any_image_to_jpg
16
+ from .image import any_image_to_jpg, get_image_dimensions
17
17
  from .middleware.checkbox import Checkbox
18
18
  from .middleware.dropdown import Dropdown
19
19
  from .middleware.image import Image
@@ -62,7 +62,10 @@ def signature_image_handler(
62
62
  if stream is not None:
63
63
  any_image_to_draw = True
64
64
  stream = any_image_to_jpg(stream)
65
- x, y, width, height = get_draw_image_coordinates_resolutions(widget)
65
+ image_width, image_height = get_image_dimensions(stream)
66
+ x, y, width, height = get_draw_image_coordinates_resolutions(
67
+ widget, middleware.preserve_aspect_ratio, image_width, image_height
68
+ )
66
69
  images_to_draw.append(
67
70
  [
68
71
  stream,
PyPDFForm/image.py CHANGED
@@ -2,7 +2,7 @@
2
2
  """Contains helpers for image."""
3
3
 
4
4
  from io import BytesIO
5
- from typing import Union
5
+ from typing import Tuple, Union
6
6
 
7
7
  from PIL import Image
8
8
 
@@ -28,6 +28,18 @@ def rotate_image(image_stream: bytes, rotation: Union[float, int]) -> bytes:
28
28
  return result
29
29
 
30
30
 
31
+ def get_image_dimensions(image_stream: bytes) -> Tuple[float, float]:
32
+ """Gets the width and height of an image."""
33
+
34
+ buff = BytesIO()
35
+ buff.write(image_stream)
36
+ buff.seek(0)
37
+
38
+ image = Image.open(buff)
39
+
40
+ return image.size
41
+
42
+
31
43
  def any_image_to_jpg(image_stream: bytes) -> bytes:
32
44
  """Converts an image of any type to jpg."""
33
45
 
@@ -1,8 +1,21 @@
1
1
  # -*- coding: utf-8 -*-
2
2
  """Contains image field middleware."""
3
3
 
4
+ from typing import BinaryIO, Union
5
+
4
6
  from .signature import Signature
5
7
 
6
8
 
7
9
  class Image(Signature):
8
10
  """A class to represent an image field widget."""
11
+
12
+ def __init__(
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
@@ -20,6 +20,8 @@ class Signature(Widget):
20
20
 
21
21
  super().__init__(name, value)
22
22
 
23
+ self.preserve_aspect_ratio = True
24
+
23
25
  @property
24
26
  def schema_definition(self) -> dict:
25
27
  """Json schema definition of the signature field."""
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: PyPDFForm
3
- Version: 1.5.2
3
+ Version: 1.5.3
4
4
  Summary: The Python library for PDF forms.
5
5
  Home-page: https://github.com/chinapandaman/PyPDFForm
6
6
  Author: Jinge Li
@@ -1,10 +1,10 @@
1
- PyPDFForm/__init__.py,sha256=-SiFL-rTPed5J5k_a2JG6rtcU_vGtAZigzoS-S_Sfmk,178
1
+ PyPDFForm/__init__.py,sha256=GbSU_vP9pxo3lFMOfxaLUhhW6V5_26Xh7t3B3b6rEK0,178
2
2
  PyPDFForm/adapter.py,sha256=qt0lqd7zRzaMHD2As47oiIhungO3AyWbAkxx1ZAZi9A,862
3
3
  PyPDFForm/constants.py,sha256=xj9CSq7PlCpAowKAlK0o8YPgPkBkJjRDToI8aiqC_c0,1749
4
- PyPDFForm/coordinate.py,sha256=V_ZZQ1pXtVPAyfMJCX7fKoEimK7XwX6bU3VQ0nKOhQA,7314
5
- PyPDFForm/filler.py,sha256=ztYU-Rk_LKfCw-BhmdIDnK7ez-5jSPoi2Ho3xvbO4Io,7487
4
+ PyPDFForm/coordinate.py,sha256=uZGGFiTUIrD9VX-bzgUpKlFAzK7VJppW1corGXvT-pY,7712
5
+ PyPDFForm/filler.py,sha256=wPVd6lwCPyZ8qPIKK1rLlKFLEWWPcYNPjuXqpC04Cws,7657
6
6
  PyPDFForm/font.py,sha256=TbFLY4G72d7cQ3VG2g4HaYKROzQPQUmh6-8ynN6hzXY,5713
7
- PyPDFForm/image.py,sha256=sjXPg9fjenNFj12a321xHX6JvuJs6PJRGLzpSNw5mVU,1180
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
10
  PyPDFForm/utils.py,sha256=9omR-oT3OdZqioxpiGqA9_P0GSFC6mg4Y1xrLvWOzkk,4309
@@ -14,17 +14,17 @@ PyPDFForm/middleware/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hS
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=xjPxRiGBWFEU3EQGGqJXY1iMX1kmr0jO8O9iVUC5rcc,177
17
+ PyPDFForm/middleware/image.py,sha256=zR31u3dPVwhxECMGb6KaHFQrTKtbF5djBDmoyPl3WK0,475
18
18
  PyPDFForm/middleware/radio.py,sha256=uffpK15U1gUn7mkyOcMwZByZo-I2cMWWsW3sBb1WeYk,801
19
- PyPDFForm/middleware/signature.py,sha256=m7tNvGZ7fQ0yuVKzSlLbNQ2IILo1GDnjzMDzMnYCKVM,1104
19
+ PyPDFForm/middleware/signature.py,sha256=cDsJX7q-KSZi9Sd90Gx1c9cMyTqZBExZ-enWJMjFZNw,1147
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
- PyPDFForm-1.5.2.dist-info/LICENSE,sha256=43awmYkI6opyTpg19me731iO1WfXZwViqb67oWtCsFY,1065
27
- PyPDFForm-1.5.2.dist-info/METADATA,sha256=15iix1PjDLJk3OLrQTFdKRpt-dmH2JaL-vcjWCuPksc,4376
28
- PyPDFForm-1.5.2.dist-info/WHEEL,sha256=In9FTNxeP60KnTkGw7wk6mJPYd_dQSjEZmXdBdMCI-8,91
29
- PyPDFForm-1.5.2.dist-info/top_level.txt,sha256=GQQKuWqPUjT9YZqwK95NlAQzxjwoQrsxQ8ureM8lWOY,10
30
- PyPDFForm-1.5.2.dist-info/RECORD,,
26
+ PyPDFForm-1.5.3.dist-info/LICENSE,sha256=43awmYkI6opyTpg19me731iO1WfXZwViqb67oWtCsFY,1065
27
+ PyPDFForm-1.5.3.dist-info/METADATA,sha256=GwIvR6NToB1-7l6XqlvxGct0x0gOhOrwjLL7Jg9ZAgg,4376
28
+ PyPDFForm-1.5.3.dist-info/WHEEL,sha256=In9FTNxeP60KnTkGw7wk6mJPYd_dQSjEZmXdBdMCI-8,91
29
+ PyPDFForm-1.5.3.dist-info/top_level.txt,sha256=GQQKuWqPUjT9YZqwK95NlAQzxjwoQrsxQ8ureM8lWOY,10
30
+ PyPDFForm-1.5.3.dist-info/RECORD,,