puppeteer_pdf 0.2.1 → 0.2.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.idea/workspace.xml +31 -19
- data/README.md +18 -12
- data/lib/puppeteer_pdf.rb +44 -19
- data/lib/puppeteer_pdf/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5183293453139619d79bcb0a6bfd914ffac60a485a5371d40b81fad69246dcbf
|
4
|
+
data.tar.gz: 99e8e46ead5874c5796e6ed639623dac613c208e6bec309e159dea52777ad580
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 78bc2ef13b0a2102b043723ff7cf733465bd5162b1768d4bb436913c611ddbfd7589ea915d396973875f12191ad233128044d700cc5ea43fe62e0e7a8f39e82b
|
7
|
+
data.tar.gz: fa0f6d2c249e292f5afd923458b28b9b4a8c4b0342f8d5606993c01a2b9cde41c1dfdcee0ca0937360fb1aa3b860d66e2dfe628b659309c8e6c9c62f17d4fab2
|
data/.idea/workspace.xml
CHANGED
@@ -2,8 +2,8 @@
|
|
2
2
|
<project version="4">
|
3
3
|
<component name="ChangeListManager">
|
4
4
|
<list default="true" id="dba716aa-5da0-418b-bf83-12361d0e012a" name="Default Changelist" comment="">
|
5
|
-
<change beforePath="$PROJECT_DIR
|
6
|
-
<change beforePath="$PROJECT_DIR$/lib/puppeteer_pdf
|
5
|
+
<change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" />
|
6
|
+
<change beforePath="$PROJECT_DIR$/lib/puppeteer_pdf.rb" beforeDir="false" afterPath="$PROJECT_DIR$/lib/puppeteer_pdf.rb" afterDir="false" />
|
7
7
|
</list>
|
8
8
|
<option name="EXCLUDED_CONVERTED_TO_IGNORED" value="true" />
|
9
9
|
<option name="SHOW_DIALOG" value="false" />
|
@@ -17,8 +17,8 @@
|
|
17
17
|
<entry file="file://$PROJECT_DIR$/README.md">
|
18
18
|
<provider selected="true" editor-type-id="split-provider[text-editor;markdown-preview-editor]">
|
19
19
|
<state split_layout="SPLIT">
|
20
|
-
<first_editor relative-caret-position="
|
21
|
-
<caret line="
|
20
|
+
<first_editor relative-caret-position="244">
|
21
|
+
<caret line="52" column="15" selection-start-line="52" selection-start-column="15" selection-end-line="52" selection-end-column="15" />
|
22
22
|
</first_editor>
|
23
23
|
<second_editor />
|
24
24
|
</state>
|
@@ -26,10 +26,10 @@
|
|
26
26
|
</entry>
|
27
27
|
</file>
|
28
28
|
<file pinned="false" current-in-tab="true">
|
29
|
-
<entry file="file://$PROJECT_DIR$/lib/puppeteer_pdf
|
29
|
+
<entry file="file://$PROJECT_DIR$/lib/puppeteer_pdf.rb">
|
30
30
|
<provider selected="true" editor-type-id="text-editor">
|
31
|
-
<state relative-caret-position="
|
32
|
-
<caret line="
|
31
|
+
<state relative-caret-position="502">
|
32
|
+
<caret line="75" column="8" selection-start-line="75" selection-start-column="8" selection-end-line="75" selection-end-column="8" />
|
33
33
|
</state>
|
34
34
|
</provider>
|
35
35
|
</entry>
|
@@ -42,8 +42,9 @@
|
|
42
42
|
<component name="IdeDocumentHistory">
|
43
43
|
<option name="CHANGED_PATHS">
|
44
44
|
<list>
|
45
|
-
<option value="$PROJECT_DIR$/README.md" />
|
46
45
|
<option value="$PROJECT_DIR$/lib/puppeteer_pdf/version.rb" />
|
46
|
+
<option value="$PROJECT_DIR$/README.md" />
|
47
|
+
<option value="$PROJECT_DIR$/lib/puppeteer_pdf.rb" />
|
47
48
|
</list>
|
48
49
|
</option>
|
49
50
|
</component>
|
@@ -57,7 +58,6 @@
|
|
57
58
|
<foldersAlwaysOnTop value="true" />
|
58
59
|
</navigator>
|
59
60
|
<panes>
|
60
|
-
<pane id="Scope" />
|
61
61
|
<pane id="ProjectPane">
|
62
62
|
<subPane>
|
63
63
|
<expand>
|
@@ -65,10 +65,16 @@
|
|
65
65
|
<item name="puppeteer_pdf" type="b2602c69:ProjectViewProjectNode" />
|
66
66
|
<item name="puppeteer_pdf" type="462c0819:PsiDirectoryNode" />
|
67
67
|
</path>
|
68
|
+
<path>
|
69
|
+
<item name="puppeteer_pdf" type="b2602c69:ProjectViewProjectNode" />
|
70
|
+
<item name="puppeteer_pdf" type="462c0819:PsiDirectoryNode" />
|
71
|
+
<item name="lib" type="462c0819:PsiDirectoryNode" />
|
72
|
+
</path>
|
68
73
|
</expand>
|
69
74
|
<select />
|
70
75
|
</subPane>
|
71
76
|
</pane>
|
77
|
+
<pane id="Scope" />
|
72
78
|
</panes>
|
73
79
|
</component>
|
74
80
|
<component name="PropertiesComponent">
|
@@ -101,18 +107,17 @@
|
|
101
107
|
<option name="presentableId" value="Default" />
|
102
108
|
<updated>1559202765845</updated>
|
103
109
|
<workItem from="1559202767218" duration="430000" />
|
104
|
-
<workItem from="1559373173571" duration="942000" />
|
105
110
|
</task>
|
106
111
|
<servers />
|
107
112
|
</component>
|
108
113
|
<component name="TimeTrackingManager">
|
109
|
-
<option name="totallyTimeSpent" value="
|
114
|
+
<option name="totallyTimeSpent" value="3285000" />
|
110
115
|
</component>
|
111
116
|
<component name="ToolWindowManager">
|
112
117
|
<frame x="0" y="23" width="1280" height="721" extended-state="0" />
|
113
118
|
<editor active="true" />
|
114
119
|
<layout>
|
115
|
-
<window_info active="true" content_ui="combo" id="Project" order="0" visible="true" weight="0.
|
120
|
+
<window_info active="true" content_ui="combo" id="Project" order="0" visible="true" weight="0.16558966" />
|
116
121
|
<window_info id="Structure" order="1" side_tool="true" weight="0.25" />
|
117
122
|
<window_info id="Favorites" order="2" side_tool="true" />
|
118
123
|
<window_info anchor="bottom" id="Message" order="0" />
|
@@ -123,8 +128,8 @@
|
|
123
128
|
<window_info anchor="bottom" id="Inspection" order="5" weight="0.4" />
|
124
129
|
<window_info anchor="bottom" id="TODO" order="6" />
|
125
130
|
<window_info anchor="bottom" id="Docker" order="7" show_stripe_button="false" />
|
126
|
-
<window_info anchor="bottom" id="
|
127
|
-
<window_info anchor="bottom" id="
|
131
|
+
<window_info anchor="bottom" id="Version Control" order="8" />
|
132
|
+
<window_info anchor="bottom" id="Database Changes" order="9" />
|
128
133
|
<window_info anchor="bottom" id="Terminal" order="10" />
|
129
134
|
<window_info anchor="bottom" id="Event Log" order="11" side_tool="true" />
|
130
135
|
<window_info anchor="right" id="Commander" internal_type="SLIDING" order="0" type="SLIDING" weight="0.4" />
|
@@ -137,20 +142,27 @@
|
|
137
142
|
<option name="version" value="1" />
|
138
143
|
</component>
|
139
144
|
<component name="editorHistoryManager">
|
145
|
+
<entry file="file://$PROJECT_DIR$/lib/puppeteer_pdf/version.rb">
|
146
|
+
<provider selected="true" editor-type-id="text-editor">
|
147
|
+
<state relative-caret-position="15">
|
148
|
+
<caret line="1" column="18" selection-start-line="1" selection-start-column="18" selection-end-line="1" selection-end-column="18" />
|
149
|
+
</state>
|
150
|
+
</provider>
|
151
|
+
</entry>
|
140
152
|
<entry file="file://$PROJECT_DIR$/README.md">
|
141
153
|
<provider selected="true" editor-type-id="split-provider[text-editor;markdown-preview-editor]">
|
142
154
|
<state split_layout="SPLIT">
|
143
|
-
<first_editor relative-caret-position="
|
144
|
-
<caret line="
|
155
|
+
<first_editor relative-caret-position="244">
|
156
|
+
<caret line="52" column="15" selection-start-line="52" selection-start-column="15" selection-end-line="52" selection-end-column="15" />
|
145
157
|
</first_editor>
|
146
158
|
<second_editor />
|
147
159
|
</state>
|
148
160
|
</provider>
|
149
161
|
</entry>
|
150
|
-
<entry file="file://$PROJECT_DIR$/lib/puppeteer_pdf
|
162
|
+
<entry file="file://$PROJECT_DIR$/lib/puppeteer_pdf.rb">
|
151
163
|
<provider selected="true" editor-type-id="text-editor">
|
152
|
-
<state relative-caret-position="
|
153
|
-
<caret line="
|
164
|
+
<state relative-caret-position="502">
|
165
|
+
<caret line="75" column="8" selection-start-line="75" selection-start-column="8" selection-end-line="75" selection-end-column="8" />
|
154
166
|
</state>
|
155
167
|
</provider>
|
156
168
|
</entry>
|
data/README.md
CHANGED
@@ -2,19 +2,21 @@
|
|
2
2
|
|
3
3
|
PuppeteerPdf is using Puppeteer library organized by Google. It's a lightest gem to generate PDF's using
|
4
4
|
URL. PuppeteerPdf is using Headless to open webpage and then simply convert it into PDF.
|
5
|
-
|
6
|
-
## Installation
|
5
|
+
### Prerequisite
|
7
6
|
|
8
7
|
Before installing puppeteer_pdf gem system must have puppeteer library installed, it can be installed by
|
9
8
|
|
10
9
|
```
|
11
|
-
|
12
|
-
# or "yarn add puppeteer"
|
10
|
+
- nvm install 8
|
11
|
+
- npm i puppeteer # or "yarn add puppeteer"
|
12
|
+
|
13
13
|
```
|
14
14
|
|
15
15
|
or visit https://developers.google.com/web/tools/puppeteer/
|
16
|
+
|
17
|
+
## Installation
|
16
18
|
|
17
|
-
Once
|
19
|
+
Once all prerequisites are installed add this line to your application's Gemfile:
|
18
20
|
|
19
21
|
```ruby
|
20
22
|
gem 'puppeteer_pdf'
|
@@ -40,13 +42,17 @@ PuppeteerPdf.generate_pdf(url, output_path) # '/system_path/test.pdf'
|
|
40
42
|
## Options
|
41
43
|
|
42
44
|
```ruby
|
43
|
-
opts = {
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
45
|
+
opts = {
|
46
|
+
height: 600,
|
47
|
+
width: 1225,
|
48
|
+
layout: 'Landscape',
|
49
|
+
format: 'A4',
|
50
|
+
timeout: 10000,
|
51
|
+
header_text: 'Company Name',
|
52
|
+
footer_text: 'Any Text Information',
|
53
|
+
print_background: true,
|
54
|
+
include_page_numbers: true,
|
55
|
+
{
|
50
56
|
PuppeteerPdf.generate_pdf(url, output_path, opts)
|
51
57
|
|
52
58
|
```
|
data/lib/puppeteer_pdf.rb
CHANGED
@@ -4,21 +4,39 @@ require 'securerandom'
|
|
4
4
|
module PuppeteerPdf
|
5
5
|
class Error < StandardError; end
|
6
6
|
|
7
|
+
def self.color_coding(text, color = 'red')
|
8
|
+
case color
|
9
|
+
when 'red'
|
10
|
+
puts "\e[31m#{text}\e[0m"
|
11
|
+
when 'green'
|
12
|
+
"\e[32m#{text}\e[0m"
|
13
|
+
when 'blue'
|
14
|
+
"\e[34m#{text}\e[0m"
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
7
18
|
def self.generate_pdf(url, output_file_path ,opts = {})
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
19
|
+
include_page_numbers = opts[:include_page_numbers] || true
|
20
|
+
random_string = generate_random_string
|
21
|
+
page_height = opts[:height] || 600
|
22
|
+
page_width = opts[:width] || 1125
|
23
|
+
page_layout = opts[:layout] || 'Landscape'
|
24
|
+
print_background = opts[:print_background] || true
|
25
|
+
header_text = opts[:header_text] || ''
|
26
|
+
footer_text = opts[:footer_text] || ''
|
27
|
+
format = opts[:format] || 'A4'
|
28
|
+
timeout = opts[:timeout] || 0
|
29
|
+
|
30
|
+
color_coding("ERROR : height must be Integer", 'red') unless page_height.class == Integer
|
31
|
+
color_coding("ERROR : widgth must be Integer", 'red') unless page_width.class == Integer
|
32
|
+
color_coding("ERROR : layout must be between ['Landscape']", 'red') unless ['Landscape'].include?(page_layout)
|
33
|
+
color_coding("ERROR : print_background must be Boolean", 'red') unless [TrueClass, FalseClass].include?(print_background.class)
|
34
|
+
color_coding("ERROR : header_text must be String", 'red') unless header_text.class == String
|
35
|
+
color_coding("ERROR : footer_text must be String", 'red') unless footer_text.class == String
|
36
|
+
color_coding("ERROR : timeout must be Integer", 'red') unless timeout.class == Integer
|
37
|
+
color_coding("ERROR : format must be between ['A4']", 'red') unless ['A4'].include?(format)
|
38
|
+
color_coding("ERROR : include_page_numbers must be Boolean", 'red') unless [TrueClass, FalseClass].include?(include_page_numbers.class)
|
39
|
+
|
22
40
|
|
23
41
|
need_to_display_headers = (header_text == '' && footer_text == '') == true ? false : true
|
24
42
|
|
@@ -30,8 +48,8 @@ module PuppeteerPdf
|
|
30
48
|
const browser = await puppeteer.launch();
|
31
49
|
const page = await browser.newPage();
|
32
50
|
await page.setViewport({ width: #{page_height}, height: #{page_width} })
|
33
|
-
await page.goto('#{url}', {waitUntil: 'networkidle2'});
|
34
|
-
await page.pdf({path: '#{output_file_path}', width: '#{page_width}px', height: '#{page_height}px', layout: '#{page_layout}' , printBackground: #{print_background}, displayHeaderFooter: #{need_to_display_headers},
|
51
|
+
await page.goto('#{url}', {waitUntil: 'networkidle2', timeout: #{timeout}});
|
52
|
+
await page.pdf({path: '#{output_file_path}', format: '#{format}', width: '#{page_width}px', height: '#{page_height}px', layout: '#{page_layout}' , printBackground: #{print_background}, displayHeaderFooter: #{need_to_display_headers},
|
35
53
|
margin: {top: 10, bottom: 40}, headerTemplate: '<span>#{header_text}</span>' });
|
36
54
|
await browser.close();
|
37
55
|
})();"
|
@@ -40,13 +58,20 @@ module PuppeteerPdf
|
|
40
58
|
file.close
|
41
59
|
system("node #{tmp_js_file_name}") # GENERATE EXPORT
|
42
60
|
system("rm -rf #{tmp_js_file_name}")
|
43
|
-
|
44
|
-
|
45
|
-
|
61
|
+
color_coding("############################################################################################################", 'blue')
|
62
|
+
color_coding("PDF IS GENERATED : #{output_file_path}", 'green')
|
63
|
+
color_coding("############################################################################################################", 'blue')
|
46
64
|
output_file_path
|
47
65
|
end
|
48
66
|
|
49
67
|
def self.generate_random_string
|
50
68
|
SecureRandom.alphanumeric[0..5]
|
51
69
|
end
|
70
|
+
|
71
|
+
# TODO : REMOVE THESE LINES MUNEEB WHEN YOU ARE DONE WITH REMEMBERING
|
72
|
+
# 1 - MAKE CHANGES
|
73
|
+
# 2 - TEST CHANGES
|
74
|
+
# 3 - TEST THEM AGAIN
|
75
|
+
# 4 - PUSH THE CODE TO GIT
|
76
|
+
# 5 - gem build puppeteer_pdf.gemspec
|
52
77
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: puppeteer_pdf
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Muneeb
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-06-
|
11
|
+
date: 2019-06-03 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|