pdfbeads 1.1.1 → 1.1.3

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 577a47277a3e474a47b740ce93ca89041402c4fb
4
- data.tar.gz: 88a1f950e31e41e47f79ef978d9e589e1b9724fb
2
+ SHA256:
3
+ metadata.gz: 198ab9ffc035604ce4cfb3528dbebfb7746d746de1a429089028102003e35480
4
+ data.tar.gz: e32b5a1de30aeb1bb715f0ea6417478f16f9ba9f229268a55ad3fd4ae9bc67ab
5
5
  SHA512:
6
- metadata.gz: 16ab45bd0c4d63d7c6f567f3df5e2dea2ecc1e9237ac9b5acfc9cd92e31a72a8df7ad184e5c7fd779cb990f58ff64dbb3027464c7579fd79d58fc270ac01c841
7
- data.tar.gz: b946c901407f06aeaf509988341759ba4f4cfc217067b00fb72ad5bc9ae60e4d1dd0729bb7a3761a6c06f71816dcb9398e2cde4335ee8a5620c1686e208fe901
6
+ metadata.gz: 485725e99d06c9216e238626b35ec73d7ea2c64513f5112c24448191b6a09ccef40ef58a24bac291a975c8881779a6e62450e629ebee4c89ec34be9d976b4ccb
7
+ data.tar.gz: f0f53d06628a9433684d77e175cf95446abeebaa54e14e59bb2a637666d06eaa559734a2bac5e43b3d69182d6afb8ef6627d356bcd6c5b3991200a5cd9e8e858
data/COPYING CHANGED
File without changes
data/ChangeLog CHANGED
@@ -77,4 +77,24 @@
77
77
 
78
78
  * hpricot is no longer developed, so switch to Nokagiri for hOCR processing.
79
79
 
80
+ * use String#encode instead of Iconv, when available
81
+
82
+ * Got tired from deps not being automatically resolved, so add them to
83
+ the gemspeck (the preferred method to install on Debian-based distributions
84
+ is now converting pdfbeads*.gem to a deb package with gem2deb).
85
+
80
86
  + English HTML documentation added.
87
+
88
+ 2016 Dec 20 (Alexey Kryukov) Version 1.1.2
89
+ * Add a missing String#encode call
90
+
91
+ 2020 Jan 05 (Alexey Kryukov) Version 1.1.2
92
+ * Respect the photometric interpretation of Group4-encoded tiff images
93
+ * Some JPEG images were erroneously treated as LZW-encoded
94
+
95
+ 2020 Jan 24 (Alexey Kryukov) Version 1.1.2
96
+ * Fixed the /BaseState field in the optional content dictionary, which caused files to be rejected by some viewers
97
+
98
+ 2021 Nov 24 (Alexey Kryukov) Version 1.1.3
99
+ * Fixed some errors/warnings produced by newer rmagick versions
100
+ * Bumped the required rmagick version up to 3.2.0
data/README CHANGED
File without changes
data/bin/pdfbeads CHANGED
@@ -32,7 +32,6 @@
32
32
  #######################################################################
33
33
 
34
34
  require 'optparse'
35
- require 'iconv'
36
35
  require 'time'
37
36
 
38
37
  require 'pdfbeads'
data/doc/pdfbeads.en.html CHANGED
@@ -498,31 +498,27 @@ files (hOCR is a HTML language extension, allowing to store information
498
498
  about exact positioning of characters and markup elements on the page) or
499
499
  imported from another PDF file.</p>
500
500
 
501
- <p>Для создания файлов в формате hOCR необходимо воспользоваться программой
502
- оптического распознавания символов, поддерживающей этот формат, например
503
- <a href="https://launchpad.net/cuneiform-linux/">Cuneiform</a> или
501
+ <p>In order to create hOCR files one should use an OCR application which
502
+ supports this output format, such as
503
+ <a href="https://launchpad.net/cuneiform-linux/">Cuneiform</a> or
504
504
  <a href="http://code.google.com/p/tesseract-ocr/">Tesseract</a>.
