Browse Source

save_pdf: right-to-left support

# Conflicts:
#	CHANGELOG.md
dev
Damien Salvador 8 years ago committed by Andy Meneely
parent
commit
44b899181a
  1. 1
      CHANGELOG.md
  2. 5
      docs/dsl/save_pdf.rst
  3. 17
      lib/squib/graphics/save_pdf.rb
  4. 4
      samples/saves/_save_pdf.rb
  5. BIN
      samples/saves/save_pdf-crops-rtl_expected.pdf
  6. 443
      spec/data/samples/saves/_save_pdf.rb.txt

1
CHANGELOG.md

@ -9,6 +9,7 @@ Features:
* `save_sheet` method now supports `rtl` or "right-to-left", for easier duplex printing of backs (#204, #208) by @sparr
* `yaml` method for reading in data, much like `csv` and `xlsx` by @blinks
* Layouts now support `*=` and `/=` operators in addition to `+=` and `-=` (#200).
* `save_pdf` method also supports `rtl` by @vador
Compatibility:
* DPI is correctly respected with font sizes now. To convert to Squib v0.14+, divide your old font sizes by 3. By @felixleong

5
docs/dsl/save_pdf.rst

@ -90,5 +90,10 @@ crop_stroke_width
Width of the crop mark lines. Has no effect if ``crop_marks`` is ``false``.
rtl
default ``false``
whether to render columns right to left, used for duplex printing of card backs
Examples
--------

17
lib/squib/graphics/save_pdf.rb

@ -13,9 +13,12 @@ module Squib
def render_pdf(range, sheet)
cc = init_cc(sheet)
cc.scale(POINTS_PER_IN / @deck.dpi, POINTS_PER_IN / @deck.dpi) # for bug #62
x, y = sheet.margin, sheet.margin
card_width = @deck.width - 2 * sheet.trim
card_height = @deck.height - 2 * sheet.trim
start_x_pos = sheet.rtl ? sheet.width - sheet.margin - card_width - 2 * sheet.trim : sheet.margin
x_increment = (card_width + sheet.gap) * (sheet.rtl ? -1 : 1)
y = sheet.margin
x = start_x_pos
track_progress(range, sheet) do |bar|
range.each do |i|
card = @deck.cards[i]
@ -38,14 +41,16 @@ module Squib
bar.increment
cc.reset_clip
cc.translate(-x, -y)
draw_crop_marks(cc, x, y, sheet) if sheet.crop_marks
x += card.width + sheet.gap - 2 * sheet.trim
if x > (sheet.width - card_width - sheet.margin)
x = sheet.margin
draw_crop_marks(cc, x, y, sheet)
x += x_increment
if (x > (sheet.width - card_width - sheet.margin)) or (x < sheet.margin)
x = start_x_pos
y += card.height + sheet.gap - 2 * sheet.trim
if y > (sheet.height - card_height - sheet.margin)
cc.show_page # next page
x, y = sheet.margin, sheet.margin
y = sheet.margin
x = start_x_pos
end
end
end

4
samples/saves/_save_pdf.rb

@ -22,4 +22,8 @@ Squib::Deck.new(cards: 8) do
crop_stroke_dash: '5 5', crop_stroke_color: :red, crop_stroke_width: 4.0,
crop_margin_left: '0.3in', crop_margin_right: '0.45in',
crop_margin_top: '0.4in', crop_margin_bottom: '0.85in'
# Right to left printing for duplex
save_pdf file: 'save_pdf-crops-rtl.pdf', crop_marks: true, rtl: true
end

BIN
samples/saves/save_pdf-crops-rtl_expected.pdf

Binary file not shown.

443
spec/data/samples/saves/_save_pdf.rb.txt

@ -1842,6 +1842,449 @@ cairo: set_dash([[5.0, 5.0]])
cairo: set_line_width([4.0])
cairo: stroke([])
surface: finish([])
cairo: scale([0.24, 0.24])
cairo: translate([2400, 75])
cairo: rectangle([0, 0, 825, 1125])
cairo: clip([])
cairo: set_source([MockDouble, 0, 0])
cairo: paint([])
cairo: reset_clip([])
cairo: translate([-2400, -75])
cairo: move_to([2400, 0])
cairo: line_to([2400, 74])
cairo: set_source_color([:black])
cairo: set_dash([[]])
cairo: set_line_width([1.5])
cairo: stroke([])
cairo: move_to([3225, 0])
cairo: line_to([3225, 74])
cairo: set_source_color([:black])
cairo: set_dash([[]])
cairo: set_line_width([1.5])
cairo: stroke([])
cairo: move_to([2400, 2550])
cairo: line_to([2400, 2476])
cairo: set_source_color([:black])
cairo: set_dash([[]])
cairo: set_line_width([1.5])
cairo: stroke([])
cairo: move_to([3225, 2550])
cairo: line_to([3225, 2476])
cairo: set_source_color([:black])
cairo: set_dash([[]])
cairo: set_line_width([1.5])
cairo: stroke([])
cairo: move_to([0, 75])
cairo: line_to([74, 75])
cairo: set_source_color([:black])
cairo: set_dash([[]])
cairo: set_line_width([1.5])
cairo: stroke([])
cairo: move_to([3300, 75])
cairo: line_to([3226, 75])
cairo: set_source_color([:black])
cairo: set_dash([[]])
cairo: set_line_width([1.5])
cairo: stroke([])
cairo: move_to([0, 1200])
cairo: line_to([74, 1200])
cairo: set_source_color([:black])
cairo: set_dash([[]])
cairo: set_line_width([1.5])
cairo: stroke([])
cairo: move_to([3300, 1200])
cairo: line_to([3226, 1200])
cairo: set_source_color([:black])
cairo: set_dash([[]])
cairo: set_line_width([1.5])
cairo: stroke([])
cairo: translate([1575, 75])
cairo: rectangle([0, 0, 825, 1125])
cairo: clip([])
cairo: set_source([MockDouble, 0, 0])
cairo: paint([])
cairo: reset_clip([])
cairo: translate([-1575, -75])
cairo: move_to([1575, 0])
cairo: line_to([1575, 74])
cairo: set_source_color([:black])
cairo: set_dash([[]])
cairo: set_line_width([1.5])
cairo: stroke([])
cairo: move_to([2400, 0])
cairo: line_to([2400, 74])
cairo: set_source_color([:black])
cairo: set_dash([[]])
cairo: set_line_width([1.5])
cairo: stroke([])
cairo: move_to([1575, 2550])
cairo: line_to([1575, 2476])
cairo: set_source_color([:black])
cairo: set_dash([[]])
cairo: set_line_width([1.5])
cairo: stroke([])
cairo: move_to([2400, 2550])
cairo: line_to([2400, 2476])
cairo: set_source_color([:black])
cairo: set_dash([[]])
cairo: set_line_width([1.5])
cairo: stroke([])
cairo: move_to([0, 75])
cairo: line_to([74, 75])
cairo: set_source_color([:black])
cairo: set_dash([[]])
cairo: set_line_width([1.5])
cairo: stroke([])
cairo: move_to([3300, 75])
cairo: line_to([3226, 75])
cairo: set_source_color([:black])
cairo: set_dash([[]])
cairo: set_line_width([1.5])
cairo: stroke([])
cairo: move_to([0, 1200])
cairo: line_to([74, 1200])
cairo: set_source_color([:black])
cairo: set_dash([[]])
cairo: set_line_width([1.5])
cairo: stroke([])
cairo: move_to([3300, 1200])
cairo: line_to([3226, 1200])
cairo: set_source_color([:black])
cairo: set_dash([[]])
cairo: set_line_width([1.5])
cairo: stroke([])
cairo: translate([750, 75])
cairo: rectangle([0, 0, 825, 1125])
cairo: clip([])
cairo: set_source([MockDouble, 0, 0])
cairo: paint([])
cairo: reset_clip([])
cairo: translate([-750, -75])
cairo: move_to([750, 0])
cairo: line_to([750, 74])
cairo: set_source_color([:black])
cairo: set_dash([[]])
cairo: set_line_width([1.5])
cairo: stroke([])
cairo: move_to([1575, 0])
cairo: line_to([1575, 74])
cairo: set_source_color([:black])
cairo: set_dash([[]])
cairo: set_line_width([1.5])
cairo: stroke([])
cairo: move_to([750, 2550])
cairo: line_to([750, 2476])
cairo: set_source_color([:black])
cairo: set_dash([[]])
cairo: set_line_width([1.5])
cairo: stroke([])
cairo: move_to([1575, 2550])
cairo: line_to([1575, 2476])
cairo: set_source_color([:black])
cairo: set_dash([[]])
cairo: set_line_width([1.5])
cairo: stroke([])
cairo: move_to([0, 75])
cairo: line_to([74, 75])
cairo: set_source_color([:black])
cairo: set_dash([[]])
cairo: set_line_width([1.5])
cairo: stroke([])
cairo: move_to([3300, 75])
cairo: line_to([3226, 75])
cairo: set_source_color([:black])
cairo: set_dash([[]])
cairo: set_line_width([1.5])
cairo: stroke([])
cairo: move_to([0, 1200])
cairo: line_to([74, 1200])
cairo: set_source_color([:black])
cairo: set_dash([[]])
cairo: set_line_width([1.5])
cairo: stroke([])
cairo: move_to([3300, 1200])
cairo: line_to([3226, 1200])
cairo: set_source_color([:black])
cairo: set_dash([[]])
cairo: set_line_width([1.5])
cairo: stroke([])
cairo: translate([2400, 1200])
cairo: rectangle([0, 0, 825, 1125])
cairo: clip([])
cairo: set_source([MockDouble, 0, 0])
cairo: paint([])
cairo: reset_clip([])
cairo: translate([-2400, -1200])
cairo: move_to([2400, 0])
cairo: line_to([2400, 74])
cairo: set_source_color([:black])
cairo: set_dash([[]])
cairo: set_line_width([1.5])
cairo: stroke([])
cairo: move_to([3225, 0])
cairo: line_to([3225, 74])
cairo: set_source_color([:black])
cairo: set_dash([[]])
cairo: set_line_width([1.5])
cairo: stroke([])
cairo: move_to([2400, 2550])
cairo: line_to([2400, 2476])
cairo: set_source_color([:black])
cairo: set_dash([[]])
cairo: set_line_width([1.5])
cairo: stroke([])
cairo: move_to([3225, 2550])
cairo: line_to([3225, 2476])
cairo: set_source_color([:black])
cairo: set_dash([[]])
cairo: set_line_width([1.5])
cairo: stroke([])
cairo: move_to([0, 1200])
cairo: line_to([74, 1200])
cairo: set_source_color([:black])
cairo: set_dash([[]])
cairo: set_line_width([1.5])
cairo: stroke([])
cairo: move_to([3300, 1200])
cairo: line_to([3226, 1200])
cairo: set_source_color([:black])
cairo: set_dash([[]])
cairo: set_line_width([1.5])
cairo: stroke([])
cairo: move_to([0, 2325])
cairo: line_to([74, 2325])
cairo: set_source_color([:black])
cairo: set_dash([[]])
cairo: set_line_width([1.5])
cairo: stroke([])
cairo: move_to([3300, 2325])
cairo: line_to([3226, 2325])
cairo: set_source_color([:black])
cairo: set_dash([[]])
cairo: set_line_width([1.5])
cairo: stroke([])
cairo: translate([1575, 1200])
cairo: rectangle([0, 0, 825, 1125])
cairo: clip([])
cairo: set_source([MockDouble, 0, 0])
cairo: paint([])
cairo: reset_clip([])
cairo: translate([-1575, -1200])
cairo: move_to([1575, 0])
cairo: line_to([1575, 74])
cairo: set_source_color([:black])
cairo: set_dash([[]])
cairo: set_line_width([1.5])
cairo: stroke([])
cairo: move_to([2400, 0])
cairo: line_to([2400, 74])
cairo: set_source_color([:black])
cairo: set_dash([[]])
cairo: set_line_width([1.5])
cairo: stroke([])
cairo: move_to([1575, 2550])
cairo: line_to([1575, 2476])
cairo: set_source_color([:black])
cairo: set_dash([[]])
cairo: set_line_width([1.5])
cairo: stroke([])
cairo: move_to([2400, 2550])
cairo: line_to([2400, 2476])
cairo: set_source_color([:black])
cairo: set_dash([[]])
cairo: set_line_width([1.5])
cairo: stroke([])
cairo: move_to([0, 1200])
cairo: line_to([74, 1200])
cairo: set_source_color([:black])
cairo: set_dash([[]])
cairo: set_line_width([1.5])
cairo: stroke([])
cairo: move_to([3300, 1200])
cairo: line_to([3226, 1200])
cairo: set_source_color([:black])
cairo: set_dash([[]])
cairo: set_line_width([1.5])
cairo: stroke([])
cairo: move_to([0, 2325])
cairo: line_to([74, 2325])
cairo: set_source_color([:black])
cairo: set_dash([[]])
cairo: set_line_width([1.5])
cairo: stroke([])
cairo: move_to([3300, 2325])
cairo: line_to([3226, 2325])
cairo: set_source_color([:black])
cairo: set_dash([[]])
cairo: set_line_width([1.5])
cairo: stroke([])
cairo: translate([750, 1200])
cairo: rectangle([0, 0, 825, 1125])
cairo: clip([])
cairo: set_source([MockDouble, 0, 0])
cairo: paint([])
cairo: reset_clip([])
cairo: translate([-750, -1200])
cairo: move_to([750, 0])
cairo: line_to([750, 74])
cairo: set_source_color([:black])
cairo: set_dash([[]])
cairo: set_line_width([1.5])
cairo: stroke([])
cairo: move_to([1575, 0])
cairo: line_to([1575, 74])
cairo: set_source_color([:black])
cairo: set_dash([[]])
cairo: set_line_width([1.5])
cairo: stroke([])
cairo: move_to([750, 2550])
cairo: line_to([750, 2476])
cairo: set_source_color([:black])
cairo: set_dash([[]])
cairo: set_line_width([1.5])
cairo: stroke([])
cairo: move_to([1575, 2550])
cairo: line_to([1575, 2476])
cairo: set_source_color([:black])
cairo: set_dash([[]])
cairo: set_line_width([1.5])
cairo: stroke([])
cairo: move_to([0, 1200])
cairo: line_to([74, 1200])
cairo: set_source_color([:black])
cairo: set_dash([[]])
cairo: set_line_width([1.5])
cairo: stroke([])
cairo: move_to([3300, 1200])
cairo: line_to([3226, 1200])
cairo: set_source_color([:black])
cairo: set_dash([[]])
cairo: set_line_width([1.5])
cairo: stroke([])
cairo: move_to([0, 2325])
cairo: line_to([74, 2325])
cairo: set_source_color([:black])
cairo: set_dash([[]])
cairo: set_line_width([1.5])
cairo: stroke([])
cairo: move_to([3300, 2325])
cairo: line_to([3226, 2325])
cairo: set_source_color([:black])
cairo: set_dash([[]])
cairo: set_line_width([1.5])
cairo: stroke([])
cairo: show_page([])
cairo: translate([2400, 75])
cairo: rectangle([0, 0, 825, 1125])
cairo: clip([])
cairo: set_source([MockDouble, 0, 0])
cairo: paint([])
cairo: reset_clip([])
cairo: translate([-2400, -75])
cairo: move_to([2400, 0])
cairo: line_to([2400, 74])
cairo: set_source_color([:black])
cairo: set_dash([[]])
cairo: set_line_width([1.5])
cairo: stroke([])
cairo: move_to([3225, 0])
cairo: line_to([3225, 74])
cairo: set_source_color([:black])
cairo: set_dash([[]])
cairo: set_line_width([1.5])
cairo: stroke([])
cairo: move_to([2400, 2550])
cairo: line_to([2400, 2476])
cairo: set_source_color([:black])
cairo: set_dash([[]])
cairo: set_line_width([1.5])
cairo: stroke([])
cairo: move_to([3225, 2550])
cairo: line_to([3225, 2476])
cairo: set_source_color([:black])
cairo: set_dash([[]])
cairo: set_line_width([1.5])
cairo: stroke([])
cairo: move_to([0, 75])
cairo: line_to([74, 75])
cairo: set_source_color([:black])
cairo: set_dash([[]])
cairo: set_line_width([1.5])
cairo: stroke([])
cairo: move_to([3300, 75])
cairo: line_to([3226, 75])
cairo: set_source_color([:black])
cairo: set_dash([[]])
cairo: set_line_width([1.5])
cairo: stroke([])
cairo: move_to([0, 1200])
cairo: line_to([74, 1200])
cairo: set_source_color([:black])
cairo: set_dash([[]])
cairo: set_line_width([1.5])
cairo: stroke([])
cairo: move_to([3300, 1200])
cairo: line_to([3226, 1200])
cairo: set_source_color([:black])
cairo: set_dash([[]])
cairo: set_line_width([1.5])
cairo: stroke([])
cairo: translate([1575, 75])
cairo: rectangle([0, 0, 825, 1125])
cairo: clip([])
cairo: set_source([MockDouble, 0, 0])
cairo: paint([])
cairo: reset_clip([])
cairo: translate([-1575, -75])
cairo: move_to([1575, 0])
cairo: line_to([1575, 74])
cairo: set_source_color([:black])
cairo: set_dash([[]])
cairo: set_line_width([1.5])
cairo: stroke([])
cairo: move_to([2400, 0])
cairo: line_to([2400, 74])
cairo: set_source_color([:black])
cairo: set_dash([[]])
cairo: set_line_width([1.5])
cairo: stroke([])
cairo: move_to([1575, 2550])
cairo: line_to([1575, 2476])
cairo: set_source_color([:black])
cairo: set_dash([[]])
cairo: set_line_width([1.5])
cairo: stroke([])
cairo: move_to([2400, 2550])
cairo: line_to([2400, 2476])
cairo: set_source_color([:black])
cairo: set_dash([[]])
cairo: set_line_width([1.5])
cairo: stroke([])
cairo: move_to([0, 75])
cairo: line_to([74, 75])
cairo: set_source_color([:black])
cairo: set_dash([[]])
cairo: set_line_width([1.5])
cairo: stroke([])
cairo: move_to([3300, 75])
cairo: line_to([3226, 75])
cairo: set_source_color([:black])
cairo: set_dash([[]])
cairo: set_line_width([1.5])
cairo: stroke([])
cairo: move_to([0, 1200])
cairo: line_to([74, 1200])
cairo: set_source_color([:black])
cairo: set_dash([[]])
cairo: set_line_width([1.5])
cairo: stroke([])
cairo: move_to([3300, 1200])
cairo: line_to([3226, 1200])
cairo: set_source_color([:black])
cairo: set_dash([[]])
cairo: set_line_width([1.5])
cairo: stroke([])
surface: finish([])
surface: finish([])
surface: finish([])
surface: finish([])

Loading…
Cancel
Save