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,71 +0,0 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
|
3
|
-
# snapshot.rb : Implements transactional rendering for Prawn
|
4
|
-
#
|
5
|
-
# Copyright August 2008, Brad Ediger. All Rights Reserved.
|
6
|
-
#
|
7
|
-
# This is free software. Please see the LICENSE and COPYING files for details.
|
8
|
-
require 'delegate'
|
9
|
-
|
10
|
-
module Prawn
|
11
|
-
class Document
|
12
|
-
module Snapshot
|
13
|
-
|
14
|
-
RollbackTransaction = Class.new(StandardError)
|
15
|
-
|
16
|
-
# Call this within a +transaction+ block to roll back the transaction and
|
17
|
-
# prevent any of its data from being rendered. You must reset the
|
18
|
-
# y-position yourself if you have performed any drawing operations that
|
19
|
-
# modify it.
|
20
|
-
def rollback
|
21
|
-
raise RollbackTransaction
|
22
|
-
end
|
23
|
-
|
24
|
-
# Run a block of drawing operations, to be completed atomically. If
|
25
|
-
# +rollback+ is called or a RollbackTransaction exception is raised
|
26
|
-
# inside the block, all actions taken inside the block will be rolled
|
27
|
-
# back (with the exception of y-position, which you must restore
|
28
|
-
# yourself).
|
29
|
-
#
|
30
|
-
# Returns true on success, or false if the transaction was rolled back.
|
31
|
-
def transaction
|
32
|
-
snap = take_snapshot
|
33
|
-
yield
|
34
|
-
true
|
35
|
-
rescue RollbackTransaction
|
36
|
-
restore_snapshot(snap)
|
37
|
-
false
|
38
|
-
end
|
39
|
-
|
40
|
-
private
|
41
|
-
|
42
|
-
# Takes a current snapshot of the document's state, sufficient to
|
43
|
-
# reconstruct it after it was amended.
|
44
|
-
def take_snapshot
|
45
|
-
{:page_content => Marshal.load(Marshal.dump(page_content)),
|
46
|
-
:current_page => Marshal.load(Marshal.dump(current_page)),
|
47
|
-
:page_kids => @store.pages.data[:Kids].map{|kid| kid.identifier},
|
48
|
-
:dests => Marshal.load(Marshal.dump(names.data[:Dests]))}
|
49
|
-
end
|
50
|
-
|
51
|
-
# Rolls the page state back to the state of the given snapshot.
|
52
|
-
def restore_snapshot(shot)
|
53
|
-
# Because these objects are referenced by identifier from the Pages
|
54
|
-
# dictionary, we can't just restore them over the current refs in
|
55
|
-
# page_content and current_page. We have to restore them over the old
|
56
|
-
# ones.
|
57
|
-
@page_content = shot[:page_content].identifier
|
58
|
-
page_content.replace shot[:page_content]
|
59
|
-
|
60
|
-
@current_page = shot[:current_page].identifier
|
61
|
-
current_page.replace shot[:current_page]
|
62
|
-
|
63
|
-
@store.pages.data[:Kids] = shot[:page_kids].map{|id| @store[id]}
|
64
|
-
@store.pages.data[:Count] = shot[:page_kids].size
|
65
|
-
|
66
|
-
names.data[:Dests] = shot[:dests]
|
67
|
-
end
|
68
|
-
|
69
|
-
end
|
70
|
-
end
|
71
|
-
end
|
@@ -1,55 +0,0 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
|
3
|
-
# span.rb : Implements text columns
|
4
|
-
#
|
5
|
-
# Copyright September 2008, Gregory Brown. All Rights Reserved.
|
6
|
-
#
|
7
|
-
# This is free software. Please see the LICENSE and COPYING files for details.
|
8
|
-
|
9
|
-
module Prawn
|
10
|
-
class Document
|
11
|
-
# A span is a special purpose bounding box that allows a column of
|
12
|
-
# elements to be positioned relative to the margin_box.
|
13
|
-
#
|
14
|
-
# Arguments:
|
15
|
-
# +width+:: The width of the column in PDF points
|
16
|
-
#
|
17
|
-
# Options:
|
18
|
-
# <tt>:position</tt>:: One of :left, :center, :right or an x offset
|
19
|
-
#
|
20
|
-
# This method is typically used for flowing a column of text from one
|
21
|
-
# page to the next.
|
22
|
-
#
|
23
|
-
# span(350, :position => :center) do
|
24
|
-
# text "Here's some centered text in a 350 point column. " * 100
|
25
|
-
# end
|
26
|
-
#
|
27
|
-
def span(width, options={})
|
28
|
-
Prawn.verify_options [:position], options
|
29
|
-
original_position = self.y
|
30
|
-
|
31
|
-
# FIXME: How many effing times do I want to write this same code?
|
32
|
-
left_boundary = case(options[:position] || :left)
|
33
|
-
when :left
|
34
|
-
margin_box.absolute_left
|
35
|
-
when :center
|
36
|
-
margin_box.absolute_left + margin_box.width / 2.0 - width /2.0
|
37
|
-
when :right
|
38
|
-
margin_box.absolute_right - width
|
39
|
-
when Numeric
|
40
|
-
margin_box.absolute_left + options[:position]
|
41
|
-
else
|
42
|
-
raise ArgumentError, "Invalid option for :position"
|
43
|
-
end
|
44
|
-
|
45
|
-
# we need to bust out of whatever nested bounding boxes we're in.
|
46
|
-
canvas do
|
47
|
-
bounding_box([left_boundary,
|
48
|
-
margin_box.absolute_top], :width => width) do
|
49
|
-
self.y = original_position
|
50
|
-
yield
|
51
|
-
end
|
52
|
-
end
|
53
|
-
end
|
54
|
-
end
|
55
|
-
end
|
@@ -1,184 +0,0 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
|
3
|
-
# text.rb : Implements PDF text primitives
|
4
|
-
#
|
5
|
-
# Copyright May 2008, Gregory Brown. All Rights Reserved.
|
6
|
-
#
|
7
|
-
# This is free software. Please see the LICENSE and COPYING files for details.
|
8
|
-
require "zlib"
|
9
|
-
require "prawn/document/text/box"
|
10
|
-
require "prawn/document/text/wrapping"
|
11
|
-
|
12
|
-
module Prawn
|
13
|
-
class Document
|
14
|
-
module Text
|
15
|
-
include Wrapping
|
16
|
-
|
17
|
-
# Draws text on the page. If a point is specified via the +:at+
|
18
|
-
# option the text will begin exactly at that point, and the string is
|
19
|
-
# assumed to be pre-formatted to properly fit the page.
|
20
|
-
#
|
21
|
-
# pdf.text "Hello World", :at => [100,100]
|
22
|
-
# pdf.text "Goodbye World", :at => [50,50], :size => 16
|
23
|
-
#
|
24
|
-
# When +:at+ is not specified, Prawn attempts to wrap the text to
|
25
|
-
# fit within your current bounding box (or margin_box if no bounding box
|
26
|
-
# is being used ). Text will flow onto the next page when it reaches
|
27
|
-
# the bottom of the bounding box. Text wrap in Prawn does not re-flow
|
28
|
-
# linebreaks, so if you want fully automated text wrapping, be sure to
|
29
|
-
# remove newlines before attempting to draw your string.
|
30
|
-
#
|
31
|
-
# pdf.text "Will be wrapped when it hits the edge of your bounding box"
|
32
|
-
# pdf.text "This will be centered", :align => :center
|
33
|
-
# pdf.text "This will be right aligned", :align => :right
|
34
|
-
#
|
35
|
-
# Wrapping is done by splitting words by spaces by default. If your text
|
36
|
-
# does not contain spaces, you can wrap based on characters instead:
|
37
|
-
#
|
38
|
-
# pdf.text "This will be wrapped by character", :wrap => :character
|
39
|
-
#
|
40
|
-
# If your font contains kerning pairs data that Prawn can parse, the
|
41
|
-
# text will be kerned by default. You can disable this feature by passing
|
42
|
-
# <tt>:kerning => false</tt>.
|
43
|
-
#
|
44
|
-
# === Text Positioning Details:
|
45
|
-
#
|
46
|
-
# When using the :at parameter, Prawn will position your text by the
|
47
|
-
# left-most edge of its baseline, and flow along a single line. (This
|
48
|
-
# means that :align will not work)
|
49
|
-
#
|
50
|
-
#
|
51
|
-
# Otherwise, the text is positioned at font.ascender below the baseline,
|
52
|
-
# making it easy to use this method within bounding boxes and spans.
|
53
|
-
#
|
54
|
-
# == Rotation
|
55
|
-
#
|
56
|
-
# Text can be rotated before it is placed on the canvas by specifying the
|
57
|
-
# +:rotate+ option with a given angle. Rotation occurs counter-clockwise.
|
58
|
-
#
|
59
|
-
# == Encoding
|
60
|
-
#
|
61
|
-
# Note that strings passed to this function should be encoded as UTF-8.
|
62
|
-
# If you get unexpected characters appearing in your rendered document,
|
63
|
-
# check this.
|
64
|
-
#
|
65
|
-
# If the current font is a built-in one, although the string must be
|
66
|
-
# encoded as UTF-8, only characters that are available in WinAnsi
|
67
|
-
# are allowed.
|
68
|
-
#
|
69
|
-
# If an empty box is rendered to your PDF instead of the character you
|
70
|
-
# wanted it usually means the current font doesn't include that character.
|
71
|
-
#
|
72
|
-
def text(text,options={})
|
73
|
-
# we'll be messing with the strings encoding, don't change the users
|
74
|
-
# original string
|
75
|
-
text = text.to_s.dup
|
76
|
-
|
77
|
-
save_font do
|
78
|
-
options = @text_options.merge(options)
|
79
|
-
process_text_options(options)
|
80
|
-
|
81
|
-
font.normalize_encoding!(text) unless @skip_encoding
|
82
|
-
|
83
|
-
if options[:at]
|
84
|
-
|
85
|
-
if options[:align]
|
86
|
-
raise ArgumentError, "The :align option does not work with :at"
|
87
|
-
end
|
88
|
-
|
89
|
-
x,y = translate(options[:at])
|
90
|
-
font_size(options[:size]) { add_text_content(text,x,y,options) }
|
91
|
-
else
|
92
|
-
if options[:rotate]
|
93
|
-
raise ArgumentError, "Rotated text may only be used with :at"
|
94
|
-
end
|
95
|
-
wrapped_text(text,options)
|
96
|
-
end
|
97
|
-
end
|
98
|
-
end
|
99
|
-
|
100
|
-
private
|
101
|
-
|
102
|
-
def process_text_options(options)
|
103
|
-
Prawn.verify_options [:style, :kerning, :size, :at, :wrap,
|
104
|
-
:leading, :align, :rotate, :final_gap ], options
|
105
|
-
|
106
|
-
if options[:style]
|
107
|
-
raise "Bad font family" unless font.family
|
108
|
-
font(font.family,:style => options[:style])
|
109
|
-
end
|
110
|
-
|
111
|
-
unless options.key?(:kerning)
|
112
|
-
options[:kerning] = font.has_kerning_data?
|
113
|
-
end
|
114
|
-
|
115
|
-
options[:size] ||= font_size
|
116
|
-
end
|
117
|
-
|
118
|
-
def move_text_position(dy)
|
119
|
-
bottom = @bounding_box.stretchy? ? @margin_box.absolute_bottom :
|
120
|
-
@bounding_box.absolute_bottom
|
121
|
-
|
122
|
-
@bounding_box.move_past_bottom if (y - dy) < bottom
|
123
|
-
|
124
|
-
self.y -= dy
|
125
|
-
end
|
126
|
-
|
127
|
-
def wrapped_text(text,options)
|
128
|
-
options[:align] ||= :left
|
129
|
-
|
130
|
-
font_size(options[:size]) do
|
131
|
-
text = naive_wrap(text, bounds.width, font_size,
|
132
|
-
:kerning => options[:kerning], :mode => options[:wrap])
|
133
|
-
|
134
|
-
lines = text.lines.to_a
|
135
|
-
last_gap_before = options.fetch(:final_gap, true) ? lines.length : lines.length-1
|
136
|
-
|
137
|
-
lines.each_with_index do |e,i|
|
138
|
-
move_text_position(font.ascender)
|
139
|
-
|
140
|
-
line_width = width_of(e, :kerning => options[:kerning])
|
141
|
-
case(options[:align])
|
142
|
-
when :left
|
143
|
-
x = @bounding_box.left_side
|
144
|
-
when :center
|
145
|
-
x = @bounding_box.left_side +
|
146
|
-
(@bounding_box.width - line_width) / 2.0
|
147
|
-
when :right
|
148
|
-
x = @bounding_box.right_side - line_width
|
149
|
-
end
|
150
|
-
|
151
|
-
add_text_content(e,x,y,options)
|
152
|
-
|
153
|
-
if i < last_gap_before
|
154
|
-
move_text_position(font.line_gap - font.descender)
|
155
|
-
move_text_position(options[:leading]) if options[:leading]
|
156
|
-
end
|
157
|
-
end
|
158
|
-
end
|
159
|
-
end
|
160
|
-
|
161
|
-
def add_text_content(text, x, y, options)
|
162
|
-
chunks = font.encode_text(text,options)
|
163
|
-
|
164
|
-
add_content "\nBT"
|
165
|
-
if options[:rotate]
|
166
|
-
rad = options[:rotate].to_i * Math::PI / 180
|
167
|
-
arr = [ Math.cos(rad), Math.sin(rad), -Math.sin(rad), Math.cos(rad), x, y ]
|
168
|
-
add_content "%.3f %.3f %.3f %.3f %.3f %.3f Tm" % arr
|
169
|
-
else
|
170
|
-
add_content "#{x} #{y} Td"
|
171
|
-
end
|
172
|
-
|
173
|
-
chunks.each do |(subset, string)|
|
174
|
-
font.add_to_current_page(subset)
|
175
|
-
add_content "/#{font.identifier_for(subset)} #{font_size} Tf"
|
176
|
-
|
177
|
-
operation = options[:kerning] && string.is_a?(Array) ? "TJ" : "Tj"
|
178
|
-
add_content Prawn::PdfObject(string, true) << " " << operation
|
179
|
-
end
|
180
|
-
add_content "ET\n"
|
181
|
-
end
|
182
|
-
end
|
183
|
-
end
|
184
|
-
end
|
@@ -1,90 +0,0 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
|
3
|
-
# text/box.rb : Implements simple text boxes
|
4
|
-
#
|
5
|
-
# Copyright September 2008, Gregory Brown. All Rights Reserved.
|
6
|
-
#
|
7
|
-
# This is free software. Please see the LICENSE and COPYING files for details.
|
8
|
-
|
9
|
-
module Prawn
|
10
|
-
class Document
|
11
|
-
|
12
|
-
# Defines an invisible rectangle which you can flow text in. When the
|
13
|
-
# text overflows the box, you can either display :ellipses, :truncate
|
14
|
-
# the text, or allow it to overflow the bottom boundary with :expand.
|
15
|
-
#
|
16
|
-
# text_box "Oh hai text box. " * 200,
|
17
|
-
# :width => 300, :height => font.height * 5,
|
18
|
-
# :overflow => :ellipses,
|
19
|
-
# :at => [100,bounds.top]
|
20
|
-
#
|
21
|
-
def text_box(text,options)
|
22
|
-
Text::Box.new(text, options.merge(:for => self)).render
|
23
|
-
end
|
24
|
-
|
25
|
-
module Text
|
26
|
-
# FIXME: requires documentation
|
27
|
-
#
|
28
|
-
class Box #:nodoc:
|
29
|
-
def initialize(text,options={})
|
30
|
-
@document = options[:for]
|
31
|
-
@text = text
|
32
|
-
@at = options[:at] || [0, @document.y - @document.bounds.absolute_bottom]
|
33
|
-
@width = options[:width] || @document.bounds.width
|
34
|
-
@height = options[:height]
|
35
|
-
@overflow = options[:overflow] || :truncate
|
36
|
-
end
|
37
|
-
|
38
|
-
attr_reader :text, :width, :height, :overflow
|
39
|
-
|
40
|
-
def render
|
41
|
-
x,y = @at
|
42
|
-
|
43
|
-
if @overflow == :expand
|
44
|
-
@text = naive_wrap_text
|
45
|
-
else
|
46
|
-
original_y = @document.y
|
47
|
-
fit_text_to_box
|
48
|
-
end
|
49
|
-
|
50
|
-
@document.bounding_box([x,@document.bounds.top],
|
51
|
-
:width => @width, :height => @document.bounds.height) do
|
52
|
-
@document.y = @document.bounds.absolute_bottom + y
|
53
|
-
@document.text @text
|
54
|
-
end
|
55
|
-
|
56
|
-
unless @overflow == :expand
|
57
|
-
@document.y = y + @document.bounds.absolute_bottom - @height
|
58
|
-
end
|
59
|
-
|
60
|
-
@excess_text
|
61
|
-
end
|
62
|
-
|
63
|
-
private
|
64
|
-
|
65
|
-
def fit_text_to_box
|
66
|
-
text = naive_wrap_text
|
67
|
-
|
68
|
-
max_lines = (@height / @document.font.height).floor
|
69
|
-
|
70
|
-
lines = text.lines.to_a
|
71
|
-
|
72
|
-
if lines.length > max_lines
|
73
|
-
@text = lines[0...max_lines].join
|
74
|
-
case(@overflow)
|
75
|
-
when :ellipses
|
76
|
-
@text[-3..-1] = "..." if @text.size > 3
|
77
|
-
end
|
78
|
-
@excess_text = @document.naive_unwrap(lines[max_lines..-1].join)
|
79
|
-
else
|
80
|
-
@excess_text = ""
|
81
|
-
end
|
82
|
-
end
|
83
|
-
|
84
|
-
def naive_wrap_text
|
85
|
-
@document.naive_wrap(@text, @width, @document.font_size)
|
86
|
-
end
|
87
|
-
end
|
88
|
-
end
|
89
|
-
end
|
90
|
-
end
|
@@ -1,62 +0,0 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
|
3
|
-
# wrapping.rb : Implementation of naive text wrap
|
4
|
-
#
|
5
|
-
# Copyright May 2008, Michael Daines. All Rights Reserved.
|
6
|
-
#
|
7
|
-
# This is free software. Please see the LICENSE and COPYING files for details.
|
8
|
-
module Prawn
|
9
|
-
class Document
|
10
|
-
module Text
|
11
|
-
module Wrapping #:nodoc:
|
12
|
-
ruby_18 { $KCODE="U" }
|
13
|
-
|
14
|
-
# Gets height of text in PDF points at current font size.
|
15
|
-
# Text +:line_width+ must be specified in PDF points.
|
16
|
-
#
|
17
|
-
# If using an AFM, string *must* be encoded as WinAnsi
|
18
|
-
# (Use normalize_encoding to convert)
|
19
|
-
#
|
20
|
-
def height_of(string, line_width, size=font_size)
|
21
|
-
string = naive_wrap(string, line_width, size)
|
22
|
-
string.lines.to_a.length * font.height_at(size)
|
23
|
-
end
|
24
|
-
|
25
|
-
# TODO: Replace with TeX optimal algorithm
|
26
|
-
def naive_wrap(string, line_width, font_size, options = {})
|
27
|
-
scan_pattern = options[:mode] == :character ? /./ : /\S+|\s+/
|
28
|
-
|
29
|
-
output = ""
|
30
|
-
string.lines.each do |line|
|
31
|
-
accumulated_width = 0
|
32
|
-
segments = line.scan(scan_pattern)
|
33
|
-
|
34
|
-
segments.each do |segment|
|
35
|
-
segment_width = width_of(segment, :size => font_size, :kerning => options[:kerning])
|
36
|
-
|
37
|
-
if (accumulated_width + segment_width).round > line_width.round
|
38
|
-
output = "#{output.sub(/[ \t]*\n?(\n*)\z/, "\n\\1")}"
|
39
|
-
|
40
|
-
if segment =~ /\s/
|
41
|
-
accumulated_width = 0
|
42
|
-
else
|
43
|
-
output << segment
|
44
|
-
accumulated_width = segment_width
|
45
|
-
end
|
46
|
-
else
|
47
|
-
output << segment
|
48
|
-
accumulated_width += segment_width
|
49
|
-
end
|
50
|
-
end
|
51
|
-
end
|
52
|
-
|
53
|
-
output
|
54
|
-
end
|
55
|
-
|
56
|
-
def naive_unwrap(string)
|
57
|
-
string.gsub(/(\S)\n/, '\1 ')
|
58
|
-
end
|
59
|
-
end
|
60
|
-
end
|
61
|
-
end
|
62
|
-
end
|