add_text (PDF::Writer)

          # File lib/pdf/writer.rb, line 1425
    1425:   def add_text(x, y, text, size = nil, angle = 0, word_space_adjust = 0)
    1426:     if text.kind_of?(Numeric) and size.kind_of?(String)
    1427:       text, size = size, text
    1428:       warn PDF::Writer::Lang[:add_text_parameters_reversed] % caller[0]
    1429:     end
    1430:
    1431:     if size.nil? or size <= 0
    1432:       size = @font_size
    1433:     end
    1434:
    1435:     select_font("Helvetica") if @fonts.empty?
    1436:
    1437:     text = text.to_s
    1438:
    1439:       # If there are any open callbacks, then they should be called, to show
    1440:       # the start of the line
    1441:     @callbacks.reverse_each do |ii|
    1442:       info = ii.dup
    1443:       info[:x]      = x
    1444:       info[:y]      = y
    1445:       info[:angle]  = angle
    1446:       info[:status] = :start_line
    1447:
    1448:       info[:tag][self, info]
    1449:     end
    1450:     if angle == 0
    1451:       add_content("\nBT %.3f %.3f Td" % [x, y])
    1452:     else
    1453:       rad = PDF::Math.deg2rad(angle)
    1454:       tt = "\nBT %.3f %.3f %.3f %.3f %.3f %.3f Tm"
    1455:       tt = tt % [ Math.cos(rad), Math.sin(rad), -Math.sin(rad), Math.cos(rad), x, y ]
    1456:       add_content(tt)
    1457:     end
    1458:
    1459:     if (word_space_adjust != 0) or not ((@word_space_adjust.nil?) and (@word_space_adjust != word_space_adjust))
    1460:       @word_space_adjust = word_space_adjust
    1461:       add_content(" %.3f Tw" % word_space_adjust)
    1462:     end
    1463:
    1464:     pos = -1
    1465:     start = 0
    1466:     loop do
    1467:       pos += 1
    1468:       break if pos == text.size
    1469:       font_change = true
    1470:       tag_size, text, font_change = quick_text_tags(text, pos, font_change)
    1471:
    1472:       if tag_size != 0
    1473:         if pos > start
    1474:           part = text[start, pos - start]
    1475:           tt = " /F#{find_font(@current_font).font_id}"
    1476:           tt << " %.1f Tf %d Tr" % [ size, @current_text_render_style ]
    1477:           tt << " (#{PDF::Writer.escape(part)}) Tj"
    1478:           add_content(tt)
    1479:         end
    1480:
    1481:         if font_change
    1482:           current_font!
    1483:         else
    1484:           add_content(" ET")
    1485:           xp = x
    1486:           yp = y
    1487:           tag_size, text, font_change, xp, yp = text_tags(text, pos, font_change, true, xp, yp, size, angle, word_space_adjust)
    1488:
    1489:             # Restart the text object
    1490:           if angle.zero?
    1491:             add_content("\nBT %.3f %.3f Td" % [xp, yp])
    1492:           else
    1493:             rad = PDF::Math.deg2rad(angle)
    1494:             tt = "\nBT %.3f %.3f %.3f %.3f %.3f %.3f Tm"
    1495:             tt = tt % [ Math.cos(rad), Math.sin(rad), -Math.sin(rad), Math.cos(rad), xp, yp ]
    1496:             add_content(tt)
    1497:           end
    1498:
    1499:           if (word_space_adjust != 0) or (word_space_adjust != @word_space_adjust)
    1500:             @word_space_adjust = word_space_adjust
    1501:             add_content(" %.3f Tw" % [word_space_adjust])
    1502:           end
    1503:         end
    1504:
    1505:         pos += tag_size - 1
    1506:         start = pos + 1
    1507:       end
    1508:     end
    1509:
    1510:     if start < text.size
    1511:       part = text[start..-1]
    1512:
    1513:       tt = " /F#{find_font(@current_font).font_id}"
    1514:       tt << " %.1f Tf %d Tr" % [ size, @current_text_render_style ]
    1515:       tt << " (#{PDF::Writer.escape(part)}) Tj"
    1516:       add_content(tt)
    1517:     end
    1518:     add_content(" ET")
    1519:
    1520:       # XXX: Experimental fix.
    1521:     @callbacks.reverse_each do |ii|
    1522:       info = ii.dup
    1523:       info[:x]      = x
    1524:       info[:y]      = y
    1525:       info[:angle]  = angle
    1526:       info[:status] = :end_line
    1527:       info[:tag][self, info]
    1528:     end
    1529:   end