ghtml2pdf 0.1.1 → 0.4.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 2f6922a9478fbccfc04fb8f995314d4916b8a09d
4
- data.tar.gz: bd10e27b1cf116ec4d90894109870efe4218c2df
2
+ SHA256:
3
+ metadata.gz: d8ed90969dd11591a30db9663b9b3de084cca0ca4206e19db2979bdc52866441
4
+ data.tar.gz: b12829fe5f6dff6132d1a04d43c3ab8bde1820b35238b4104a27c9ec5d0093f4
5
5
  SHA512:
6
- metadata.gz: 235563288c6b44762ce66943749165a5a452e730dee5ff121f7ab437baac070c090c416d106a6117d639547d5d84a6ce9a55da0284806b163c6f049f2dee9b2a
7
- data.tar.gz: 4a2177d0c82a7f6aea373a692375acc719b5bc37a99b526138d184c86fcf25157b55c1360e5e32f1259aac58f96ff403391d3e7be9ee0784b87c0ba6e60b30b1
6
+ metadata.gz: 5737bba0d02f6dfb85758b8451285109a5f093bec53cabd0bdcaaa06ab300f2cc816d3c95bd6270f600eb970ca812bb3b413d45db07a32ef119dbeb110e469bd
7
+ data.tar.gz: 76c6ea83c528d5ea9d191cffc93f5836eae568a481346e1bba8566b4c02f2620b23bdc3a5a51eb41d96423e0169f1685b1f8252e7c76407fa6eb72af03e07c6c
data/Changelog.md CHANGED
@@ -1,4 +1,24 @@
1
- # Change log
1
+ # Changelog
2
+
3
+ ## 0.4.0 / 2021-08-11
4
+
5
+ * Target Ruby 2.5 and up
6
+ * Update dependency on GirFFI-Gtk and GirFFI
7
+ * Stop using Headless; This gem now needs an active graphical session to run
8
+
9
+ ## 0.3.1 / 2019-02-13
10
+
11
+ * Update dependency on GirFFI-Gtk
12
+
13
+ ## 0.3.0 / 2017-03-25
14
+
15
+ * Update dependency on GirFFI-Gtk
16
+ * Target Ruby 2.3 and up
17
+
18
+ ## 0.2.0 / 2016-02-06
19
+
20
+ * Set wider margins by default
21
+ * Allow setting all margins from the command line
2
22
 
3
23
  ## 0.1.1 / 2016-02-06
4
24
 
data/LICENSE.txt CHANGED
@@ -1,6 +1,6 @@
1
1
  The MIT License (MIT)
2
2
 
3
- Copyright (c) 2015 Matijs van Zuijlen
3
+ Copyright (c) 2015-2018 Matijs van Zuijlen
4
4
 
5
5
  Permission is hereby granted, free of charge, to any person obtaining a copy
6
6
  of this software and associated documentation files (the "Software"), to deal
data/README.md CHANGED
@@ -44,12 +44,13 @@ Or install it yourself as:
44
44
 
45
45
  $ gem install ghtml2pdf
46
46
 
47
- You will also need to install the WebKit2GTK+, the Gtk+ bindings for WebKit2,
48
- and gobject-introspection.
47
+ You will also need to install WebKit2GTK+, the Gtk+ bindings for WebKit2,
48
+ and GObject Introspection. You should probably also install AT-Spi 2 to
49
+ avoid some annoying warning messages.
49
50
 
50
51
  On Debian and Ubuntu, this can be accomplished by installing the packages
51
- `libgirepository1.0-dev`, `gobject-introspection` should be enough to get
52
- `rake test` working.
52
+ `libgirepository-1.0-1`, `gir1.2-gtk-3.0`, `gir1.2-webkit2-3.0` or
53
+ `gir1.2-webkit2-4.0`, and `at-spi2-core`. You may also need to install ...
53
54
 
54
55
  ## Usage
55
56
 
data/bin/ghtml2pdf CHANGED
@@ -1,8 +1,6 @@
1
1
  #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
2
3
 
3
- require 'ghtml2pdf'
4
- require 'headless'
4
+ require "ghtml2pdf"
5
5
 