505
- Распознанный текст следует сохранить в той же директории, что и остальные
506
- файлы, относящиеся к проекту. При этом каждой распознанной странице должен
507
- соответствовать отдельный файл с тем же базовым именем, что и у исходного
508
- изображения, при расширении HTM(L) или HOCR. Обработка файлов hOCR
509
- осуществляется автоматически при условии, что интерпретатору Ruby доступно
510
- расширение Nokogiri.</p>
511
-
512
- <p>Иное возможное решение заключается в том, чтобы импортировать текстовый
513
- слой из другого PDF-файла (естественно, последний должен быть получен путем
514
- распознавания тех же самых изображений, которые предполагается затем обработать
515
- с помощью pdfbeads). Имя полученного файла следует передать pdfbeads с помощью
516
- ключа <tt>-T</tt> (полная форма&nbsp;&mdash; <tt>-text-pdf</tt>). Эта
517
- возможность особенно важна в тех случаях, когда приходится использовать для
518
- распознавания текста коммерческое приложение (например,
519
- <a href="http://www.abbyy.ru/finereader/">ABBYY Finereader</a>), в котором
520
- не предусмотрена поддержка формата hOCR. <strong>Внимание:</strong> при
521
- создании промежуточного PDF-файла в ABBYY Finereader следует использовать
522
- настройки &laquo;текст под изображением&raquo; или &laquo;текст поверх
523
- изображения&raquo;, поскольку при иных настройках размещение символов на
524
- странице может оказаться не вполне соответствующим исходному графическому
525
- файлу.</p>
505
+ The recognized text should be placed into the same directory as other project
506
+ files by a such way that each hOCR file should have the same base name as its
507
+ source image, while the extension should be either HTM(L) or HOCR. hOCR files
508
+ are automatically processed by pdfbeads if only the Nokogiri extension is
509
+ installed and accessible to the Ruby engine.</p>
510
+
511
+ <p>Another possible solution is to import an OCR layer from another PDF file
512
+ (naturally the later should be produced by recognizing the same set
513
+ of images which is supposed to be processed with pdfbeads). The path to the
514
+ file can be passed to pdfbeads via the <tt>-T</tt> (or <tt>-text-pdf</tt>)
515
+ option. This feature is especially important in those cases where one has
516
+ to use a commercial OCR application (such as
517
+ <a href="http://www.abbyy.ru/finereader/">ABBYY Finereader</a>), which
518
+ doesn't support the hOCR format. <strong>Warning:</strong> you may
519
+ need to experiment with your OCR application options related with PDF output
520
+ to get the best correspondance between the layout of the recognized
521
+ text and the source image.</p>
526
522
 
527
523
  <h3>Processing files with the right-to-left text direction</h3>
528
524
 
data/doc/pdfbeads.ru.html CHANGED
File without changes
@@ -49,7 +49,7 @@ module ImageInspector
49
49
  end
50
50
 
51
51
  # Parse image header and retrieve its basic properties. The code is inspired
52
- # by Sam Stephenson's snippet which demonstrates how to determine a JPEG
52
+ # by Sam Stephenson's snippet which demonstrates how to determine a JPEG
53
53
  # image size ( see http://snippets.dzone.com/posts/show/805) and Paul
54
54
  # Schreiber's code for TIFF (see
55
55
  # http://paulschreiber.com/blog/2010/06/10/tiff-file-dimensions-in-ruby/)
@@ -67,12 +67,12 @@ class ImageInspector::Image
67
67
  # Image format and compression method
68
68
  attr_reader :format, :compression
69
69
  # Return TIFF tags as a hash for TIFF images or JPEG images with EXIF
70
- # data. Otherwise this property is nil.
70
+ # data. Otherwise this property is nil.
71
71
  attr_reader :tags
72
72
 
73
73
  @@gc = (IO.method_defined? :getbyte) ? (:getbyte) : (:getc)
74
74
 
75
- # Set all image attributes to nil and open an image if an optional
75
+ # Set all image attributes to nil and open an image if an optional
76
76
  # argument is specified.
77
77
  def initialize( input=nil )
78
78
  clearData()
@@ -99,7 +99,7 @@ class ImageInspector::Image
99
99
  end
100
100
  end
101
101
 
102
- # Return image data (possibly compressed) for a previously initialized
102
+ # Return image data (possibly compressed) for a previously initialized
103
103
  # image as a sring. For JPEG and JPEG2000 this would be the whole image
