prawn-html 0.6.5 → 0.7.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +17 -0
- data/lib/prawn-html.rb +2 -4
- data/lib/prawn_html/html_parser.rb +13 -4
- data/lib/prawn_html/instance.rb +18 -0
- data/lib/prawn_html/version.rb +1 -1
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 6d7b30ab7d50313d9b5f16fd37bba84207725c8368ba3370a2ef037bdf871f27
|
4
|
+
data.tar.gz: 730c56224e0961d707db073b550f605e4dd4f39d6a902cbb2af5e9f4533e4785
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 790833d6338e59019751025c38a1b37ffa44ff583dd3f23771bc1015754cc1f047a6da9aa2d28c975191de8451ecc164d7dda412c2df15ca779c27b5aa1bc27a
|
7
|
+
data.tar.gz: 3ad2faf9178136a477fa4c0952410593219f85e6cacfbc88d1d504fbbe70388184ee62d3a4e84844eb0a8f225ba04845214d41beff68aa665bed12b03f563547
|
data/README.md
CHANGED
@@ -35,6 +35,23 @@ pdf.render_file('test.pdf')
|
|
35
35
|
|
36
36
|
To check some examples with the PDF output see [examples](examples/) folder.
|
37
37
|
|
38
|
+
Alternative form using _PrawnHtml::Instance_ to preserve the context:
|
39
|
+
|
40
|
+
```rb
|
41
|
+
require 'prawn-html'
|
42
|
+
pdf = Prawn::Document.new(page_size: 'A4')
|
43
|
+
phtml = PrawnHtml::Instance.new(pdf)
|
44
|
+
css = <<~CSS
|
45
|
+
h1 { color: green }
|
46
|
+
i { color: red }
|
47
|
+
CSS
|
48
|
+
phtml.append(css: css)
|
49
|
+
phtml.append(html: '<h1>Some <i>HTML</i> before</h1>')
|
50
|
+
pdf.text 'Some Prawn text'
|
51
|
+
phtml.append(html: '<h1>Some <i>HTML</i> after</h1>')
|
52
|
+
pdf.render_file('test.pdf')
|
53
|
+
```
|
54
|
+
|
38
55
|
## Supported tags & attributes
|
39
56
|
|
40
57
|
HTML tags (using MDN definitions):
|
data/lib/prawn-html.rb
CHANGED
@@ -156,10 +156,7 @@ module PrawnHtml
|
|
156
156
|
}.freeze
|
157
157
|
|
158
158
|
def append_html(pdf, html)
|
159
|
-
|
160
|
-
renderer = DocumentRenderer.new(pdf_wrapper)
|
161
|
-
html_parser = PrawnHtml::HtmlParser.new(renderer)
|
162
|
-
html_parser.process(html)
|
159
|
+
PrawnHtml::Instance.new(pdf).append(html: html)
|
163
160
|
end
|
164
161
|
|
165
162
|
module_function :append_html
|
@@ -179,3 +176,4 @@ require 'prawn_html/context'
|
|
179
176
|
require 'prawn_html/pdf_wrapper'
|
180
177
|
require 'prawn_html/document_renderer'
|
181
178
|
require 'prawn_html/html_parser'
|
179
|
+
require 'prawn_html/instance'
|
@@ -15,19 +15,28 @@ module PrawnHtml
|
|
15
15
|
@ignore = false
|
16
16
|
@ignore_content_tags = ignore_content_tags
|
17
17
|
@renderer = renderer
|
18
|
-
@
|
18
|
+
@raw_styles = {}
|
19
19
|
end
|
20
20
|
|
21
21
|
# Processes HTML and renders it
|
22
22
|
#
|
23
23
|
# @param html [String] The HTML content to process
|
24
24
|
def process(html)
|
25
|
+
@styles = {}
|
25
26
|
@processing = !html.include?('<body')
|
26
27
|
@document = Oga.parse_html(html)
|
28
|
+
process_styles # apply previously loaded styles
|
27
29
|
traverse_nodes(document.children)
|
28
30
|
renderer.flush
|
29
31
|
end
|
30
32
|
|
33
|
+
# Parses CSS styles
|
34
|
+
#
|
35
|
+
# @param text_styles [String] The CSS styles to evaluate
|
36
|
+
def parse_styles(text_styles)
|
37
|
+
@raw_styles = text_styles.scan(REGEXP_STYLES).to_h
|
38
|
+
end
|
39
|
+
|
31
40
|
private
|
32
41
|
|
33
42
|
attr_reader :document, :ignore, :processing, :renderer, :styles
|
@@ -59,9 +68,9 @@ module PrawnHtml
|
|
59
68
|
end
|
60
69
|
end
|
61
70
|
|
62
|
-
def process_styles(text_styles)
|
63
|
-
|
64
|
-
|
71
|
+
def process_styles(text_styles = nil)
|
72
|
+
parse_styles(text_styles) if text_styles
|
73
|
+
@raw_styles.each do |selector, rule|
|
65
74
|
document.css(selector).each do |node|
|
66
75
|
styles[node] = rule
|
67
76
|
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module PrawnHtml
|
4
|
+
class Instance
|
5
|
+
attr_reader :html_parser, :pdf_wrapper, :renderer
|
6
|
+
|
7
|
+
def initialize(pdf)
|
8
|
+
@pdf_wrapper = PrawnHtml::PdfWrapper.new(pdf)
|
9
|
+
@renderer = PrawnHtml::DocumentRenderer.new(@pdf_wrapper)
|
10
|
+
@html_parser = PrawnHtml::HtmlParser.new(@renderer)
|
11
|
+
end
|
12
|
+
|
13
|
+
def append(css: nil, html: nil)
|
14
|
+
html_parser.parse_styles(css) if css
|
15
|
+
html_parser.process(html) if html
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
data/lib/prawn_html/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: prawn-html
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.7.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Mattia Roccoberton
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2022-06-
|
11
|
+
date: 2022-06-10 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: oga
|
@@ -53,6 +53,7 @@ files:
|
|
53
53
|
- lib/prawn_html/context.rb
|
54
54
|
- lib/prawn_html/document_renderer.rb
|
55
55
|
- lib/prawn_html/html_parser.rb
|
56
|
+
- lib/prawn_html/instance.rb
|
56
57
|
- lib/prawn_html/pdf_wrapper.rb
|
57
58
|
- lib/prawn_html/tag.rb
|
58
59
|
- lib/prawn_html/tags/a.rb
|