6
- Headless.ly do
7
- GHtml2Pdf.run(ARGV)
8
- end
6
+ GHtml2Pdf.run(ARGV)
data/lib/ghtml2pdf.rb CHANGED
@@ -1,5 +1,7 @@
1
- require 'ghtml2pdf/version'
2
- require 'ghtml2pdf/application'
1
+ # frozen_string_literal: true
2
+
3
+ require "ghtml2pdf/version"
4
+ require "ghtml2pdf/application"
3
5
 
4
6
  # Main entry point for GHtml2Pdf.
5
7
  module GHtml2Pdf
@@ -1,83 +1,119 @@
1
- require 'gir_ffi-gtk3'
2
- require_relative 'argument_parser'
1
+ # frozen_string_literal: true
3
2
 
4
- GirFFI.setup :WebKit2, '4.0'
3
+ require "gir_ffi-gtk3"
4
+ require "ghtml2pdf/argument_parser"
5
+ require "ghtml2pdf/print_settings"
6
+
7
+ GirFFI.setup :WebKit2
5
8
 
6
9
  module GHtml2Pdf
7
10
  # Main GHtml2Pdf application. Orchestrates the Gtk+ objects needed to load
8
11
  # and print a web page to PDF.
9
12
  class Application
10
- attr_reader :input, :output
11
-
12
13
  def initialize(argv)
13
- argument_parser = ArgumentParser.new(argv)
14
- @input = argument_parser.input
15
- @output = argument_parser.output
14
+ @argument_parser = ArgumentParser.new(argv)
15
+ default_web_context.set_process_model :multiple_secondary_processes
16
16
  end
17
17
 
18
18
  def run
19
- web_view.signal_connect 'load-changed' do |_, event, _|
19
+ setup_signal_handlers
20
+ load_uri
21
+ Gtk.main
22
+ destroy_view
23
+ end
24
+
25
+ private
26
+
27
+ attr_reader :argument_parser
28
+
29
+ def setup_signal_handlers
30
+ web_view.signal_connect "load-changed" do |_, event, _|
20
31
  case event
21
32
  when :finished
22
33
  print_operation.print
23
- sleep 2
24
- Gtk.main_quit
25
34
  end
26
35
  end
27
36
 
28
- web_view.load_uri(input_uri)
37
+ print_operation.signal_connect "finished" do |*_args|
38
+ Gtk.main_quit
39
+ end
40
+ end
29
41
 
30
- Gtk.main
42
+ def load_uri
43
+ web_view.load_uri(input_uri)
44
+ end
31
45
 
46
+ def destroy_view
32
47
  web_view.destroy
33
48
  end
34
49
 
35
- private
50
+ def top_margin
51
+ @top_margin ||= argument_parser.top_margin || Unit.new("2cm")
52
+ end
53
+
54
+ def bottom_margin
55
+ @bottom_margin ||= argument_parser.bottom_margin || Unit.new("3cm")
56
+ end
57
+
58
+ def left_margin
59
+ @left_margin ||= argument_parser.left_margin || Unit.new("2cm")
60
+ end
61
+
62
+ def right_margin
63
+ @right_margin ||= argument_parser.right_margin || Unit.new("2cm")
64
+ end
36
65
 
37
66
  def print_operation
38
- WebKit2::PrintOperation.new(web_view).tap do |operation|
67
+ @print_operation ||= WebKit2::PrintOperation.new(web_view).tap do |operation|
39
68
  operation.page_setup = page_setup
40
69
  operation.print_settings = print_settings
41
70
  end
42
71
  end
43
72
 
44
73
  def page_setup
45
- Gtk::PageSetup.new.tap do |setup|
74
+ @page_setup ||= Gtk::PageSetup.new.tap do |setup|
46
75
  setup.set_paper_size Gtk::PaperSize.new Gtk::PAPER_NAME_A4
76
+ setup.set_top_margin top_margin_in_mm, :mm
77
+ setup.set_bottom_margin bottom_margin_in_mm, :mm
78
+ setup.set_left_margin left_margin_in_mm, :mm
79
+ setup.set_right_margin right_margin_in_mm, :mm
47
80
  end
48
81
  end
49
82
 
