Я написал быстрый алгоритм, чтобы сделать то, что мне нужно сделать. Надеюсь, это сработает и для вас. Единственное требование - использовать PDF :: Writer. Метод ниже использует PDF :: Writer и Ruport. Однако, если вы не используете Ruport, вам нужно изменить только метод draw_text. Замените его методом "text" в PDF :: Writer.
def draw_text_with_exponent(text, left, font_size)
exponent_offset = 1
font_size_reduction = 5
words = text.split(" ")
buffer = ""
words.each() do |word|
if (word.gsub("**", '') == word)
buffer += word + " "
else
number = word.split("**")
base = number[0]
exponent = number[1]
buffer += base
draw_text(buffer, :left => left, :font_size => font_size)
left += pdf_writer.text_line_width(buffer, font_size)
pdf_writer.y+=exponent_offset
draw_text(exponent, :left => left, :font_size => font_size - font_size_reduction)
left += pdf_writer.text_line_width(exponent, font_size)
buffer = ""
pdf_writer.y-=exponent_offset
end
end
if (buffer.length > 0)
draw_text(buffer, :left => left, :font_size => font_size)
end
end
Вот пример вызова:
draw_text_with_exponent("The numbers are x**2 and y**3 ok?", 50, 11)
Дайте мне знать, если у вас возникли проблемы с этим методом, или вы найдете ответ на мой оригинальный вопрос.
-JP