PyPDFForm 2.2.6__py3-none-any.whl → 2.2.7__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
@@ -5,7 +5,7 @@ This package provides tools for filling PDF forms, drawing text and images,
5
5
  and manipulating PDF form elements programmatically.
6
6
  """
7
7
 
8
- __version__ = "2.2.6"
8
+ __version__ = "2.2.7"
9
9
 
10
10
  from .wrapper import FormWrapper, PdfWrapper
11
11
 
PyPDFForm/filler.py CHANGED
@@ -38,7 +38,7 @@ from .patterns import (WIDGET_KEY_PATTERNS, simple_flatten_generic,
38
38
  simple_flatten_radio, simple_update_checkbox_value,
39
39
  simple_update_dropdown_value, simple_update_radio_value,
40
40
  simple_update_text_value)
41
- from .template import get_widgets_by_page
41
+ from .template import get_widget_full_key, get_widgets_by_page
42
42
  from .utils import (checkbox_radio_to_draw, extract_widget_property,
43
43
  stream_to_io)
44
44
  from .watermark import create_watermarks_and_draw, merge_watermarks_with_pdf
@@ -220,6 +220,7 @@ def get_drawn_stream(to_draw: dict, stream: bytes, action: str) -> bytes:
220
220
  def fill(
221
221
  template_stream: bytes,
222
222
  widgets: Dict[str, WIDGET_TYPES],
223
+ use_full_widget_name: bool,
223
224
  ) -> bytes:
224
225
  """Fills a PDF form using watermark technique for complex rendering.
225
226
 