50
- def web_context
51
- @web_context || WebKit2::WebContext.new.tap do |context|
52
- context.set_process_model :multiple_secondary_processes
53
- end
83
+ def top_margin_in_mm
84
+ top_margin.convert_to("mm").scalar
85
+ end
86
+
87
+ def bottom_margin_in_mm
88
+ bottom_margin.convert_to("mm").scalar
89
+ end
90
+
91
+ def left_margin_in_mm
92
+ left_margin.convert_to("mm").scalar
93
+ end
94
+
95
+ def right_margin_in_mm
96
+ right_margin.convert_to("mm").scalar
97
+ end
98
+
99
+ def default_web_context
100
+ @default_web_context ||= WebKit2::WebContext.get_default
54
101
  end
55
102
 
56
103
  def web_view
57
- @web_view ||= WebKit2::WebView.new_with_context web_context
104
+ @web_view ||= WebKit2::WebView.new
58
105
  end
59
106
 
60
107
  def print_settings
61
- Gtk::PrintSettings.new.tap do |settings|
62
- settings.set_number_up 1
63
- settings.set_reverse false
64
- settings.set_print_pages :all
65
- settings.set 'output-uri', output_uri
66
- settings.set 'output-file-format', 'pdf'
67
- settings.set_collate false
68
- settings.set_n_copies 1
69
- settings.set_printer 'Print to File'
70
- settings.set_page_set :all
71
- settings.set_scale 100.0
72
- end
108
+ @print_settings ||= PrintSettings.new.tap { |it| it.output_uri = output_uri }
73
109
  end
74
110
 
75
111
  def output_uri
76
- "file://#{File.expand_path(output)}"
112
+ "file://#{File.expand_path(argument_parser.output)}"
77
113
  end
78
114
 
79
115
  def input_uri
80
- "file://#{File.expand_path(input)}"
116
+ "file://#{File.expand_path(argument_parser.input)}"
81
117
  end
82
118
  end
83
119
  end
@@ -1,15 +1,68 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "optparse"
4
+ require "ruby-units"
5
+
1
6
  module GHtml2Pdf
2
7
  # Error class raised for missing arguments
3
8
  class MissingArgument < StandardError; end
4
9
 
5
10
  # Parses the command line arguments
6
11
  class ArgumentParser
7
- attr_reader :input, :output
12
+ attr_reader :input, :output, :top_margin, :bottom_margin, :left_margin, :right_margin
8
13
 
9
14
  def initialize(argv)
15
+ setup_banner
16
+ setup_margin_options
17
+ setup_help_message
18
+ parser.parse! argv
10
19
  @input, @output, = argv
11
- raise MissingArgument, 'An input filename is required' unless @input
12
- raise MissingArgument, 'An output filename is required' unless @output
20
+ raise MissingArgument, "An input filename is required" unless @input
21
+ raise MissingArgument, "An output filename is required" unless @output
22
+ end
23
+
24
+ private
25
+
26
+ def parser
27
+ @parser ||= OptionParser.new
28
+ end
29
+
30
+ def setup_banner
31
+ parser.banner = "Usage: #{parser.program_name} [options] INFILE OUTFILE"
32
+ end
33
+
34
+ def setup_margin_options
35
+ parser.on("--top-margin MARGIN", "Set top margin") { |val| self.top_margin = val }
36
+ parser.on("--bottom-margin MARGIN", "Set bottom margin") do |val|
37
+ self.bottom_margin = val
38
+ end
39
+ parser.on("--left-margin MARGIN", "Set left margin") { |val| self.left_margin = val }
40
+ parser.on("--right-margin MARGIN", "Set right margin") do |val|
41
+ self.right_margin = val
42
+ end
43
+ end
44
+
45
+ def setup_help_message
46
+ parser.on_tail("-h", "--help", "Show this message") do
47
+ puts parser
48
+ exit
49
+ end
50
+ end
51
+
52
+ def top_margin=(val)
53
+ @top_margin = Unit.new(val)
54
+ end
55
+
56
+ def bottom_margin=(val)
57
+ @bottom_margin = Unit.new(val)
58
+ end
59
+
60
+ def left_margin=(val)
61
+ @left_margin = Unit.new(val)
62
+ end
63
+
64
+ def right_margin=(val)
65
+ @right_margin = Unit.new(val)
13
66
  end
14
67
  end
15
68
  end
