2334: def text(text, options = {})
2335:
2336:
2337: text = preprocess_text(text)
2338:
2339: options ||= {}
2340:
2341: new_page_required = false
2342: __y = @y
2343:
2344: if options[:absolute_left]
2345: left = options[:absolute_left]
2346: else
2347: left = @left_margin
2348: left += options[:left] if options[:left]
2349: end
2350:
2351: if options[:absolute_right]
2352: right = options[:absolute_right]
2353: else
2354: right = absolute_right_margin
2355: right -= options[:right] if options[:right]
2356: end
2357:
2358: size = options[:font_size] || 0
2359: if size <= 0
2360: size = @font_size
2361: else
2362: @font_size = size
2363: end
2364:
2365: just = options[:justification] || :left
2366:
2367: if options[:leading]
2368: height = options[:leading]
2369: elsif options[:spacing]
2370: height = options[:spacing] * font_height(size)
2371: else
2372: height = font_height(size)
2373: end
2374:
2375: text.each do |line|
2376: start = true
2377: loop do
2378: break if (line.nil? or line.empty?) and not start
2379:
2380: start = false
2381:
2382: @y -= height
2383:
2384: if @y < @bottom_margin
2385: if options[:test]
2386: new_page_required = true
2387: else
2388:
2389:
2390: start_new_page
2391: @y -= height
2392:
2393: if options[:absolute_left]
2394: left = options[:absolute_left]
2395: else
2396: left = @left_margin
2397: left += options[:left] if options[:left]
2398: end
2399:
2400: if options[:absolute_right]
2401: right = options[:absolute_right]
2402: else
2403: right = absolute_right_margin
2404: right -= options[:right] if options[:right]
2405: end
2406: end
2407: end
2408:
2409: line = add_text_wrap(left, @y, right - left, line, size, just, 0, options[:test])
2410: end
2411: end
2412:
2413: if options[:test]
2414: @y = __y
2415: new_page_required
2416: else
2417: @y
2418: end
2419: end