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 +33 -0
- data/lib/prawn/blank.rb +44 -0
- data/lib/prawn/blank/appearance.rb +22 -0
- data/lib/prawn/blank/field.rb +89 -0
- data/lib/prawn/blank/form.rb +25 -0
- data/lib/prawn/blank/style.rb +3 -0
- data/lib/prawn/blank/text_field.rb +23 -0
- data/lib/prawn/page.rb +19 -0
- metadata +81 -0
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
|
data/lib/prawn/blank.rb
ADDED
@@ -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,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
|
+
|