Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Change default font type and font size #72

Open
dorijan opened this issue Jul 3, 2018 · 9 comments
Open

Change default font type and font size #72

dorijan opened this issue Jul 3, 2018 · 9 comments

Comments

@dorijan
Copy link

dorijan commented Jul 3, 2018

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 }

`
<w:p>
<w:r>
<w:rPr>
<w:sz w:val="50"/>
<w:rFonts w:ascii="Times New Roman" />
</w:rPr>
<w:t xml:space="preserve">This paragraph is Times New Roman at 25pt</w:t>
</w:r>
</w:p>

Some text

` And nothing works :(
@anitsirc
Copy link

anitsirc commented Jul 4, 2018

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
Copy link
Author

dorijan commented Jul 4, 2018

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
Copy link

anitsirc commented Jul 5, 2018

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
Copy link

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

@robbiethegeek-usds
Copy link

robbiethegeek-usds commented Oct 22, 2018

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
Copy link

any solution here?

@JohnPettigrew
Copy link

JohnPettigrew commented May 15, 2019

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
Copy link

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
  1. Reference template e.g Htmltoword::Document.create(html, 'mytemplate.docx')

@JohnPettigrew
Copy link

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!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Development

No branches or pull requests

7 participants