Class: Html2Odt::Document
- Inherits:
-
Object
- Object
- Html2Odt::Document
- Defined in:
- lib/html2odt/document.rb
Constant Summary collapse
- CONTENT_REGEX =
/<text:p[^>]*>{{content}}<\/text:p>/- INCH_TO_CM =
2.54- DPI =
The following value was determined by comparing the generated result with an image dropped into LibreOffice interactively. Though this might be related to the fact, that my screen has a native resolution of 114 dpi.
xhtml2odt uses 96 by default.
114.0
Instance Attribute Summary collapse
-
#author ⇒ Object
Document meta data.
-
#image_location_mapping ⇒ Object
Returns the value of attribute image_location_mapping.
-
#title ⇒ Object
Document meta data.
Instance Method Summary collapse
- #base_uri ⇒ Object
- #base_uri=(uri) ⇒ Object
- #content_xml ⇒ Object
- #data ⇒ Object
- #html ⇒ Object
- #html=(html) ⇒ Object
-
#initialize(template: Html2Odt::ODT_TEMPLATE, html: nil) ⇒ Document
constructor
A new instance of Document.
- #manifest_xml ⇒ Object
- #meta_xml ⇒ Object
- #styles_xml ⇒ Object
- #write_to(path) ⇒ Object
Constructor Details
#initialize(template: Html2Odt::ODT_TEMPLATE, html: nil) ⇒ Document
Returns a new instance of Document.
17 18 19 20 21 22 23 |
# File 'lib/html2odt/document.rb', line 17 def initialize(template: Html2Odt::ODT_TEMPLATE, html: nil) @html = html @template = template @base_uri = nil read_xmls end |
Instance Attribute Details
#author ⇒ Object
Document meta data
15 16 17 |
# File 'lib/html2odt/document.rb', line 15 def @author end |
#image_location_mapping ⇒ Object
Returns the value of attribute image_location_mapping.
12 13 14 |
# File 'lib/html2odt/document.rb', line 12 def image_location_mapping @image_location_mapping end |
#title ⇒ Object
Document meta data
15 16 17 |
# File 'lib/html2odt/document.rb', line 15 def title @title end |
Instance Method Details
#base_uri ⇒ Object
49 50 51 |
# File 'lib/html2odt/document.rb', line 49 def base_uri @base_uri end |
#base_uri=(uri) ⇒ Object
34 35 36 37 38 39 40 41 42 43 44 45 46 47 |
# File 'lib/html2odt/document.rb', line 34 def base_uri=(uri) if uri.is_a? URI @base_uri = uri else @base_uri = URI::parse(uri) end unless @base_uri.is_a? URI::HTTP raise ArgumentError, "Invalid URI - Expecting http(s) scheme." end rescue URI::InvalidURIError raise ArgumentError, "Invalid URI - #{$!.}" end |
#content_xml ⇒ Object
53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 |
# File 'lib/html2odt/document.rb', line 53 def content_xml @content_xml ||= begin html = prepare_html xml = xslt_tranform(html, Html2Odt::XHTML2ODT_XSL) xml = xml.sub('<?xml version="1.0" encoding="utf-8"?>', '') xml = @tpl_content_xml.sub(CONTENT_REGEX) { xml } xml = xslt_tranform(xml, Html2Odt::XHTML2ODT_STYLES_XSL) xml end end |
#data ⇒ Object
131 132 133 |
# File 'lib/html2odt/document.rb', line 131 def data @data ||= zip_buffer.string end |
#html ⇒ Object
30 31 32 |
# File 'lib/html2odt/document.rb', line 30 def html @html end |
#html=(html) ⇒ Object
25 26 27 28 |
# File 'lib/html2odt/document.rb', line 25 def html=(html) reset @html = html end |
#manifest_xml ⇒ Object
73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 |
# File 'lib/html2odt/document.rb', line 73 def manifest_xml @manifest_xml ||= begin content_xml # trigger HTML parsing if @images.nil? or @images.empty? @tpl_manifest_xml else doc = Nokogiri::XML(@tpl_manifest_xml) @images.each do |image| entry = create_node(doc, "manifest:file-entry") entry["manifest:full-path"] = image.target entry["manifest:media-type"] = image.mime_type doc.root.add_child entry end doc.to_xml end end end |
#meta_xml ⇒ Object
95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 |
# File 'lib/html2odt/document.rb', line 95 def @meta_xml ||= begin doc = Nokogiri::XML(@tpl_meta_xml) = doc.at_xpath("office:document-meta/office:meta") .xpath("meta:generator").remove .add_child create_node(doc, "meta:generator", "html2odt.rb/#{Html2Odt::VERSION}") .xpath("meta:creation-date").remove .add_child create_node(doc, "meta:creation-date", Time.now.utc.iso8601) .xpath("dc:date").remove .add_child create_node(doc, "dc:date", Time.now.utc.iso8601) .xpath("meta:editing-duration").remove .add_child create_node(doc, "meta:editing-duration", "P0D") .xpath("meta:editing-cycles").remove .add_child create_node(doc, "meta:editing-cycles", "1") .xpath("meta:initial-creator").remove .add_child create_node(doc, "meta:initial-creator", ) if .xpath("dc:creator").remove .add_child create_node(doc, "dc:creator", ) if .xpath("dc:title").remove .add_child create_node(doc, "dc:title", title) if title .xpath("meta:document-statistic").remove doc.to_xml end end |
#styles_xml ⇒ Object
69 70 71 |
# File 'lib/html2odt/document.rb', line 69 def styles_xml @styles_xml ||= xslt_tranform(@tpl_styles_xml, Html2Odt::XHTML2ODT_STYLES_XSL) end |
#write_to(path) ⇒ Object
135 136 137 |
# File 'lib/html2odt/document.rb', line 135 def write_to(path) File.write(path, data, mode: 'wb') end |