prawn-layout 0.3.2 → 0.7.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/README +1 -0
- data/Rakefile +6 -3
- data/lib/prawn/layout.rb +1 -1
- data/lib/prawn/layout/page.rb +0 -40
- data/lib/prawn/table/cell.rb +15 -13
- metadata +31 -309
- data/examples/page_layout/flowing_text_with_header_and_footer.rb +0 -36
- data/spec/page_layout_spec.rb +0 -41
- data/vendor/prawn-core/COPYING +0 -340
- data/vendor/prawn-core/HACKING +0 -46
- data/vendor/prawn-core/LICENSE +0 -56
- data/vendor/prawn-core/README +0 -142
- data/vendor/prawn-core/Rakefile +0 -75
- data/vendor/prawn-core/bench/afm_text_bench.rb +0 -18
- data/vendor/prawn-core/bench/png_type_6.rb +0 -15
- data/vendor/prawn-core/bench/ttf_text_bench.rb +0 -19
- data/vendor/prawn-core/bugs/canvas_sets_y_to_0.rb +0 -15
- data/vendor/prawn-core/bugs/png_barcode_issue.rb +0 -11
- data/vendor/prawn-core/bugs/resolved/canvas_sets_y_to_0.rb +0 -15
- data/vendor/prawn-core/data/encodings/win_ansi.txt +0 -29
- data/vendor/prawn-core/data/fonts/Action Man.dfont +0 -0
- data/vendor/prawn-core/data/fonts/Activa.ttf +0 -0
- data/vendor/prawn-core/data/fonts/Chalkboard.ttf +0 -0
- data/vendor/prawn-core/data/fonts/Courier-Bold.afm +0 -342
- data/vendor/prawn-core/data/fonts/Courier-BoldOblique.afm +0 -342
- data/vendor/prawn-core/data/fonts/Courier-Oblique.afm +0 -342
- data/vendor/prawn-core/data/fonts/Courier.afm +0 -342
- data/vendor/prawn-core/data/fonts/DejaVuSans.ttf +0 -0
- data/vendor/prawn-core/data/fonts/Dustismo_Roman.ttf +0 -0
- data/vendor/prawn-core/data/fonts/Helvetica-Bold.afm +0 -2827
- data/vendor/prawn-core/data/fonts/Helvetica-BoldOblique.afm +0 -2827
- data/vendor/prawn-core/data/fonts/Helvetica-Oblique.afm +0 -3051
- data/vendor/prawn-core/data/fonts/Helvetica.afm +0 -3051
- data/vendor/prawn-core/data/fonts/MustRead.html +0 -19
- data/vendor/prawn-core/data/fonts/Symbol.afm +0 -213
- data/vendor/prawn-core/data/fonts/Times-Bold.afm +0 -2588
- data/vendor/prawn-core/data/fonts/Times-BoldItalic.afm +0 -2384
- data/vendor/prawn-core/data/fonts/Times-Italic.afm +0 -2667
- data/vendor/prawn-core/data/fonts/Times-Roman.afm +0 -2419
- data/vendor/prawn-core/data/fonts/ZapfDingbats.afm +0 -225
- data/vendor/prawn-core/data/fonts/comicsans.ttf +0 -0
- data/vendor/prawn-core/data/fonts/gkai00mp.ttf +0 -0
- data/vendor/prawn-core/data/images/16bit.alpha +0 -0
- data/vendor/prawn-core/data/images/16bit.dat +0 -0
- data/vendor/prawn-core/data/images/16bit.png +0 -0
- data/vendor/prawn-core/data/images/arrow.png +0 -0
- data/vendor/prawn-core/data/images/arrow2.png +0 -0
- data/vendor/prawn-core/data/images/barcode_issue.png +0 -0
- data/vendor/prawn-core/data/images/dice.alpha +0 -0
- data/vendor/prawn-core/data/images/dice.dat +0 -0
- data/vendor/prawn-core/data/images/dice.png +0 -0
- data/vendor/prawn-core/data/images/dice_interlaced.png +0 -0
- data/vendor/prawn-core/data/images/fractal.jpg +0 -0
- data/vendor/prawn-core/data/images/letterhead.jpg +0 -0
- data/vendor/prawn-core/data/images/page_white_text.alpha +0 -0
- data/vendor/prawn-core/data/images/page_white_text.dat +0 -0
- data/vendor/prawn-core/data/images/page_white_text.png +0 -0
- data/vendor/prawn-core/data/images/pigs.jpg +0 -0
- data/vendor/prawn-core/data/images/rails.dat +0 -0
- data/vendor/prawn-core/data/images/rails.png +0 -0
- data/vendor/prawn-core/data/images/ruport.png +0 -0
- data/vendor/prawn-core/data/images/ruport_data.dat +0 -0
- data/vendor/prawn-core/data/images/ruport_transparent.png +0 -0
- data/vendor/prawn-core/data/images/ruport_type0.png +0 -0
- data/vendor/prawn-core/data/images/stef.jpg +0 -0
- data/vendor/prawn-core/data/images/tru256.bmp +0 -0
- data/vendor/prawn-core/data/images/web-links.dat +0 -1
- data/vendor/prawn-core/data/images/web-links.png +0 -0
- data/vendor/prawn-core/data/shift_jis_text.txt +0 -1
- data/vendor/prawn-core/examples/bounding_box/bounding_boxes.rb +0 -43
- data/vendor/prawn-core/examples/bounding_box/indentation.rb +0 -34
- data/vendor/prawn-core/examples/bounding_box/russian_boxes.rb +0 -36
- data/vendor/prawn-core/examples/bounding_box/stretched_nesting.rb +0 -67
- data/vendor/prawn-core/examples/column_box/column_box_example.rb +0 -43
- data/vendor/prawn-core/examples/example_helper.rb +0 -3
- data/vendor/prawn-core/examples/general/background.rb +0 -23
- data/vendor/prawn-core/examples/general/canvas.rb +0 -15
- data/vendor/prawn-core/examples/general/margin.rb +0 -36
- data/vendor/prawn-core/examples/general/measurement_units.rb +0 -51
- data/vendor/prawn-core/examples/general/metadata-info.rb +0 -16
- data/vendor/prawn-core/examples/general/multi_page_layout.rb +0 -18
- data/vendor/prawn-core/examples/general/page_geometry.rb +0 -31
- data/vendor/prawn-core/examples/general/page_numbering.rb +0 -15
- data/vendor/prawn-core/examples/general/stamp.rb +0 -45
- data/vendor/prawn-core/examples/graphics/basic_images.rb +0 -23
- data/vendor/prawn-core/examples/graphics/cmyk.rb +0 -12
- data/vendor/prawn-core/examples/graphics/curves.rb +0 -11
- data/vendor/prawn-core/examples/graphics/hexagon.rb +0 -13
- data/vendor/prawn-core/examples/graphics/image_fit.rb +0 -15
- data/vendor/prawn-core/examples/graphics/image_flow.rb +0 -37
- data/vendor/prawn-core/examples/graphics/image_position.rb +0 -17
- data/vendor/prawn-core/examples/graphics/line.rb +0 -32
- data/vendor/prawn-core/examples/graphics/png_types.rb +0 -22
- data/vendor/prawn-core/examples/graphics/polygons.rb +0 -16
- data/vendor/prawn-core/examples/graphics/remote_images.rb +0 -12
- data/vendor/prawn-core/examples/graphics/ruport_style_helpers.rb +0 -19
- data/vendor/prawn-core/examples/graphics/stroke_bounds.rb +0 -20
- data/vendor/prawn-core/examples/graphics/stroke_cap_and_join.rb +0 -45
- data/vendor/prawn-core/examples/graphics/stroke_dash.rb +0 -42
- data/vendor/prawn-core/examples/graphics/transparency.rb +0 -26
- data/vendor/prawn-core/examples/m17n/chinese_text_wrapping.rb +0 -19
- data/vendor/prawn-core/examples/m17n/euro.rb +0 -15
- data/vendor/prawn-core/examples/m17n/sjis.rb +0 -28
- data/vendor/prawn-core/examples/m17n/utf8.rb +0 -13
- data/vendor/prawn-core/examples/m17n/win_ansi_charset.rb +0 -54
- data/vendor/prawn-core/examples/text/alignment.rb +0 -18
- data/vendor/prawn-core/examples/text/dfont.rb +0 -48
- data/vendor/prawn-core/examples/text/family_based_styling.rb +0 -24
- data/vendor/prawn-core/examples/text/font_calculations.rb +0 -91
- data/vendor/prawn-core/examples/text/font_size.rb +0 -33
- data/vendor/prawn-core/examples/text/kerning.rb +0 -30
- data/vendor/prawn-core/examples/text/simple_text.rb +0 -17
- data/vendor/prawn-core/examples/text/simple_text_ttf.rb +0 -17
- data/vendor/prawn-core/examples/text/span.rb +0 -29
- data/vendor/prawn-core/examples/text/text_box.rb +0 -25
- data/vendor/prawn-core/examples/text/text_box_returning_excess.rb +0 -51
- data/vendor/prawn-core/examples/text/text_flow.rb +0 -67
- data/vendor/prawn-core/lib/prawn/byte_string.rb +0 -7
- data/vendor/prawn-core/lib/prawn/compatibility.rb +0 -38
- data/vendor/prawn-core/lib/prawn/core.rb +0 -85
- data/vendor/prawn-core/lib/prawn/document.rb +0 -534
- data/vendor/prawn-core/lib/prawn/document/annotations.rb +0 -65
- data/vendor/prawn-core/lib/prawn/document/bounding_box.rb +0 -390
- data/vendor/prawn-core/lib/prawn/document/column_box.rb +0 -102
- data/vendor/prawn-core/lib/prawn/document/destinations.rb +0 -92
- data/vendor/prawn-core/lib/prawn/document/internals.rb +0 -180
- data/vendor/prawn-core/lib/prawn/document/page_geometry.rb +0 -153
- data/vendor/prawn-core/lib/prawn/document/snapshot.rb +0 -71
- data/vendor/prawn-core/lib/prawn/document/span.rb +0 -55
- data/vendor/prawn-core/lib/prawn/document/text.rb +0 -184
- data/vendor/prawn-core/lib/prawn/document/text/box.rb +0 -90
- data/vendor/prawn-core/lib/prawn/document/text/wrapping.rb +0 -62
- data/vendor/prawn-core/lib/prawn/encoding.rb +0 -121
- data/vendor/prawn-core/lib/prawn/errors.rb +0 -61
- data/vendor/prawn-core/lib/prawn/font.rb +0 -297
- data/vendor/prawn-core/lib/prawn/font/afm.rb +0 -202
- data/vendor/prawn-core/lib/prawn/font/dfont.rb +0 -34
- data/vendor/prawn-core/lib/prawn/font/ttf.rb +0 -329
- data/vendor/prawn-core/lib/prawn/graphics.rb +0 -264
- data/vendor/prawn-core/lib/prawn/graphics/cap_style.rb +0 -35
- data/vendor/prawn-core/lib/prawn/graphics/color.rb +0 -141
- data/vendor/prawn-core/lib/prawn/graphics/dash.rb +0 -69
- data/vendor/prawn-core/lib/prawn/graphics/join_style.rb +0 -35
- data/vendor/prawn-core/lib/prawn/graphics/transparency.rb +0 -56
- data/vendor/prawn-core/lib/prawn/images.rb +0 -339
- data/vendor/prawn-core/lib/prawn/images/jpg.rb +0 -46
- data/vendor/prawn-core/lib/prawn/images/png.rb +0 -219
- data/vendor/prawn-core/lib/prawn/literal_string.rb +0 -14
- data/vendor/prawn-core/lib/prawn/measurement_extensions.rb +0 -46
- data/vendor/prawn-core/lib/prawn/measurements.rb +0 -71
- data/vendor/prawn-core/lib/prawn/name_tree.rb +0 -166
- data/vendor/prawn-core/lib/prawn/object_store.rb +0 -63
- data/vendor/prawn-core/lib/prawn/pdf_object.rb +0 -81
- data/vendor/prawn-core/lib/prawn/reference.rb +0 -72
- data/vendor/prawn-core/lib/prawn/stamp.rb +0 -87
- data/vendor/prawn-core/meta/Rakefile +0 -62
- data/vendor/prawn-core/meta/lib/prawn.rb +0 -2
- data/vendor/prawn-core/reference_pdfs/alignment.pdf +0 -229
- data/vendor/prawn-core/reference_pdfs/background.pdf +0 -0
- data/vendor/prawn-core/reference_pdfs/basic_images.pdf +0 -0
- data/vendor/prawn-core/reference_pdfs/bounding_boxes.pdf +0 -128
- data/vendor/prawn-core/reference_pdfs/canvas.pdf +0 -78
- data/vendor/prawn-core/reference_pdfs/chinese_flow.pdf +0 -0
- data/vendor/prawn-core/reference_pdfs/cmyk.pdf +0 -0
- data/vendor/prawn-core/reference_pdfs/column_box.pdf +0 -3671
- data/vendor/prawn-core/reference_pdfs/curves.pdf +0 -62
- data/vendor/prawn-core/reference_pdfs/dfont.pdf +0 -0
- data/vendor/prawn-core/reference_pdfs/euro.pdf +0 -75
- data/vendor/prawn-core/reference_pdfs/family_style.pdf +0 -286
- data/vendor/prawn-core/reference_pdfs/flow.pdf +0 -964
- data/vendor/prawn-core/reference_pdfs/font_calculations.pdf +0 -0
- data/vendor/prawn-core/reference_pdfs/font_size.pdf +0 -142
- data/vendor/prawn-core/reference_pdfs/hexagon.pdf +0 -61
- data/vendor/prawn-core/reference_pdfs/image-flow.pdf +0 -0
- data/vendor/prawn-core/reference_pdfs/image_fit.pdf +0 -0
- data/vendor/prawn-core/reference_pdfs/image_position.pdf +0 -0
- data/vendor/prawn-core/reference_pdfs/indentation.pdf +0 -124
- data/vendor/prawn-core/reference_pdfs/kerning.pdf +0 -0
- data/vendor/prawn-core/reference_pdfs/landscape_a4.pdf +0 -52
- data/vendor/prawn-core/reference_pdfs/landscape_legal.pdf +0 -52
- data/vendor/prawn-core/reference_pdfs/landscape_letter.pdf +0 -52
- data/vendor/prawn-core/reference_pdfs/lines.pdf +0 -116
- data/vendor/prawn-core/reference_pdfs/margin.pdf +0 -3850
- data/vendor/prawn-core/reference_pdfs/measurement_units.pdf +0 -4667
- data/vendor/prawn-core/reference_pdfs/metadata-info.pdf +0 -88
- data/vendor/prawn-core/reference_pdfs/multi-layout.pdf +0 -209
- data/vendor/prawn-core/reference_pdfs/page_with_numbering.pdf +0 -156
- data/vendor/prawn-core/reference_pdfs/png_types.pdf +0 -0
- data/vendor/prawn-core/reference_pdfs/portrait_a4.pdf +0 -52
- data/vendor/prawn-core/reference_pdfs/portrait_legal.pdf +0 -52
- data/vendor/prawn-core/reference_pdfs/portrait_letter.pdf +0 -52
- data/vendor/prawn-core/reference_pdfs/pretty_polygons.pdf +0 -122
- data/vendor/prawn-core/reference_pdfs/remote_images.pdf +0 -0
- data/vendor/prawn-core/reference_pdfs/ruport.pdf +0 -101
- data/vendor/prawn-core/reference_pdfs/russian_boxes.pdf +0 -2780
- data/vendor/prawn-core/reference_pdfs/simple_text.pdf +0 -136
- data/vendor/prawn-core/reference_pdfs/simple_text_ttf.pdf +0 -0
- data/vendor/prawn-core/reference_pdfs/sjis.pdf +0 -0
- data/vendor/prawn-core/reference_pdfs/span.pdf +0 -1975
- data/vendor/prawn-core/reference_pdfs/stamp.pdf +0 -696
- data/vendor/prawn-core/reference_pdfs/stretched_nesting.pdf +0 -200
- data/vendor/prawn-core/reference_pdfs/stroke_bounds.pdf +0 -135
- data/vendor/prawn-core/reference_pdfs/stroke_cap_and_join.pdf +0 -80
- data/vendor/prawn-core/reference_pdfs/stroke_dash.pdf +0 -457
- data/vendor/prawn-core/reference_pdfs/text_box.pdf +0 -315
- data/vendor/prawn-core/reference_pdfs/text_box_returning_excess.pdf +0 -271
- data/vendor/prawn-core/reference_pdfs/transparency.pdf +0 -347
- data/vendor/prawn-core/reference_pdfs/utf8.pdf +0 -0
- data/vendor/prawn-core/reference_pdfs/win-ansi.pdf +0 -6172
- data/vendor/prawn-core/spec/annotations_spec.rb +0 -90
- data/vendor/prawn-core/spec/bounding_box_spec.rb +0 -185
- data/vendor/prawn-core/spec/destinations_spec.rb +0 -15
- data/vendor/prawn-core/spec/document_spec.rb +0 -231
- data/vendor/prawn-core/spec/font_spec.rb +0 -273
- data/vendor/prawn-core/spec/graphics_spec.rb +0 -209
- data/vendor/prawn-core/spec/images_spec.rb +0 -79
- data/vendor/prawn-core/spec/jpg_spec.rb +0 -25
- data/vendor/prawn-core/spec/measurement_units_spec.rb +0 -23
- data/vendor/prawn-core/spec/name_tree_spec.rb +0 -112
- data/vendor/prawn-core/spec/object_store_spec.rb +0 -42
- data/vendor/prawn-core/spec/pdf_object_spec.rb +0 -122
- data/vendor/prawn-core/spec/png_spec.rb +0 -236
- data/vendor/prawn-core/spec/reference_spec.rb +0 -82
- data/vendor/prawn-core/spec/snapshot_spec.rb +0 -115
- data/vendor/prawn-core/spec/span_spec.rb +0 -45
- data/vendor/prawn-core/spec/spec_helper.rb +0 -20
- data/vendor/prawn-core/spec/stamp_spec.rb +0 -98
- data/vendor/prawn-core/spec/stroke_styles_spec.rb +0 -152
- data/vendor/prawn-core/spec/text_box_spec.rb +0 -109
- data/vendor/prawn-core/spec/text_spec.rb +0 -185
- data/vendor/prawn-core/spec/transparency_spec.rb +0 -61
- data/vendor/prawn-core/vendor/pdf-inspector/README +0 -18
- data/vendor/prawn-core/vendor/pdf-inspector/lib/pdf/inspector.rb +0 -26
- data/vendor/prawn-core/vendor/pdf-inspector/lib/pdf/inspector/extgstate.rb +0 -18
- data/vendor/prawn-core/vendor/pdf-inspector/lib/pdf/inspector/graphics.rb +0 -119
- data/vendor/prawn-core/vendor/pdf-inspector/lib/pdf/inspector/page.rb +0 -25
- data/vendor/prawn-core/vendor/pdf-inspector/lib/pdf/inspector/text.rb +0 -31
- data/vendor/prawn-core/vendor/pdf-inspector/lib/pdf/inspector/xobject.rb +0 -19
- data/vendor/prawn-core/vendor/ttfunk/data/fonts/DejaVuSans.ttf +0 -0
- data/vendor/prawn-core/vendor/ttfunk/data/fonts/comicsans.ttf +0 -0
- data/vendor/prawn-core/vendor/ttfunk/example.rb +0 -45
- data/vendor/prawn-core/vendor/ttfunk/lib/ttfunk.rb +0 -102
- data/vendor/prawn-core/vendor/ttfunk/lib/ttfunk/directory.rb +0 -17
- data/vendor/prawn-core/vendor/ttfunk/lib/ttfunk/encoding/mac_roman.rb +0 -88
- data/vendor/prawn-core/vendor/ttfunk/lib/ttfunk/encoding/windows_1252.rb +0 -69
- data/vendor/prawn-core/vendor/ttfunk/lib/ttfunk/reader.rb +0 -44
- data/vendor/prawn-core/vendor/ttfunk/lib/ttfunk/resource_file.rb +0 -78
- data/vendor/prawn-core/vendor/ttfunk/lib/ttfunk/subset.rb +0 -18
- data/vendor/prawn-core/vendor/ttfunk/lib/ttfunk/subset/base.rb +0 -141
- data/vendor/prawn-core/vendor/ttfunk/lib/ttfunk/subset/mac_roman.rb +0 -46
- data/vendor/prawn-core/vendor/ttfunk/lib/ttfunk/subset/unicode.rb +0 -48
- data/vendor/prawn-core/vendor/ttfunk/lib/ttfunk/subset/unicode_8bit.rb +0 -63
- data/vendor/prawn-core/vendor/ttfunk/lib/ttfunk/subset/windows_1252.rb +0 -51
- data/vendor/prawn-core/vendor/ttfunk/lib/ttfunk/subset_collection.rb +0 -72
- data/vendor/prawn-core/vendor/ttfunk/lib/ttfunk/table.rb +0 -46
- data/vendor/prawn-core/vendor/ttfunk/lib/ttfunk/table/cmap.rb +0 -34
- data/vendor/prawn-core/vendor/ttfunk/lib/ttfunk/table/cmap/format00.rb +0 -54
- data/vendor/prawn-core/vendor/ttfunk/lib/ttfunk/table/cmap/format04.rb +0 -126
- data/vendor/prawn-core/vendor/ttfunk/lib/ttfunk/table/cmap/subtable.rb +0 -79
- data/vendor/prawn-core/vendor/ttfunk/lib/ttfunk/table/glyf.rb +0 -64
- data/vendor/prawn-core/vendor/ttfunk/lib/ttfunk/table/glyf/compound.rb +0 -81
- data/vendor/prawn-core/vendor/ttfunk/lib/ttfunk/table/glyf/simple.rb +0 -37
- data/vendor/prawn-core/vendor/ttfunk/lib/ttfunk/table/head.rb +0 -44
- data/vendor/prawn-core/vendor/ttfunk/lib/ttfunk/table/hhea.rb +0 -41
- data/vendor/prawn-core/vendor/ttfunk/lib/ttfunk/table/hmtx.rb +0 -47
- data/vendor/prawn-core/vendor/ttfunk/lib/ttfunk/table/kern.rb +0 -79
- data/vendor/prawn-core/vendor/ttfunk/lib/ttfunk/table/kern/format0.rb +0 -62
- data/vendor/prawn-core/vendor/ttfunk/lib/ttfunk/table/loca.rb +0 -43
- data/vendor/prawn-core/vendor/ttfunk/lib/ttfunk/table/maxp.rb +0 -40
- data/vendor/prawn-core/vendor/ttfunk/lib/ttfunk/table/name.rb +0 -119
- data/vendor/prawn-core/vendor/ttfunk/lib/ttfunk/table/os2.rb +0 -78
- data/vendor/prawn-core/vendor/ttfunk/lib/ttfunk/table/post.rb +0 -91
- data/vendor/prawn-core/vendor/ttfunk/lib/ttfunk/table/post/format10.rb +0 -43
- data/vendor/prawn-core/vendor/ttfunk/lib/ttfunk/table/post/format20.rb +0 -35
- data/vendor/prawn-core/vendor/ttfunk/lib/ttfunk/table/post/format25.rb +0 -23
- data/vendor/prawn-core/vendor/ttfunk/lib/ttfunk/table/post/format30.rb +0 -17
- data/vendor/prawn-core/vendor/ttfunk/lib/ttfunk/table/post/format40.rb +0 -17
- data/vendor/prawn-core/vendor/ttfunk/lib/ttfunk/table/simple.rb +0 -14
- data/vendor/prawn-core/www/index.html +0 -196
- data/vendor/prawn-core/www/media/bounding_boxes.pdf +0 -146
- data/vendor/prawn-core/www/media/bounding_boxes.png +0 -0
- data/vendor/prawn-core/www/media/bounding_boxes_out.png +0 -0
- data/vendor/prawn-core/www/media/fancy_table.pdf +0 -350
- data/vendor/prawn-core/www/media/image.pdf +0 -0
- data/vendor/prawn-core/www/media/images.png +0 -0
- data/vendor/prawn-core/www/media/prawn_logo.png +0 -0
- data/vendor/prawn-core/www/media/tables.png +0 -0
- data/vendor/prawn-core/www/media/utf8.pdf +0 -0
- data/vendor/prawn-core/www/media/utf8.png +0 -0
- data/vendor/prawn-core/www/prawn-Chinese.html +0 -113
- data/vendor/prawn-core/www/prawn.css +0 -86
- data/vendor/prawn-core/www/twilight.css +0 -266
@@ -1,35 +0,0 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
|
3
|
-
# join_style.rb : Implements stroke join styling
|
4
|
-
#
|
5
|
-
# Contributed by Daniel Nelson. October, 2009
|
6
|
-
#
|
7
|
-
# This is free software. Please see the LICENSE and COPYING files for details.
|
8
|
-
#
|
9
|
-
module Prawn
|
10
|
-
module Graphics
|
11
|
-
module JoinStyle
|
12
|
-
# Sets the join_style for stroked lines and curves
|
13
|
-
#
|
14
|
-
|
15
|
-
JOIN_STYLES = { :miter => 0, :round => 1, :bevel => 2 }
|
16
|
-
|
17
|
-
# style is one of :miter, :round, or :bevel
|
18
|
-
def join_style(style=nil)
|
19
|
-
return @join_style || :miter if style.nil?
|
20
|
-
|
21
|
-
@join_style = style
|
22
|
-
|
23
|
-
write_stroke_join_style
|
24
|
-
end
|
25
|
-
|
26
|
-
alias_method :join_style=, :join_style
|
27
|
-
|
28
|
-
private
|
29
|
-
|
30
|
-
def write_stroke_join_style
|
31
|
-
add_content "#{JOIN_STYLES[@join_style]} j"
|
32
|
-
end
|
33
|
-
end
|
34
|
-
end
|
35
|
-
end
|
@@ -1,56 +0,0 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
#
|
3
|
-
# transparency.rb : Implements transparency
|
4
|
-
#
|
5
|
-
# Copyright October 2009, Daniel Nelson. All Rights Reserved.
|
6
|
-
#
|
7
|
-
# This is free software. Please see the LICENSE and COPYING files for details.
|
8
|
-
#
|
9
|
-
|
10
|
-
module Prawn
|
11
|
-
module Graphics
|
12
|
-
module Transparency
|
13
|
-
|
14
|
-
def transparent(opacity, stroke_opacity=opacity, &block)
|
15
|
-
min_version(1.4)
|
16
|
-
|
17
|
-
key = "#{opacity}_#{stroke_opacity}"
|
18
|
-
|
19
|
-
if opacity_dictionary_registry[key]
|
20
|
-
opacity_dictionary = opacity_dictionary_registry[key][:obj]
|
21
|
-
opacity_dictionary_name = opacity_dictionary_registry[key][:name]
|
22
|
-
else
|
23
|
-
opacity_dictionary = ref!(:Type => :ExtGState,
|
24
|
-
:CA => stroke_opacity,
|
25
|
-
:ca => opacity
|
26
|
-
)
|
27
|
-
|
28
|
-
opacity_dictionary_name = "Tr#{next_opacity_dictionary_id}"
|
29
|
-
opacity_dictionary_registry[key] = { :name => opacity_dictionary_name,
|
30
|
-
:obj => opacity_dictionary }
|
31
|
-
end
|
32
|
-
|
33
|
-
page_ext_gstates.merge!(opacity_dictionary_name => opacity_dictionary)
|
34
|
-
|
35
|
-
# push a new graphics context onto the graphics context stack
|
36
|
-
add_content "q"
|
37
|
-
add_content "/#{opacity_dictionary_name} gs"
|
38
|
-
|
39
|
-
yield if block_given?
|
40
|
-
|
41
|
-
add_content "Q"
|
42
|
-
end
|
43
|
-
|
44
|
-
private
|
45
|
-
|
46
|
-
def opacity_dictionary_registry
|
47
|
-
@opacity_dictionary_registry ||= {}
|
48
|
-
end
|
49
|
-
|
50
|
-
def next_opacity_dictionary_id
|
51
|
-
opacity_dictionary_registry.length + 1
|
52
|
-
end
|
53
|
-
|
54
|
-
end
|
55
|
-
end
|
56
|
-
end
|
@@ -1,339 +0,0 @@
|
|
1
|
-
# encoding: ASCII-8BIT
|
2
|
-
# images.rb : Implements PDF image embedding
|
3
|
-
#
|
4
|
-
# Copyright April 2008, James Healy, Gregory Brown. All Rights Reserved.
|
5
|
-
#
|
6
|
-
# This is free software. Please see the LICENSE and COPYING files for details.
|
7
|
-
|
8
|
-
require 'digest/sha1'
|
9
|
-
|
10
|
-
module Prawn
|
11
|
-
|
12
|
-
module Images
|
13
|
-
|
14
|
-
# Add the image at filename to the current page. Currently only
|
15
|
-
# JPG and PNG files are supported.
|
16
|
-
#
|
17
|
-
# Arguments:
|
18
|
-
# <tt>file</tt>:: path to file or an object that responds to #read
|
19
|
-
#
|
20
|
-
# Options:
|
21
|
-
# <tt>:at</tt>:: an array [x,y] with the location of the top left corner of the image.
|
22
|
-
# <tt>:position</tt>:: One of (:left, :center, :right) or an x-offset
|
23
|
-
# <tt>:vposition</tt>:: One of (:top, :center, :center) or an y-offset
|
24
|
-
# <tt>:height</tt>:: the height of the image [actual height of the image]
|
25
|
-
# <tt>:width</tt>:: the width of the image [actual width of the image]
|
26
|
-
# <tt>:scale</tt>:: scale the dimensions of the image proportionally
|
27
|
-
# <tt>:fit</tt>:: scale the dimensions of the image proportionally to fit inside [width,height]
|
28
|
-
#
|
29
|
-
# Prawn::Document.generate("image2.pdf", :page_layout => :landscape) do
|
30
|
-
# pigs = "#{Prawn::BASEDIR}/data/images/pigs.jpg"
|
31
|
-
# image pigs, :at => [50,450], :width => 450
|
32
|
-
#
|
33
|
-
# dice = "#{Prawn::BASEDIR}/data/images/dice.png"
|
34
|
-
# image dice, :at => [50, 450], :scale => 0.75
|
35
|
-
# end
|
36
|
-
#
|
37
|
-
# If only one of :width / :height are provided, the image will be scaled
|
38
|
-
# proportionally. When both are provided, the image will be stretched to
|
39
|
-
# fit the dimensions without maintaining the aspect ratio.
|
40
|
-
#
|
41
|
-
#
|
42
|
-
# If :at is provided, the image will be place in the current page but
|
43
|
-
# the text position will not be changed.
|
44
|
-
#
|
45
|
-
#
|
46
|
-
# If instead of an explicit filename, an object with a read method is
|
47
|
-
# passed as +file+, you can embed images from IO objects and things
|
48
|
-
# that act like them (including Tempfiles and open-uri objects).
|
49
|
-
#
|
50
|
-
# require "open-uri"
|
51
|
-
#
|
52
|
-
# Prawn::Document.generate("remote_images.pdf") do
|
53
|
-
# image open("http://prawn.majesticseacreature.com/media/prawn_logo.png")
|
54
|
-
# end
|
55
|
-
#
|
56
|
-
# This method returns an image info object which can be used to check the
|
57
|
-
# dimensions of an image object if needed.
|
58
|
-
# (See also: Prawn::Images::PNG , Prawn::Images::JPG)
|
59
|
-
#
|
60
|
-
def image(file, options={})
|
61
|
-
Prawn.verify_options [:at, :position, :vposition, :height,
|
62
|
-
:width, :scale, :fit], options
|
63
|
-
|
64
|
-
if file.respond_to?(:read)
|
65
|
-
image_content = file.read
|
66
|
-
else
|
67
|
-
raise ArgumentError, "#{file} not found" unless File.file?(file)
|
68
|
-
image_content = File.binread(file)
|
69
|
-
end
|
70
|
-
|
71
|
-
image_sha1 = Digest::SHA1.hexdigest(image_content)
|
72
|
-
|
73
|
-
# register the fact that the current page uses images
|
74
|
-
proc_set :ImageC
|
75
|
-
|
76
|
-
# if this image has already been embedded, just reuse it
|
77
|
-
if image_registry[image_sha1]
|
78
|
-
info = image_registry[image_sha1][:info]
|
79
|
-
image_obj = image_registry[image_sha1][:obj]
|
80
|
-
else
|
81
|
-
# build the image object and embed the raw data
|
82
|
-
image_obj = case detect_image_format(image_content)
|
83
|
-
when :jpg then
|
84
|
-
info = Prawn::Images::JPG.new(image_content)
|
85
|
-
build_jpg_object(image_content, info)
|
86
|
-
when :png then
|
87
|
-
info = Prawn::Images::PNG.new(image_content)
|
88
|
-
build_png_object(image_content, info)
|
89
|
-
end
|
90
|
-
image_registry[image_sha1] = {:obj => image_obj, :info => info}
|
91
|
-
end
|
92
|
-
|
93
|
-
# find where the image will be placed and how big it will be
|
94
|
-
w,h = calc_image_dimensions(info, options)
|
95
|
-
|
96
|
-
if options[:at]
|
97
|
-
x,y = translate(options[:at])
|
98
|
-
else
|
99
|
-
x,y = image_position(w,h,options)
|
100
|
-
move_text_position h
|
101
|
-
end
|
102
|
-
|
103
|
-
# add a reference to the image object to the current page
|
104
|
-
# resource list and give it a label
|
105
|
-
label = "I#{next_image_id}"
|
106
|
-
page_xobjects.merge!( label => image_obj )
|
107
|
-
|
108
|
-
# add the image to the current page
|
109
|
-
instruct = "\nq\n%.3f 0 0 %.3f %.3f %.3f cm\n/%s Do\nQ"
|
110
|
-
add_content instruct % [ w, h, x, y - h, label ]
|
111
|
-
|
112
|
-
return info
|
113
|
-
end
|
114
|
-
|
115
|
-
private
|
116
|
-
|
117
|
-
def image_position(w,h,options)
|
118
|
-
options[:position] ||= :left
|
119
|
-
|
120
|
-
x = case options[:position]
|
121
|
-
when :left
|
122
|
-
bounds.absolute_left
|
123
|
-
when :center
|
124
|
-
bounds.absolute_left + (bounds.width - w) / 2.0
|
125
|
-
when :right
|
126
|
-
bounds.absolute_right - w
|
127
|
-
when Numeric
|
128
|
-
options[:position] + bounds.absolute_left
|
129
|
-
end
|
130
|
-
|
131
|
-
y = case options[:vposition]
|
132
|
-
when :top
|
133
|
-
bounds.absolute_top
|
134
|
-
when :center
|
135
|
-
bounds.absolute_top - (bounds.height - h) / 2.0
|
136
|
-
when :bottom
|
137
|
-
bounds.absolute_bottom + h
|
138
|
-
when Numeric
|
139
|
-
bounds.absolute_top - options[:vposition]
|
140
|
-
else
|
141
|
-
self.y
|
142
|
-
end
|
143
|
-
return [x,y]
|
144
|
-
end
|
145
|
-
|
146
|
-
def build_jpg_object(data, jpg)
|
147
|
-
color_space = case jpg.channels
|
148
|
-
when 1
|
149
|
-
:DeviceGray
|
150
|
-
when 3
|
151
|
-
:DeviceRGB
|
152
|
-
when 4
|
153
|
-
:DeviceCMYK
|
154
|
-
else
|
155
|
-
raise ArgumentError, 'JPG uses an unsupported number of channels'
|
156
|
-
end
|
157
|
-
obj = ref!(:Type => :XObject,
|
158
|
-
:Subtype => :Image,
|
159
|
-
:Filter => :DCTDecode,
|
160
|
-
:ColorSpace => color_space,
|
161
|
-
:BitsPerComponent => jpg.bits,
|
162
|
-
:Width => jpg.width,
|
163
|
-
:Height => jpg.height,
|
164
|
-
:Length => data.size )
|
165
|
-
|
166
|
-
# add extra decode params for CMYK images. By swapping the
|
167
|
-
# min and max values from the default, we invert the colours. See
|
168
|
-
# section 4.8.4 of the spec.
|
169
|
-
if color_space == :DeviceCMYK
|
170
|
-
obj.data[:Decode] = [ 1.0, 0.0, 1.0, 0.0, 1.0, 0.0, 1.0, 0.0 ]
|
171
|
-
end
|
172
|
-
|
173
|
-
obj << data
|
174
|
-
return obj
|
175
|
-
end
|
176
|
-
|
177
|
-
def build_png_object(data, png)
|
178
|
-
|
179
|
-
if png.compression_method != 0
|
180
|
-
raise Errors::UnsupportedImageType, 'PNG uses an unsupported compression method'
|
181
|
-
end
|
182
|
-
|
183
|
-
if png.filter_method != 0
|
184
|
-
raise Errors::UnsupportedImageType, 'PNG uses an unsupported filter method'
|
185
|
-
end
|
186
|
-
|
187
|
-
if png.interlace_method != 0
|
188
|
-
raise Errors::UnsupportedImageType, 'PNG uses unsupported interlace method'
|
189
|
-
end
|
190
|
-
|
191
|
-
# some PNG types store the colour and alpha channel data together,
|
192
|
-
# which the PDF spec doesn't like, so split it out.
|
193
|
-
png.split_alpha_channel!
|
194
|
-
|
195
|
-
case png.colors
|
196
|
-
when 1
|
197
|
-
color = :DeviceGray
|
198
|
-
when 3
|
199
|
-
color = :DeviceRGB
|
200
|
-
else
|
201
|
-
raise Errors::UnsupportedImageType, "PNG uses an unsupported number of colors (#{png.colors})"
|
202
|
-
end
|
203
|
-
|
204
|
-
# build the image dict
|
205
|
-
obj = ref!(:Type => :XObject,
|
206
|
-
:Subtype => :Image,
|
207
|
-
:Height => png.height,
|
208
|
-
:Width => png.width,
|
209
|
-
:BitsPerComponent => png.bits,
|
210
|
-
:Length => png.img_data.size,
|
211
|
-
:Filter => :FlateDecode
|
212
|
-
)
|
213
|
-
|
214
|
-
unless png.alpha_channel
|
215
|
-
obj.data[:DecodeParms] = {:Predictor => 15,
|
216
|
-
:Colors => png.colors,
|
217
|
-
:BitsPerComponent => png.bits,
|
218
|
-
:Columns => png.width}
|
219
|
-
end
|
220
|
-
|
221
|
-
# append the actual image data to the object as a stream
|
222
|
-
obj << png.img_data
|
223
|
-
|
224
|
-
# sort out the colours of the image
|
225
|
-
if png.palette.empty?
|
226
|
-
obj.data[:ColorSpace] = color
|
227
|
-
else
|
228
|
-
# embed the colour palette in the PDF as a object stream
|
229
|
-
palette_obj = ref!(:Length => png.palette.size)
|
230
|
-
palette_obj << png.palette
|
231
|
-
|
232
|
-
# build the color space array for the image
|
233
|
-
obj.data[:ColorSpace] = [:Indexed,
|
234
|
-
:DeviceRGB,
|
235
|
-
(png.palette.size / 3) -1,
|
236
|
-
palette_obj]
|
237
|
-
end
|
238
|
-
|
239
|
-
# *************************************
|
240
|
-
# add transparency data if necessary
|
241
|
-
# *************************************
|
242
|
-
|
243
|
-
# For PNG color types 0, 2 and 3, the transparency data is stored in
|
244
|
-
# a dedicated PNG chunk, and is exposed via the transparency attribute
|
245
|
-
# of the PNG class.
|
246
|
-
if png.transparency[:grayscale]
|
247
|
-
# Use Color Key Masking (spec section 4.8.5)
|
248
|
-
# - An array with N elements, where N is two times the number of color
|
249
|
-
# components.
|
250
|
-
val = png.transparency[:grayscale]
|
251
|
-
obj.data[:Mask] = [val, val]
|
252
|
-
elsif png.transparency[:rgb]
|
253
|
-
# Use Color Key Masking (spec section 4.8.5)
|
254
|
-
# - An array with N elements, where N is two times the number of color
|
255
|
-
# components.
|
256
|
-
rgb = png.transparency[:rgb]
|
257
|
-
obj.data[:Mask] = rgb.collect { |val| [val,val] }.flatten
|
258
|
-
elsif png.transparency[:indexed]
|
259
|
-
# TODO: broken. I was attempting to us Color Key Masking, but I think
|
260
|
-
# we need to construct an SMask i think. Maybe do it inside
|
261
|
-
# the PNG class, and store it in alpha_channel
|
262
|
-
#obj.data[:Mask] = png.transparency[:indexed]
|
263
|
-
end
|
264
|
-
|
265
|
-
# For PNG color types 4 and 6, the transparency data is stored as a alpha
|
266
|
-
# channel mixed in with the main image data. The PNG class seperates
|
267
|
-
# it out for us and makes it available via the alpha_channel attribute
|
268
|
-
if png.alpha_channel
|
269
|
-
smask_obj = ref!(:Type => :XObject,
|
270
|
-
:Subtype => :Image,
|
271
|
-
:Height => png.height,
|
272
|
-
:Width => png.width,
|
273
|
-
:BitsPerComponent => png.bits,
|
274
|
-
:Length => png.alpha_channel.size,
|
275
|
-
:Filter => :FlateDecode,
|
276
|
-
:ColorSpace => :DeviceGray,
|
277
|
-
:Decode => [0, 1]
|
278
|
-
)
|
279
|
-
smask_obj << png.alpha_channel
|
280
|
-
obj.data[:SMask] = smask_obj
|
281
|
-
end
|
282
|
-
|
283
|
-
return obj
|
284
|
-
end
|
285
|
-
|
286
|
-
def calc_image_dimensions(info, options)
|
287
|
-
w = options[:width] || info.width
|
288
|
-
h = options[:height] || info.height
|
289
|
-
|
290
|
-
if options[:width] && !options[:height]
|
291
|
-
wp = w / info.width.to_f
|
292
|
-
w = info.width * wp
|
293
|
-
h = info.height * wp
|
294
|
-
elsif options[:height] && !options[:width]
|
295
|
-
hp = h / info.height.to_f
|
296
|
-
w = info.width * hp
|
297
|
-
h = info.height * hp
|
298
|
-
elsif options[:scale]
|
299
|
-
w = info.width * options[:scale]
|
300
|
-
h = info.height * options[:scale]
|
301
|
-
elsif options[:fit]
|
302
|
-
bw, bh = options[:fit]
|
303
|
-
bp = bw / bh.to_f
|
304
|
-
ip = info.width / info.height.to_f
|
305
|
-
if ip > bp
|
306
|
-
w = bw
|
307
|
-
h = bw / ip
|
308
|
-
else
|
309
|
-
h = bh
|
310
|
-
w = bh * ip
|
311
|
-
end
|
312
|
-
end
|
313
|
-
info.scaled_width = w
|
314
|
-
info.scaled_height = h
|
315
|
-
[w,h]
|
316
|
-
end
|
317
|
-
|
318
|
-
def detect_image_format(content)
|
319
|
-
top = content[0,128]
|
320
|
-
|
321
|
-
if top[0, 3] == "\xff\xd8\xff"
|
322
|
-
return :jpg
|
323
|
-
elsif top[0, 8] == "\x89PNG\x0d\x0a\x1a\x0a"
|
324
|
-
return :png
|
325
|
-
else
|
326
|
-
raise Errors::UnsupportedImageType, "image file is an unrecognised format"
|
327
|
-
end
|
328
|
-
end
|
329
|
-
|
330
|
-
def image_registry
|
331
|
-
@image_registry ||= {}
|
332
|
-
end
|
333
|
-
|
334
|
-
def next_image_id
|
335
|
-
@image_counter ||= 0
|
336
|
-
@image_counter += 1
|
337
|
-
end
|
338
|
-
end
|
339
|
-
end
|
@@ -1,46 +0,0 @@
|
|
1
|
-
# encoding: ASCII-8BIT
|
2
|
-
|
3
|
-
# jpg.rb : Extracts the data from a JPG that is needed for embedding
|
4
|
-
#
|
5
|
-
# Copyright April 2008, James Healy. All Rights Reserved.
|
6
|
-
#
|
7
|
-
# This is free software. Please see the LICENSE and COPYING files for details.
|
8
|
-
|
9
|
-
require 'stringio'
|
10
|
-
|
11
|
-
module Prawn
|
12
|
-
module Images
|
13
|
-
# A convenience class that wraps the logic for extracting the parts
|
14
|
-
# of a JPG image that we need to embed them in a PDF
|
15
|
-
#
|
16
|
-
class JPG
|
17
|
-
attr_reader :width, :height, :bits, :channels
|
18
|
-
attr_accessor :scaled_width, :scaled_height
|
19
|
-
|
20
|
-
JPEG_SOF_BLOCKS = %W(\xc0 \xc1 \xc2 \xc3 \xc5 \xc6 \xc7 \xc9 \xca \xcb \xcd \xce \xcf)
|
21
|
-
JPEG_APP_BLOCKS = %W(\xe0 \xe1 \xe2 \xe3 \xe4 \xe5 \xe6 \xe7 \xe8 \xe9 \xea \xeb \xec \xed \xee \xef)
|
22
|
-
|
23
|
-
# Process a new JPG image
|
24
|
-
#
|
25
|
-
# <tt>:data</tt>:: A string containing a full PNG file
|
26
|
-
#
|
27
|
-
def initialize(data)
|
28
|
-
data = StringIO.new(data.dup)
|
29
|
-
|
30
|
-
c_marker = "\xff" # Section marker.
|
31
|
-
data.read(2) # Skip the first two bytes of JPEG identifier.
|
32
|
-
loop do
|
33
|
-
marker, code, length = data.read(4).unpack('aan')
|
34
|
-
raise "JPEG marker not found!" if marker != c_marker
|
35
|
-
|
36
|
-
if JPEG_SOF_BLOCKS.include?(code)
|
37
|
-
@bits, @height, @width, @channels = data.read(6).unpack("CnnC")
|
38
|
-
break
|
39
|
-
end
|
40
|
-
|
41
|
-
buffer = data.read(length - 2)
|
42
|
-
end
|
43
|
-
end
|
44
|
-
end
|
45
|
-
end
|
46
|
-
end
|