ruby-docx / docx

a ruby library/gem for interacting with .docx files
MIT License
437 stars 171 forks source link

font color? #16

Open jnylund opened 10 years ago

jnylund commented 10 years ago

Hi, is there anyway to set the color of the text that is inserted using insert_text_after?

If not, I can try to add it, but can someone give me a hint of where to look or generally what to do? (I don't know anything about docx format).

thanks Joel

Steimel commented 10 years ago

Here's a way to do it using Nokogiri (which is what docx uses under the hood)

require 'docx'
require 'nokogiri'

def insert_colored_text_after(bookmark, text, hex_color)
    color = Nokogiri::XML::Node.new("w:color", bookmark.node)
    color['w:val'] = hex_color

    text_run = bookmark.get_run_after
    text_run.text = "#{text}#{text_run.text}"

    text_run.node.children.each do |child|
        #Find the node for formatting
        if child.name == "rPr"
            child<<color
        end
    end
end
matthewgani commented 7 months ago

@Steimel Thank you for the solution, really appreciate it!

eyupatis commented 1 month ago

Thanks @Steimel for your help.

Here is a very similar version of the method, if you already have a paragraph object:

def add_color_to_paragraph(paragraph, color)
  color_node = Nokogiri::XML::Node.new("w:color", paragraph.node.document)
  color_node["w:val"] = color

  paragraph.each_text_run do |text_run|
    text_run.node.children.each do |child|
      # Find the node for formatting
      child << color_node if child.name == "rPr"
    end
  end
end