104
104
  # as it is stored on the disk, while for TIFF and PNG all headers are
105
105
  # stripped and a raw data stream is returned.
@@ -169,7 +169,7 @@ class ImageInspector::Image
169
169
  sign = io.read( 2 )
170
170
  if sign.eql? "\xFF\xD8".to_binary
171
171
  @format = :JPEG
172
- @compression = :DCTDecode
172
+ @compression = :DCTDecode
173
173
  jpgExamine( io )
174
174
  return
175
175
  end
@@ -191,7 +191,7 @@ class ImageInspector::Image
191
191
  sign << io.read( 4 )
192
192
  if sign.eql? "\x00\x00\x00\x0CjP \x0D\x0A\x87\x0A".to_binary
193
193
  @format = :JPEG2000
194
- @compression = :JPXDecode
194
+ @compression = :JPXDecode
195
195
  j2kParseBox( io )
196
196
  return
197
197
  end
@@ -288,8 +288,8 @@ class ImageInspector::Image
288
288
 
289
289
  # We should not expect to find required image properties (such as width
290
290
  # or height) in EXIF data of a JPEG image.
291
- raise 'malformed TIFF: a required tag is missing' unless @format.eql? :JPEG or (
292
- @tags.has_key? 0x0100 and @tags.has_key? 0x0101 and
291
+ raise 'malformed TIFF: a required tag is missing' unless @format.eql? :JPEG or (
292
+ @tags.has_key? 0x0100 and @tags.has_key? 0x0101 and
293
293
  @tags.has_key? 0x0106 and @tags.has_key? 0x0111 and @tags.has_key? 0x0117 )
294
294
 
295
295
  unless @format.eql? :JPEG
@@ -325,16 +325,19 @@ class ImageInspector::Image
325
325
  end
326
326
  @tags.merge! tiffParseIFD( io,@tags[0x8769][0],intgr ) if @tags.has_key? 0x8769
327
327
 
328
- if @tags.has_key? 0x0103
329
- case @tags[0x0103][0]
330
- when 1
331
- @compression = :NoCompression
332
- when 3, 4
333
- @compression = :CCITTFaxDecode
334
- when 5
335
- @compression = :LZWDecode
336
- when 8, 32946
337
- @compression = :FlateDecode
328
+ # Strangely, got some JPEG's marked as LZW-decoded
329
+ unless @format.eql? :JPEG
330
+ if @tags.has_key? 0x0103
331
+ case @tags[0x0103][0]
332
+ when 1
333
+ @compression = :NoCompression
334
+ when 3, 4
335
+ @compression = :CCITTFaxDecode
336
+ when 5
337
+ @compression = :LZWDecode
338
+ when 8, 32946
339
+ @compression = :FlateDecode
340
+ end
338
341
  end
339
342
  end
340
343
 
@@ -134,7 +134,7 @@ class PDFBeads::PDFBuilder
134
134
  })
135
135
  @doc.addObject(ocBack)
