prawn-blank 0.0.1

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.
data/Rakefile ADDED
@@ -0,0 +1,33 @@
1
+ require 'rubygems'
2
+ require 'rake'
3
+ require 'rake/gempackagetask'
4
+ gem 'rspec'
5
+ require 'spec/version'
6
+ require 'spec/rake/spectask'
7
+ require 'spec/ruby'
8
+
9
+ task :default => [:package]
10
+
11
+ spec = Gem::Specification.load "prawn-blank.gemspec"
12
+ Rake::GemPackageTask.new(spec) do |pkg|
13
+ pkg.need_zip = true
14
+ pkg.need_tar = true
15
+ end
16
+
17
+ gem 'hoe', '>=2.0.0'
18
+ require 'hoe'
19
+
20
+ require 'spec/version'
21
+ require 'spec/rake/spectask'
22
+ require 'spec/ruby'
23
+
24
+ Spec::Rake::SpecTask.new('spec') do |t|
25
+ t.spec_files = FileList['spec/**/*.rb']
26
+ end
27
+
28
+
29
+
30
+ desc "Look for TODO and FIXME tags in the code"
31
+ task :todo do
32
+ egrep /(FIXME|TODO|TBD)/
33
+ end
@@ -0,0 +1,44 @@
1
+ module Prawn
2
+ module Blank
3
+ autoload :Form,"prawn/blank/form"
4
+ autoload :Style,"prawn/blank/style"
5
+ autoload :Field,"prawn/blank/field"
6
+ autoload :Appearance,"prawn/blank/appearance"
7
+ autoload :TextField,"prawn/blank/text_field"
8
+
9
+ def text_field(options={})
10
+ f=TextField.new(self,options)
11
+ if block_given?
12
+ yield(f)
13
+ end
14
+ add_field(f)
15
+ end
16
+
17
+ def get_field_rect(at,width,height)
18
+ unless at.nil?
19
+ x,y=map_to_absolute(at)
20
+ else
21
+ x,y=image_position(width,height,{})
22
+ move_text_position height
23
+ end
24
+ return [x,y,x+width,y+height]
25
+ end
26
+
27
+ #protected
28
+ def add_field(field)
29
+ annotation = ref!(field.to_h)
30
+ acroform.add_field(annotation)
31
+ page.dictionary.data[:Annots] ||= []
32
+ page.dictionary.data[:Annots] << annotation
33
+ end
34
+
35
+ def acroform
36
+ store.root.data[:AcroForm] ||= ref!(Form.new)
37
+ store.root.data[:AcroForm].data
38
+ end
39
+
40
+ end
41
+ end
42
+ require 'prawn/document'
43
+ Prawn::Document.extensions << Prawn::Blank
44
+ require 'prawn/page'
@@ -0,0 +1,22 @@
1
+ class Prawn::Blank::Appearance
2
+
3
+ attr_accessor :font,:font_subset,:font_size
4
+
5
+ def initialize(options={})
6
+ options.each do |k,v|
7
+ self.send "#{k.to_s}=".to_sym,v
8
+ end
9
+ end
10
+
11
+ def self.cast(hsh)
12
+ if hsh.kind_of? self
13
+ return hsh
14
+ else
15
+ return self.new(hsh)
16
+ end
17
+ end
18
+
19
+ def to_s
20
+ Prawn::LiteralString.new "/#{font.identifier_for(0)} #{font_size} Tf"
21
+ end
22
+ end
@@ -0,0 +1,89 @@
1
+ class Prawn::Blank::Field
2
+
3
+ # see pdf reference for documentation
4
+ FF_FLAGS={
5
+ :readonly => 1,
6
+ :required => 2,
7
+ :no_export => 3,
8
+
9
+ # for text fields
10
+ :multiline => 13,
11
+ :password => 14,
12
+
13
+ # for buttons
14
+ :no_toggle_to_off => 15
15
+ }
16
+
17
+ def initialize(document,*args)
18
+ @document=document
19
+ options = (args.last.kind_of?(Hash) ? args.pop : {})
20
+ Prawn.verify_options self.class.get_possible_options, options
21
+ puts self.methods.sort.inspect
22
+ options = default_options.merge(options)
23
+ options.each do |k,v|
24
+ self.send "#{k.to_s}=".to_sym,v
25
+ end
26
+ puts options.inspect
27
+ #@options=options
28
+ end
29
+
30
+
31
+ def to_h
32
+ get_dict
33
+ end
34
+
35
+
36
+ protected
37
+ def get_dict
38
+
39
+ app=Prawn::Blank::Appearance.cast(self.appearance)
40
+
41
+ app.font.instance_eval do
42
+ @references[0] ||= register(0)
43
+ @document.acroform.add_ressource(:Font,identifier_for(0),@references[0])
44
+ end
45
+
46
+ base={
47
+ :Type => :Annot,
48
+ :Subtype => :Widget,
49
+ :DA => app.to_s,
50
+ :F => 4,
51
+ :BS => {:Type => :Border, :W => 1, :S => :S},
52
+ :MK => {:BC => [0, 0, 0]}
53
+ }
54
+ unless self.name.kind_of? Prawn::LiteralString
55
+ self.name= Prawn::LiteralString.new(self.name)
56
+ end
57
+
58
+ base[:T]=self.name
59
+
60
+ base[:Rect]=@document.get_field_rect(self.at, self.width, self.height)
61
+
62
+ base[:V]=self.value if self.value
63
+ base[:DV]=self.default_value if self.default_value
64
+
65
+ ff=0
66
+
67
+ FF_FLAGS.each do |key,value|
68
+ if self.send(key)
69
+ ff += (1<<(value-1))
70
+ end
71
+ end
72
+
73
+ base[:Ff]=ff
74
+
75
+ return base
76
+ end
77
+
78
+ def default_options
79
+ {}
80
+ end
81
+
82
+ def self.get_possible_options
83
+ [:at, :height, :width, :name, :appearance, :value, :default_value] + FF_FLAGS.keys
84
+ end
85
+
86
+ public
87
+ attr_accessor *get_possible_options
88
+
89
+ end
@@ -0,0 +1,25 @@
1
+ class Prawn::Blank::Form < Hash
2
+ def initialize()
3
+ super()
4
+ self[:DR] = {}
5
+ self[:Fields] = []
6
+ end
7
+
8
+ def add_ressource(type,name,dict)
9
+ self[:DR][type] ||={}
10
+ self[:DR][type][name] ||= dict
11
+ end
12
+
13
+ def add_ressources(hash)
14
+ puts hash.inspect
15
+ hash.each do |type, names|
16
+ names.each do |name,dict|
17
+ add_ressource(type, name, dict)
18
+ end
19
+ end
20
+ end
21
+
22
+ def add_field(field)
23
+ self[:Fields] << field
24
+ end
25
+ end
@@ -0,0 +1,3 @@
1
+ class Prawn::Blank::Style
2
+
3
+ end
@@ -0,0 +1,23 @@
1
+ class Prawn::Blank::TextField < Prawn::Blank::Field
2
+
3
+
4
+
5
+ protected
6
+ def get_dict
7
+ base = super
8
+ base[:BS][:S]=:U
9
+ base[:FT]=:Tx
10
+
11
+ return base
12
+ end
13
+
14
+ def default_options
15
+ super().merge({:height=>10})
16
+ end
17
+
18
+ def self.get_possible_options
19
+ super() + [:font,:font_size]
20
+ end
21
+ public
22
+ attr_accessor *get_possible_options
23
+ end
data/lib/prawn/page.rb ADDED
@@ -0,0 +1,19 @@
1
+ class Prawn::Core::Page
2
+
3
+ def appearance_stream(appearance)
4
+ @stamp_stream = ""
5
+ @stamp_dictionary = appearance.dictionary
6
+
7
+ appearance.block.call()
8
+
9
+ document.instance_eval do
10
+ font.add_to_current_page(0)
11
+ add_content "/#{font.identifier_for(0)} #{font_size} Tf"
12
+ end
13
+
14
+ appearance.stream = @stamp_stream
15
+
16
+ @stamp_stream = nil
17
+ @stamp_dictionary = nil
18
+ end
19
+ end
metadata ADDED
@@ -0,0 +1,81 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: prawn-blank
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - HanneG
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+
12
+ date: 2010-06-02 00:00:00 +02:00
13
+ default_executable:
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: prawn
17
+ type: :runtime
18
+ version_requirement:
19
+ version_requirements: !ruby/object:Gem::Requirement
20
+ requirements:
21
+ - - ">="
22
+ - !ruby/object:Gem::Version
23
+ version: "0.84"
24
+ version:
25
+ - !ruby/object:Gem::Dependency
26
+ name: rspec
27
+ type: :development
28
+ version_requirement:
29
+ version_requirements: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: "0"
34
+ version:
35
+ description: prawn-blank adds forms to prawn
36
+ email: hannes.georg@googlemail.com
37
+ executables: []
38
+
39
+ extensions: []
40
+
41
+ extra_rdoc_files: []
42
+
43
+ files:
44
+ - lib/prawn/blank/text_field.rb
45
+ - lib/prawn/blank/style.rb
46
+ - lib/prawn/blank/appearance.rb
47
+ - lib/prawn/blank/field.rb
48
+ - lib/prawn/blank/form.rb
49
+ - lib/prawn/page.rb
50
+ - lib/prawn/blank.rb
51
+ - Rakefile
52
+ has_rdoc: true
53
+ homepage:
54
+ licenses: []
55
+
56
+ post_install_message:
57
+ rdoc_options: []
58
+
59
+ require_paths:
60
+ - lib
61
+ required_ruby_version: !ruby/object:Gem::Requirement
62
+ requirements:
63
+ - - ">="
64
+ - !ruby/object:Gem::Version
65
+ version: "0"
66
+ version:
67
+ required_rubygems_version: !ruby/object:Gem::Requirement
68
+ requirements:
69
+ - - ">="
70
+ - !ruby/object:Gem::Version
71
+ version: "0"
72
+ version:
73
+ requirements: []
74
+
75
+ rubyforge_project:
76
+ rubygems_version: 1.3.5
77
+ signing_key:
78
+ specification_version: 3
79
+ summary: prawn-blank adds forms to prawn
80
+ test_files: []
81
+