pdfmult 1.2.0 → 1.3.0

Sign up to get free protection for your applications and to get access to all the features.
data/README.md CHANGED
@@ -39,6 +39,10 @@ Use the program as shown in the examples below.
39
39
 
40
40
  processes the first 3 pages of `sample.pdf`
41
41
 
42
+ * `pdfmult sample.pdf -o - | lpr`
43
+
44
+ sends output via stdout to print command
45
+
42
46
  Installation
43
47
  ------------
44
48
 
data/lib/pdfmult.rb CHANGED
@@ -27,15 +27,18 @@
27
27
  #
28
28
  # -n, --number:: Number of copies to put on one page: 2 (default), 4, 8, 9, 16.
29
29
  #
30
- # -f, --force:: Do not prompt before overwriting.
30
+ # -f, --[no-]force:: Do not prompt before overwriting.
31
31
  #
32
32
  # -l, --latex:: Create a LaTeX file instead of a PDF file (default: infile_NUMBER.tex).
33
33
  #
34
34
  # -o, --output:: Output file (default: infile_NUMBER.pdf).
35
+ # Use - to output to stdout.
35
36
  #
36
37
  # -p, --pages:: Number of pages to convert.
37
38
  # If given, +pdfmult+ does not try to obtain the page count from the source PDF.
38
39
  #
40
+ # -s, --[no-]silent:: Do not output progress information.
41
+ #
39
42
  # -h, --help:: Prints a brief help message and exits.
40
43
  #
41
44
  # -v, --version:: Prints a brief version information and exits.
@@ -46,6 +49,7 @@
46
49
  # pdfmult -n 4 sample.pdf # => sample_4.pdf (4 copies)
47
50
  # pdfmult sample.pdf -o outfile.pdf # => outfile.pdf (2 copies)
48
51
  # pdfmult sample.pdf -p 3 # => processes 3 pages
52
+ # pdfmult sample.pdf -o - | lpr # => sends output via stdout to print command
49
53
  #
50
54
  # == Author
51
55
  #
@@ -58,17 +62,18 @@
58
62
  require 'optparse'
59
63
  require 'tempfile'
60
64
  require 'fileutils'
65
+ require 'open3'
61
66
 
62
- # This module contains the classes for the +pdfmult+ tool
67
+ # This module contains the classes for the +pdfmult+ tool.
63
68
  module Pdfmult
64
69
 
65
70
  PROGNAME = 'pdfmult'
66
- VERSION = '1.2.0'
67
- DATE = '2012-04-15'
71
+ VERSION = '1.3.0'
72
+ DATE = '2012-09-22'
68
73
  HOMEPAGE = 'https://github.com/stomar/pdfmult/'
69
74
 
70
75
  COPYRIGHT = "Copyright (C) 2011-2012 Marcus Stollsteimer.\n" +
71
- "License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>\n" +
76
+ "License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>.\n" +
72
77
  "This is free software: you are free to change and redistribute it.\n" +
73
78
  "There is NO WARRANTY, to the extent permitted by law."
74
79
 
@@ -94,6 +99,7 @@ module Pdfmult
94
99
  :latex => false,
95
100
  :number => 2,
96
101
  :outfile => nil,
102
+ :silent => false,
97
103
  :pages => nil
98
104
  }
99
105
 
@@ -138,8 +144,8 @@ module Pdfmult
138
144
  options[:number] = n
139
145
  end
140
146
 
141
- opt.on('-f', '--force', 'Do not prompt before overwriting.') do
142
- options[:force] = true
147
+ opt.on('-f', '--[no-]force', 'Do not prompt before overwriting.') do |f|
148
+ options[:force] = f
143
149
  end
144
150
 
145
151
  opt.on('-l', '--latex', 'Create a LaTeX file instead of a PDF file (default: file_2.tex).') do
@@ -147,7 +153,7 @@ module Pdfmult
147
153
  end
148
154
 
149
155
  opt.on('-o', '--output FILE', String,
150
- 'Output file (default: file_2.pdf).') do |f|
156
+ 'Output file (default: file_2.pdf). Use - to output to stdout.') do |f|
151
157
  options[:outfile] = f
152
158
  end
153
159
 
@@ -158,6 +164,10 @@ module Pdfmult
158
164
  options[:pages] = p
159
165
  end
160
166
 
167
+ opt.on('-s', '--[no-]silent', 'Do not output progress information.') do |s|
168
+ options[:silent] = s
169
+ end
170
+
161
171
  opt.separator ''
162
172
  end
163
173
  opt_parser.parse!(argv)
@@ -198,7 +208,7 @@ module Pdfmult
198
208
  "\\includepdf[pages={PAGES},nup=GEOMETRY]{FILENAME}%\n"
