fillform 0.1.0
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 +7 -0
- data/CHANGELOG.md +6 -0
- data/LICENSE +26 -0
- data/README.md +126 -0
- data/data/afm/Courier-Bold.afm +342 -0
- data/data/afm/Courier-BoldOblique.afm +342 -0
- data/data/afm/Courier-Oblique.afm +342 -0
- data/data/afm/Courier.afm +342 -0
- data/data/afm/Helvetica-Bold.afm +2827 -0
- data/data/afm/Helvetica-BoldOblique.afm +2827 -0
- data/data/afm/Helvetica-Oblique.afm +3051 -0
- data/data/afm/Helvetica.afm +3051 -0
- data/data/afm/MustRead.html +19 -0
- data/data/afm/Symbol.afm +213 -0
- data/data/afm/Times-Bold.afm +2588 -0
- data/data/afm/Times-BoldItalic.afm +2384 -0
- data/data/afm/Times-Italic.afm +2667 -0
- data/data/afm/Times-Roman.afm +2419 -0
- data/data/afm/ZapfDingbats.afm +225 -0
- data/data/agl/LICENSE.md +26 -0
- data/data/agl/glyphlist.txt +4325 -0
- data/data/agl/zapfdingbats.txt +245 -0
- data/lib/fillform/appearance.rb +315 -0
- data/lib/fillform/border.rb +135 -0
- data/lib/fillform/data_format.rb +45 -0
- data/lib/fillform/field.rb +15 -0
- data/lib/fillform/filler.rb +82 -0
- data/lib/fillform/flattener.rb +114 -0
- data/lib/fillform/float32.rb +12 -0
- data/lib/fillform/font.rb +165 -0
- data/lib/fillform/form.rb +165 -0
- data/lib/fillform/glyphs.rb +99 -0
- data/lib/fillform/line_breaker.rb +98 -0
- data/lib/fillform/merged_widget.rb +20 -0
- data/lib/fillform/pdf/document.rb +240 -0
- data/lib/fillform/pdf/filters.rb +108 -0
- data/lib/fillform/pdf/objects.rb +48 -0
- data/lib/fillform/pdf/parser.rb +205 -0
- data/lib/fillform/pdf/serializer.rb +47 -0
- data/lib/fillform/pdf/text.rb +47 -0
- data/lib/fillform/pdf/writer.rb +51 -0
- data/lib/fillform/pdf.rb +9 -0
- data/lib/fillform/pdf_forms.rb +15 -0
- data/lib/fillform/pdftk_wrapper.rb +81 -0
- data/lib/fillform/report.rb +180 -0
- data/lib/fillform/version.rb +5 -0
- data/lib/fillform.rb +65 -0
- metadata +92 -0
data/lib/fillform.rb
ADDED
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require_relative "fillform/version"
|
|
4
|
+
|
|
5
|
+
# Fills AcroForm PDF templates in pure Ruby. The appearance of a filled field is built with the
|
|
6
|
+
# formulas of pdftk (iText 2.1.7), so the documents look the same as the ones pdftk fills.
|
|
7
|
+
module Fillform
|
|
8
|
+
class Error < StandardError; end
|
|
9
|
+
|
|
10
|
+
class << self
|
|
11
|
+
def fill(template, destination, data = {}, flatten: false)
|
|
12
|
+
Filler.new(template).fill(data, flatten: flatten).write(destination)
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def fields(template)
|
|
16
|
+
Report.new(PDF::Document.open(template.to_s)).fields
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def field_names(template)
|
|
20
|
+
fields(template).map(&:name)
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
# Numbers in content streams are written like iText's ByteBuffer#formatDouble writes a float: five
|
|
24
|
+
# decimals below 1, two up to 32767, none above, each truncated after adding half of the last digit.
|
|
25
|
+
def number(value)
|
|
26
|
+
value = [value].pack("e").unpack1("e")
|
|
27
|
+
return "0" if value.abs < 0.000015
|
|
28
|
+
|
|
29
|
+
sign = value.negative? ? "-" : ""
|
|
30
|
+
value = value.abs
|
|
31
|
+
text = if value < 1.0
|
|
32
|
+
fraction(value + 0.000005, 100_000, 5)
|
|
33
|
+
elsif value <= 32_767
|
|
34
|
+
fraction(value + 0.005, 100, 2)
|
|
35
|
+
else
|
|
36
|
+
(value + 0.5).to_i.to_s
|
|
37
|
+
end
|
|
38
|
+
"#{sign}#{text}"
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
private
|
|
42
|
+
|
|
43
|
+
def fraction(value, scale, digits)
|
|
44
|
+
return "1" if digits == 5 && value >= 1
|
|
45
|
+
|
|
46
|
+
scaled = (value * scale).to_i
|
|
47
|
+
whole, decimals = scaled.divmod(scale)
|
|
48
|
+
decimals.zero? ? whole.to_s : "#{whole}.#{decimals.to_s.rjust(digits, "0").sub(/0+\z/, "")}"
|
|
49
|
+
end
|
|
50
|
+
end
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
require_relative "fillform/pdf"
|
|
54
|
+
require_relative "fillform/glyphs"
|
|
55
|
+
require_relative "fillform/form"
|
|
56
|
+
require_relative "fillform/merged_widget"
|
|
57
|
+
require_relative "fillform/field"
|
|
58
|
+
require_relative "fillform/report"
|
|
59
|
+
require_relative "fillform/font"
|
|
60
|
+
require_relative "fillform/float32"
|
|
61
|
+
require_relative "fillform/line_breaker"
|
|
62
|
+
require_relative "fillform/border"
|
|
63
|
+
require_relative "fillform/appearance"
|
|
64
|
+
require_relative "fillform/flattener"
|
|
65
|
+
require_relative "fillform/filler"
|
metadata
ADDED
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
|
2
|
+
name: fillform
|
|
3
|
+
version: !ruby/object:Gem::Version
|
|
4
|
+
version: 0.1.0
|
|
5
|
+
platform: ruby
|
|
6
|
+
authors:
|
|
7
|
+
- Alessandro Rodi
|
|
8
|
+
bindir: bin
|
|
9
|
+
cert_chain: []
|
|
10
|
+
date: 1980-01-02 00:00:00.000000000 Z
|
|
11
|
+
dependencies: []
|
|
12
|
+
description: 'Fills AcroForm templates in pure Ruby and draws the filled fields with
|
|
13
|
+
the layout of pdftk (iText 2.1.7): no Java, no pdftk binary, no subprocess. Ships
|
|
14
|
+
a PdfForms-compatible API.'
|
|
15
|
+
email:
|
|
16
|
+
- rodi@hey.com
|
|
17
|
+
executables: []
|
|
18
|
+
extensions: []
|
|
19
|
+
extra_rdoc_files: []
|
|
20
|
+
files:
|
|
21
|
+
- CHANGELOG.md
|
|
22
|
+
- LICENSE
|
|
23
|
+
- README.md
|
|
24
|
+
- data/afm/Courier-Bold.afm
|
|
25
|
+
- data/afm/Courier-BoldOblique.afm
|
|
26
|
+
- data/afm/Courier-Oblique.afm
|
|
27
|
+
- data/afm/Courier.afm
|
|
28
|
+
- data/afm/Helvetica-Bold.afm
|
|
29
|
+
- data/afm/Helvetica-BoldOblique.afm
|
|
30
|
+
- data/afm/Helvetica-Oblique.afm
|
|
31
|
+
- data/afm/Helvetica.afm
|
|
32
|
+
- data/afm/MustRead.html
|
|
33
|
+
- data/afm/Symbol.afm
|
|
34
|
+
- data/afm/Times-Bold.afm
|
|
35
|
+
- data/afm/Times-BoldItalic.afm
|
|
36
|
+
- data/afm/Times-Italic.afm
|
|
37
|
+
- data/afm/Times-Roman.afm
|
|
38
|
+
- data/afm/ZapfDingbats.afm
|
|
39
|
+
- data/agl/LICENSE.md
|
|
40
|
+
- data/agl/glyphlist.txt
|
|
41
|
+
- data/agl/zapfdingbats.txt
|
|
42
|
+
- lib/fillform.rb
|
|
43
|
+
- lib/fillform/appearance.rb
|
|
44
|
+
- lib/fillform/border.rb
|
|
45
|
+
- lib/fillform/data_format.rb
|
|
46
|
+
- lib/fillform/field.rb
|
|
47
|
+
- lib/fillform/filler.rb
|
|
48
|
+
- lib/fillform/flattener.rb
|
|
49
|
+
- lib/fillform/float32.rb
|
|
50
|
+
- lib/fillform/font.rb
|
|
51
|
+
- lib/fillform/form.rb
|
|
52
|
+
- lib/fillform/glyphs.rb
|
|
53
|
+
- lib/fillform/line_breaker.rb
|
|
54
|
+
- lib/fillform/merged_widget.rb
|
|
55
|
+
- lib/fillform/pdf.rb
|
|
56
|
+
- lib/fillform/pdf/document.rb
|
|
57
|
+
- lib/fillform/pdf/filters.rb
|
|
58
|
+
- lib/fillform/pdf/objects.rb
|
|
59
|
+
- lib/fillform/pdf/parser.rb
|
|
60
|
+
- lib/fillform/pdf/serializer.rb
|
|
61
|
+
- lib/fillform/pdf/text.rb
|
|
62
|
+
- lib/fillform/pdf/writer.rb
|
|
63
|
+
- lib/fillform/pdf_forms.rb
|
|
64
|
+
- lib/fillform/pdftk_wrapper.rb
|
|
65
|
+
- lib/fillform/report.rb
|
|
66
|
+
- lib/fillform/version.rb
|
|
67
|
+
homepage: https://github.com/coorasse/fillform
|
|
68
|
+
licenses:
|
|
69
|
+
- MIT
|
|
70
|
+
metadata:
|
|
71
|
+
rubygems_mfa_required: 'true'
|
|
72
|
+
source_code_uri: https://github.com/coorasse/fillform
|
|
73
|
+
changelog_uri: https://github.com/coorasse/fillform/blob/main/CHANGELOG.md
|
|
74
|
+
rdoc_options: []
|
|
75
|
+
require_paths:
|
|
76
|
+
- lib
|
|
77
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
|
78
|
+
requirements:
|
|
79
|
+
- - ">="
|
|
80
|
+
- !ruby/object:Gem::Version
|
|
81
|
+
version: '3.2'
|
|
82
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
83
|
+
requirements:
|
|
84
|
+
- - ">="
|
|
85
|
+
- !ruby/object:Gem::Version
|
|
86
|
+
version: '0'
|
|
87
|
+
requirements: []
|
|
88
|
+
rubygems_version: 4.0.20
|
|
89
|
+
specification_version: 4
|
|
90
|
+
summary: Fill PDF forms in pure Ruby, with the same output as pdftk. A drop-in replacement
|
|
91
|
+
for pdf-forms.
|
|
92
|
+
test_files: []
|