pdfrb 0.8.9 → 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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 8e064e889093648ac9150c31aebdca550241dc2d5957817be8b03ec043e6d516
4
- data.tar.gz: 822b0f325c2bb1b85636af39728edb69141d5032ce73b2d44beb3ba2984af067
3
+ metadata.gz: c9ccd2f148c786f735078767b672eacf4e8861100894f68b248905074c73e7eb
4
+ data.tar.gz: eaceeb41569d8fab78bcd46891608f6760d4c2a3d47ef45da896c500e32dd736
5
5
  SHA512:
6
- metadata.gz: 39577facfe04eb311838cd8424d94423392f02d2123711538b30a544c2f0f010bd906f37534f8b2c57bb710fc5c75d940f3b8f755506d3df3379a3b006a2e4bd
7
- data.tar.gz: 95f2ad812c85adb404505401fd400390463b91ba24efc0908b9138be7f7bd3747ad4f1e86a1ec2bae18dbff2909c1406be3239ee73bec88f55d0367871523811
6
+ metadata.gz: 909be54b72b05e78ec5bda296a335cfb2b1e78cf2ade15695d45b59e29bb9c73ef95cbfa5f1c4bb4c61a8a191055aaff2dfb3e36e0efb4970b7c0bf71d19cee8
7
+ data.tar.gz: 609afef48ccdeed968a0f1791dd1b7f5e295ce1169e6ab4c4ace378fdd6bd6f5eab116b67c15b4feb40eab0f590a6a4dc29cb0e30910c393624dd8a61f72d112
@@ -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 { |f| f.value[:T] == name }
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 { |f| f.value[:T] }
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
@@ -48,7 +48,7 @@ module Pdfrb
48
48
  # Info values are text strings (s7.9.2.2): they may arrive as
49
49
  # UTF-16BE+BOM or PDFDocEncoding bytes (decryption hands back
50
50
  # wire bytes). Decode rather than relabel the encoding.
51
- raw.is_a?(::String) ? Pdfrb::Model::Cos::StringEncoding.decode_text(raw) : raw
51
+ Pdfrb::Model::Cos::TextString.decode(raw)
52
52
  end
53
53
 
54
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
@@ -16,6 +16,7 @@ module Pdfrb
16
16
  autoload :Dictionary, "pdfrb/model/cos/dictionary"
17
17
  autoload :Stream, "pdfrb/model/cos/stream"
18
18
  autoload :ArlingtonBacked, "pdfrb/model/cos/arlington_backed"
19
+ autoload :TextString, "pdfrb/model/cos/text_string"
19
20
  end
20
21
  end
21
22
  end
@@ -26,8 +26,15 @@ module Pdfrb
26
26
  # ---- Accessors ----
27
27
  def subtype; self[:Subtype]; end
28
28
  def rect; self[:Rect]; end
29
- def contents; self[:Contents]; end
30
- def name; self[:NM]; end
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
- def field_name; self[:T]; end
12
- def alternate_field_name; self[:TU]; end
13
- def mapping_field_name; self[:TM]; end
14
- def field_value; self[:V]; end
15
- def default_value; self[:DV]; end
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
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Pdfrb
4
- VERSION = "0.8.9"
4
+ VERSION = "0.8.10"
5
5
  end
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.9
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