199
209
 
200
210
  FOOTER =
201
- '\end{document}'
211
+ "\\end{document}\n"
202
212
 
203
213
  # Initializes a LaTeXDocument instance.
204
214
  #
@@ -230,7 +240,10 @@ module Pdfmult
230
240
  geometry = '4x4'
231
241
  end
232
242
 
233
- content_template = CONTENT.gsub(/PAGES/, page_string).gsub(/GEOMETRY/, geometry).gsub(/FILENAME/, @infile)
243
+ content_template = CONTENT.gsub(/PAGES|GEOMETRY|FILENAME/,
244
+ 'PAGES' => page_string,
245
+ 'GEOMETRY' => geometry,
246
+ 'FILENAME' => @infile)
234
247
 
235
248
  content = HEADER.gsub(/CLASSOPTIONS/, class_options)
236
249
  @page_count.times do |i|
@@ -299,6 +312,8 @@ module Pdfmult
299
312
 
300
313
  infile = options[:infile]
301
314
  outfile = options[:outfile]
315
+ use_stdout = (outfile == '-')
316
+ silent = options[:silent]
302
317
 
303
318
  # test for pdflatex installation
304
319
  unless options[:latex]
@@ -312,7 +327,7 @@ module Pdfmult
312
327
  usage_fail("specified input not of the type `file'") unless File.ftype(infile) == 'file'
313
328
 
314
329
  # test for existing output file
315
- if File.exist?(outfile) and !options[:force]
330
+ if !use_stdout and !options[:force] and File.exist?(outfile)
316
331
  overwrite_ok = ask("File `#{outfile}' already exists. Overwrite?")
317
332
  exit unless overwrite_ok
318
333
  end
@@ -326,16 +341,29 @@ module Pdfmult
326
341
  document = LaTeXDocument.new(infile, options[:number], pages)
327
342
 
328
343
  if options[:latex]
329
- open(outfile, 'w') {|f| f.write(document.to_s) }
344
+ if use_stdout
345
+ puts document.to_s
346
+ else
347
+ warn "Writing on #{outfile}." unless silent
348
+ open(outfile, 'w') {|f| f.write(document.to_s) }
349
+ end
330
350
  else
331
351
  Dir.mktmpdir('pdfmult') do |dir|
332
- open("#{dir}/pdfmult.tex", 'w') do |f|
333
- pdfpath = "#{dir}/pdfmult.pdf"
334
- f.write(document.to_s)
335
- f.flush
336
- system("#{PDFLATEX} -output-directory #{dir} pdfmult.tex")
337
- puts "Writing on #{outfile}."
338
- FileUtils::mv(pdfpath, outfile)
352
+ texfile = 'pdfmult.tex'
353
+ pdffile = 'pdfmult.pdf'
354
+ open("#{dir}/#{texfile}", 'w') {|f| f.write(document.to_s) }
355
+ command = "#{PDFLATEX} -output-directory #{dir} #{texfile}"
356
+ Open3.popen3(command) do |stdin, stdout, stderr|
357
+ stdout.each_line {|line| warn line.chomp } unless silent # redirect progress messages to stderr
358
+ stderr.read # make sure all streams are read (and command has finished)
359
+ end
360
+ if use_stdout
361
+ File.open("#{dir}/#{pdffile}") do |f|
362
+ f.each_line {|line| puts line }
363
+ end
364
+ else
365
+ warn "Writing on #{outfile}." unless silent
366
+ FileUtils::mv("#{dir}/#{pdffile}", outfile)
339
367
  end
340
368
  end
341
369
  end
@@ -348,11 +376,11 @@ module Pdfmult
348
376
  # Returns +true+ if the answer is yes.
349
377
  def self.ask(question) # :nodoc:
350
378
  while true
351
- print "#{question} [y/n] "
379
+ $stderr.print "#{question} [y/n] "
352
380
  reply = $stdin.gets.chomp.downcase # $stdin: avoids gets / ARGV problem
353
381
  return true if reply == 'y'
354
382
  return false if reply == 'n'
355
- puts "Please answer `y' or `n'."
383
+ warn "Please answer `y' or `n'."
356
384
  end
357
385
  end
358
386
 
data/man/pdfmult.1 CHANGED
@@ -1,5 +1,5 @@
1
1
  .\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.40.4.
2
- .TH PDFMULT "1" "April 2012" "pdfmult 1.2.0" "User Commands"
2
+ .TH PDFMULT "1" "September 2012" "pdfmult 1.3.0" "User Commands"
3
3
  .SH NAME
4
4
  pdfmult \- puts multiple copies of a PDF page on one page
5
5
  .SH SYNOPSIS
