@@ -24,19 +24,15 @@ def fill(template_stream: bytes, elements: Dict[str, "ElementMiddleware"]) -> by
24
24
template_pdf = pdfrw .PdfReader (fdata = template_stream )
25
25
26
26
texts_to_draw = {}
27
- images_to_draw = {}
28
27
text_watermarks = []
29
- image_watermarks = []
30
28
31
29
radio_button_tracker = {}
32
30
33
31
for page , _elements in (
34
32
TemplateCore ().get_elements_by_page (template_pdf ).items ()
35
33
):
36
34
texts_to_draw [page ] = []
37
- images_to_draw [page ] = []
38
35
text_watermarks .append (b"" )
39
- image_watermarks .append (b"" )
40
36
for _element in _elements :
41
37
key = TemplateCore ().get_element_key (_element )
42
38
@@ -77,17 +73,6 @@ def fill(template_stream: bytes, elements: Dict[str, "ElementMiddleware"]) -> by
77
73
)
78
74
)
79
75
continue
80
- elif elements [key ].type == ElementType .image :
81
- if elements [key ].value is not None :
82
- images_to_draw [page ].append (
83
- [
84
- elements [key ].value ,
85
- TemplateCore ().get_draw_image_coordinates (_element )[0 ],
86
- TemplateCore ().get_draw_image_coordinates (_element )[1 ],
87
- TemplateCore ().get_draw_image_resolutions (_element )[0 ],
88
- TemplateCore ().get_draw_image_resolutions (_element )[1 ],
89
- ]
90
- )
91
76
else :
92
77
texts_to_draw [page ].append (
93
78
[
@@ -106,134 +91,78 @@ def fill(template_stream: bytes, elements: Dict[str, "ElementMiddleware"]) -> by
106
91
if watermark :
107
92
text_watermarks [i ] = watermark
108
93
109
- result = WatermarkCore ().merge_watermarks_with_pdf (
94
+ return WatermarkCore ().merge_watermarks_with_pdf (
110
95
Utils ().generate_stream (template_pdf ), text_watermarks
111
96
)
112
97
113
- for page , images in images_to_draw .items ():
114
- if images :
115
- _watermarks = WatermarkCore ().create_watermarks_and_draw (
116
- result , page , "image" , images
117
- )
118
- for i , watermark in enumerate (_watermarks ):
119
- if watermark :
120
- image_watermarks [i ] = watermark
121
-
122
- result = WatermarkCore ().merge_watermarks_with_pdf (result , image_watermarks )
123
-
124
- return result
125
-
126
98
@staticmethod
127
99
def simple_fill (
128
100
template_stream : bytes ,
129
- data : Dict [str , Union [str , bool , bytes , int ]],
101
+ data : Dict [str , Union [str , bool , int ]],
130
102
editable : bool ,
131
103
) -> bytes :
132
104
"""Fills a PDF form in simple mode."""
133
105
134
106
template_pdf = pdfrw .PdfReader (fdata = template_stream )
135
107
data = Utils ().bool_to_checkboxes (data )
136
108
137
- images_to_draw = {}
138
- image_watermarks = []
139
-
140
109
radio_button_tracker = {}
141
110
142
- for page , elements in TemplateCore ().get_elements_by_page (template_pdf ).items ():
143
- images_to_draw [page ] = []
144
- image_watermarks .append (b"" )
145
- for element in elements :
146
- key = TemplateCore ().get_element_key (element )
147
-
148
- if key in data .keys ():
149
- update_dict = {}
150
- if data [key ] in [
151
- pdfrw .PdfName .Yes ,
152
- pdfrw .PdfName .Off ,
153
- ]:
154
- update_dict = {
155
- TemplateConstants ().checkbox_field_value_key .replace (
156
- "/" , ""
157
- ): data [key ]
158
- }
159
- elif isinstance (data [key ], int ):
160
- if key not in radio_button_tracker :
161
- radio_button_tracker [key ] = 0
162
- radio_button_tracker [key ] += 1
163
-
164
- if data [key ] == radio_button_tracker [key ] - 1 :
165
- element .update (
166
- pdfrw .PdfDict (
167
- ** {
168
- TemplateConstants ().checkbox_field_value_key .replace (
169
- "/" , ""
170
- ): BasePdfName (
171
- "/" + str (data [key ]), False
172
- ),
173
- }
174
- )
175
- )
111
+ for element in TemplateCore ().iterate_elements (template_pdf ):
112
+ key = TemplateCore ().get_element_key (element )
113
+
114
+ if key in data .keys ():
115
+ update_dict = {}
116
+ if data [key ] in [
117
+ pdfrw .PdfName .Yes ,
118
+ pdfrw .PdfName .Off ,
119
+ ]:
120
+ update_dict = {
121
+ TemplateConstants ().checkbox_field_value_key .replace (
122
+ "/" , ""
123
+ ): data [key ]
124
+ }
125
+ elif isinstance (data [key ], int ):
126
+ if key not in radio_button_tracker :
127
+ radio_button_tracker [key ] = 0
128
+ radio_button_tracker [key ] += 1
176
129
177
- if not editable :
178
- element [
179
- TemplateConstants ().radio_button_group_key
180
- ].update (
181
- pdfrw .PdfDict (
182
- ** {
183
- TemplateConstants ().field_editable_key .replace (
184
- "/" , ""
185
- ): pdfrw .PdfObject (
186
- 1
187
- )
188
- }
189
- )
190
- )
191
- continue
192
- elif isinstance (data [key ], bytes ):
193
- images_to_draw [page ].append (
194
- [
195
- data [key ],
196
- TemplateCore ().get_draw_image_coordinates (element )[0 ],
197
- TemplateCore ().get_draw_image_coordinates (element )[1 ],
198
- TemplateCore ().get_draw_image_resolutions (element )[0 ],
199
- TemplateCore ().get_draw_image_resolutions (element )[1 ],
200
- ]
201
- )
130
+ if data [key ] == radio_button_tracker [key ] - 1 :
202
131
element .update (
203
132
pdfrw .PdfDict (
204
133
** {
205
- TemplateConstants ().field_editable_key .replace (
134
+ TemplateConstants ().checkbox_field_value_key .replace (
206
135
"/" , ""
207
- ): pdfrw .PdfObject (1 )
136
+ ): BasePdfName (
137
+ "/" + str (data [key ]), False
138
+ ),
208
139
}
209
140
)
210
141
)
142
+
143
+ if not editable :
144
+ element [TemplateConstants ().radio_button_group_key ].update (
145
+ pdfrw .PdfDict (
146
+ ** {
147
+ TemplateConstants ().field_editable_key .replace (
148
+ "/" , ""
149
+ ): pdfrw .PdfObject (1 )
150
+ }
151
+ )
152
+ )
211
153
continue
212
- else :
213
- update_dict = {
214
- TemplateConstants ().text_field_value_key .replace (
215
- "/" , ""
216
- ): data [key ]
217
- }
218
-
219
- if not editable :
220
- update_dict [
221
- TemplateConstants ().field_editable_key .replace ("/" , "" )
222
- ] = pdfrw .PdfObject (1 )
223
-
224
- element .update (pdfrw .PdfDict (** update_dict ))
225
-
226
- result = Utils ().generate_stream (template_pdf )
227
-
228
- for page , images in images_to_draw .items ():
229
- if images :
230
- _watermarks = WatermarkCore ().create_watermarks_and_draw (
231
- result , page , "image" , images
232
- )
233
- for i , watermark in enumerate (_watermarks ):
234
- if watermark :
235
- image_watermarks [i ] = watermark
236
-
237
- result = WatermarkCore ().merge_watermarks_with_pdf (result , image_watermarks )
238
-
239
- return result
154
+ else :
155
+ update_dict = {
156
+ TemplateConstants ().text_field_value_key .replace ("/" , "" ): data [
157
+ key
158
+ ]
159
+ }
160
+
161
+ if not editable :
162
+ update_dict [
163
+ TemplateConstants ().field_editable_key .replace ("/" , "" )
164
+ ] = pdfrw .PdfObject (1 )
165
+
166
+ element .update (pdfrw .PdfDict (** update_dict ))
167
+
168
+ return Utils ().generate_stream (template_pdf )
0 commit comments