@@ -231,6 +232,7 @@ def fill(
231
232
  Args:
232
233
  template_stream: Input PDF form as bytes
233
234
  widgets: Dictionary mapping field names to widget middleware
235
+ use_full_widget_name: If True, uses the full widget name as the key in the widgets dictionary
234
236
 
235
237
  Returns:
236
238
  bytes: Filled PDF form as bytes
@@ -253,6 +255,8 @@ def fill(
253
255
  line_borders_to_draw[page] = []
254
256
  for widget_dict in widget_dicts:
255
257
  key = extract_widget_property(widget_dict, WIDGET_KEY_PATTERNS, None, str)
258
+ if use_full_widget_name:
259
+ key = get_widget_full_key(widget_dict)
256
260
  text_needs_to_be_drawn = False
257
261
  to_draw = x = y = None
258
262
 
PyPDFForm/template.py CHANGED
@@ -246,15 +246,14 @@ def get_widgets_by_page(pdf: bytes) -> Dict[int, List[dict]]:
246
246
  return result
247
247
 
248
248
 
249
- def get_widget_full_key(widget: dict) -> Union[str, None]:
249
+ def get_widget_full_key(widget: dict) -> str:
250
250
  """Constructs a widget's full hierarchical key including parent names.
251
251
 
252
252
  Args:
253
253
  widget: PDF widget dictionary
254
254
 
255
255
  Returns:
256
- Union[str, None]: Full key in format "parent.child" if parent exists,
257
- otherwise None
256
+ str: Full key in format "parent.child" if parent exists, otherwise the widget's key
258
257
  """
259
258
 
260
259
  key = extract_widget_property(widget, WIDGET_KEY_PATTERNS, None, str)
@@ -264,9 +263,9 @@ def get_widget_full_key(widget: dict) -> Union[str, None]:
264
263
  and T in widget[Parent].get_object()
265
264
  and widget[Parent].get_object()[T] != key
266
265
  ):
267
- return f"{widget[Parent].get_object()[T]}.{key}"
266
+ key = f"{get_widget_full_key(widget[Parent].get_object())}.{key}"
268
267
 
269
- return None
268
+ return key
270
269
 
271
270
 
272
271
  def construct_widget(widget: dict, key: str) -> Union[WIDGET_TYPES, None]:
PyPDFForm/utils.py CHANGED
@@ -104,10 +104,13 @@ def checkbox_radio_to_draw(
104
104
  return new_widget
105
105
 
106
106
 
107
- def preview_widget_to_draw(widget: WIDGET_TYPES, with_preview_text: bool) -> Text:
107
+ def preview_widget_to_draw(
108
+ widget_name: str, widget: WIDGET_TYPES, with_preview_text: bool
109
+ ) -> Text:
108
110
  """Creates preview version of a widget showing field name/location.
109
111
 
110
112
  Args:
113
+ widget_name: Name of the widget to generate preview for
111
114
  widget: Widget to generate preview for
112
115
  with_preview_text: Whether to include field name in preview
113
116
 
@@ -117,7 +120,7 @@ def preview_widget_to_draw(widget: WIDGET_TYPES, with_preview_text: bool) -> Tex
117
120
 
118
121
  new_widget = Text(
119
122
  name=widget.name,
120
- value="{" + f" {widget.name} " + "}" if with_preview_text else None,
123
+ value="{" + f" {widget_name} " + "}" if with_preview_text else None,
121
124
  )
122
125
  new_widget.font = DEFAULT_FONT
123
126
  new_widget.font_size = DEFAULT_FONT_SIZE
PyPDFForm/wrapper.py CHANGED
@@ -362,9 +362,10 @@ class PdfWrapper(FormWrapper):
362
362
  fill(
363
363
  self.stream,
364
364
  {
365
- key: preview_widget_to_draw(value, True)
365
+ key: preview_widget_to_draw(key, value, True)
366
366
  for key, value in self.widgets.items()
367
367
  },
368
+ getattr(self, "use_full_widget_name"),
368
369
  )
369
370
  )
370
371
 
@@ -391,9 +392,10 @@ class PdfWrapper(FormWrapper):
391
392
  fill(
392
393
  self.stream,
393
394
  {
394
- key: preview_widget_to_draw(value, False)
395
+ key: preview_widget_to_draw(key, value, False)
395
396
  for key, value in self.widgets.items()
396
397
  },
398
+ getattr(self, "use_full_widget_name"),
397
399
  )
398
400
  ),
399
401
  color,
@@ -434,7 +436,9 @@ class PdfWrapper(FormWrapper):
434
436
  if self.read():
435
437
  self.widgets = set_character_x_paddings(self.stream, self.widgets)
436
438
 
437
- self.stream = remove_all_widgets(fill(self.stream, self.widgets))
439
+ self.stream = remove_all_widgets(
440
+ fill(self.stream, self.widgets, getattr(self, "use_full_widget_name"))
441
+ )
438
442
 
439
443
  return self
440
444
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: PyPDFForm
3
- Version: 2.2.6
3
+ Version: 2.2.7
4
4
  Summary: The Python library for PDF forms.
5
5
  Author: Jinge Li
6
6
  License-Expression: MIT
@@ -1,15 +1,15 @@
1
- PyPDFForm/__init__.py,sha256=cCocr2KFIvseeYcsUJhTvM4m8Z8eo3aJLamlTpjYOqg,328
1
+ PyPDFForm/__init__.py,sha256=r3unIF6eX0bQ9fRotGNv_5feWcA35-AiSA4k9gF3BR8,328
2
2
  PyPDFForm/adapter.py,sha256=_5fP5UR-NzjDDayJmBRO36DgbnbUzNbjZtHZtPvSM14,1909
3
3
  PyPDFForm/constants.py,sha256=3ed0j11cWd9Uo4s-XvZwwJojPSz8aqdmZgaEishWjqE,2342
4
4
  PyPDFForm/coordinate.py,sha256=gQI7z-GsdCO33Qny5kXLBs6Y2TW5KO_mJ2in64fvXcg,16412
5
- PyPDFForm/filler.py,sha256=VnxRdSP2NpiQsGkDfAuFA6oS2dmARQA3ArO8q_O0o1o,14006
5
+ PyPDFForm/filler.py,sha256=f8xgMBTCVWpwQm56ojhLXOo6A_R7oQCooSLUD5qZICA,14253
6
6
  PyPDFForm/font.py,sha256=eRbDyQFhXUkHzyZvCtru9Ypg_ukfbBAnSM5xNzPb5ss,7280
7
7
  PyPDFForm/image.py,sha256=aYk7BC-AHiqt73durGIQ3e6gE5Ggbdr8jmkCUaQdsk8,1627
8
8
  PyPDFForm/patterns.py,sha256=Zv80gZswYFlFuo6eXL1j8bMyckavXPuw55D8IzcvIW0,9472
9
- PyPDFForm/template.py,sha256=v1ZM52xHCzO8Xm7EXinbTepm2G7MU7StUgCFtuUdcbI,18899
10
- PyPDFForm/utils.py,sha256=M07Q_2defFGmhBqvgEoQ9pt_IYZwXCsqrMljlKYYwIM,8487
9
+ PyPDFForm/template.py,sha256=WFU6KnGWJ06lQ1GdjdYxmfToL2ash_c9g4z2yiWGebo,18889
10
+ PyPDFForm/utils.py,sha256=QxJSG96FHGch863UdBPT8DdTKN9gVzQzA2ezifTm7z4,8575
11
11
  PyPDFForm/watermark.py,sha256=Ni6Y2-DSaAaxqXtCSTrmDOMO0XW7-u3Hucr6J4njtG8,12475
12
- PyPDFForm/wrapper.py,sha256=mCoJtYHM-OSogXKiQTA8XHlD0dnWwonPYcou4zMdtzg,25359
12
+ PyPDFForm/wrapper.py,sha256=-Yp8mnehn2Ho-5O5v7cojHcoBotjeWhi_qM9NAIpTDk,25544
13
13
  PyPDFForm/middleware/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
14
14
  PyPDFForm/middleware/base.py,sha256=d4z7M7pm80176cC4H85m3ZRWzAu_Fm1HkwQkmSSi-WE,2832
15
15
  PyPDFForm/middleware/checkbox.py,sha256=gRGhFySPoIpKBseoiOTS3WggoBBik12dXbZ-LJKzIwM,2611
@@ -27,8 +27,8 @@ PyPDFForm/widgets/image.py,sha256=6y8Ysmk49USr_qWOXD6KGL6cch516cUIlrxoj0pJy9Q,79
27
27
  PyPDFForm/widgets/radio.py,sha256=ipadJyHbgftDUvjGk15kapzgHPN3HjdF_iB_7amXR6o,2737
28
28
  PyPDFForm/widgets/signature.py,sha256=EndajR-SQWDZyVfbvDoz5Bjuer5KbURjFlRGqxeXYeY,5115
29
29
  PyPDFForm/widgets/text.py,sha256=HP2cPEUAzK5QL3kDfMz7gQcC3svCpmYuyFItBjlrBpI,1233
30
- pypdfform-2.2.6.dist-info/licenses/LICENSE,sha256=43awmYkI6opyTpg19me731iO1WfXZwViqb67oWtCsFY,1065
31
- pypdfform-2.2.6.dist-info/METADATA,sha256=OHfkmG1BfxJVEDUNV8h8DpPl7c-Jbwmsyteln69rkFY,5605
32
- pypdfform-2.2.6.dist-info/WHEEL,sha256=wXxTzcEDnjrTwFYjLPcsW_7_XihufBwmpiBeiXNBGEA,91
33
- pypdfform-2.2.6.dist-info/top_level.txt,sha256=GQQKuWqPUjT9YZqwK95NlAQzxjwoQrsxQ8ureM8lWOY,10
34
- pypdfform-2.2.6.dist-info/RECORD,,
30
+ pypdfform-2.2.7.dist-info/licenses/LICENSE,sha256=43awmYkI6opyTpg19me731iO1WfXZwViqb67oWtCsFY,1065
31
+ pypdfform-2.2.7.dist-info/METADATA,sha256=AGsBkSQv4d11UOfNlrnDn8oHBU8KouKIjgJQSTlZiyM,5605
32
+ pypdfform-2.2.7.dist-info/WHEEL,sha256=0CuiUZ_p9E4cD6NyLD6UG80LBXYyiSYZOKDm5lp32xk,91
33
+ pypdfform-2.2.7.dist-info/top_level.txt,sha256=GQQKuWqPUjT9YZqwK95NlAQzxjwoQrsxQ8ureM8lWOY,10
34
+ pypdfform-2.2.7.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (80.1.0)
2
+ Generator: setuptools (80.3.1)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5