Skip to content

Commit 8901441

Browse files
committed
trying pages one-at-a-time for image generation.
1 parent 5a9ccd4 commit 8901441

1 file changed

Lines changed: 11 additions & 31 deletions

File tree

lib/docsplit/image_extractor.rb

Lines changed: 11 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -27,18 +27,21 @@ def convert(pdf, size, format, previous=nil)
2727
tempdir = Dir.mktmpdir
2828
basename = File.basename(pdf, File.extname(pdf))
2929
directory = directory_for(size)
30+
pages = @pages || '1-' + Docsplit.extract_length(pdf).to_s
3031
FileUtils.mkdir_p(directory) unless File.exists?(directory)
31-
out_file = File.join(directory, "#{basename}_%05d.#{format}")
3232
common = "#{MEMORY_ARGS} #{DENSITY_ARG} #{resize_arg(size)} #{quality_arg(format)}"
3333
if previous
3434
FileUtils.cp(Dir[directory_for(previous) + '/*'], directory)
35-
cmd = "MAGICK_TMPDIR=#{tempdir} OMP_NUM_THREADS=2 gm mogrify #{common} -unsharp 0x0.5+0.75 \"#{directory}/*.#{format}\" 2>&1"
35+
result = `MAGICK_TMPDIR=#{tempdir} OMP_NUM_THREADS=2 gm mogrify #{common} -unsharp 0x0.5+0.75 \"#{directory}/*.#{format}\" 2>&1`.chomp
36+
raise ExtractionFailed, result if $? != 0
3637
else
37-
cmd = "MAGICK_TMPDIR=#{tempdir} OMP_NUM_THREADS=2 gm convert +adjoin #{common} \"#{pdf}#{pages_arg}\" \"#{out_file}\" 2>&1"
38+
page_list(pages).each do |page|
39+
out_file = File.join(directory, "#{basename}_#{page}.#{format}")
40+
cmd = "MAGICK_TMPDIR=#{tempdir} OMP_NUM_THREADS=2 gm convert +adjoin #{common} \"#{pdf}[#{page - 1}]\" \"#{out_file}\" 2>&1".chomp
41+
result = `#{cmd}`.chomp
42+
raise ExtractionFailed, result if $? != 0
43+
end
3844
end
39-
result = `#{cmd}`.chomp
40-
raise ExtractionFailed, result if $? != 0
41-
renumber_images(out_file, format)
4245
FileUtils.remove_entry_secure tempdir if File.exists?(tempdir)
4346
end
4447

@@ -76,16 +79,9 @@ def quality_arg(format)
7679
end
7780
end
7881

79-
# Generate the requested page index into the document.
80-
def pages_arg
81-
return '' if @pages.nil?
82-
pages = @pages.gsub(/\d+/) {|digits| (digits.to_i - 1).to_s }
83-
"[#{pages}]"
84-
end
85-
8682
# Generate the expanded list of requested page numbers.
87-
def page_list
88-
@pages.split(',').map { |range|
83+
def page_list(pages)
84+
pages.split(',').map { |range|
8985
if range.include?('-')
9086
range = range.split('-')
9187
Range.new(range.first.to_i, range.last.to_i).to_a.map {|n| n.to_i }
@@ -95,22 +91,6 @@ def page_list
9591
}.flatten.sort
9692
end
9793

98-
# When GraphicsMagick is through, it will have generated a number of
99-
# incrementing page images, starting at 0. Renumber them with their correct
100-
# page numbers.
101-
def renumber_images(template, format)
102-
suffixer = /_0+(\d+)\.#{format}\Z/
103-
images = Dir[template.sub('%05d', '0*')].map do |path|
104-
index = path[suffixer, 1].to_i
105-
{:path => path, :index => index, :page_number => index + 1}
106-
end
107-
numbers = @pages ? page_list.reverse : nil
108-
images.sort_by {|i| -i[:page_number] }.each_with_index do |image, i|
109-
number = numbers ? numbers[i] : image[:page_number]
110-
FileUtils.mv(image[:path], image[:path].sub(suffixer, "_#{number}.#{format}"))
111-
end
112-
end
113-
11494
end
11595

11696
end

0 commit comments

Comments
 (0)