PyPDFForm 3.3.2__tar.gz → 3.4.0__tar.gz

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.

Files changed (52) hide show
  1. {pypdfform-3.3.2 → pypdfform-3.4.0}/PKG-INFO +4 -1
  2. {pypdfform-3.3.2 → pypdfform-3.4.0}/PyPDFForm/__init__.py +1 -1
  3. {pypdfform-3.3.2 → pypdfform-3.4.0}/PyPDFForm/hooks.py +42 -4
  4. {pypdfform-3.3.2 → pypdfform-3.4.0}/PyPDFForm/middleware/dropdown.py +4 -0
  5. {pypdfform-3.3.2 → pypdfform-3.4.0}/PyPDFForm/middleware/text.py +1 -1
  6. {pypdfform-3.3.2 → pypdfform-3.4.0}/PyPDFForm/template.py +2 -1
  7. {pypdfform-3.3.2 → pypdfform-3.4.0}/PyPDFForm.egg-info/PKG-INFO +4 -1
  8. {pypdfform-3.3.2 → pypdfform-3.4.0}/README.md +3 -0
  9. pypdfform-3.4.0/tests/test_widget_attr_trigger.py +464 -0
  10. pypdfform-3.3.2/tests/test_widget_attr_trigger.py +0 -208
  11. {pypdfform-3.3.2 → pypdfform-3.4.0}/LICENSE +0 -0
  12. {pypdfform-3.3.2 → pypdfform-3.4.0}/PyPDFForm/adapter.py +0 -0
  13. {pypdfform-3.3.2 → pypdfform-3.4.0}/PyPDFForm/constants.py +0 -0
  14. {pypdfform-3.3.2 → pypdfform-3.4.0}/PyPDFForm/coordinate.py +0 -0
  15. {pypdfform-3.3.2 → pypdfform-3.4.0}/PyPDFForm/filler.py +0 -0
  16. {pypdfform-3.3.2 → pypdfform-3.4.0}/PyPDFForm/font.py +0 -0
  17. {pypdfform-3.3.2 → pypdfform-3.4.0}/PyPDFForm/image.py +0 -0
  18. {pypdfform-3.3.2 → pypdfform-3.4.0}/PyPDFForm/middleware/__init__.py +0 -0
  19. {pypdfform-3.3.2 → pypdfform-3.4.0}/PyPDFForm/middleware/base.py +0 -0
  20. {pypdfform-3.3.2 → pypdfform-3.4.0}/PyPDFForm/middleware/checkbox.py +0 -0
  21. {pypdfform-3.3.2 → pypdfform-3.4.0}/PyPDFForm/middleware/image.py +0 -0
  22. {pypdfform-3.3.2 → pypdfform-3.4.0}/PyPDFForm/middleware/radio.py +0 -0
  23. {pypdfform-3.3.2 → pypdfform-3.4.0}/PyPDFForm/middleware/signature.py +0 -0
  24. {pypdfform-3.3.2 → pypdfform-3.4.0}/PyPDFForm/patterns.py +0 -0
  25. {pypdfform-3.3.2 → pypdfform-3.4.0}/PyPDFForm/utils.py +0 -0
  26. {pypdfform-3.3.2 → pypdfform-3.4.0}/PyPDFForm/watermark.py +0 -0
  27. {pypdfform-3.3.2 → pypdfform-3.4.0}/PyPDFForm/widgets/__init__.py +0 -0
  28. {pypdfform-3.3.2 → pypdfform-3.4.0}/PyPDFForm/widgets/base.py +0 -0
  29. {pypdfform-3.3.2 → pypdfform-3.4.0}/PyPDFForm/widgets/bedrock.py +0 -0
  30. {pypdfform-3.3.2 → pypdfform-3.4.0}/PyPDFForm/widgets/checkbox.py +0 -0
  31. {pypdfform-3.3.2 → pypdfform-3.4.0}/PyPDFForm/widgets/dropdown.py +0 -0
  32. {pypdfform-3.3.2 → pypdfform-3.4.0}/PyPDFForm/widgets/image.py +0 -0
  33. {pypdfform-3.3.2 → pypdfform-3.4.0}/PyPDFForm/widgets/radio.py +0 -0
  34. {pypdfform-3.3.2 → pypdfform-3.4.0}/PyPDFForm/widgets/signature.py +0 -0
  35. {pypdfform-3.3.2 → pypdfform-3.4.0}/PyPDFForm/widgets/text.py +0 -0
  36. {pypdfform-3.3.2 → pypdfform-3.4.0}/PyPDFForm/wrapper.py +0 -0
  37. {pypdfform-3.3.2 → pypdfform-3.4.0}/PyPDFForm.egg-info/SOURCES.txt +0 -0
  38. {pypdfform-3.3.2 → pypdfform-3.4.0}/PyPDFForm.egg-info/dependency_links.txt +0 -0
  39. {pypdfform-3.3.2 → pypdfform-3.4.0}/PyPDFForm.egg-info/requires.txt +0 -0
  40. {pypdfform-3.3.2 → pypdfform-3.4.0}/PyPDFForm.egg-info/top_level.txt +0 -0
  41. {pypdfform-3.3.2 → pypdfform-3.4.0}/pyproject.toml +0 -0
  42. {pypdfform-3.3.2 → pypdfform-3.4.0}/setup.cfg +0 -0
  43. {pypdfform-3.3.2 → pypdfform-3.4.0}/tests/test_adobe_mode.py +0 -0
  44. {pypdfform-3.3.2 → pypdfform-3.4.0}/tests/test_create_widget.py +0 -0
  45. {pypdfform-3.3.2 → pypdfform-3.4.0}/tests/test_dropdown.py +0 -0
  46. {pypdfform-3.3.2 → pypdfform-3.4.0}/tests/test_extract_values.py +0 -0
  47. {pypdfform-3.3.2 → pypdfform-3.4.0}/tests/test_fill_max_length_text_field.py +0 -0
  48. {pypdfform-3.3.2 → pypdfform-3.4.0}/tests/test_fill_method.py +0 -0
  49. {pypdfform-3.3.2 → pypdfform-3.4.0}/tests/test_functional.py +0 -0
  50. {pypdfform-3.3.2 → pypdfform-3.4.0}/tests/test_paragraph.py +0 -0
  51. {pypdfform-3.3.2 → pypdfform-3.4.0}/tests/test_signature.py +0 -0
  52. {pypdfform-3.3.2 → pypdfform-3.4.0}/tests/test_use_full_widget_name.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: PyPDFForm