@@ -25,19 +25,22 @@ and a LaTeX file is created instead of a PDF.
25
25
  \fB\-n\fR, \fB\-\-number\fR NUMBER
26
26
  Number of copies to put on one page: 2 (default), 4, 8, 9, 16.
27
27
  .TP
28
- \fB\-f\fR, \fB\-\-force\fR
28
+ \fB\-f\fR, \fB\-\-[no\-]force\fR
29
29
  Do not prompt before overwriting.
30
30
  .TP
31
31
  \fB\-l\fR, \fB\-\-latex\fR
32
32
  Create a LaTeX file instead of a PDF file (default: file_2.tex).
33
33
  .TP
34
34
  \fB\-o\fR, \fB\-\-output\fR FILE
35
- Output file (default: file_2.pdf).
35
+ Output file (default: file_2.pdf). Use \- to output to stdout.
36
36
  .TP
37
37
  \fB\-p\fR, \fB\-\-pages\fR NUMBER
38
38
  Number of pages to convert.
39
39
  If given, pdfmult does not try to obtain the page count from the source PDF.
40
40
  .TP
41
+ \fB\-s\fR, \fB\-\-[no\-]silent\fR
42
+ Do not output progress information.
43
+ .TP
41
44
  \fB\-h\fR, \fB\-\-help\fR
42
45
  Prints a brief help message and exits.
43
46
  .TP
@@ -48,12 +51,13 @@ Prints a brief version information and exits.
48
51
  pdfmult -n 4 sample.pdf # => sample_4.pdf (4 copies)
49
52
  pdfmult sample.pdf -o outfile.pdf # => outfile.pdf (2 copies)
50
53
  pdfmult sample.pdf -p 3 # => processes 3 pages
54
+ pdfmult sample.pdf -o - | lpr # => sends output via stdout to print command
51
55
  .SH "REPORTING BUGS"
52
56
  Report bugs on the pdfmult home page: <https://github.com/stomar/pdfmult/>
53
57
  .SH COPYRIGHT
54
58
  Copyright \(co 2011\-2012 Marcus Stollsteimer.
55
59
  .br
56
- License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
60
+ License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>.
57
61
  .br
58
62
  This is free software: you are free to change and redistribute it.
59
63
  .br
data/pdfmult.gemspec CHANGED
@@ -1,4 +1,4 @@
1
- require 'lib/pdfmult'
1
+ require './lib/pdfmult'
2
2
 
3
3
  version = Pdfmult::VERSION
4
4
  date = Pdfmult::DATE
data/pdfmult.h2m CHANGED
@@ -6,3 +6,4 @@ pdfmult \- puts multiple copies of a PDF page on one page
6
6
  pdfmult -n 4 sample.pdf # => sample_4.pdf (4 copies)
7
7
  pdfmult sample.pdf -o outfile.pdf # => outfile.pdf (2 copies)
8
8
  pdfmult sample.pdf -p 3 # => processes 3 pages
9
+ pdfmult sample.pdf -o - | lpr # => sends output via stdout to print command
@@ -18,7 +18,8 @@ describe Pdfmult::Optionparser do
18
18
  :latex => false,
19
19
  :number => 2,
20
20
  :outfile => 'sample_2.pdf',
21
- :pages => nil
21
+ :pages => nil,
22
+ :silent => false
22
23
  }
23
24
  options.must_equal expected
24
25
  end
@@ -48,6 +49,11 @@ describe Pdfmult::Optionparser do
48
49
  options[:force].must_equal true
49
50
  end
50
51
 
52
+ it 'should recognize the --no-force option' do
53
+ options = Pdfmult::Optionparser.parse!(['sample.pdf', '--no-force'])
54
+ options[:force].must_equal false
55
+ end
56
+
51
57
  it 'should recognize the -l option and set the corresponding output filename' do
52
58
  options = Pdfmult::Optionparser.parse!(['sample.pdf', '-l'])
53
59
  options[:outfile].must_equal 'sample_2.tex'
@@ -60,6 +66,16 @@ describe Pdfmult::Optionparser do
60
66
  lambda { Pdfmult::Optionparser.parse!(['sample.pdf', '-p', '-1']) }.must_raise OptionParser::InvalidArgument
61
67
  end
62
68
 
69
+ it 'should recognize the -s option' do
70
+ options = Pdfmult::Optionparser.parse!(['sample.pdf', '-s'])
71
+ options[:silent].must_equal true
72
+ end
73
+
74
+ it 'should recognize the --no-silent option' do
75
+ options = Pdfmult::Optionparser.parse!(['sample.pdf', '--no-silent'])
76
+ options[:silent].must_equal false
77
+ end
78
+
63
79
  it 'should not accept wrong number of arguments' do
64
80
  lambda { Pdfmult::Optionparser.parse!(['sample.pdf', 'sample2.pdf']) }.must_raise ArgumentError
