pdf_writing_tools 0.0.19 → 0.0.21
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.
- checksums.yaml +4 -4
- data/lib/pdf_writing_tools.rb +66 -40
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5689acbfbb2ea127782f06799e8dfeac843c86d7116f63f60a21caec2f4bcd8c
|
4
|
+
data.tar.gz: 986bdeb9b09545b0873478f2f024c15a8bc019e4a3dd231d45d37b4379f9f8b2
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: bdea9aea430d42471a7b08509317bc3585a25c3782898f79727c386037e19bcd84357d628686e471b90626d414646c6e5d3da32ac2726a3156579fd8feea3e9d
|
7
|
+
data.tar.gz: 54b31a363356052fd7f902076e7a1fec6f7141e17fdbdd2da2ae7027ed9b0266ceb6c4b62ff0e0aabd17b30da75abccfe17642e48818a5478c1c5e2662467f7d
|
data/lib/pdf_writing_tools.rb
CHANGED
@@ -59,7 +59,7 @@ module PdfWritingTools
|
|
59
59
|
# quello basso della pagina).
|
60
60
|
# Bisogna pertanto prestare attenzione quando si dovessero mischiare primitive prawn
|
61
61
|
# con queste funzioni.
|
62
|
-
def self.draw_cell_fixed_height(pdf, x, y, w, h, t, opts={}, auto_y=false, no_background=false)
|
62
|
+
def self.draw_cell_fixed_height(pdf, draw_simulation, x, y, w, h, t, opts={}, auto_y=false, no_background=false)
|
63
63
|
t = (t.class == String ? [{text: t}] : t)
|
64
64
|
font_size = opts[:font_size] || 10
|
65
65
|
style = opts[:style] || :normal
|
@@ -86,13 +86,15 @@ module PdfWritingTools
|
|
86
86
|
pdf.fill_color(background_color)
|
87
87
|
|
88
88
|
# Disegna lo sfondo della cella
|
89
|
-
if no_background
|
89
|
+
if no_background or draw_simulation
|
90
90
|
else
|
91
91
|
pdf.fill_rectangle([x, y_pos1], w, h)
|
92
92
|
end
|
93
93
|
|
94
|
-
|
95
|
-
|
94
|
+
if not draw_simulation
|
95
|
+
pdf.stroke_color border_color
|
96
|
+
pdf.stroke_rectangle([x, y_pos1], w, h)
|
97
|
+
end
|
96
98
|
|
97
99
|
# Colore del testo nella cella
|
98
100
|
pdf.fill_color(font_color)
|
@@ -100,7 +102,23 @@ module PdfWritingTools
|
|
100
102
|
at = [x + left_padding, y_pos2]
|
101
103
|
width = w - left_padding - right_padding
|
102
104
|
height = h - top_padding - bottom_padding + 1.cm
|
103
|
-
result = pdf.formatted_text_box(t, width: width, height: height, at: at, size: font_size, style: style, align: align, valign: valign)
|
105
|
+
#result = pdf.formatted_text_box(t, width: width, height: height, at: at, size: font_size, style: style, align: align, valign: valign)
|
106
|
+
|
107
|
+
b = Prawn::Text::Formatted::Box.new(
|
108
|
+
t,
|
109
|
+
{
|
110
|
+
width: width,
|
111
|
+
height: height,
|
112
|
+
at: at,
|
113
|
+
size: font_size,
|
114
|
+
style: style,
|
115
|
+
align: align,
|
116
|
+
valign: valign,
|
117
|
+
document: pdf
|
118
|
+
}
|
119
|
+
)
|
120
|
+
|
121
|
+
result = b.render(:dry_run => draw_simulation)
|
104
122
|
end
|
105
123
|
|
106
124
|
result
|
@@ -183,9 +201,7 @@ module PdfWritingTools
|
|
183
201
|
end
|
184
202
|
# ... e infine, sopra lo sfondo disegno il testo
|
185
203
|
pdf.fill_color(font_color) # colore del testo
|
186
|
-
text_overflow = b.render()
|
187
|
-
|
188
|
-
# text_overflow è l'eventuale testo avanzato
|
204
|
+
text_overflow = b.render() # text_overflow è l'eventuale testo avanzato
|
189
205
|
end
|
190
206
|
|
191
207
|
# La cella potrebbe non riuscire ad espandersi a sufficienza (troppo vicina al
|
@@ -237,7 +253,7 @@ module PdfWritingTools
|
|
237
253
|
cell_opts[:pdf_width] = 21.cm
|
238
254
|
cell_opts[:pdf_height] = 297.mm
|
239
255
|
|
240
|
-
draw_cell_fixed_height( pdf, x+offset, y, width, height, texts[i], cell_opts, auto_y)
|
256
|
+
draw_cell_fixed_height( pdf, false, x+offset, y, width, height, texts[i], cell_opts, auto_y)
|
241
257
|
|
242
258
|
offset += width
|
243
259
|
end
|
@@ -263,7 +279,13 @@ module PdfWritingTools
|
|
263
279
|
|
264
280
|
new_y = pdf_margin_top
|
265
281
|
|
266
|
-
|
282
|
+
|
283
|
+
# Se la y della nuova riga (angolo superiore sinistro), esce dal margine di pagina,
|
284
|
+
# non posso disegnare la riga in questa pagina, ma devo passare alla successiva
|
285
|
+
if (y) > (pdf_height - pdf_margin_bottom)
|
286
|
+
pdf.start_new_page
|
287
|
+
y = pdf_margin_top
|
288
|
+
end
|
267
289
|
|
268
290
|
loop do
|
269
291
|
max_cell_height = 0
|
@@ -273,7 +295,7 @@ module PdfWritingTools
|
|
273
295
|
# In questo modo, posso sapere quale sarà la massima altezza raggiunta da una
|
274
296
|
# cella, ossia l'altezza che deve avere la riga
|
275
297
|
offset = 0
|
276
|
-
|
298
|
+
widths.each_with_index do |width, i|
|
277
299
|
font_size = font_sizes[i] || font_sizes[0]
|
278
300
|
style = styles[i] || styles[0]
|
279
301
|
align = alignments[i] || alignments[0]
|
@@ -298,32 +320,37 @@ module PdfWritingTools
|
|
298
320
|
cell_opts[:pdf_height] = 297.mm
|
299
321
|
cell_opts[:pdf_weigth] = 21.cm
|
300
322
|
|
301
|
-
r = draw_cell_auto_height(pdf,
|
302
|
-
|
303
|
-
if r[:overflow] && r[:overflow] == ""
|
304
|
-
overflowed = true
|
305
|
-
end
|
323
|
+
r = draw_cell_auto_height(pdf, true, x+offset, y, width, texts[i], cell_opts, auto_y)
|
306
324
|
|
307
325
|
|
308
326
|
if r[:height] > max_cell_height
|
309
327
|
max_cell_height = r[:height]
|
310
328
|
end
|
311
329
|
|
312
|
-
|
330
|
+
offset += width
|
313
331
|
end
|
314
332
|
|
315
|
-
# Non voglio che la riga ecceda il margine di pagina, quindi se così fosse
|
316
|
-
# ricalcolo l'altezza di riga per non superare tale margine
|
317
|
-
if y + max_cell_height > pdf_height - pdf_margin_bottom
|
318
|
-
overflowed = true
|
319
|
-
#max_cell_height = pdf_height - pdf_margin_bottom - y
|
320
|
-
end
|
321
333
|
|
334
|
+
# Non voglio che la riga ecceda il margine di pagina...
|
335
|
+
if (y + max_cell_height) > (pdf_height - pdf_margin_bottom)
|
336
|
+
q = 1
|
322
337
|
|
323
|
-
|
324
|
-
|
325
|
-
|
326
|
-
|
338
|
+
# Se fino al margine di pagina, non ho almeno q cm... **
|
339
|
+
if (pdf_height - pdf_margin_bottom - y) < q.cm
|
340
|
+
# ...cambio pagina...
|
341
|
+
pdf.start_new_page
|
342
|
+
# ... e mi riposiziono all'inizio della pagina nuova
|
343
|
+
y = pdf_margin_top
|
344
|
+
else
|
345
|
+
# ... altrimenti, reimposto max_cell_height: la riga verrà spezzata su due pagine.
|
346
|
+
max_cell_height = pdf_height - pdf_margin_bottom - y
|
347
|
+
end
|
348
|
+
|
349
|
+
# ** non voglio imporre il vincolo "una riga deve stare in una pagina", ma contemporaneamente, voglio evitare che
|
350
|
+
# si creino delle righe "sottili" sul bordo inferiore della pagina; così sottili che non vi si possa disegnare testo
|
351
|
+
# e quindi appaiano vuote. Questo controllo non è risolutivo: x, dovrebbe dipendere dalla dimensione del carattere
|
352
|
+
# usato per il testo della riga, ma in questa fase, x.cm = 1.cm, mi pare una stima sufficiente
|
353
|
+
end
|
327
354
|
|
328
355
|
# A seguito della simulazione, ho ottenuto l'altezza di riga...
|
329
356
|
# ... ora passo al disegno vero e proprie delle celle...
|
@@ -356,7 +383,7 @@ module PdfWritingTools
|
|
356
383
|
|
357
384
|
# ...disegno le celle vere e proprie ad altezza fissa, con l'altezza
|
358
385
|
# ricavata dal passo precedente.
|
359
|
-
r = draw_cell_fixed_height(pdf, x+offset, y, width, max_cell_height, texts[i], cell_opts, auto_y)
|
386
|
+
r = draw_cell_fixed_height(pdf, draw_simulation, x+offset, y, width, max_cell_height, texts[i], cell_opts, auto_y)
|
360
387
|
|
361
388
|
# Gli eventuali "testi residui" (es. raggiunto fine pagina) li raccolgo
|
362
389
|
# nel seguente array
|
@@ -367,21 +394,20 @@ module PdfWritingTools
|
|
367
394
|
|
368
395
|
texts = rtexts
|
369
396
|
|
370
|
-
|
371
|
-
|
372
|
-
|
373
|
-
|
374
|
-
|
375
|
-
|
376
|
-
|
377
|
-
|
378
|
-
|
379
|
-
y = pdf_margin_top # Posiziono il cursore ad inizio della nuova pagina
|
380
|
-
end
|
397
|
+
# Se nei testi residui, sono presenti solo stringhe vuote, posso uscire dal
|
398
|
+
# loop, altrimenti, devo cambiare pagina e disegnare una nuova riga con i
|
399
|
+
# testi rimanenti
|
400
|
+
if !check_no_empty_string_presence(texts)
|
401
|
+
new_y = y + max_cell_height
|
402
|
+
break
|
403
|
+
else
|
404
|
+
pdf.start_new_page
|
405
|
+
y = pdf_margin_top # Posiziono il cursore ad inizio della nuova pagina
|
381
406
|
end
|
382
407
|
end
|
408
|
+
|
383
409
|
|
384
|
-
pdf.y = (pdf_height - new_y)
|
410
|
+
#pdf.y = (pdf_height - new_y)
|
385
411
|
|
386
412
|
return new_y
|
387
413
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: pdf_writing_tools
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.21
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- JSalvo1978
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2024-01-
|
11
|
+
date: 2024-01-11 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description: Plugin for write pdf in a simplified manner, using prawn as backend
|
14
14
|
email:
|