@@ -0,0 +1,25 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "gir_ffi-gtk3"
4
+
5
+ module GHtml2Pdf
6
+ # Specialized PrintSettings class for printing to a file.
7
+ class PrintSettings < Gtk::PrintSettings
8
+ def initialize
9
+ super
10
+ set_number_up 1
11
+ set_reverse false
12
+ set_print_pages :all
13
+ set "output-file-format", "pdf"
14
+ set_collate false
15
+ set_n_copies 1
16
+ set_printer "Print to File"
17
+ set_page_set :all
18
+ set_scale 100.0
19
+ end
20
+
21
+ def output_uri=(uri)
22
+ set "output-uri", uri
23
+ end
24
+ end
25
+ end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module GHtml2Pdf
2
- VERSION = '0.1.1'
4
+ VERSION = "0.4.0"
3
5
  end
metadata CHANGED
@@ -1,71 +1,127 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ghtml2pdf
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Matijs van Zuijlen
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-02-06 00:00:00.000000000 Z
11
+ date: 2021-08-11 00:00:00.000000000 Z
12
12
  dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: gir_ffi
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: 0.15.2
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: 0.15.2
13
27
  - !ruby/object:Gem::Dependency
14
28
  name: gir_ffi-gtk
15
29
  requirement: !ruby/object:Gem::Requirement
16
30
  requirements:
17
31
  - - "~>"
18
32
  - !ruby/object:Gem::Version
19
- version: 0.9.0
33
+ version: 0.15.0
20
34
  type: :runtime
21
35
  prerelease: false
22
36
  version_requirements: !ruby/object:Gem::Requirement
23
37
  requirements:
24
38
  - - "~>"
25
39
  - !ruby/object:Gem::Version
26
- version: 0.9.0
40
+ version: 0.15.0
27
41
  - !ruby/object:Gem::Dependency
28
- name: headless
42
+ name: ruby-units
29
43
  requirement: !ruby/object:Gem::Requirement
30
44
  requirements:
31
45
  - - "~>"
32
46
  - !ruby/object:Gem::Version
33
- version: 2.2.0
47
+ version: '2.2'
34
48
  type: :runtime
35
49
  prerelease: false
36
50
  version_requirements: !ruby/object:Gem::Requirement
37
51
  requirements:
38
52
  - - "~>"
39
53
  - !ruby/object:Gem::Version
40
- version: 2.2.0
54
+ version: '2.2'
41
55
  - !ruby/object:Gem::Dependency
42
- name: bundler
56
+ name: aruba
43
57
  requirement: !ruby/object:Gem::Requirement
44
58
  requirements:
45
59
  - - "~>"
46
60
  - !ruby/object:Gem::Version
47
- version: '1.7'
61
+ version: '2.0'
48
62
  type: :development
49
63
  prerelease: false
50
64
  version_requirements: !ruby/object:Gem::Requirement
51
65
  requirements:
52
66
  - - "~>"
53
67
  - !ruby/object:Gem::Version
54
- version: '1.7'
68
+ version: '2.0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: cucumber
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: '7.0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: '7.0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: pdf-reader
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: 2.5.0
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - "~>"
95
+ - !ruby/object:Gem::Version
96
+ version: 2.5.0
55
97
  - !ruby/object:Gem::Dependency
56
98
  name: rake
57
99
  requirement: !ruby/object:Gem::Requirement
58
100
  requirements:
59
101
  - - "~>"
60
102
  - !ruby/object:Gem::Version
61
- version: '10.0'
103
+ version: '13.0'
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - "~>"
109
+ - !ruby/object:Gem::Version
110
+ version: '13.0'
111
+ - !ruby/object:Gem::Dependency
112
+ name: rake-manifest
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - "~>"
116
+ - !ruby/object:Gem::Version
117
+ version: 0.2.0
62
118
  type: :development
63
119
  prerelease: false
64
120
  version_requirements: !ruby/object:Gem::Requirement
65
121
  requirements:
66
122
  - - "~>"
67
123
  - !ruby/object:Gem::Version
68
- version: '10.0'
124
+ version: 0.2.0
69
125
  - !ruby/object:Gem::Dependency
70
126
  name: rspec
71
127
  requirement: !ruby/object:Gem::Requirement
@@ -81,63 +137,63 @@ dependencies:
81
137
  - !ruby/object:Gem::Version
82
138
  version: '3.3'
83
139
  - !ruby/object:Gem::Dependency
84
- name: cucumber
140
+ name: rubocop
85
141
  requirement: !ruby/object:Gem::Requirement
86
142
  requirements:
87
143
  - - "~>"
88
144
  - !ruby/object:Gem::Version