65
81
  lambda { Pdfmult::Optionparser.parse!(['']) }.must_raise ArgumentError
metadata CHANGED
@@ -1,59 +1,56 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: pdfmult
3
- version: !ruby/object:Gem::Version
4
- hash: 31
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.3.0
5
5
  prerelease:
6
- segments:
7
- - 1
8
- - 2
9
- - 0
10
- version: 1.2.0
11
6
  platform: ruby
12
- authors:
7
+ authors:
13
8
  - Marcus Stollsteimer
14
9
  autorequire:
15
10
  bindir: bin
16
11
  cert_chain: []
17
-
18
- date: 2012-04-15 00:00:00 Z
19
- dependencies:
20
- - !ruby/object:Gem::Dependency
12
+ date: 2012-09-22 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
21
15
  name: rake
22
- prerelease: false
23
- requirement: &id001 !ruby/object:Gem::Requirement
16
+ requirement: !ruby/object:Gem::Requirement
24
17
  none: false
25
- requirements:
26
- - - ">="
27
- - !ruby/object:Gem::Version
28
- hash: 3
29
- segments:
30
- - 0
31
- version: "0"
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: '0'
32
22
  type: :development
33
- version_requirements: *id001
34
- - !ruby/object:Gem::Dependency
35
- name: minitest
36
23
  prerelease: false
37
- requirement: &id002 !ruby/object:Gem::Requirement
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ! '>='
28
+ - !ruby/object:Gem::Version
29
+ version: '0'
30
+ - !ruby/object:Gem::Dependency
31
+ name: minitest
32
+ requirement: !ruby/object:Gem::Requirement
38
33
  none: false
39
- requirements:
40
- - - ">="
41
- - !ruby/object:Gem::Version
42
- hash: 3
43
- segments:
44
- - 0
45
- version: "0"
34
+ requirements:
35
+ - - ! '>='
36
+ - !ruby/object:Gem::Version
37
+ version: '0'
46
38
  type: :development
47
- version_requirements: *id002
48
- description: pdfmult is a command line tool that rearranges multiple copies of a PDF page (shrunken) on one page. It is a wrapper for pdflatex with the pdfpages package.
39
+ prerelease: false
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ! '>='
44
+ - !ruby/object:Gem::Version
45
+ version: '0'
46
+ description: pdfmult is a command line tool that rearranges multiple copies of a PDF
47
+ page (shrunken) on one page. It is a wrapper for pdflatex with the pdfpages package.
49
48
  email: sto.mar@web.de
50
- executables:
49
+ executables:
51
50
  - pdfmult
52
51
  extensions: []
53
-
54
52
  extra_rdoc_files: []
55
-
56
- files:
53
+ files:
57
54
  - README.md
58
55
  - Rakefile
59
56
  - pdfmult.gemspec
@@ -71,39 +68,34 @@ files:
71
68
  - test/test_optionparser.rb
72
69
  - test/sample.pdf
73
70
  homepage: https://github.com/stomar/pdfmult/
74
- licenses:
71
+ licenses:
75
72
  - GPL-3
76
73
  post_install_message:
77
- rdoc_options:
74
+ rdoc_options:
78
75
  - --charset=UTF-8
79
- require_paths:
76
+ require_paths:
80
77
  - lib
81
- required_ruby_version: !ruby/object:Gem::Requirement
78
+ required_ruby_version: !ruby/object:Gem::Requirement
82
79
  none: false
83
- requirements:
84
- - - ">="
85
- - !ruby/object:Gem::Version
86
- hash: 3
87
- segments:
88
- - 0
89
- version: "0"
90
- required_rubygems_version: !ruby/object:Gem::Requirement
80
+ requirements:
81
+ - - ! '>='
82
+ - !ruby/object:Gem::Version
83
+ version: '0'
84
+ required_rubygems_version: !ruby/object:Gem::Requirement
91
85
  none: false
92
- requirements:
93
- - - ">="
94
- - !ruby/object:Gem::Version
95
- hash: 3
96
- segments:
97
- - 0
98
- version: "0"
99
- requirements:
86
+ requirements:
87
+ - - ! '>='
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ requirements:
100
91
  - pdflatex and the pdfpages package
101
92
  rubyforge_project: pdfmult
102
- rubygems_version: 1.7.2
93
+ rubygems_version: 1.8.24
103
94
  signing_key:
104
95
  specification_version: 3
105
96
  summary: pdfmult - puts multiple copies of a PDF page on one page
106
- test_files:
97
+ test_files:
107
98
  - test/test_pdfinfo.rb
108
99
  - test/test_latex_document.rb
109
100
  - test/test_optionparser.rb
101
+ has_rdoc: