pdftoimage 0.1.6 → 0.1.7
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 +7 -0
- data/{LICENSE.txt → LICENSE} +0 -0
- data/lib/pdftoimage.rb +87 -89
- data/lib/pdftoimage/image.rb +113 -112
- data/lib/pdftoimage/version.rb +2 -2
- metadata +42 -75
- data/.bundle/config +0 -2
- data/.document +0 -3
- data/.rspec +0 -1
- data/.yardopts +0 -1
- data/Gemfile +0 -12
- data/Gemfile.lock +0 -35
- data/Rakefile +0 -26
- data/gemspec.yml +0 -13
- data/pdftoimage.gemspec +0 -15
- data/spec/10pages.pdf +0 -0
- data/spec/11pages.pdf +0 -0
- data/spec/3pages.pdf +0 -0
- data/spec/pdftoimage_spec.rb +0 -83
- data/spec/spec_helper.rb +0 -13
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: eebf9a790b95c556d3b47ba87bd69998ccd15529
|
4
|
+
data.tar.gz: bc3a5653ae433aee369c98325f0358c1fec53d47
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 7d13c5805d512c7bceba7f9da7bab1f74fcc9e5fbbca9f1c951abc08614818ce97835b44b8f5cf33eddb903fc1b7ee042d453cc7cbb9742943425616504bc634
|
7
|
+
data.tar.gz: b4c38f9539b6050e52c4b5cca7971bfb78f5357dae0b17807be779832e3706f062b7a6bf65dd740648c1ac9b7e951b516ef6f6da1d7985409685792a17a0f157
|
data/{LICENSE.txt → LICENSE}
RENAMED
File without changes
|
data/lib/pdftoimage.rb
CHANGED
@@ -1,117 +1,115 @@
|
|
1
|
-
require 'tmpdir'
|
2
1
|
require 'pdftoimage/version'
|
3
2
|
require 'pdftoimage/image'
|
3
|
+
|
4
|
+
require 'tmpdir'
|
4
5
|
require 'iconv'
|
5
6
|
|
6
7
|
module PDFToImage
|
7
|
-
|
8
|
+
class PDFError < RuntimeError; end
|
8
9
|
end
|
9
10
|
|
10
11
|
module PDFToImage
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
begin
|
22
|
-
tmp = `identify -version 2>&1`
|
23
|
-
raise(PDFToImage::PDFError, "ImageMagick not installed") unless tmp.index('ImageMagick')
|
24
|
-
rescue Errno::ENOENT
|
25
|
-
raise PDFToImage::PDFError, "ImageMagick not installed"
|
26
|
-
end
|
27
|
-
|
28
|
-
class << self
|
12
|
+
# A class variable for storing the location of our temp folder
|
13
|
+
@@pdf_temp_dir = File.join(Dir.tmpdir())
|
14
|
+
|
15
|
+
begin
|
16
|
+
tmp = `pdftoppm -v 2>&1`
|
17
|
+
raise(PDFToImage::PDFError, "poppler_utils not installed") unless tmp.index('Poppler')
|
18
|
+
rescue Errno::ENOENT
|
19
|
+
raise PDFToImage::PDFError, "poppler_utils not installed"
|
20
|
+
end
|
29
21
|
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
raise PDFError, "File '#{filename}' not found."
|
37
|
-
end
|
22
|
+
begin
|
23
|
+
tmp = `identify -version 2>&1`
|
24
|
+
raise(PDFToImage::PDFError, "ImageMagick not installed") unless tmp.index('ImageMagick')
|
25
|
+
rescue Errno::ENOENT
|
26
|
+
raise PDFToImage::PDFError, "ImageMagick not installed"
|
27
|
+
end
|
38
28
|
|
39
|
-
|
29
|
+
class << self
|
30
|
+
# Opens a PDF document and prepares it for splitting into images.
|
31
|
+
#
|
32
|
+
# @param filename [String] The filename of the PDF to open
|
33
|
+
#
|
34
|
+
# @return [Array] An array of images
|
35
|
+
def open(filename, &block)
|
36
|
+
if not File.exists?(filename)
|
37
|
+
raise PDFError, "File '#{filename}' not found."
|
38
|
+
end
|
40
39
|
|
41
|
-
|
42
|
-
images = []
|
40
|
+
pages = page_count(filename)
|
43
41
|
|
44
|
-
|
45
|
-
|
46
|
-
image = Image.new(filename, random_filename, n, dimensions, pages)
|
47
|
-
images << image
|
48
|
-
}
|
42
|
+
# Array of images
|
43
|
+
images = []
|
49
44
|
|
50
|
-
|
45
|
+
1.upto(pages) { |n|
|
46
|
+
dimensions = page_size(filename, n)
|
47
|
+
image = Image.new(filename, random_filename, n, dimensions, pages)
|
48
|
+
images << image
|
49
|
+
}
|
51
50
|
|
52
|
-
|
51
|
+
images.each(&block) if block_given?
|
53
52
|
|
54
|
-
|
55
|
-
|
56
|
-
# Executes the specified command, returning the output.
|
57
|
-
#
|
58
|
-
# @param [cmd] The command to run
|
59
|
-
# @return [String] The output of the command
|
60
|
-
def exec(cmd, error = nil)
|
61
|
-
output = `#{cmd}`
|
62
|
-
if $? != 0
|
63
|
-
if error == nil
|
64
|
-
raise PDFError, "Error executing command: #{cmd}"
|
65
|
-
else
|
66
|
-
raise PDFError, error
|
53
|
+
return images
|
67
54
|
end
|
68
|
-
end
|
69
55
|
|
70
|
-
|
71
|
-
|
56
|
+
# Executes the specified command, returning the output.
|
57
|
+
#
|
58
|
+
# @param cmd [String] The command to run
|
59
|
+
# @return [String] The output of the command
|
60
|
+
def exec(cmd, error = nil)
|
61
|
+
output = `#{cmd}`
|
62
|
+
if $? != 0
|
63
|
+
if error == nil
|
64
|
+
raise PDFError, "Error executing command: #{cmd}"
|
65
|
+
else
|
66
|
+
raise PDFError, error
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
return output
|
71
|
+
end
|
72
72
|
|
73
|
-
|
73
|
+
private
|
74
74
|
|
75
|
-
|
76
|
-
|
77
|
-
|
75
|
+
def page_size(filename, page)
|
76
|
+
cmd = "pdfinfo -f #{page} -l #{page} #{filename} | grep Page"
|
77
|
+
output = exec(cmd)
|
78
78
|
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
79
|
+
matches = /^Page.*?size:.*?(\d+).*?(\d+)/.match(output)
|
80
|
+
if matches.nil?
|
81
|
+
raise PDFError, "Unable to determine page size."
|
82
|
+
end
|
83
83
|
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
84
|
+
scale = 2.08333333333333333
|
85
|
+
dimension = {
|
86
|
+
width: (matches[1].to_i * scale).to_i,
|
87
|
+
height: (matches[2].to_i * scale).to_i
|
88
|
+
}
|
89
89
|
|
90
|
-
|
91
|
-
|
90
|
+
dimension
|
91
|
+
end
|
92
92
|
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
93
|
+
def page_count(filename)
|
94
|
+
cmd = "pdfinfo #{filename} | grep Pages"
|
95
|
+
output = exec(cmd)
|
96
|
+
matches = /^Pages:.*?(\d+)$/.match(output)
|
97
|
+
if matches.nil?
|
98
|
+
raise PDFError, "Error determining page count."
|
99
|
+
end
|
100
100
|
|
101
|
-
|
102
|
-
|
101
|
+
return matches[1].to_i
|
102
|
+
end
|
103
103
|
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
104
|
+
# Generate a random file name in the system's tmp folder
|
105
|
+
def random_filename
|
106
|
+
File.join(@@pdf_temp_dir, random_name)
|
107
|
+
end
|
108
108
|
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
109
|
+
# Generate a random name of {#length} characters.
|
110
|
+
def random_name(length = 15)
|
111
|
+
@@chars ||= ("a".."z").to_a + ("A".."Z").to_a + ("1".."9").to_a
|
112
|
+
return 'pdftoimage-' + Array.new(length, '').collect { @@chars[rand(@@chars.size)] }.join
|
113
|
+
end
|
113
114
|
end
|
114
|
-
|
115
|
-
end
|
116
|
-
|
117
115
|
end
|
data/lib/pdftoimage/image.rb
CHANGED
@@ -1,115 +1,116 @@
|
|
1
1
|
module PDFToImage
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
2
|
+
# A class which is instantiated by PDFToImage when a PDF document
|
3
|
+
# is opened.
|
4
|
+
class Image
|
5
|
+
attr_reader :pdf_name
|
6
|
+
attr_reader :filename
|
7
|
+
attr_reader :width
|
8
|
+
attr_reader :height
|
9
|
+
attr_reader :page
|
10
|
+
attr_reader :args
|
11
|
+
attr_reader :opened
|
12
|
+
|
13
|
+
# ImageMagick methods that we currently support.
|
14
|
+
CUSTOM_IMAGE_METHODS = [
|
15
|
+
"resize",
|
16
|
+
"quality"
|
17
|
+
]
|
18
|
+
|
19
|
+
CUSTOM_IMAGE_METHODS.each do |method|
|
20
|
+
define_method(method.to_sym) do |*args|
|
21
|
+
@args << "-#{method} #{args.join(' ')}"
|
22
|
+
|
23
|
+
self
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
# Image constructor
|
28
|
+
#
|
29
|
+
# @param pdf_name [String] The name of the PDF
|
30
|
+
# @param filename [String] The name of the image for the specified page
|
31
|
+
# @param page [Integer] The page number of the PDF
|
32
|
+
# @param page_size [Hash] Hash containing width and height dimensions of the page
|
33
|
+
# @param page_count [integer] The number of pages in the PDF
|
34
|
+
#
|
35
|
+
def initialize(pdf_name, filename, page, page_size, page_count)
|
36
|
+
@args = []
|
37
|
+
|
38
|
+
@pdf_name = pdf_name
|
39
|
+
@filename = filename
|
40
|
+
@opened = false
|
41
|
+
@width = page_size[:width]
|
42
|
+
@height = page_size[:height]
|
43
|
+
@page_count = page_count
|
44
|
+
|
45
|
+
@page = page
|
46
|
+
end
|
47
|
+
|
48
|
+
# Saves the converted image to the specified location
|
49
|
+
#
|
50
|
+
# @param outname [String] The output filename of the image
|
51
|
+
#
|
52
|
+
def save(outname)
|
53
|
+
generate_temp_file
|
54
|
+
|
55
|
+
cmd = "convert "
|
56
|
+
|
57
|
+
if not @args.empty?
|
58
|
+
cmd += "#{@args.join(' ')} "
|
59
|
+
end
|
60
|
+
|
61
|
+
cmd += "#{@filename} #{outname}"
|
62
|
+
|
63
|
+
PDFToImage.exec(cmd)
|
64
|
+
|
65
|
+
return true
|
66
|
+
end
|
67
|
+
|
68
|
+
def <=>(img)
|
69
|
+
if @page == img.page
|
70
|
+
return 0
|
71
|
+
elsif @page < img.page
|
72
|
+
return -1
|
73
|
+
else
|
74
|
+
return 1
|
75
|
+
end
|
76
|
+
end
|
77
|
+
|
78
|
+
private
|
79
|
+
|
80
|
+
def generate_temp_file
|
81
|
+
if @opened == false
|
82
|
+
cmd = "pdftoppm -png -f #{@page} -l #{@page} #{@pdf_name} #{@filename}"
|
83
|
+
PDFToImage.exec(cmd)
|
84
|
+
@filename = "#{@filename}-#{page_suffix}.png"
|
85
|
+
@opened = true
|
86
|
+
end
|
87
|
+
|
88
|
+
return true
|
89
|
+
end
|
90
|
+
|
91
|
+
def page_suffix
|
92
|
+
cur_page_len = @page.to_s.length
|
93
|
+
total_page_len = @page_count.to_s.length
|
94
|
+
|
95
|
+
num_zeroes = total_page_len - cur_page_len
|
96
|
+
|
97
|
+
# This is really weird. Basically, poppler_utils does not
|
98
|
+
# prepend a '0' to the page count when the total number of
|
99
|
+
# pages is 10, 100, 1000, 10000, etc. I hate putting this here,
|
100
|
+
# but whatever...
|
101
|
+
|
102
|
+
# TODO: Keep an eye on this. This suddenly started causing problems.
|
103
|
+
# Did poppler_utils change?
|
104
|
+
# if @page_count.to_s.reverse.to_i == 1 && num_zeroes > 0
|
105
|
+
# num_zeroes = num_zeroes - 1
|
106
|
+
# end
|
107
|
+
|
108
|
+
if cur_page_len == total_page_len
|
109
|
+
@page
|
110
|
+
end
|
111
|
+
|
112
|
+
padded = '0' * num_zeroes + @page.to_s
|
113
|
+
padded
|
114
|
+
end
|
73
115
|
end
|
74
|
-
|
75
|
-
private
|
76
|
-
|
77
|
-
def generate_temp_file
|
78
|
-
if @opened == false
|
79
|
-
cmd = "pdftoppm -png -f #{@page} -l #{@page} #{@pdf_name} #{@filename}"
|
80
|
-
PDFToImage::exec(cmd)
|
81
|
-
@filename = "#{@filename}-#{page_suffix}.png"
|
82
|
-
@opened = true
|
83
|
-
end
|
84
|
-
|
85
|
-
return true
|
86
|
-
end
|
87
|
-
|
88
|
-
def page_suffix
|
89
|
-
cur_page_len = @page.to_s.length
|
90
|
-
total_page_len = @page_count.to_s.length
|
91
|
-
|
92
|
-
num_zeroes = total_page_len - cur_page_len
|
93
|
-
|
94
|
-
# This is really weird. Basically, poppler_utils does not
|
95
|
-
# prepend a '0' to the page count when the total number of
|
96
|
-
# pages is 10, 100, 1000, 10000, etc. I hate putting this here,
|
97
|
-
# but whatever...
|
98
|
-
|
99
|
-
# TODO: Keep an eye on this. This suddenly started causing problems.
|
100
|
-
# Did poppler_utils change?
|
101
|
-
# if @page_count.to_s.reverse.to_i == 1 && num_zeroes > 0
|
102
|
-
# num_zeroes = num_zeroes - 1
|
103
|
-
# end
|
104
|
-
|
105
|
-
if cur_page_len == total_page_len
|
106
|
-
@page
|
107
|
-
end
|
108
|
-
|
109
|
-
padded = '0' * num_zeroes + @page.to_s
|
110
|
-
padded
|
111
|
-
end
|
112
|
-
|
113
|
-
end
|
114
|
-
|
115
116
|
end
|
data/lib/pdftoimage/version.rb
CHANGED
metadata
CHANGED
@@ -1,99 +1,66 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: pdftoimage
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
|
5
|
-
version: 0.1.6
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.7
|
6
5
|
platform: ruby
|
7
|
-
authors:
|
6
|
+
authors:
|
8
7
|
- Rob Flynn
|
9
8
|
autorequire:
|
10
9
|
bindir: bin
|
11
10
|
cert_chain: []
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
11
|
+
date: 2018-05-01 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: iconv
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '1.0'
|
20
|
+
type: :runtime
|
18
21
|
prerelease: false
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
- !ruby/object:Gem::Dependency
|
28
|
-
name: yard
|
29
|
-
prerelease: false
|
30
|
-
requirement: &id002 !ruby/object:Gem::Requirement
|
31
|
-
none: false
|
32
|
-
requirements:
|
33
|
-
- - ~>
|
34
|
-
- !ruby/object:Gem::Version
|
35
|
-
version: 0.6.0
|
36
|
-
type: :development
|
37
|
-
version_requirements: *id002
|
38
|
-
description: A ruby gem for converting PDF documents into a series of images. This module is based off poppler_utils and ImageMagick.
|
39
|
-
email:
|
40
|
-
- rob@thingerly.com
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '1.0'
|
27
|
+
description: A ruby gem for converting PDF documents into a series of images. This
|
28
|
+
module is based off poppler_utils and ImageMagick.
|
29
|
+
email: rob@thingerly.com
|
41
30
|
executables: []
|
42
|
-
|
43
31
|
extensions: []
|
44
|
-
|
45
|
-
|
46
|
-
- README.rdoc
|
47
|
-
- ChangeLog.rdoc
|
48
|
-
- LICENSE.txt
|
49
|
-
files:
|
50
|
-
- .bundle/config
|
51
|
-
- .document
|
52
|
-
- .rspec
|
53
|
-
- .yardopts
|
32
|
+
extra_rdoc_files: []
|
33
|
+
files:
|
54
34
|
- ChangeLog.rdoc
|
55
|
-
-
|
56
|
-
- Gemfile.lock
|
57
|
-
- LICENSE.txt
|
35
|
+
- LICENSE
|
58
36
|
- README.rdoc
|
59
|
-
- Rakefile
|
60
|
-
- gemspec.yml
|
61
37
|
- lib/pdftoimage.rb
|
62
38
|
- lib/pdftoimage/image.rb
|
63
39
|
- lib/pdftoimage/version.rb
|
64
|
-
- pdftoimage.gemspec
|
65
|
-
- spec/10pages.pdf
|
66
|
-
- spec/11pages.pdf
|
67
|
-
- spec/3pages.pdf
|
68
|
-
- spec/pdftoimage_spec.rb
|
69
|
-
- spec/spec_helper.rb
|
70
|
-
has_rdoc: yard
|
71
40
|
homepage: https://github.com/robflynn/pdftoimage
|
72
|
-
licenses:
|
41
|
+
licenses:
|
73
42
|
- MIT
|
43
|
+
metadata:
|
44
|
+
changelog_uri: https://github.com/robflynn/pdftoimage/blob/master/ChangeLog.rdoc
|
45
|
+
source_code_uri: https://github.com/robflynn/pdftoimage/
|
74
46
|
post_install_message:
|
75
47
|
rdoc_options: []
|
76
|
-
|
77
|
-
require_paths:
|
48
|
+
require_paths:
|
78
49
|
- lib
|
79
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
80
|
-
|
81
|
-
requirements:
|
50
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
82
52
|
- - ">="
|
83
|
-
- !ruby/object:Gem::Version
|
84
|
-
version:
|
85
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
86
|
-
|
87
|
-
requirements:
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
55
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
56
|
+
requirements:
|
88
57
|
- - ">="
|
89
|
-
- !ruby/object:Gem::Version
|
90
|
-
version:
|
58
|
+
- !ruby/object:Gem::Version
|
59
|
+
version: '0'
|
91
60
|
requirements: []
|
92
|
-
|
93
|
-
|
94
|
-
rubygems_version: 1.6.2
|
61
|
+
rubyforge_project:
|
62
|
+
rubygems_version: 2.6.14.1
|
95
63
|
signing_key:
|
96
|
-
specification_version:
|
64
|
+
specification_version: 4
|
97
65
|
summary: A ruby gem for converting PDF documents into a series of images.
|
98
|
-
test_files:
|
99
|
-
- spec/pdftoimage_spec.rb
|
66
|
+
test_files: []
|
data/.bundle/config
DELETED
data/.document
DELETED
data/.rspec
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
--colour --format documentation
|
data/.yardopts
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
--markup rdoc --title "pdftoimage Documentation" --protected
|
data/Gemfile
DELETED
data/Gemfile.lock
DELETED
@@ -1,35 +0,0 @@
|
|
1
|
-
PATH
|
2
|
-
remote: .
|
3
|
-
specs:
|
4
|
-
pdftoimage (0.1.6)
|
5
|
-
|
6
|
-
GEM
|
7
|
-
remote: http://rubygems.org/
|
8
|
-
specs:
|
9
|
-
autotest (4.4.4)
|
10
|
-
diff-lcs (1.1.2)
|
11
|
-
ore-core (0.1.5)
|
12
|
-
rake (0.8.7)
|
13
|
-
rspec (2.1.0)
|
14
|
-
rspec-core (~> 2.1.0)
|
15
|
-
rspec-expectations (~> 2.1.0)
|
16
|
-
rspec-mocks (~> 2.1.0)
|
17
|
-
rspec-core (2.1.0)
|
18
|
-
rspec-expectations (2.1.0)
|
19
|
-
diff-lcs (~> 1.1.2)
|
20
|
-
rspec-mocks (2.1.0)
|
21
|
-
spork (0.8.4)
|
22
|
-
yard (0.6.2)
|
23
|
-
|
24
|
-
PLATFORMS
|
25
|
-
ruby
|
26
|
-
|
27
|
-
DEPENDENCIES
|
28
|
-
autotest
|
29
|
-
bundler (~> 1.0.0)
|
30
|
-
ore-core (~> 0.1.0)
|
31
|
-
pdftoimage!
|
32
|
-
rake (~> 0.8.7)
|
33
|
-
rspec (>= 2.1.0)
|
34
|
-
spork
|
35
|
-
yard (~> 0.6.0)
|
data/Rakefile
DELETED
@@ -1,26 +0,0 @@
|
|
1
|
-
require 'rubygems'
|
2
|
-
|
3
|
-
begin
|
4
|
-
require 'bundler'
|
5
|
-
rescue LoadError => e
|
6
|
-
STDERR.puts e.message
|
7
|
-
STDERR.puts "Run `gem install bundler` to install Bundler."
|
8
|
-
exit e.status_code
|
9
|
-
end
|
10
|
-
|
11
|
-
begin
|
12
|
-
Bundler.setup(:development)
|
13
|
-
rescue Bundler::BundlerError => e
|
14
|
-
STDERR.puts e.message
|
15
|
-
STDERR.puts "Run `bundle install` to install missing gems."
|
16
|
-
exit e.status_code
|
17
|
-
end
|
18
|
-
|
19
|
-
require 'rake'
|
20
|
-
|
21
|
-
require 'rspec/core/rake_task'
|
22
|
-
RSpec::Core::RakeTask.new
|
23
|
-
task :default => :spec
|
24
|
-
|
25
|
-
require 'yard'
|
26
|
-
YARD::Rake::YardocTask.new
|
data/gemspec.yml
DELETED
@@ -1,13 +0,0 @@
|
|
1
|
-
name: pdftoimage
|
2
|
-
summary: "A ruby gem for converting PDF documents into a series of images."
|
3
|
-
description: "A ruby gem for converting PDF documents into a series of images. This module is based off poppler_utils and ImageMagick."
|
4
|
-
license: MIT
|
5
|
-
authors: Rob Flynn
|
6
|
-
homepage: https://github.com/robflynn/pdftoimage
|
7
|
-
email: rob@thingerly.com
|
8
|
-
has_yard: true
|
9
|
-
|
10
|
-
development_dependencies:
|
11
|
-
bundler: ~> 1.0.0
|
12
|
-
yard: ~> 0.6.0
|
13
|
-
|
data/pdftoimage.gemspec
DELETED
@@ -1,15 +0,0 @@
|
|
1
|
-
# -*- encoding: utf-8 -*-
|
2
|
-
|
3
|
-
begin
|
4
|
-
Ore::Specification.new do |gemspec|
|
5
|
-
# custom logic here
|
6
|
-
end
|
7
|
-
rescue NameError
|
8
|
-
begin
|
9
|
-
require 'ore/specification'
|
10
|
-
retry
|
11
|
-
rescue LoadError
|
12
|
-
STDERR.puts "The 'my-project.gemspec' file requires Ore."
|
13
|
-
STDERR.puts "Run `gem install ore-core` to install Ore."
|
14
|
-
end
|
15
|
-
end
|
data/spec/10pages.pdf
DELETED
Binary file
|
data/spec/11pages.pdf
DELETED
Binary file
|
data/spec/3pages.pdf
DELETED
Binary file
|
data/spec/pdftoimage_spec.rb
DELETED
@@ -1,83 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
require 'pdftoimage'
|
3
|
-
|
4
|
-
describe PDFToImage do
|
5
|
-
it "should have a VERSION constant" do
|
6
|
-
PDFToImage.const_get('VERSION').should_not be_empty
|
7
|
-
end
|
8
|
-
|
9
|
-
# I will find a better solution for having this commented out. I do not
|
10
|
-
# have permission to release the document that I used for this test case.
|
11
|
-
# I will generate a sufficiently buggy version. Basically, buggy PDF software
|
12
|
-
# sometimes corrupts CreationDate and/or ModDate such as discussed here: http://www.linuxquestions.org/questions/solaris-opensolaris-20/converting-utf-16-files-to-another-encoding-such-as-utf-8-a-630588/
|
13
|
-
# I also need to come upw ith a better solution
|
14
|
-
|
15
|
-
# describe "edge cases" do
|
16
|
-
# it "should handle invalid utf-8 in headers without crashing" do
|
17
|
-
# @pages = PDFToImage.open('spec/weird_utf8.pdf')
|
18
|
-
# @pages.size.should equal 1
|
19
|
-
# @pages[0].resize('50%').save('spec/tmp1.jpg')
|
20
|
-
# File.exists?('spec/tmp1.jpg').should equal true
|
21
|
-
# File.unlink('spec/tmp1.jpg')
|
22
|
-
# end
|
23
|
-
# end
|
24
|
-
|
25
|
-
describe "3pages.pdf" do
|
26
|
-
it "should have three pages" do
|
27
|
-
@pages = PDFToImage.open('spec/3pages.pdf')
|
28
|
-
@pages.size.should equal 3
|
29
|
-
end
|
30
|
-
|
31
|
-
it "should allow saving" do
|
32
|
-
@pages = PDFToImage.open('spec/3pages.pdf')
|
33
|
-
@pages.each do |page|
|
34
|
-
page.save('spec/tmp.jpg')
|
35
|
-
File.exists?('spec/tmp.jpg').should equal true
|
36
|
-
File.unlink('spec/tmp.jpg')
|
37
|
-
end
|
38
|
-
end
|
39
|
-
|
40
|
-
it "should allow resizing and quality control" do
|
41
|
-
@pages = PDFToImage.open('spec/3pages.pdf')
|
42
|
-
@pages[0].resize('50%').quality('80%').save('spec/tmp2.jpg')
|
43
|
-
File.exists?('spec/tmp2.jpg').should equal true
|
44
|
-
File.unlink('spec/tmp2.jpg')
|
45
|
-
end
|
46
|
-
|
47
|
-
it "should work with blocks" do
|
48
|
-
counter = 0
|
49
|
-
PDFToImage.open("spec/3pages.pdf") do |page|
|
50
|
-
counter = counter + 1
|
51
|
-
end
|
52
|
-
counter.should equal 3
|
53
|
-
end
|
54
|
-
end
|
55
|
-
|
56
|
-
describe "multi page documents" do
|
57
|
-
it "should parse 10 page documents properly" do
|
58
|
-
counter = 0
|
59
|
-
PDFToImage.open('spec/10pages.pdf') do |page|
|
60
|
-
result = page.save("spec/10pg-#{page.page}.jpg")
|
61
|
-
File.exists?("spec/10pg-#{page.page}.jpg").should equal true
|
62
|
-
File.unlink("spec/10pg-#{page.page}.jpg")
|
63
|
-
counter = counter + 1
|
64
|
-
end
|
65
|
-
|
66
|
-
counter.should equal 10
|
67
|
-
end
|
68
|
-
|
69
|
-
it "should parse 11 page counts" do
|
70
|
-
counter = 0
|
71
|
-
PDFToImage.open('spec/11pages.pdf') do |page|
|
72
|
-
result = page.save("spec/11pg-#{page.page}.jpg")
|
73
|
-
File.exists?("spec/11pg-#{page.page}.jpg").should equal true
|
74
|
-
File.unlink("spec/11pg-#{page.page}.jpg")
|
75
|
-
counter = counter + 1
|
76
|
-
end
|
77
|
-
|
78
|
-
counter.should equal 11
|
79
|
-
end
|
80
|
-
|
81
|
-
|
82
|
-
end
|
83
|
-
end
|