karnov / htmltoword

Ruby html to word gem
MIT License
177 stars 70 forks source link

Change default font type and font size #72

Open dorijan opened 6 years ago

dorijan commented 6 years ago

How can I change font size and font type? I am losing my mind, whatever I do, it is always Arial 9pt. I tried body { font-family: "Times New Roman", Times, serif; font-size:16px; font-weight:600 }

`

This paragraph is Times New Roman at 25pt

Some text

` And nothing works :(
anitsirc commented 6 years ago

I think currently there's no support for that.

In the mean time, you can use a custom template where you define the default font for your document. https://github.com/karnov/htmltoword#configure-templates-and-xslt-paths.

dorijan commented 6 years ago

Thank you, but I am not sure how to use them (I tried). Do I have to create empty docx and point it there? Where should I put this configuration (in what file)? Htmltoword.configure do |config| config.custom_templates_path = config.default_templates_path = config.default_xslt_path = config.custom_xslt_path = end

anitsirc commented 6 years ago

It depends on your application, if it's a rails application you can have it in somewhere like config/initializers/htmltoword.rb. Else you should be able to it like

require 'htmltoword'

# Configure the location of your custom templates
Htmltoword.config.custom_templates_path = 'some_path'

my_html = '<html><head></head><body><p>Hello</p></body></html>'
document = Htmltoword::Document.create(my_html, word_template_file_name)
file = Htmltoword::Document.create_and_save(my_html, file_path, word_template_file_name)
cchandler81 commented 6 years ago

So for the time being we are stuck with one font and size for the entire document?

robbiethegeek-usds commented 5 years ago

Been trying to work this out, but seems like even with the path custom_templates_path

created an initializer: config/initializers/htmltoword.rb Htmltoword.configure do |config| config.custom_templates_path = Rails.root.join('lib/assets/templates') end added debug output to the gem in the templates_helper.rb:

def template_file(template_file_name = nil)
      default_path = File.join(::Htmltoword.config.default_templates_path, 'default.docx')
      template_path = template_file_name.nil? ? '' : File.join(::Htmltoword.config.custom_templates_path, template_file_name)
      p "Template path: " + template_path
      File.exist?(template_path) ? template_path : default_path
    end

"Template path: /lib/assets/templates/new_template.docx" This path is correct and if I run:

open <the full path on disk to rails app folder>/lib/assets/templates/new_template.docx

it opens in word.

Even though this new_template.docx has overridden all fonts with Times New Roman it still creates a document with Arial for all text. Seems like the custom template is not working.

Also if I just update the default.docx in the gem to be Times New Roman it still generates a doc with Arial

richardrails commented 5 years ago

any solution here?

JohnPettigrew commented 5 years ago

I'm seeing the same issue - can't get htmltoword to use the template Word file I supply (via Rails 5.2). Has anyone actually got the templates to work or is it a universal problem?

I tried setting the paths in an initializer and, although this seems to work (the path is redefined), the default.docx file at that location isn't used - even though it complains if the file isn't there.

I tried using the word_template option in the actual command with no effect (except that Rails complains if the file isn't there, of course, so I know the path is correct):

def download_project_file
    respond_to do |format|
      format.docx do
        render docx: @project.file.filename.to_s.chomp('.docx')+' (output).docx', content: @project.file_contents, word_template: ActionController::Base.helpers.asset_path('/htmltoword/template.docx')
      end
    end
  end

Is the only option to work out how to redefine the styles in the WordXML and rebuild the gem with my preferred styles? Has anyone tried this?

joshudev commented 5 years ago

I just did the following, which worked:

  1. Upload https://github.com/karnov/htmltoword/blob/master/lib/htmltoword/templates/default.docx to Google Docs
  2. Edit the font and font sizes, then updating the document style e.g click "Update normal text to match" in google docs
  3. Download the modified version and add to our rails app at lib/htmltoword/templates/mytemplate.docx
  4. Create an initializer (config/initializers/htmltoword.rb) e.g
    Htmltoword.configure do |config|
    config.custom_templates_path = Rails.root.join('lib', 'htmltoword', 'templates')
    end
  5. Reference template e.g Htmltoword::Document.create(html, 'mytemplate.docx')
JohnPettigrew commented 5 years ago

Ah - thanks, @joshudev. The missing step for me was the last one: I'd tried in various ways to replace the default template and failed. Making an explicit template and referring to it at the point of generating the file gives me a file formatted as I wanted!