pdfrb 0.8.8 → 0.8.10
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/pdfrb/document/form.rb +7 -3
- data/lib/pdfrb/document/metadata.rb +4 -1
- data/lib/pdfrb/model/cos/text_string.rb +26 -0
- data/lib/pdfrb/model/cos.rb +1 -0
- data/lib/pdfrb/model/type/annotation.rb +9 -2
- data/lib/pdfrb/model/type/form_field.rb +21 -5
- data/lib/pdfrb/version.rb +1 -1
- metadata +2 -1
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: c9ccd2f148c786f735078767b672eacf4e8861100894f68b248905074c73e7eb
|
|
4
|
+
data.tar.gz: eaceeb41569d8fab78bcd46891608f6760d4c2a3d47ef45da896c500e32dd736
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 909be54b72b05e78ec5bda296a335cfb2b1e78cf2ade15695d45b59e29bb9c73ef95cbfa5f1c4bb4c61a8a191055aaff2dfb3e36e0efb4970b7c0bf71d19cee8
|
|
7
|
+
data.tar.gz: 609afef48ccdeed968a0f1791dd1b7f5e295ce1169e6ab4c4ace378fdd6bd6f5eab116b67c15b4feb40eab0f590a6a4dc29cb0e30910c393624dd8a61f72d112
|
data/lib/pdfrb/document/form.rb
CHANGED
|
@@ -86,7 +86,9 @@ module Pdfrb
|
|
|
86
86
|
|
|
87
87
|
# Find a field by fully qualified name.
|
|
88
88
|
def find(name)
|
|
89
|
-
each_field.find
|
|
89
|
+
each_field.find do |f|
|
|
90
|
+
Pdfrb::Model::Cos::TextString.decode(f.value[:T]) == name
|
|
91
|
+
end
|
|
90
92
|
end
|
|
91
93
|
|
|
92
94
|
# Enumerate all top-level fields.
|
|
@@ -105,7 +107,9 @@ module Pdfrb
|
|
|
105
107
|
|
|
106
108
|
# List of fully qualified field names (T values).
|
|
107
109
|
def field_names
|
|
108
|
-
each_field.filter_map
|
|
110
|
+
each_field.filter_map do |f|
|
|
111
|
+
Pdfrb::Model::Cos::TextString.decode(f.value[:T])
|
|
112
|
+
end
|
|
109
113
|
end
|
|
110
114
|
|
|
111
115
|
# Set a field value by name. Auto-regenerates the appearance stream
|
|
@@ -129,7 +133,7 @@ module Pdfrb
|
|
|
129
133
|
field = find(name)
|
|
130
134
|
return nil unless field
|
|
131
135
|
|
|
132
|
-
field.value[:V]
|
|
136
|
+
Pdfrb::Model::Cos::TextString.decode(field.value[:V])
|
|
133
137
|
end
|
|
134
138
|
|
|
135
139
|
# Flatten all form fields: stamp their appearance streams into page
|
|
@@ -45,7 +45,10 @@ module Pdfrb
|
|
|
45
45
|
raw = info.value[field]
|
|
46
46
|
return nil if raw.nil?
|
|
47
47
|
|
|
48
|
-
|
|
48
|
+
# Info values are text strings (s7.9.2.2): they may arrive as
|
|
49
|
+
# UTF-16BE+BOM or PDFDocEncoding bytes (decryption hands back
|
|
50
|
+
# wire bytes). Decode rather than relabel the encoding.
|
|
51
|
+
Pdfrb::Model::Cos::TextString.decode(raw)
|
|
49
52
|
end
|
|
50
53
|
|
|
51
54
|
def write_field(field, value)
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pdfrb
|
|
4
|
+
module Model
|
|
5
|
+
module Cos
|
|
6
|
+
# Semantic accessors for spec-defined text strings (s7.9.2.2).
|
|
7
|
+
# On the wire these are UTF-16BE+BOM or PDFDocEncoding bytes —
|
|
8
|
+
# and read-side decryption hands them back as raw bytes — so
|
|
9
|
+
# every accessor that means "this field is text" decodes via
|
|
10
|
+
# this seam instead of relabelling the encoding. The Model
|
|
11
|
+
# itself stays lossless: only semantic accessors decode.
|
|
12
|
+
module TextString
|
|
13
|
+
module_function
|
|
14
|
+
|
|
15
|
+
# @return [String] the decoded UTF-8 text, or +raw+ unchanged
|
|
16
|
+
# when it is not a String (names, arrays, dates pass
|
|
17
|
+
# through untouched).
|
|
18
|
+
def decode(raw)
|
|
19
|
+
return raw unless raw.is_a?(::String)
|
|
20
|
+
|
|
21
|
+
StringEncoding.decode_text(raw)
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
end
|
data/lib/pdfrb/model/cos.rb
CHANGED
|
@@ -26,8 +26,15 @@ module Pdfrb
|
|
|
26
26
|
# ---- Accessors ----
|
|
27
27
|
def subtype; self[:Subtype]; end
|
|
28
28
|
def rect; self[:Rect]; end
|
|
29
|
-
|
|
30
|
-
def
|
|
29
|
+
|
|
30
|
+
def contents
|
|
31
|
+
Pdfrb::Model::Cos::TextString.decode(self[:Contents])
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
def name
|
|
35
|
+
Pdfrb::Model::Cos::TextString.decode(self[:NM])
|
|
36
|
+
end
|
|
37
|
+
|
|
31
38
|
def modified_date; self[:M]; end
|
|
32
39
|
def flags; self[:F] || 0; end
|
|
33
40
|
def color; self[:C]; end
|
|
@@ -8,11 +8,27 @@ module Pdfrb
|
|
|
8
8
|
register_type :Field
|
|
9
9
|
|
|
10
10
|
def field_type; self[:FT]; end
|
|
11
|
-
|
|
12
|
-
def
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
11
|
+
|
|
12
|
+
def field_name
|
|
13
|
+
Pdfrb::Model::Cos::TextString.decode(self[:T])
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def alternate_field_name
|
|
17
|
+
Pdfrb::Model::Cos::TextString.decode(self[:TU])
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def mapping_field_name
|
|
21
|
+
Pdfrb::Model::Cos::TextString.decode(self[:TM])
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def field_value
|
|
25
|
+
Pdfrb::Model::Cos::TextString.decode(self[:V])
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def default_value
|
|
29
|
+
Pdfrb::Model::Cos::TextString.decode(self[:DV])
|
|
30
|
+
end
|
|
31
|
+
|
|
16
32
|
def kids; self[:Kids]; end
|
|
17
33
|
def parent; self[:Parent]; end
|
|
18
34
|
def flags; self[:Ff] || 0; end
|
data/lib/pdfrb/version.rb
CHANGED
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: pdfrb
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.8.
|
|
4
|
+
version: 0.8.10
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Ribose Inc.
|
|
@@ -999,6 +999,7 @@ files:
|
|
|
999
999
|
- lib/pdfrb/model/cos/name_encoding.rb
|
|
1000
1000
|
- lib/pdfrb/model/cos/stream.rb
|
|
1001
1001
|
- lib/pdfrb/model/cos/string_encoding.rb
|
|
1002
|
+
- lib/pdfrb/model/cos/text_string.rb
|
|
1002
1003
|
- lib/pdfrb/model/date.rb
|
|
1003
1004
|
- lib/pdfrb/model/matrix.rb
|
|
1004
1005
|
- lib/pdfrb/model/object.rb
|