136
136
  cat.addToDict('OCProperties',
137
- sprintf("<< /OCGs[%s %s] /D<< /Intent /View /BaseState (ON) /Order[%s %s] >>>>",
137
+ sprintf("<< /OCGs[%s %s] /D<< /Intent /View /BaseState /ON /Order[%s %s] >>>>",
138
138
  ref(ocFore.getID), ref(ocBack.getID), ref(ocFore.getID), ref(ocBack.getID)))
139
139
 
140
140
  page_objs = Array.new()
@@ -159,7 +159,11 @@ class PDFBeads::PDFBuilder
159
159
  nTree << "/P (#{ltitl.to_text}) "
160
160
  # Iconv::InvalidCharacter, Iconv::IllegalSequence, Encoding::UndefinedConversionError, Encoding::InvalidByteSequenceError
161
161
  rescue
162
- ltitl = Iconv.iconv( "utf-16be", "utf-8", rng[:prefix] ).first
162
+ if rng[:prefix].respond_to? :encode
163
+ ltitl = rng[:prefix].encode( "utf-16be", "utf-8" )
164
+ else
165
+ ltitl = Iconv.iconv( "utf-16be", "utf-8", rng[:prefix] ).first
166
+ end
163
167
  # If there is no number (just prefix) then put a zero character after the prefix:
164
168
  # this makes acroread happy, but prevents displaying the number in evince
165
169
  unless rng.has_key? :style
@@ -399,11 +403,17 @@ class PDFBeads::PDFBuilder
399
403
  key = $1
400
404
  if keys.include? key
401
405
  begin
406
+ tmp_str = ''
402
407
  if $2.respond_to? :encode
403
- ret[key] = $2.encode( "utf-16be", "utf-8" )
408
+ tmp_str = $2.encode( "utf-16be", "utf-8" )
404
409
  else
405
- ret[key] = Iconv.iconv( "utf-16be", "utf-8", $2 ).first
410
+ tmp_str = Iconv.iconv( "utf-16be", "utf-8", $2 ).first
406
411
  end
412
+ # a parenthesis code in a formally correct utf-16 should nevertheless be escaped
413
+ ret[key] = tmp_str.to_binary
414
+ ret[key].gsub!( /\x5C/,"\x5C\x5C" )
415
+ ret[key].gsub!( /\x28/,"\x5C\x28" )
416
+ ret[key].gsub!( /\x29/,"\x5C\x29" )
407
417
  rescue
408
418
  $stderr.puts("Error: metadata should be specified in utf-8")
409
419
  end
@@ -651,7 +661,7 @@ class PDFBeads::PDFBuilder
651
661
  end
652
662
 
653
663
  def elementText( elem )
654
- # used to put some Iconv stuff here, but nokogiri makes this conversion itself
664
+ # used to put some Iconv stuff here, but nokogiri performs this conversion itself
655
665
  return elem.inner_text.strip
656
666
  end
657
667
 
@@ -893,15 +903,18 @@ class PDFBeads::PDFBuilder
893
903
 
894
904
  unless stencil.compression.eql? :CCITTFaxDecode and rows_per_strip >= height
895
905
  img = ImageList.new( path )
896
- imgdata = img.to_blob{
897
- self.format = 'TIFF'
898
- self.define( 'TIFF','rows-per-strip',height )
899
- self.compression = Group4Compression
906
+ imgdata = img.to_blob { |imd|
907
+ imd.format = 'TIFF'
908
+ imd.define( 'TIFF','rows-per-strip',height )
909
+ imd.compression = Group4Compression
900
910
  }
901
911
  stencil = ImageInspector.new( StringIO.new(imgdata) )
902
912
  img.destroy!
903
913
  end
904
914
  body = stencil.getRawData
915
+ photometric = 0
916
+ photometric = stencil.tags[0x106][0] if
917
+ stencil.format.eql? :TIFF and stencil.tags.has_key? 0x106
905
918
 
906
919
  xobj = XObj.new(Hash[
907
920
  'Type' => '/XObject',
@@ -913,8 +926,14 @@ class PDFBeads::PDFBuilder
913
926
  'ColorSpace' => '/DeviceGray',
914
927
  'BitsPerComponent' => '1',
915
928
  'Filter' => '/CCITTFaxDecode',
916
- 'DecodeParms' => "<< /Columns #{width} /K -1 >>"
929
+ 'DecodeParms' => "<< /Columns #{width} /K -1 >>",
917
930
  ], body)
931
+ if photometric == 1 then
932
+ # As ImageMask is always on, BlackIs1 actually doesn't work, while
933
+ # the Decode array does.
934
+ xobj.addToDict( 'BlackIs1', 'true' )
935
+ xobj.addToDict( 'Decode', '[1 0]' )
936
+ end
918
937
 
919
938
  return [ xobj,width,height,xres,yres ]
920
939
  end
@@ -966,10 +985,10 @@ class PDFBeads::PDFBuilder
966
985
  ( [ :FlateDecode,:LZWDecode,:CCITTFaxDecode ].include? insp.compression and insp.tags[0x0116][0] >= insp.height )))
967
986
 
968
987
  img = ImageList.new( impath )