3
- Version: 3.3.2
3
+ Version: 3.4.0
4
4
  Summary: The Python library for PDF forms.
5
5
  Author: Jinge Li
6
6
  License-Expression: MIT
@@ -39,6 +39,9 @@ Requires-Dist: ruff; extra == "dev"
39
39
  Dynamic: license-file
40
40
 
41
41
  <p align="center"><img src="https://github.com/chinapandaman/PyPDFForm/raw/master/docs/img/logo.png"></p>
42
+ <p align="center">
43
+ <em>PDF Form Automation Simplified – Create, Merge, Style, and Fill Forms Programmatically.</em>
44
+ </p>
42
45
  <p align="center">
43
46
  <a href="https://pypi.org/project/PyPDFForm/"><img src="https://img.shields.io/pypi/v/pypdfform?label=version&color=magenta"></a>
44
47
  <a href="https://chinapandaman.github.io/PyPDFForm/"><img src="https://img.shields.io/github/v/release/chinapandaman/pypdfform?label=docs&color=cyan"></a>
@@ -20,7 +20,7 @@ The library supports various PDF form features, including:
20
20
  PyPDFForm aims to simplify PDF form manipulation, making it accessible to developers of all skill levels.
21
21
  """
22
22
 
23
- __version__ = "3.3.2"
23
+ __version__ = "3.4.0"
24
24
 
25
25
  from .middleware.text import Text # exposing for setting global font attrs
26
26
  from .wrapper import PdfWrapper
@@ -22,8 +22,8 @@ from pypdf.generic import (ArrayObject, DictionaryObject, FloatObject,
22
22
  NameObject, NumberObject, TextStringObject)
23
23
 
24
24
  from .constants import (COMB, DA, FONT_COLOR_IDENTIFIER, FONT_SIZE_IDENTIFIER,
25
- MULTILINE, READ_ONLY, REQUIRED, TU, Annots, Ff, Opt,
26
- Parent, Q, Rect)
25
+ MULTILINE, READ_ONLY, REQUIRED, TU, Annots, Ff, MaxLen,
26
+ Opt, Parent, Q, Rect)
27
27
  from .template import get_widget_key
28
28
  from .utils import stream_to_io
29
29
 
@@ -204,7 +204,19 @@ def update_text_field_multiline(annot: DictionaryObject, val: bool) -> None:
204
204
  val (bool): True to enable multiline, False to disable.
205
205
  """
206
206
  if val:
207
- annot[NameObject(Ff)] = NumberObject(int(annot[NameObject(Ff)]) | MULTILINE)
207
+ if Parent in annot and Ff not in annot:
208
+ annot[NameObject(Parent)][NameObject(Ff)] = NumberObject(
209
+ int(
210
+ annot[NameObject(Parent)][NameObject(Ff)]
211
+ if Ff in annot[NameObject(Parent)]
212
+ else 0
213
+ )
214
+ | MULTILINE
215
+ )
216
+ else:
217
+ annot[NameObject(Ff)] = NumberObject(
218
+ int(annot[NameObject(Ff)] if Ff in annot else 0) | MULTILINE
219
+ )
208
220
 
209
221
 
210
222
  def update_text_field_comb(annot: DictionaryObject, val: bool) -> None:
@@ -220,7 +232,33 @@ def update_text_field_comb(annot: DictionaryObject, val: bool) -> None:
220
232
  val (bool): True to enable comb, False to disable.