89
- version: '2.1'
145
+ version: 1.18.1
90
146
  type: :development
91
147
  prerelease: false
92
148
  version_requirements: !ruby/object:Gem::Requirement
93
149
  requirements:
94
150
  - - "~>"
95
151
  - !ruby/object:Gem::Version
96
- version: '2.1'
152
+ version: 1.18.1
97
153
  - !ruby/object:Gem::Dependency
98
- name: aruba
154
+ name: rubocop-packaging
99
155
  requirement: !ruby/object:Gem::Requirement
100
156
  requirements:
101
157
  - - "~>"
102
158
  - !ruby/object:Gem::Version
103
- version: 0.12.0
159
+ version: 0.5.0
104
160
  type: :development
105
161
  prerelease: false
106
162
  version_requirements: !ruby/object:Gem::Requirement
107
163
  requirements:
108
164
  - - "~>"
109
165
  - !ruby/object:Gem::Version
110
- version: 0.12.0
166
+ version: 0.5.0
111
167
  - !ruby/object:Gem::Dependency
112
- name: pry
168
+ name: rubocop-performance
113
169
  requirement: !ruby/object:Gem::Requirement
114
170
  requirements:
115
- - - ">="
171
+ - - "~>"
116
172
  - !ruby/object:Gem::Version
117
- version: '0'
173
+ version: 1.11.0
118
174
  type: :development
119
175
  prerelease: false
120
176
  version_requirements: !ruby/object:Gem::Requirement
121
177
  requirements:
122
- - - ">="
178
+ - - "~>"
123
179
  - !ruby/object:Gem::Version
124
- version: '0'
180
+ version: 1.11.0
125
181
  - !ruby/object:Gem::Dependency
126
- name: pdf-reader
182
+ name: rubocop-rspec
127
183
  requirement: !ruby/object:Gem::Requirement
128
184
  requirements:
129
185
  - - "~>"
130
186
  - !ruby/object:Gem::Version
131
- version: 1.3.3
187
+ version: 2.4.0
132
188
  type: :development
133
189
  prerelease: false
134
190
  version_requirements: !ruby/object:Gem::Requirement
135
191
  requirements:
136
192
  - - "~>"
137
193
  - !ruby/object:Gem::Version
138
- version: 1.3.3
139
- description: "\n Clean Ruby implemenentation of a HTML to PDF\n converter based
140
- on WebKit, WebKit2GTK+ and GirFFI\n "
194
+ version: 2.4.0
195
+ description: Clean Ruby implemenentation of a HTML to PDF converter based on WebKit,
196
+ WebKit2GTK+ and GirFFI
141
197
  email:
142
198
  - matijs@matijs.net
143
199
  executables:
@@ -152,12 +208,16 @@ files:
152
208
  - lib/ghtml2pdf.rb
153
209
  - lib/ghtml2pdf/application.rb
154
210
  - lib/ghtml2pdf/argument_parser.rb
211
+ - lib/ghtml2pdf/print_settings.rb
155
212
  - lib/ghtml2pdf/version.rb
156
213
  homepage: https://github.com/mvz/ghtml2pdf
157
214
  licenses:
158
215
  - MIT
159
- metadata: {}
160
- post_install_message:
216
+ metadata:
217
+ homepage_uri: https://github.com/mvz/ghtml2pdf
218
+ source_code_uri: https://github.com/mvz/ghtml2pdf
219
+ changelog_uri: https://github.com/mvz/ghtml2pdf/blob/master/Changelog.md
220
+ post_install_message:
161
221
  rdoc_options: []
162
222
  require_paths:
163
223
  - lib
@@ -165,16 +225,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
165
225
  requirements:
166
226
  - - ">="
167
227
  - !ruby/object:Gem::Version
168
- version: '0'
228
+ version: 2.5.0
169
229
  required_rubygems_version: !ruby/object:Gem::Requirement
170
230
  requirements:
171
231
  - - ">="
172
232
  - !ruby/object:Gem::Version
173
233
  version: '0'
174
234
  requirements: []
175
- rubyforge_project:
176
- rubygems_version: 2.5.1
177
- signing_key:
235
+ rubygems_version: 3.2.22
236
+ signing_key:
178
237
  specification_version: 4
179
238
  summary: HTML to PDF converter based on WebKit2GTK+
180
239
  test_files: []