pdf-labels 1.0.0

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.
Files changed (142) hide show
  1. data/History.txt +8 -0
  2. data/LICENCE +38 -0
  3. data/Manifest.txt +141 -0
  4. data/README.txt +72 -0
  5. data/Rakefile +30 -0
  6. data/lib/alias.rb +8 -0
  7. data/lib/glabel_template.rb +36 -0
  8. data/lib/label.rb +52 -0
  9. data/lib/layout.rb +13 -0
  10. data/lib/length_node.rb +47 -0
  11. data/lib/markup.rb +25 -0
  12. data/lib/pdf_label_page.rb +171 -0
  13. data/lib/pdf_labels.rb +6 -0
  14. data/lib/template.rb +37 -0
  15. data/templates/avery-iso-templates.xml +222 -0
  16. data/templates/avery-other-templates.xml +21 -0
  17. data/templates/avery-us-templates.xml +599 -0
  18. data/templates/glabels-2.0.dtd +329 -0
  19. data/templates/misc-iso-templates.xml +434 -0
  20. data/templates/misc-other-templates.xml +21 -0
  21. data/templates/misc-us-templates.xml +183 -0
  22. data/templates/paper-sizes.xml +37 -0
  23. data/templates/zweckform-iso-templates.xml +197 -0
  24. data/test/test_pdf_label_page.rb +91 -0
  25. data/vendor/color.rb +87 -0
  26. data/vendor/color/cmyk.rb +182 -0
  27. data/vendor/color/css.rb +27 -0
  28. data/vendor/color/grayscale.rb +135 -0
  29. data/vendor/color/hsl.rb +130 -0
  30. data/vendor/color/palette.rb +15 -0
  31. data/vendor/color/palette/gimp.rb +107 -0
  32. data/vendor/color/palette/monocontrast.rb +180 -0
  33. data/vendor/color/rgb-colors.rb +189 -0
  34. data/vendor/color/rgb.rb +311 -0
  35. data/vendor/color/rgb/metallic.rb +28 -0
  36. data/vendor/color/yiq.rb +78 -0
  37. data/vendor/pdf/charts.rb +13 -0
  38. data/vendor/pdf/charts/stddev.rb +433 -0
  39. data/vendor/pdf/grid.rb +135 -0
  40. data/vendor/pdf/math.rb +108 -0
  41. data/vendor/pdf/pagenumbers.rb +288 -0
  42. data/vendor/pdf/quickref.rb +331 -0
  43. data/vendor/pdf/simpletable.rb +947 -0
  44. data/vendor/pdf/techbook.rb +901 -0
  45. data/vendor/pdf/writer.rb +2801 -0
  46. data/vendor/pdf/writer/arc4.rb +63 -0
  47. data/vendor/pdf/writer/fontmetrics.rb +202 -0
  48. data/vendor/pdf/writer/fonts/Courier-Bold.afm +342 -0
  49. data/vendor/pdf/writer/fonts/Courier-BoldOblique.afm +342 -0
  50. data/vendor/pdf/writer/fonts/Courier-Oblique.afm +342 -0
  51. data/vendor/pdf/writer/fonts/Courier.afm +342 -0
  52. data/vendor/pdf/writer/fonts/Helvetica-Bold.afm +2827 -0
  53. data/vendor/pdf/writer/fonts/Helvetica-BoldOblique.afm +2827 -0
  54. data/vendor/pdf/writer/fonts/Helvetica-Oblique.afm +3051 -0
  55. data/vendor/pdf/writer/fonts/Helvetica.afm +3051 -0
  56. data/vendor/pdf/writer/fonts/Symbol.afm +213 -0
  57. data/vendor/pdf/writer/fonts/Times-Bold.afm +2588 -0
  58. data/vendor/pdf/writer/fonts/Times-BoldItalic.afm +2384 -0
  59. data/vendor/pdf/writer/fonts/Times-Italic.afm +2667 -0
  60. data/vendor/pdf/writer/fonts/Times-Roman.afm +2419 -0
  61. data/vendor/pdf/writer/fonts/ZapfDingbats.afm +225 -0
  62. data/vendor/pdf/writer/graphics.rb +813 -0
  63. data/vendor/pdf/writer/graphics/imageinfo.rb +365 -0
  64. data/vendor/pdf/writer/lang.rb +44 -0
  65. data/vendor/pdf/writer/lang/en.rb +104 -0
  66. data/vendor/pdf/writer/object.rb +23 -0
  67. data/vendor/pdf/writer/object/action.rb +40 -0
  68. data/vendor/pdf/writer/object/annotation.rb +42 -0
  69. data/vendor/pdf/writer/object/catalog.rb +39 -0
  70. data/vendor/pdf/writer/object/contents.rb +69 -0
  71. data/vendor/pdf/writer/object/destination.rb +40 -0
  72. data/vendor/pdf/writer/object/encryption.rb +53 -0
  73. data/vendor/pdf/writer/object/font.rb +68 -0
  74. data/vendor/pdf/writer/object/fontdescriptor.rb +34 -0
  75. data/vendor/pdf/writer/object/fontencoding.rb +40 -0
  76. data/vendor/pdf/writer/object/image.rb +308 -0
  77. data/vendor/pdf/writer/object/info.rb +79 -0
  78. data/vendor/pdf/writer/object/outline.rb +30 -0
  79. data/vendor/pdf/writer/object/outlines.rb +30 -0
  80. data/vendor/pdf/writer/object/page.rb +195 -0
  81. data/vendor/pdf/writer/object/pages.rb +115 -0
  82. data/vendor/pdf/writer/object/procset.rb +46 -0
  83. data/vendor/pdf/writer/object/viewerpreferences.rb +74 -0
  84. data/vendor/pdf/writer/ohash.rb +58 -0
  85. data/vendor/pdf/writer/oreader.rb +25 -0
  86. data/vendor/pdf/writer/state.rb +48 -0
  87. data/vendor/pdf/writer/strokestyle.rb +140 -0
  88. data/vendor/transaction/simple.rb +693 -0
  89. data/vendor/transaction/simple/group.rb +133 -0
  90. data/vendor/transaction/simple/threadsafe.rb +52 -0
  91. data/vendor/transaction/simple/threadsafe/group.rb +23 -0
  92. data/vendor/xml-mapping/ChangeLog +128 -0
  93. data/vendor/xml-mapping/LICENSE +56 -0
  94. data/vendor/xml-mapping/README +386 -0
  95. data/vendor/xml-mapping/README_XPATH +175 -0
  96. data/vendor/xml-mapping/Rakefile +214 -0
  97. data/vendor/xml-mapping/TODO.txt +32 -0
  98. data/vendor/xml-mapping/doc/xpath_impl_notes.txt +119 -0
  99. data/vendor/xml-mapping/examples/company.rb +34 -0
  100. data/vendor/xml-mapping/examples/company.xml +26 -0
  101. data/vendor/xml-mapping/examples/company_usage.intin.rb +19 -0
  102. data/vendor/xml-mapping/examples/company_usage.intout +39 -0
  103. data/vendor/xml-mapping/examples/order.rb +61 -0
  104. data/vendor/xml-mapping/examples/order.xml +54 -0
  105. data/vendor/xml-mapping/examples/order_signature_enhanced.rb +7 -0
  106. data/vendor/xml-mapping/examples/order_signature_enhanced.xml +9 -0
  107. data/vendor/xml-mapping/examples/order_signature_enhanced_usage.intin.rb +12 -0
  108. data/vendor/xml-mapping/examples/order_signature_enhanced_usage.intout +16 -0
  109. data/vendor/xml-mapping/examples/order_usage.intin.rb +73 -0
  110. data/vendor/xml-mapping/examples/order_usage.intout +147 -0
  111. data/vendor/xml-mapping/examples/time_augm.intin.rb +19 -0
  112. data/vendor/xml-mapping/examples/time_augm.intout +23 -0
  113. data/vendor/xml-mapping/examples/time_node.rb +27 -0
  114. data/vendor/xml-mapping/examples/xpath_create_new.intin.rb +85 -0
  115. data/vendor/xml-mapping/examples/xpath_create_new.intout +181 -0
  116. data/vendor/xml-mapping/examples/xpath_docvsroot.intin.rb +30 -0
  117. data/vendor/xml-mapping/examples/xpath_docvsroot.intout +34 -0
  118. data/vendor/xml-mapping/examples/xpath_ensure_created.intin.rb +62 -0
  119. data/vendor/xml-mapping/examples/xpath_ensure_created.intout +114 -0
  120. data/vendor/xml-mapping/examples/xpath_pathological.intin.rb +42 -0
  121. data/vendor/xml-mapping/examples/xpath_pathological.intout +56 -0
  122. data/vendor/xml-mapping/examples/xpath_usage.intin.rb +51 -0
  123. data/vendor/xml-mapping/examples/xpath_usage.intout +57 -0
  124. data/vendor/xml-mapping/install.rb +40 -0
  125. data/vendor/xml-mapping/lib/xml/mapping.rb +14 -0
  126. data/vendor/xml-mapping/lib/xml/mapping/base.rb +571 -0
  127. data/vendor/xml-mapping/lib/xml/mapping/standard_nodes.rb +343 -0
  128. data/vendor/xml-mapping/lib/xml/mapping/version.rb +8 -0
  129. data/vendor/xml-mapping/lib/xml/xxpath.rb +354 -0
  130. data/vendor/xml-mapping/test/all_tests.rb +6 -0
  131. data/vendor/xml-mapping/test/company.rb +56 -0
  132. data/vendor/xml-mapping/test/documents_folders.rb +33 -0
  133. data/vendor/xml-mapping/test/fixtures/bookmarks1.xml +24 -0
  134. data/vendor/xml-mapping/test/fixtures/company1.xml +85 -0
  135. data/vendor/xml-mapping/test/fixtures/documents_folders.xml +71 -0
  136. data/vendor/xml-mapping/test/fixtures/documents_folders2.xml +30 -0
  137. data/vendor/xml-mapping/test/multiple_mappings.rb +80 -0
  138. data/vendor/xml-mapping/test/tests_init.rb +2 -0
  139. data/vendor/xml-mapping/test/xml_mapping_adv_test.rb +84 -0
  140. data/vendor/xml-mapping/test/xml_mapping_test.rb +201 -0
  141. data/vendor/xml-mapping/test/xpath_test.rb +273 -0
  142. metadata +191 -0