221
233
  """
222
234
  if val:
223
- annot[NameObject(Ff)] = NumberObject(int(annot[NameObject(Ff)]) | COMB)
235
+ if Parent in annot and Ff not in annot:
236
+ annot[NameObject(Parent)][NameObject(Ff)] = NumberObject(
237
+ int(
238
+ annot[NameObject(Parent)][NameObject(Ff)]
239
+ if Ff in annot[NameObject(Parent)]
240
+ else 0
241
+ )
242
+ | COMB
243
+ )
244
+ else:
245
+ annot[NameObject(Ff)] = NumberObject(
246
+ int(annot[NameObject(Ff)] if Ff in annot else 0) | COMB
247
+ )
248
+
249
+
250
+ def update_text_field_max_length(annot: DictionaryObject, val: int) -> None:
251
+ """
252
+ Updates the maximum length of a text field annotation.
253
+
254
+ This function sets the 'MaxLen' entry in the annotation dictionary, which
255
+ specifies the maximum number of characters that can be entered into the text field.
256
+
257
+ Args:
258
+ annot (DictionaryObject): The annotation dictionary for the text field.
259
+ val (int): The maximum number of characters allowed in the text field.
260
+ """
261
+ annot[NameObject(MaxLen)] = NumberObject(val)
224
262
 
225
263
 
226
264
  def update_check_radio_size(annot: DictionaryObject, val: float) -> None:
@@ -47,12 +47,16 @@ class Dropdown(Widget):
47
47
  self.SET_ATTR_TRIGGER_HOOK_MAP.update(
48
48
  {
49
49
  "font": "update_text_field_font",
50
+ "font_size": "update_text_field_font_size",
51
+ "font_color": "update_text_field_font_color",
50
52
  "choices": "update_dropdown_choices",
51
53
  }
52
54
  )
53
55
  super().__init__(name, value)
54
56
 
55
57
  self.font: str = None
58
+ self.font_size: float = None
59
+ self.font_color: tuple = None
56
60
  self.choices: Union[tuple, list] = None
57
61
 
58
62
  @property
@@ -51,6 +51,7 @@ class Text(Widget):
51
51
  "comb": "update_text_field_comb",
52
52
  "alignment": "update_text_field_alignment",
53
53
  "multiline": "update_text_field_multiline",
54
+ "max_length": "update_text_field_max_length",
54
55
  }
55
56
  )
56
57
  super().__init__(name, value)
@@ -61,7 +62,6 @@ class Text(Widget):
61
62
  self.comb: bool = None
62
63
  self.alignment: int = None
63
64
  self.multiline: bool = None
64
-
65
65
  self.max_length: int = None
66
66
 
67
67
  @property
@@ -67,7 +67,8 @@ def build_widgets(
67
67
 
68
68
  if isinstance(_widget, Text):
69
69
  # mostly for schema for now
70
- _widget.max_length = get_text_field_max_length(widget)
70
+ # doesn't trigger hook
71
+ _widget.__dict__["max_length"] = get_text_field_max_length(widget)
71
72
  get_text_value(widget, _widget)
72
73
 
73
74
  if type(_widget) is Checkbox:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: PyPDFForm
3
- Version: 3.3.2
3
+ Version: 3.4.0
4
4
  Summary: The Python library for PDF forms.
5
5
  Author: Jinge Li
6
6
  License-Expression: MIT
@@ -39,6 +39,9 @@ Requires-Dist: ruff; extra == "dev"
39
39
  Dynamic: license-file
40
40
 
41
41
  <p align="center"><img src="https://github.com/chinapandaman/PyPDFForm/raw/master/docs/img/logo.png"></p>
42
+ <p align="center">
43
+ <em>PDF Form Automation Simplified – Create, Merge, Style, and Fill Forms Programmatically.</em>
44
+ </p>
42
45
  <p align="center">
43
46
  <a href="https://pypi.org/project/PyPDFForm/"><img src="https://img.shields.io/pypi/v/pypdfform?label=version&color=magenta"></a>
44
47
  <a href="https://chinapandaman.github.io/PyPDFForm/"><img src="https://img.shields.io/github/v/release/chinapandaman/pypdfform?label=docs&color=cyan"></a>
@@ -1,4 +1,7 @@
1
1
  <p align="center"><img src="https://github.com/chinapandaman/PyPDFForm/raw/master/docs/img/logo.png"></p>
2
+ <p align="center">
3
+ <em>PDF Form Automation Simplified – Create, Merge, Style, and Fill Forms Programmatically.</em>
4
+ </p>
2
5
  <p align="center">
3
6
  <a href="https://pypi.org/project/PyPDFForm/"><img src="https://img.shields.io/pypi/v/pypdfform?label=version&color=magenta"></a>
4
7
  <a href="https://chinapandaman.github.io/PyPDFForm/"><img src="https://img.shields.io/github/v/release/chinapandaman/pypdfform?label=docs&color=cyan"></a>
@@ -0,0 +1,464 @@
1
+ # -*- coding: utf-8 -*-
2
+
3
+ import os
4
+
5
+ from PyPDFForm import PdfWrapper
6
+
7
+
8
+ def test_register_font_no_form_fields(pdf_samples, sample_font_stream, request):
9
+ expected_path = os.path.join(
10
+ pdf_samples, "test_widget_attr_trigger", "test_register_font_no_form_fields.pdf"
11
+ )
12
+ with open(expected_path, "rb+") as f:
13
+ obj = PdfWrapper(os.path.join(pdf_samples, "dummy.pdf"))
14
+ obj.register_font("new_font", sample_font_stream).create_widget(
15
+ "text", "foo", 1, 100, 100, font="new_font"
16
+ )
17
+ obj.draw_text("foo", 1, 200, 200, font="new_font")
18
+
19
+ request.config.results["expected_path"] = expected_path
20
+ request.config.results["stream"] = obj.read()
21
+
22
+ expected = f.read()
23
+
24
+ assert len(obj.read()) == len(expected)
25
+ assert obj.read() == expected
26
+
27
+
28
+ def test_set_text_field_font(pdf_samples, font_samples, template_stream, request):
29
+ expected_path = os.path.join(
30
+ pdf_samples, "test_widget_attr_trigger", "test_set_text_field_font.pdf"
31
+ )
32
+ with open(expected_path, "rb+") as f:
33
+ obj = PdfWrapper(template_stream).register_font(
34
+ "new_font", os.path.join(font_samples, "LiberationSerif-BoldItalic.ttf")
35
+ )
36
+ obj.widgets["test"].font = "new_font"
37
+
38
+ request.config.results["expected_path"] = expected_path
39
+ request.config.results["stream"] = obj.read()
40
+
41
+ expected = f.read()
42
+
43
+ assert len(obj.read()) == len(expected)
44
+ assert obj.read() == expected
45
+
46
+
47
+ def test_set_text_field_font_sejda(pdf_samples, font_samples, sejda_template, request):
48
+ expected_path = os.path.join(
49
+ pdf_samples,
50
+ "test_widget_attr_trigger",
51
+ "test_set_text_field_font_sejda.pdf",
52
+ )
53
+ with open(expected_path, "rb+") as f:
54
+ obj = PdfWrapper(sejda_template).register_font(
55
+ "new_font", os.path.join(font_samples, "LiberationSerif-Italic.ttf")
56
+ )
57
+ obj.register_font(
58
+ "new_font_2", os.path.join(font_samples, "LiberationSerif-Bold.ttf")
59
+ )
60
+ obj.widgets["buyer_name"].font = "new_font_2"
61
+
62
+ request.config.results["expected_path"] = expected_path
63
+ request.config.results["stream"] = obj.read()
64
+
65
+ expected = f.read()
66
+
67
+ assert len(obj.read()) == len(expected)
68
+ assert obj.read() == expected
69
+
70
+
71
+ def test_set_text_field_font_size(pdf_samples, template_stream, request):
72
+ expected_path = os.path.join(
73
+ pdf_samples, "test_widget_attr_trigger", "test_set_text_field_font_size.pdf"
74
+ )
75
+ with open(expected_path, "rb+") as f:
76
+ obj = PdfWrapper(template_stream)
77
+ obj.widgets["test"].font_size = 30
78
+
79
+ request.config.results["expected_path"] = expected_path
80
+ request.config.results["stream"] = obj.read()
81
+
82
+ expected = f.read()
83
+
84
+ assert len(obj.read()) == len(expected)
85
+ assert obj.read() == expected
86
+
87
+
88
+ def test_set_text_field_font_size_sejda(pdf_samples, sejda_template, request):
89
+ expected_path = os.path.join(
90
+ pdf_samples,
91
+ "test_widget_attr_trigger",
92
+ "test_set_text_field_font_size_sejda.pdf",
93
+ )
94
+ with open(expected_path, "rb+") as f:
95
+ obj = PdfWrapper(sejda_template)
96
+ obj.widgets["buyer_name"].font_size = 30
97
+
98
+ request.config.results["expected_path"] = expected_path
99
+ request.config.results["stream"] = obj.read()
100
+
101
+ expected = f.read()
102
+
103
+ assert len(obj.read()) == len(expected)
104
+ assert obj.read() == expected
105
+
106
+
107
+ def test_set_text_field_font_color(pdf_samples, template_stream, request):
108
+ expected_path = os.path.join(
109
+ pdf_samples, "test_widget_attr_trigger", "test_set_text_field_font_color.pdf"
110
+ )
111
+ with open(expected_path, "rb+") as f:
112
+ obj = PdfWrapper(template_stream)
113
+ obj.widgets["test"].font_color = (1, 0, 0)
114
+
115
+ request.config.results["expected_path"] = expected_path
116
+ request.config.results["stream"] = obj.read()
117
+
118
+ expected = f.read()
119
+
120
+ assert len(obj.read()) == len(expected)
121
+ assert obj.read() == expected
122
+
123
+
124
+ def test_set_text_field_font_color_sejda(pdf_samples, sejda_template, request):
125
+ expected_path = os.path.join(
126
+ pdf_samples,
127
+ "test_widget_attr_trigger",
128
+ "test_set_text_field_font_color_sejda.pdf",
129
+ )
130
+ with open(expected_path, "rb+") as f:
131
+ obj = PdfWrapper(sejda_template)
132
+ obj.widgets["buyer_name"].font_color = (1, 0, 0)
133
+
134
+ request.config.results["expected_path"] = expected_path
135
+ request.config.results["stream"] = obj.read()
136
+
137
+ expected = f.read()
138
+
139
+ assert len(obj.read()) == len(expected)
140
+ assert obj.read() == expected
141
+
142
+
143
+ def test_set_text_field_alignment(pdf_samples, template_stream, request):
144
+ expected_path = os.path.join(
145
+ pdf_samples, "test_widget_attr_trigger", "test_set_text_field_alignment.pdf"
146
+ )
147
+ with open(expected_path, "rb+") as f:
148
+ obj = PdfWrapper(template_stream)
149
+ obj.widgets["test"].alignment = 2
150
+
151
+ request.config.results["expected_path"] = expected_path
152
+ request.config.results["stream"] = obj.read()
153
+
154
+ expected = f.read()
155
+
156
+ assert len(obj.read()) == len(expected)
157
+ assert obj.read() == expected
158
+
159
+
160
+ def test_set_text_field_alignment_sejda(pdf_samples, sejda_template, request):
161
+ expected_path = os.path.join(
162
+ pdf_samples,
163
+ "test_widget_attr_trigger",
164
+ "test_set_text_field_alignment_sejda.pdf",
165
+ )
166
+ with open(expected_path, "rb+") as f:
167
+ obj = PdfWrapper(sejda_template)
168
+ obj.widgets["buyer_name"].alignment = 2
169
+
170
+ request.config.results["expected_path"] = expected_path
171
+ request.config.results["stream"] = obj.read()
172
+
173
+ expected = f.read()
174
+
175
+ assert len(obj.read()) == len(expected)
176
+ assert obj.read() == expected
177
+
178
+
179
+ def test_set_text_field_max_length(pdf_samples, template_stream, request):
180
+ expected_path = os.path.join(
181
+ pdf_samples, "test_widget_attr_trigger", "test_set_text_field_max_length.pdf"
182
+ )
183
+ with open(expected_path, "rb+") as f:
184
+ obj = PdfWrapper(template_stream)
185
+ obj.widgets["test"].max_length = 2
186
+
187
+ request.config.results["expected_path"] = expected_path
188
+ request.config.results["stream"] = obj.read()
189
+
190
+ expected = f.read()
191
+
192
+ assert len(obj.read()) == len(expected)
193
+ assert obj.read() == expected
194
+
195
+
196
+ def test_set_text_field_max_length_sejda(pdf_samples, sejda_template, request):
197
+ expected_path = os.path.join(
198
+ pdf_samples,
199
+ "test_widget_attr_trigger",
200
+ "test_set_text_field_max_length_sejda.pdf",
201
+ )
202
+ with open(expected_path, "rb+") as f:
203
+ obj = PdfWrapper(sejda_template)
204
+ obj.widgets["buyer_name"].max_length = 2
205
+
206
+ request.config.results["expected_path"] = expected_path
207
+ request.config.results["stream"] = obj.read()
208
+
209
+ expected = f.read()
210
+
211
+ assert len(obj.read()) == len(expected)
212
+ assert obj.read() == expected
213
+
214
+
215
+ def test_set_text_field_comb(pdf_samples, template_stream, request):
216
+ expected_path = os.path.join(
217
+ pdf_samples, "test_widget_attr_trigger", "test_set_text_field_comb.pdf"
218
+ )
219
+ with open(expected_path, "rb+") as f:
220
+ obj = PdfWrapper(template_stream)
221
+ obj.widgets["test"].max_length = 2
222
+ obj.widgets["test"].comb = True
223
+
224
+ request.config.results["expected_path"] = expected_path
225
+ request.config.results["stream"] = obj.read()
226
+
227
+ expected = f.read()
228
+
229
+ assert len(obj.read()) == len(expected)
230
+ assert obj.read() == expected
231
+
232
+
233
+ def test_set_text_field_comb_sejda(pdf_samples, sejda_template, request):
234
+ expected_path = os.path.join(
235
+ pdf_samples,
236
+ "test_widget_attr_trigger",
237
+ "test_set_text_field_comb_sejda.pdf",
238
+ )
239
+ with open(expected_path, "rb+") as f:
240
+ obj = PdfWrapper(sejda_template)
241
+ obj.widgets["buyer_name"].max_length = 2
242
+ obj.widgets["buyer_name"].comb = True
243
+
244
+ request.config.results["expected_path"] = expected_path
245
+ request.config.results["stream"] = obj.read()
246
+
247
+ expected = f.read()
248
+
249
+ assert len(obj.read()) == len(expected)
250
+ assert obj.read() == expected
251
+
252
+
253
+ def test_set_text_field_multiline(pdf_samples, template_stream, request):
254
+ expected_path = os.path.join(
255
+ pdf_samples, "test_widget_attr_trigger", "test_set_text_field_multiline.pdf"
256
+ )
257
+ with open(expected_path, "rb+") as f:
258
+ obj = PdfWrapper(template_stream)
259
+ obj.widgets["test"].multiline = True
260
+
261
+ request.config.results["expected_path"] = expected_path
262
+ request.config.results["stream"] = obj.read()
263
+
264
+ expected = f.read()
265
+
266
+ assert len(obj.read()) == len(expected)
267
+ assert obj.read() == expected
268
+
269
+
270
+ def test_set_text_field_multiline_sejda(pdf_samples, sejda_template, request):
271
+ expected_path = os.path.join(
272
+ pdf_samples,
273
+ "test_widget_attr_trigger",
274
+ "test_set_text_field_multiline_sejda.pdf",
275
+ )
276
+ with open(expected_path, "rb+") as f:
277
+ obj = PdfWrapper(sejda_template)
278
+ obj.widgets["buyer_name"].multiline = True
279
+
280
+ request.config.results["expected_path"] = expected_path
281
+ request.config.results["stream"] = obj.read()
282
+
283
+ expected = f.read()
284
+
285
+ assert len(obj.read()) == len(expected)
286
+ assert obj.read() == expected
287
+
288
+
289
+ def test_set_checkbox_size(pdf_samples, template_stream, request):
290
+ expected_path = os.path.join(
291
+ pdf_samples, "test_widget_attr_trigger", "test_set_checkbox_size.pdf"
292
+ )
293
+ with open(expected_path, "rb+") as f:
294
+ obj = PdfWrapper(template_stream)
295
+ obj.widgets["check"].size = 30
296
+
297
+ request.config.results["expected_path"] = expected_path
298
+ request.config.results["stream"] = obj.read()
299
+
300
+ expected = f.read()
301
+
302
+ assert len(obj.read()) == len(expected)
303
+ assert obj.read() == expected
304
+
305
+
306
+ def test_set_checkbox_size_sejda(pdf_samples, sejda_template, request):
307
+ expected_path = os.path.join(
308
+ pdf_samples, "test_widget_attr_trigger", "test_set_checkbox_size_sejda.pdf"
309
+ )
310
+ with open(expected_path, "rb+") as f:
311
+ obj = PdfWrapper(sejda_template)
312
+ obj.widgets["date_of_this_bill"].size = 30
313
+
314
+ request.config.results["expected_path"] = expected_path
315
+ request.config.results["stream"] = obj.read()
316
+
317
+ expected = f.read()
318
+
319
+ assert len(obj.read()) == len(expected)
320
+ assert obj.read() == expected
321
+
322
+
323
+ def test_set_radio_size(pdf_samples, template_with_radiobutton_stream, request):
324
+ expected_path = os.path.join(
325
+ pdf_samples, "test_widget_attr_trigger", "test_set_radio_size.pdf"
326
+ )
327
+ with open(expected_path, "rb+") as f:
328
+ obj = PdfWrapper(template_with_radiobutton_stream)
329
+ obj.widgets["radio_1"].size = 40
330
+
331
+ request.config.results["expected_path"] = expected_path
332
+ request.config.results["stream"] = obj.read()
333
+
334
+ expected = f.read()
335
+
336
+ assert len(obj.read()) == len(expected)
337
+ assert obj.read() == expected
338
+
339
+
340
+ def test_set_radio_size_sejda(pdf_samples, sejda_template, request):
341
+ expected_path = os.path.join(
342
+ pdf_samples, "test_widget_attr_trigger", "test_set_radio_size_sejda.pdf"
343
+ )
344
+ with open(expected_path, "rb+") as f:
345
+ obj = PdfWrapper(sejda_template)
346
+ obj.widgets["purchase_option"].size = 40
347
+
348
+ request.config.results["expected_path"] = expected_path
349
+ request.config.results["stream"] = obj.read()
350
+
351
+ expected = f.read()
352
+
353
+ assert len(obj.read()) == len(expected)
354
+ assert obj.read() == expected
355
+
356
+
357
+ def test_set_dropdown_font(
358
+ pdf_samples, sample_template_with_dropdown, sample_font_stream, request
359
+ ):
360
+ expected_path = os.path.join(
361
+ pdf_samples, "test_widget_attr_trigger", "test_set_dropdown_font.pdf"
362
+ )
363
+ with open(expected_path, "rb+") as f:
364
+ obj = PdfWrapper(sample_template_with_dropdown)
365
+ obj.register_font("new_font", sample_font_stream)
366
+ obj.widgets["dropdown_1"].font = "new_font"
367
+
368
+ request.config.results["expected_path"] = expected_path
369
+ request.config.results["stream"] = obj.read()
370
+
371
+ expected = f.read()
372
+
373
+ assert len(obj.read()) == len(expected)
374
+ assert obj.read() == expected
375
+
376
+
377
+ def test_set_dropdown_font_sejda(
378
+ pdf_samples, dropdown_alignment_sejda, sample_font_stream, request
379
+ ):
380
+ expected_path = os.path.join(
381
+ pdf_samples, "test_widget_attr_trigger", "test_set_dropdown_font_sejda.pdf"
382
+ )
383
+ with open(expected_path, "rb+") as f:
384
+ obj = PdfWrapper(dropdown_alignment_sejda)
385
+ obj.register_font("new_font", sample_font_stream)
386
+ obj.widgets["dropdown_left"].font = "new_font"
387
+
388
+ request.config.results["expected_path"] = expected_path
389
+ request.config.results["stream"] = obj.read()
390
+
391
+ expected = f.read()
392
+
393
+ assert len(obj.read()) == len(expected)
394
+ assert obj.read() == expected
395
+
396
+
397
+ def test_set_dropdown_font_size(pdf_samples, sample_template_with_dropdown, request):
398
+ expected_path = os.path.join(
399
+ pdf_samples, "test_widget_attr_trigger", "test_set_dropdown_font_size.pdf"
400
+ )
401
+ with open(expected_path, "rb+") as f:
402
+ obj = PdfWrapper(sample_template_with_dropdown)
403
+ obj.widgets["dropdown_1"].font_size = 30
404
+
405
+ request.config.results["expected_path"] = expected_path
406
+ request.config.results["stream"] = obj.read()
407
+
408
+ expected = f.read()
409
+
410
+ assert len(obj.read()) == len(expected)
411
+ assert obj.read() == expected
412
+
413
+
414
+ def test_set_dropdown_font_size_sejda(pdf_samples, dropdown_alignment_sejda, request):
415
+ expected_path = os.path.join(
416
+ pdf_samples, "test_widget_attr_trigger", "test_set_dropdown_font_size_sejda.pdf"
417
+ )
418
+ with open(expected_path, "rb+") as f:
419
+ obj = PdfWrapper(dropdown_alignment_sejda)
420
+ obj.widgets["dropdown_left"].font_size = 30
421
+
422
+ request.config.results["expected_path"] = expected_path
423
+ request.config.results["stream"] = obj.read()
424
+
425
+ expected = f.read()
426
+
427
+ assert len(obj.read()) == len(expected)
428
+ assert obj.read() == expected
429
+
430
+
431
+ def test_set_dropdown_font_color(pdf_samples, sample_template_with_dropdown, request):
432
+ expected_path = os.path.join(
433
+ pdf_samples, "test_widget_attr_trigger", "test_set_dropdown_font_color.pdf"
434
+ )
435
+ with open(expected_path, "rb+") as f:
436
+ obj = PdfWrapper(sample_template_with_dropdown)
437
+ obj.widgets["dropdown_1"].font_color = (1, 0, 0)
438
+
439
+ request.config.results["expected_path"] = expected_path
440
+ request.config.results["stream"] = obj.read()
441
+
442
+ expected = f.read()
443
+
444
+ assert len(obj.read()) == len(expected)
445
+ assert obj.read() == expected
446
+
447
+
448
+ def test_set_dropdown_font_color_sejda(pdf_samples, dropdown_alignment_sejda, request):
449
+ expected_path = os.path.join(
450
+ pdf_samples,
451
+ "test_widget_attr_trigger",
452
+ "test_set_dropdown_font_color_sejda.pdf",
453
+ )
454
+ with open(expected_path, "rb+") as f:
455
+ obj = PdfWrapper(dropdown_alignment_sejda)
456
+ obj.widgets["dropdown_left"].font_color = (1, 0, 0)
457
+
458
+ request.config.results["expected_path"] = expected_path
459
+ request.config.results["stream"] = obj.read()
460
+
461
+ expected = f.read()
462
+
463
+ assert len(obj.read()) == len(expected)
464
+ assert obj.read() == expected
@@ -1,208 +0,0 @@
1
- # -*- coding: utf-8 -*-
2
-
3
- import os
4
-
5
- from PyPDFForm import PdfWrapper
6
-
7
-
8
- def test_register_font_no_form_fields(pdf_samples, sample_font_stream, request):
9
- expected_path = os.path.join(
10
- pdf_samples, "test_widget_attr_trigger", "test_register_font_no_form_fields.pdf"
11
- )
12
- with open(expected_path, "rb+") as f:
13
- obj = PdfWrapper(os.path.join(pdf_samples, "dummy.pdf"))
14
- obj.register_font("new_font", sample_font_stream).create_widget(
15
- "text", "foo", 1, 100, 100, font="new_font"
16
- )
17
- obj.draw_text("foo", 1, 200, 200, font="new_font")
18
-
19
- request.config.results["expected_path"] = expected_path
20
- request.config.results["stream"] = obj.read()
21
-
22
- expected = f.read()
23
-
24
- assert len(obj.read()) == len(expected)
25
- assert obj.read() == expected
26
-
27
-
28
- def test_set_text_field_font(pdf_samples, font_samples, template_stream, request):
29
- expected_path = os.path.join(
30
- pdf_samples, "test_widget_attr_trigger", "test_set_text_field_font.pdf"
31
- )
32
- with open(expected_path, "rb+") as f:
33
- obj = PdfWrapper(template_stream).register_font(
34
- "new_font", os.path.join(font_samples, "LiberationSerif-BoldItalic.ttf")
35
- )
36
- obj.widgets["test"].font = "new_font"
37
-
38
- request.config.results["expected_path"] = expected_path
39
- request.config.results["stream"] = obj.read()
40
-
41
- expected = f.read()
42
-
43
- assert len(obj.read()) == len(expected)
44
- assert obj.read() == expected
45
-
46
-
47
- def test_set_text_field_font_sejda(pdf_samples, font_samples, sejda_template, request):
48
- expected_path = os.path.join(
49
- pdf_samples,
50
- "test_widget_attr_trigger",
51
- "test_set_text_field_font_sejda.pdf",
52
- )
53
- with open(expected_path, "rb+") as f:
54
- obj = PdfWrapper(sejda_template).register_font(
55
- "new_font", os.path.join(font_samples, "LiberationSerif-Italic.ttf")
56
- )
57
- obj.register_font(
58
- "new_font_2", os.path.join(font_samples, "LiberationSerif-Bold.ttf")
59
- )
60
- obj.widgets["buyer_name"].font = "new_font_2"
61
-
62
- request.config.results["expected_path"] = expected_path
63
- request.config.results["stream"] = obj.read()
64
-
65
- expected = f.read()
66
-
67
- assert len(obj.read()) == len(expected)
68
- assert obj.read() == expected
69
-
70
-
71
- def test_set_text_field_font_size(pdf_samples, template_stream, request):
72
- expected_path = os.path.join(
73
- pdf_samples, "test_widget_attr_trigger", "test_set_text_field_font_size.pdf"
74
- )
75
- with open(expected_path, "rb+") as f:
76
- obj = PdfWrapper(template_stream)
77
- obj.widgets["test"].font_size = 30
78
-
79
- request.config.results["expected_path"] = expected_path
80
- request.config.results["stream"] = obj.read()
81
-
82
- expected = f.read()
83
-
84
- assert len(obj.read()) == len(expected)
85
- assert obj.read() == expected
86
-
87
-
88
- def test_set_text_field_font_size_sejda(pdf_samples, sejda_template, request):
89
- expected_path = os.path.join(
90
- pdf_samples,
91
- "test_widget_attr_trigger",
92
- "test_set_text_field_font_size_sejda.pdf",
93
- )
94
- with open(expected_path, "rb+") as f:
95
- obj = PdfWrapper(sejda_template)
96
- obj.widgets["buyer_name"].font_size = 30
97
-
98
- request.config.results["expected_path"] = expected_path
99
- request.config.results["stream"] = obj.read()
100
-
101
- expected = f.read()
102
-
103
- assert len(obj.read()) == len(expected)
104
- assert obj.read() == expected
105
-
106
-
107
- def test_set_text_field_font_color(pdf_samples, template_stream, request):
108
- expected_path = os.path.join(
109
- pdf_samples, "test_widget_attr_trigger", "test_set_text_field_font_color.pdf"
110
- )
111
- with open(expected_path, "rb+") as f:
112
- obj = PdfWrapper(template_stream)
113
- obj.widgets["test"].font_color = (1, 0, 0)
114
-
115
- request.config.results["expected_path"] = expected_path
116
- request.config.results["stream"] = obj.read()
117
-
118
- expected = f.read()
119
-
120
- assert len(obj.read()) == len(expected)
121
- assert obj.read() == expected
122
-
123
-
124
- def test_set_text_field_font_color_sejda(pdf_samples, sejda_template, request):
125
- expected_path = os.path.join(
126
- pdf_samples,
127
- "test_widget_attr_trigger",
128
- "test_set_text_field_font_color_sejda.pdf",
129
- )
130
- with open(expected_path, "rb+") as f:
131
- obj = PdfWrapper(sejda_template)
132
- obj.widgets["buyer_name"].font_color = (1, 0, 0)
133
-
134
- request.config.results["expected_path"] = expected_path
135
- request.config.results["stream"] = obj.read()
136
-
137
- expected = f.read()
138
-
139
- assert len(obj.read()) == len(expected)
140
- assert obj.read() == expected
141
-
142
-
143
- def test_set_checkbox_size(pdf_samples, template_stream, request):
144
- expected_path = os.path.join(
145
- pdf_samples, "test_widget_attr_trigger", "test_set_checkbox_size.pdf"
146
- )
147
- with open(expected_path, "rb+") as f:
148
- obj = PdfWrapper(template_stream)
149
- obj.widgets["check"].size = 30
150
-
151
- request.config.results["expected_path"] = expected_path
152
- request.config.results["stream"] = obj.read()
153
-
154
- expected = f.read()
155
-
156
- assert len(obj.read()) == len(expected)
157
- assert obj.read() == expected
158
-
159
-
160
- def test_set_checkbox_size_sejda(pdf_samples, sejda_template, request):
161
- expected_path = os.path.join(
162
- pdf_samples, "test_widget_attr_trigger", "test_set_checkbox_size_sejda.pdf"
163
- )
164
- with open(expected_path, "rb+") as f:
165
- obj = PdfWrapper(sejda_template)
166
- obj.widgets["date_of_this_bill"].size = 30
167
-
168
- request.config.results["expected_path"] = expected_path
169
- request.config.results["stream"] = obj.read()
170
-
171
- expected = f.read()
172
-
173
- assert len(obj.read()) == len(expected)
174
- assert obj.read() == expected
175
-
176
-
177
- def test_set_radio_size(pdf_samples, template_with_radiobutton_stream, request):
178
- expected_path = os.path.join(
179
- pdf_samples, "test_widget_attr_trigger", "test_set_radio_size.pdf"
180
- )
181
- with open(expected_path, "rb+") as f:
182
- obj = PdfWrapper(template_with_radiobutton_stream)
183
- obj.widgets["radio_1"].size = 40
184
-
185
- request.config.results["expected_path"] = expected_path
186
- request.config.results["stream"] = obj.read()
187
-
188
- expected = f.read()
189
-
190
- assert len(obj.read()) == len(expected)
191
- assert obj.read() == expected
192
-
193
-
194
- def test_set_radio_size_sejda(pdf_samples, sejda_template, request):
195
- expected_path = os.path.join(
196
- pdf_samples, "test_widget_attr_trigger", "test_set_radio_size_sejda.pdf"
197
- )
198
- with open(expected_path, "rb+") as f:
199
- obj = PdfWrapper(sejda_template)
200
- obj.widgets["purchase_option"].size = 40
201
-
202
- request.config.results["expected_path"] = expected_path
203
- request.config.results["stream"] = obj.read()
204
-
205
- expected = f.read()
206
-
207
- assert len(obj.read()) == len(expected)
208
- assert obj.read() == expected
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes