prawn-blank 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
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
+