969
- imgdata = img.to_blob{
970
- self.format = 'PNG'
971
- self.quality = 95
972
- self.compression = ZipCompression
988
+ imgdata = img.to_blob { |imd|
989
+ imd.format = 'PNG'
990
+ imd.quality = 95
991
+ imd.compression = ZipCompression
973
992
  }
974
993
  insp = ImageInspector.new( StringIO.new(imgdata) )
975
994
  img.destroy!
File without changes
File without changes
File without changes
@@ -160,19 +160,19 @@ class PDFBeads::PageDataProvider < Array
160
160
 
161
161
  def writeImage( img,path,fmt )
162
162
  begin
163
- img.write( path ) do
163
+ img.write( path ) do |curimg|
164
164
  case fmt
165
165
  when 'JP2'
166
- self.define( 'JP2','mode','real' )
167
- self.define( 'JP2','numrlvls',4 )
168
- self.define( 'JP2','rate',0.015625 )
166
+ curimg.define( 'JP2','mode','real' )
167
+ curimg.define( 'JP2','numrlvls',4 )
168
+ curimg.define( 'JP2','rate',0.015625 )
169
169
  when 'JPG'
170
- self.quality = 50
170
+ curimg.quality = 50
171
171
  else
172
- self.compression = ZipCompression
173
- self.quality = 95
172
+ curimg.compression = ZipCompression
173
+ curimg.quality = 95
174
174
  end
175
- self.format = fmt
175
+ curimg.format = fmt
176
176
  end
177
177
  return true
178
178
  rescue
@@ -205,10 +205,10 @@ class PDFBeads::PageDataProvider < Array
205
205
  bitonal.colormap( j,crepl )
206
206
  end
207
207
  bitonal.compress_colormap!
208
- bitonal.write( cpath ) do
209
- self.format = 'TIFF'
210
- self.define( 'TIFF','rows-per-strip',img.rows )
211
- self.compression = Group4Compression
208
+ bitonal.write( cpath ) do |curimg|
209
+ curimg.format = 'TIFF'
210
+ curimg.define( 'TIFF','rows-per-strip',img.rows )
211
+ curimg.compression = Group4Compression
212
212
  end
213
213
  bitonal.destroy!
214
214
  created = true
@@ -230,10 +230,10 @@ class PDFBeads::PageDataProvider < Array
230
230
  binpath = "#{@basename}.black.tiff"
231
231
  if not File.exists? binpath or force
232
232
  im_copy = img.copy; bitonal = im_copy.threshold(QuantumRange/255*treshold); im_copy.destroy!
233
- bitonal.write( binpath ){
234
- self.format = 'TIFF'
235
- self.define( 'TIFF','rows-per-strip',img.rows )
236
- self.compression = Group4Compression
233
+ bitonal.write( binpath ) { |curimg|
234
+ curimg.format = 'TIFF'
235
+ curimg.define( 'TIFF','rows-per-strip',img.rows )
236
+ curimg.compression = Group4Compression
237
237
  }
238
238
  bitonal.destroy!
239
239
  map[:created] = true
@@ -324,7 +324,7 @@ class PDFBeads::PageDataProvider < Array
324
324
  PageData.fixResolution( img )
325
325
  mask.resize!( imw,imh ) if mask.columns != imw or mask.rows != imh
326
326
 
327
- no_fg = img.composite( mask,CenterGravity,CopyOpacityCompositeOp )
327
+ no_fg = img.composite( mask,CenterGravity,CopyAlphaCompositeOp )
328
328
  bg = no_fg.blur_channel( 0,6,AllChannels )
329
329
  bg.alpha( DeactivateAlphaChannel )
330
330
 
@@ -346,7 +346,7 @@ class PDFBeads::PageDataProvider < Array
346
346
  ksam = mask.negate
347
347
  mask.destroy!
348
348
 
349
- no_bg = img.composite( ksam,CenterGravity,CopyOpacityCompositeOp )
349
+ no_bg = img.composite( ksam,CenterGravity,CopyAlphaCompositeOp )
350
350
  fg = no_bg.clone
351
351
 
352
352
  # Resize the image to a tiny size and then back to the original size
@@ -403,8 +403,8 @@ class PDFBeads::PageDataProvider < Array
403
403
 
404
404
  # A hack for some Windows versions of RMagick, which throw an error the
405
405
  # first time when Magick.formats is accessed
406
+ retries = 2
406
407
  begin
407
- retries = 2
408
408
  mfmts = Magick.formats
409
409
  rescue
410
410
  retry if (retries -= 1 ) > 0
File without changes
data/lib/pdfbeads.rb CHANGED
@@ -32,7 +32,7 @@
32
32
 
33
33
  require 'zlib'
34
34
 
35
- require 'RMagick'
35
+ require 'rmagick'
36
36
  include Magick
37
37
 
38
38
  begin
metadata CHANGED
@@ -1,55 +1,55 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pdfbeads
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.1
4
+ version: 1.1.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Alexey Kryukov
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-01-30 00:00:00.000000000 Z
11
+ date: 2021-11-24 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rmagick
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - '>='
17
+ - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: 2.13.0
19
+ version: 3.2.0
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - '>='
24
+ - - ">="
25
25
  - !ruby/object:Gem::Version
26
- version: 2.13.0
26
+ version: 3.2.0
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: nokogiri
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - '>='
31
+ - - ">="
32
32
  - !ruby/object:Gem::Version
33
33
  version: 1.5.10
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - '>='
38
+ - - ">="
39
39
  - !ruby/object:Gem::Version
40
40
  version: 1.5.10
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: pdf-reader
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - '>='
45
+ - - ">="
46
46
  - !ruby/object:Gem::Version
47
47
  version: 1.0.0
48
48
  type: :runtime
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
- - - '>='
52
+ - - ">="
53
53
  - !ruby/object:Gem::Version
54
54
  version: 1.0.0
55
55
  description: |2
@@ -70,45 +70,44 @@ extra_rdoc_files:
70
70
  - COPYING
71
71
  - ChangeLog
72
72
  files:
73
+ - COPYING
74
+ - ChangeLog
75
+ - README
76
+ - bin/pdfbeads
77
+ - doc/pdfbeads.en.html
78
+ - doc/pdfbeads.ru.html
79
+ - lib/imageinspector.rb
80
+ - lib/pdfbeads.rb
73
81
  - lib/pdfbeads/pdfbuilder.rb
74
- - lib/pdfbeads/pdfpage.rb
75
- - lib/pdfbeads/pdftoc.rb
82
+ - lib/pdfbeads/pdfdoc.rb
76
83
  - lib/pdfbeads/pdffont.rb
77
84
  - lib/pdfbeads/pdflabels.rb
78
- - lib/pdfbeads/pdfdoc.rb
79
- - lib/pdfbeads.rb
80
- - lib/imageinspector.rb
81
- - bin/pdfbeads
82
- - doc/pdfbeads.ru.html
83
- - doc/pdfbeads.en.html
84
- - README
85
- - COPYING
86
- - ChangeLog
85
+ - lib/pdfbeads/pdfpage.rb
86
+ - lib/pdfbeads/pdftoc.rb
87
87
  homepage: http://pdfbeads.rubyforge.org
88
88
  licenses:
89
- - GPL
89
+ - GPL-3.0+
90
90
  metadata: {}
91
- post_install_message:
91
+ post_install_message:
92
92
  rdoc_options: []
93
93
  require_paths:
94
94
  - lib
95
95
  required_ruby_version: !ruby/object:Gem::Requirement
96
96
  requirements:
97
- - - '>='
97
+ - - ">="
98
98
  - !ruby/object:Gem::Version
99
99
  version: '0'
100
100
  required_rubygems_version: !ruby/object:Gem::Requirement
101
101
  requirements:
102
- - - '>='
102
+ - - ">="
103
103
  - !ruby/object:Gem::Version
104
104
  version: '0'
105
105
  requirements:
106
- - RMagick, v2.13.0 or greater
106
+ - RMagick, v3.2.0 or greater
107
107
  - nokogiri, v1.5.10 or greater
108
108
  - PDF::Reader, v1.0.0 or greater
109
- rubyforge_project: PDFBeads
110
- rubygems_version: 2.0.3
111
- signing_key:
109
+ rubygems_version: 3.2.29
110
+ signing_key:
112
111
  specification_version: 4
113
112
  summary: PDFBeads -- convert scanned images to a single PDF file.
114
113
  test_files: []