@@ -0,0 +1,195 @@
1
+ #--
2
+ # PDF::Writer for Ruby.
3
+ # http://rubyforge.org/projects/ruby-pdf/
4
+ # Copyright 2003 - 2005 Austin Ziegler.
5
+ #
6
+ # Licensed under a MIT-style licence. See LICENCE in the main distribution
7
+ # for full licensing information.
8
+ #
9
+ # $Id: page.rb,v 1.3 2005/06/02 21:20:35 austin Exp $
10
+ #++
11
+ # A page object, it also creates a contents object to hold its contents
12
+ class PDF::Writer::Object::Page < PDF::Writer::Object
13
+ # Create a page. The optional +relative+ is a Hash with keys :pos =>
14
+ # :before|:after and :rpage, the page to which this new page will be
15
+ # added relative.
16
+ def initialize(parent, relative = nil)
17
+ super(parent)
18
+
19
+ @parent.current_page = self
20
+ @owner = @parent.instance_variable_get('@current_node')
21
+ @page_number = @parent.pages.size
22
+ @contents = []
23
+
24
+ if relative.nil?
25
+ @parent.pages << self
26
+ else
27
+ relative[:page] = self
28
+ @parent.pages.add(relative)
29
+ end
30
+
31
+ # make a contents object to go with this page
32
+ @contents << PDF::Writer::Object::Contents.new(@parent, self)
33
+ @parent.instance_variable_set('@current_contents', @contents[-1])
34
+ match = (@parent.pages.size % 2 == 0 ? :even_pages : :odd_pages)
35
+ # Cheat here. I don't want to add an unnecessary attribute.
36
+ @parent.instance_variable_get('@add_loose_objects').each do |obj, target|
37
+ @contents << obj if target == :all_pages or match == target
38
+ end
39
+
40
+ @annotations = []
41
+
42
+ @media_box = nil
43
+ @crop_box = nil
44
+ @bleed_box = nil
45
+ @trim_box = nil
46
+ @art_box = nil
47
+ end
48
+
49
+ attr_accessor :contents
50
+ attr_reader :page_number
51
+
52
+ def add_annotation(a)
53
+ @annotations << a
54
+ end
55
+
56
+ def to_s
57
+ res = "\n#{@oid} 0 obj\n<< /Type /Page\n/Parent #{@owner.oid} 0 R"
58
+ unless @annotations.empty?
59
+ res << "\n/Annots ["
60
+ @annotations.each { |e| res << " #{e.oid} 0 R"}
61
+ res << "]"
62
+ end
63
+
64
+ if @contents.size == 1
65
+ res << "\n/Contents #{@contents[0].oid} 0 R"
66
+ else
67
+ res << "\n/Contents [\n"
68
+ @contents.each { |c| res << "#{c.oid} 0 R\n" }
69
+ res << "]"
70
+ end
71
+
72
+ # MediaBox:: rectangle (Required; inheritable). A rectangle (see
73
+ # Section 3.8.4, �Rectangles�), expressed in default user
74
+ # space units, defining the boundaries of the physical
75
+ # medium on which the page is intended to be displayed or
76
+ # printed (see Section 10.10.1, �Page Boundaries�).
77
+ res << "\n/MediaBox [#{@media_box.join(' ')}]" unless @media_box.nil? or @media_box.empty?
78
+ # CropBox:: rectangle (Optional; inheritable) A rectangle, expressed
79
+ # in default user space units, defining the visible region
80
+ # of default user space. When the page is displayed or
81
+ # printed, its contents are to be clipped (cropped) to
82
+ # this rectangle and then imposed on the output medium in
83
+ # some implementation-defined manner (see Section 10.10.1,
84
+ # �Page Boundaries�). Default value: the value of MediaBox.
85
+ res << "\n/CropBox [#{@crop_box.join(' ')}]" unless @crop_box.nil? or @crop_box.empty?
86
+ # BleedBox:: rectangle (Optional; PDF 1.3) A rectangle, expressed in
87
+ # default user space units, defining the region to which
88
+ # the contents of the page should be clipped when output
89
+ # in a production environment (see Section 10.10.1, �Page
90
+ # Boundaries�). Default value: the value of CropBox.
91
+ res << "\n/BleedBox [#{@bleed_box.join(' ')}]" unless @bleed_box.nil? or @bleed_box.empty?
92
+ # TrimBox:: rectangle (Optional; PDF 1.3) A rectangle, expressed in
93
+ # default user space units, defining the intended
94
+ # dimensions of the finished page after trimming (see
95
+ # Section 10.10.1, �Page Boundaries�). Default value: the
96
+ # value of CropBox.
97
+ res << "\n/TrimBox [#{@trim_box.join(' ')}]" unless @trim_box.nil? or @trim_box.empty?
98
+ # ArtBox:: rectangle (Optional; PDF 1.3) A rectangle, expressed in
99
+ # default user space units, defining the extent of the
100
+ # page�s meaningful content (including potential white
101
+ # space) as intended by the page�s creator (see Section
102
+ # 10.10.1, �Page Boundaries�). Default value: the value of
103
+ # CropBox.
104
+ res << "\n/ArtBox [#{@art_box.join(' ')}]" unless @art_box.nil? or @art_box.empty?
105
+
106
+ res << "\n>>\nendobj"
107
+ end
108
+ end
109
+
110
+ # BoxColorInfo:: dictionary (Optional; PDF 1.4) A box color information
111
+ # dictionary specifying the colors and other visual
112
+ # characteristics to be used in displaying guidelines on
113
+ # the screen for the various page boundaries (see �Display
114
+ # of Page Boundaries� on page 893). If this entry is
115
+ # absent, the application should use its own current
116
+ # default settings.
117
+ #
118
+ # Rotate:: integer (Optional; inheritable) The number of degrees by
119
+ # which the page should be rotated clockwise when
120
+ # displayed or printed. The value must be a multiple of
121
+ # 90. Default value: 0.
122
+ # Group:: dictionary (Optional; PDF 1.4) A group attributes
123
+ # dictionary specifying the attributes of the page�s page
124
+ # group for use in the transparent imaging model (see
125
+ # Sections 7.3.6, �Page Group,� and 7.5.5, �Transparency
126
+ # Group XObjects�).
127
+ # Thumb:: stream (Optional) A stream object defining the page�s
128
+ # thumbnail image (see Section 8.2.3, �Thumbnail Images�).
129
+ # B:: array (Optional; PDF 1.1; recommended if the page
130
+ # contains article beads) An array of indirect references
131
+ # to article beads appearing on the page (see Section
132
+ # 8.3.2, �Articles�; see also implementation note 37 in
133
+ # Appendix H). The beads are listed in the array in
134
+ # natural reading order.
135
+ # Dur:: number (Optional; PDF 1.1) The page�s display duration
136
+ # (also called its advance timing): the maximum length of
137
+ # time, in seconds, that the page is displayed during
138
+ # presentations before the viewer application
139
+ # automatically advances to the next page (see Section
140
+ # 8.3.3, �Presentations�). By default, the viewer does not
141
+ # advance automatically.
142
+ # Trans:: dictionary (Optional; PDF 1.1) A transition dictionary
143
+ # describing the transition effect to be used when
144
+ # displaying the page during presentations (see Section
145
+ # 8.3.3, �Presentations�).
146
+ # Annots:: array (Optional) An array of annotation dictionaries
147
+ # representing annotations associated with the page (see
148
+ # Section 8.4, �Annotations�).
149
+ # AA:: dictionary (Optional; PDF 1.2) An additional-actions
150
+ # dictionary defining actions to be performed when the
151
+ # page is opened or closed (see Section 8.5.2, �Trigger
152
+ # Events�; see also implementation note 38 in Appendix H).
153
+ # Metadata:: stream (Optional; PDF 1.4) A metadata stream containing
154
+ # metadata for the page (see Section 10.2.2, �Metadata
155
+ # Streams�).
156
+ # PieceInfo:: dictionary (Optional; PDF 1.3) A page-piece dictionary
157
+ # associated with the page (see Section 10.4, �Page-Piece
158
+ # Dictionaries�).
159
+ # StructParents:: integer (Required if the page contains structural
160
+ # content items; PDF 1.3) The integer key of the page�s
161
+ # entry in the structural parent tree (see �Finding
162
+ # Structure Elements from Content Items� on page 797).
163
+ # ID:: string (Optional; PDF 1.3; indirect reference preferred)
164
+ # The digital identifier of the page�s parent Web Capture
165
+ # content set (see Section 10.9.5, �Object Attributes
166
+ # Related to Web Capture�).
167
+ # PZ:: number (Optional; PDF 1.3) The page�s preferred zoom
168
+ # (magnification) factor: the factor by which it should be
169
+ # scaled to achieve the natural display magnification (see
170
+ # Section 10.9.5, �Object Attributes Related to Web
171
+ # Capture�).
172
+ # SeparationInfo:: dictionary (Optional; PDF 1.3) A separation dictionary
173
+ # containing information needed to generate color
174
+ # separations for the page (see Section 10.10.3,
175
+ # �Separation Dictionaries�).
176
+ # Tabs:: name (Optional; PDF 1.5) A name specifying the tab order
177
+ # to be used for annotations on the page. The possible
178
+ # values are R (row order), C (column order), and S
179
+ # (structure order). See Section 8.4, �Annotations,� for
180
+ # details.
181
+ # TemplateInstantiated:: name (Required if this page was created from a
182
+ # named page object; PDF 1.5) The name of the
183
+ # originating page object (see Section 8.6.5,
184
+ # �Named Pages�).
185
+ # PresSteps:: dictionary (Optional; PDF 1.5) A navigation node
186
+ # dictionary representing the first node on the page (see
187
+ # �Sub-page Navigation� on page 566).
188
+ # UserUnit:: number (Optional; PDF 1.6) A positive number giving the
189
+ # size of default user space units, in multiples of 1/72
190
+ # inch. The range of supported values is
191
+ # implementation-dependent; see implementation note 171 in
192
+ # Appendix H. Default value: 1.0 (user unit is 1/72 inch).
193
+ # VP:: dictionary (Optional; PDF 1.6) An array of viewport
194
+ # dictionaries (see Table 8.105) specifying rectangular
195
+ # regions of the page.
@@ -0,0 +1,115 @@
1
+ #--
2
+ # PDF::Writer for Ruby.
3
+ # http://rubyforge.org/projects/ruby-pdf/
4
+ # Copyright 2003 - 2005 Austin Ziegler.
5
+ #
6
+ # Licensed under a MIT-style licence. See LICENCE in the main distribution
7
+ # for full licensing information.
8
+ #
9
+ # $Id: pages.rb,v 1.2 2005/05/16 03:59:21 austin Exp $
10
+ #++
11
+ # object which is a parent to the pages in the document
12
+ class PDF::Writer::Object::Pages < PDF::Writer::Object
13
+ def initialize(parent)
14
+ super(parent)
15
+
16
+ @parent.catalog.pages = self
17
+
18
+ @pages = []
19
+ @procset = nil
20
+ @media_box = nil
21
+ @fonts = []
22
+ @xObjects = []
23
+ @bleed_box = nil
24
+ @trim_box = nil
25
+ end
26
+
27
+ def size
28
+ @pages.size
29
+ end
30
+
31
+ def first_page
32
+ @pages[0]
33
+ end
34
+
35
+ # Add the page ID to the end of the page list.
36
+ def <<(p)
37
+ if p.kind_of?(PDF::Writer::Object::Page)
38
+ @pages << p
39
+ elsif p.kind_of?(PDF::Writer::Object::Font)
40
+ @fonts << p
41
+ elsif p.kind_of?(PDF::Writer::External)
42
+ @xObjects << p
43
+ else
44
+ raise ArgumentError, PDF::Message[:req_FPXO]
45
+ end
46
+ end
47
+
48
+ # Add a page to the page list. If p is just a Page, then it will be
49
+ # added to the page list. Otherwise, it will be treated as a Hash with
50
+ # keys :page, :pos, and :rpage. :page is the Page to be added to the
51
+ # list; :pos is :before or :after; :rpage is the Page to which the
52
+ # new Page will be added relative to.
53
+ def add(p)
54
+ if p.kind_of?(PDF::Writer::Object::Page)
55
+ @pages << p
56
+ elsif p.kind_of?(PDF::Writer::FontMetrics)
57
+ @fonts << p
58
+ elsif p.kind_of?(PDF::Writer::External)
59
+ @xObjects << p
60
+ elsif p.kind_of?(Hash)
61
+ # Find a match.
62
+ i = @pages.index(p[:rpage])
63
+ unless i.nil?
64
+ # There is a match; insert the page.
65
+ case p[:pos]
66
+ when :before
67
+ @pages[i, 0] = p[:page]
68
+ when :after
69
+ @pages[i + 1, 0] = p[:page]
70
+ else
71
+ raise ArgumentError, PDF::Message[:invalid_pos]
72
+ end
73
+ end
74
+ else
75
+ raise ArgumentError, PDF::Message[:req_FPXOH]
76
+ end
77
+ end
78
+
79
+ attr_accessor :procset
80
+ # Each of the following should be an array of 4 numbers, the x and y
81
+ # coordinates of the lower left and upper right bounds of the box.
82
+ attr_accessor :media_box
83
+ attr_accessor :bleed_box
84
+ attr_accessor :trim_box
85
+
86
+ def to_s
87
+ unless @pages.empty?
88
+ res = "\n#{@oid} 0 obj\n<< /Type /Pages\n/Kids ["
89
+ @pages.uniq! # uniqify the data...
90
+ @pages.each { |p| res << "#{p.oid} 0 R\n" }
91
+ res << "]\n/Count #{@pages.size}"
92
+ unless @fonts.empty? and @procset.nil?
93
+ res << "\n/Resources <<"
94
+ res << "\n/ProcSet #{@procset.oid} 0 R" unless @procset.nil?
95
+ unless @fonts.empty?
96
+ res << "\n/Font << "
97
+ @fonts.each { |f| res << "\n/F#{f.font_id} #{f.oid} 0 R" }
98
+ res << " >>"
99
+ end
100
+ unless @xObjects.empty?
101
+ res << "\n/XObject << "
102
+ @xObjects.each { |x| res << "\n/#{x.label} #{x.oid} 0 R" }
103
+ res << " >>"
104
+ end
105
+ res << "\n>>"
106
+ res << "\n/MediaBox [#{@media_box.join(' ')}]" unless @media_box.nil? or @media_box.empty?
107
+ res << "\n/BleedBox [#{@bleed_box.join(' ')}]" unless @bleed_box.nil? or @bleed_box.empty?
108
+ res << "\n/TrimBox [#{@trim_box.join(' ')}]" unless @trim_box.nil? or @trim_box.empty?
109
+ end
110
+ res << "\n >>\nendobj"
111
+ else
112
+ "\n#{@oid} 0 obj\n<< /Type /Pages\n/Count 0\n>>\nendobj"
113
+ end
114
+ end
115
+ end
@@ -0,0 +1,46 @@
1
+ #--
2
+ # PDF::Writer for Ruby.
3
+ # http://rubyforge.org/projects/ruby-pdf/
4
+ # Copyright 2003 - 2005 Austin Ziegler.
5
+ #
6
+ # Licensed under a MIT-style licence. See LICENCE in the main distribution
7
+ # for full licensing information.
8
+ #
9
+ # $Id: procset.rb,v 1.2 2005/05/16 03:59:21 austin Exp $
10
+ #++
11
+ # The document Procedure Set. Not necessary in PDF 1.4 or later, but
12
+ # producing applications are recommended to provide the /ProcSet /Resource
13
+ # in any case for older viewers. Viewing applications are *not*
14
+ # recommended to rely on this information being correct.
15
+ #
16
+ # These procedure sets are used only when the content stream is printed to
17
+ # a PostScript output device; the names identify PostScript procedure sets
18
+ # that must be sent to the device to interpret the PDF operators in the
19
+ # content stream. Each element of this array must be one of the following
20
+ # predefined names: 'PDF', 'Text', 'ImageB', 'ImageC', and 'ImageI'. See
21
+ # also Appendix H note 102.
22
+ class PDF::Writer::Object::Procset < PDF::Writer::Object
23
+ def initialize(parent)
24
+ super
25
+
26
+ @info = ["PDF", "Text"]
27
+ @parent.pages.procset = self
28
+ @parent.procset = self
29
+ end
30
+
31
+ # This is to add new items to the procset list, despite the fact that
32
+ # this is considered obselete, the items are required for printing to
33
+ # some PostsCript printers.
34
+ #
35
+ # +p+ may be 'ImageB', 'ImageC', or 'ImageI'.
36
+ def <<(p)
37
+ @info << p
38
+ end
39
+
40
+ def to_s
41
+ info = @info.uniq
42
+ res = "\n#{@oid} 0 obj\n["
43
+ @info.each { |k| res << "/#{k} " }
44
+ res << "]\nendobj"
45
+ end
46
+ end
@@ -0,0 +1,74 @@
1
+ #--
2
+ # PDF::Writer for Ruby.
3
+ # http://rubyforge.org/projects/ruby-pdf/
4
+ # Copyright 2003 - 2005 Austin Ziegler.
5
+ #
6
+ # Licensed under a MIT-style licence. See LICENCE in the main distribution
7
+ # for full licensing information.
8
+ #
9
+ # $Id: viewerpreferences.rb,v 1.2 2005/05/16 03:59:21 austin Exp $
10
+ #++
11
+ # Set the viewer preferences.
12
+ #
13
+ # HideToolbar:: boolean (Optional) A flag specifying whether to hide the
14
+ # viewer application? tool bars when the document is
15
+ # active. Default value: false.
16
+ # HideMenubar:: boolean (Optional) A flag specifying whether to hide the
17
+ # viewer application? menu bar when the document is
18
+ # active. Default value: false.
19
+ # HideWindowUI:: boolean (Optional) A flag specifying whether to hide
20
+ # user interface elements in the document? window (such as
21
+ # scroll bars and navigation controls), leaving only the
22
+ # document? contents displayed. Default value: false.
23
+ # FitWindow:: boolean (Optional) A flag specifying whether to resize
24
+ # the document? window to fit the size of the first
25
+ # displayed page. Default value: false.
26
+ # CenterWindow:: boolean (Optional) A flag specifying whether to position
27
+ # the document? window in the center of the screen.
28
+ # Default value: false.
29
+ # NonFullScreenPageMode:: name (Optional) The document? page mode,
30
+ # specifying how to display the document on
31
+ # exiting full-screen mode. This entry is
32
+ # meaningful only if the value of the PageMode
33
+ # entry in the catalog dictionary is FullScreen;
34
+ # it is ignored otherwise. Default value: UseNone.
35
+ # Direction:: name (Optional; PDF 1.3) The predominant reading
36
+ # order for text: L2R Left to right R2L Right to
37
+ # left (including vertical writing systems such as
38
+ # Chinese, Japanese, and Korean) This entry has no
39
+ # direct effect on the document? contents or page
40
+ # numbering, but can be used to determine the
41
+ # relative positioning of pages when displayed
42
+ # side by side or printed n-up. Default value:
43
+ # L2R.
44
+ #
45
+ # NonFullScreenPageMode Names
46
+ # UseNone:: Neither document outline nor thumbnail images visible
47
+ # UseOutlines:: Document outline visible
48
+ # UseThumbs:: Thumbnail images visible
49
+ #
50
+ # Note that boolean values are represented by the values 'true' and
51
+ # 'false'. Also note that I have not done much testing on changing these
52
+ # values and am not sure how responsive the various viewers and browsers
53
+ # are to them (and setting the direction would be fairly meaningless as
54
+ # none of these character sets are avaliable yet.
55
+ class PDF::Writer::Object::ViewerPreferences < PDF::Writer::Object
56
+ Preferences = %w{HideToolbar HideMenubar HideWindowUI FitWindow CenterWindow NonFullScreenPageMode Direction}
57
+
58
+ def initialize(parent)
59
+ super(parent)
60
+ end
61
+
62
+ Preferences.each do |s|
63
+ attr_accessor s.downcase.intern
64
+ end
65
+
66
+ def to_s
67
+ res = "\n#{@id} 0 obj\n<< "
68
+ Preferences.each do |s|
69
+ v = __send__("#{s.downcase}".intern)
70
+ res << "\n/#{s} /#{v}" unless v.nil?
71
+ end
72
+ res << "\n>>\n"
73
+ end
74
+ end
@@ -0,0 +1,58 @@
1
+ #--
2
+ # PDF::Writer for Ruby.
3
+ # http://rubyforge.org/projects/ruby-pdf/
4
+ # Copyright 2003 - 2005 Austin Ziegler.
5
+ #
6
+ # Licensed under a MIT-style licence. See LICENCE in the main distribution
7
+ # for full licensing information.
8
+ #
9
+ # $Id: ohash.rb,v 1.2 2005/05/16 03:59:21 austin Exp $
10
+ #++
11
+ # Based on [ruby-talk:20551]. Updated to (hopefully) be 1.8 friendly.
12
+ class PDF::Writer::OHash < Hash
13
+ alias_method :store, :[]=
14
+ alias_method :each_pair, :each
15
+
16
+ def initialize(*args)
17
+ @keys = []
18
+ super
19
+ end
20
+
21
+ def []=(key, val)
22
+ @keys << key unless has_key?(key)
23
+ super
24
+ end
25
+
26
+ def delete(key)
27
+ @keys.delete(key) if has_key?(key)
28
+ super
29
+ end
30
+
31
+ def each
32
+ @keys.each { |k| yield k, self[k] }
33
+ end
34
+
35
+ def each_key
36
+ @keys.each { |k| yield k }
37
+ end
38
+
39
+ def each_value
40
+ @keys.each { |k| yield self[k] }
41
+ end
42
+
43
+ def first
44
+ self[@keys[0]]
45
+ end
46
+
47
+ def last
48
+ self[@keys[-1]]
49
+ end
50
+
51
+ def first?(item)
52
+ self[@keys[0]] == item
53
+ end
54
+
55
+ def last?(item)
56
+ self[@keys[-1]] == item
57
+ end
58
+ end