add_text (PDF::Writer)

          # File lib/pdf/writer.rb, line 1362
    1362:   def add_text(x, y, text, size = nil, angle = 0, word_space_adjust = 0)
    1363:     if text.kind_of?(Numeric) and size.kind_of?(String)
    1364:       text, size = size, text
    1365:       warn PDF::Writer::Lang[:add_text_parameters_reversed] % caller[0]
    1366:     end
    1367:
    1368:     if size.nil? or size <= 0
    1369:       size = @font_size
    1370:     end
    1371:
    1372:     select_font("Helvetica") if @fonts.empty?
    1373:
    1374:     text = text.to_s
    1375:
    1376:       # If there are any open callbacks, then they should be called, to show
    1377:       # the start of the line
    1378:     @callbacks.reverse_each do |ii|
    1379:       info = ii.dup
    1380:       info[:x]      = x
    1381:       info[:y]      = y
    1382:       info[:angle]  = angle
    1383:       info[:status] = :start_line
    1384:
    1385:       info[:tag][self, info]
    1386:     end
    1387:     if angle == 0
    1388:       add_content("\nBT %.3f %.3f Td" % [x, y])
    1389:     else
    1390:       rad = PDF::Math.deg2rad(angle)
    1391:       tt = "\nBT %.3f %.3f %.3f %.3f %.3f %.3f Tm"
    1392:       tt = tt % [ Math.cos(rad), Math.sin(rad), -Math.sin(rad), Math.cos(rad), x, y ]
    1393:       add_content(tt)
    1394:     end
    1395:
    1396:     if (word_space_adjust != 0) or not ((@word_space_adjust.nil?) and (@word_space_adjust != word_space_adjust))
    1397:       @word_space_adjust = word_space_adjust
    1398:       add_content(" %.3f Tw" % word_space_adjust)
    1399:     end
    1400:
    1401:     pos = -1
    1402:     start = 0
    1403:     loop do
    1404:       pos += 1
    1405:       break if pos == text.size
    1406:       font_change = true
    1407:       tag_size, text, font_change = quick_text_tags(text, pos, font_change)
    1408:
    1409:       if tag_size != 0
    1410:         if pos > start
    1411:           part = text[start, pos - start]
    1412:           tt = " /F#{find_font(@current_font).font_id}"
    1413:           tt << " %.1f Tf %d Tr" % [ size, @current_text_render_style ]
    1414:           tt << " (#{PDF::Writer.escape(part)}) Tj"
    1415:           add_content(tt)
    1416:         end
    1417:
    1418:         if font_change
    1419:           current_font!
    1420:         else
    1421:           add_content(" ET")
    1422:           xp = x
    1423:           yp = y
    1424:           tag_size, text, font_change, xp, yp = text_tags(text, pos, font_change, true, xp, yp, size, angle, word_space_adjust)
    1425:
    1426:             # Restart the text object
    1427:           if angle.zero?
    1428:             add_content("\nBT %.3f %.3f Td" % [xp, yp])
    1429:           else
    1430:             rad = PDF::Math.deg2rad(angle)
    1431:             tt = "\nBT %.3f %.3f %.3f %.3f %.3f %.3f Tm"
    1432:             tt = tt % [ Math.cos(rad), Math.sin(rad), -Math.sin(rad), Math.cos(rad), xp, yp ]
    1433:             add_content(tt)
    1434:           end
    1435:
    1436:           if (word_space_adjust != 0) or (word_space_adjust != @word_space_adjust)
    1437:             @word_space_adjust = word_space_adjust
    1438:             add_content(" %.3f Tw" % [word_space_adjust])
    1439:           end
    1440:         end
    1441:
    1442:         pos += tag_size - 1
    1443:         start = pos + 1
    1444:       end
    1445:     end
    1446:
    1447:     if start < text.size
    1448:       part = text[start..-1]
    1449:
    1450:       tt = " /F#{find_font(@current_font).font_id}"
    1451:       tt << " %.1f Tf %d Tr" % [ size, @current_text_render_style ]
    1452:       tt << " (#{PDF::Writer.escape(part)}) Tj"
    1453:       add_content(tt)
    1454:     end
    1455:     add_content(" ET")
    1456:
    1457:       # XXX: Experimental fix.
    1458:     @callbacks.reverse_each do |ii|
    1459:       info = ii.dup
    1460:       info[:x]      = x
    1461:       info[:y]      = y
    1462:       info[:angle]  = angle
    1463:       info[:status] = :end_line
    1464:       info[:tag][self, info]
    1465:     end
    1466:   end