pdfbeads 1.1.1 → 1.1.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/COPYING +0 -0
- data/ChangeLog +20 -0
- data/README +0 -0
- data/bin/pdfbeads +0 -1
- data/doc/pdfbeads.en.html +20 -24
- data/doc/pdfbeads.ru.html +0 -0
- data/lib/imageinspector.rb +21 -18
- data/lib/pdfbeads/pdfbuilder.rb +33 -14
- data/lib/pdfbeads/pdfdoc.rb +0 -0
- data/lib/pdfbeads/pdffont.rb +0 -0
- data/lib/pdfbeads/pdflabels.rb +0 -0
- data/lib/pdfbeads/pdfpage.rb +19 -19
- data/lib/pdfbeads/pdftoc.rb +0 -0
- data/lib/pdfbeads.rb +1 -1
- metadata +29 -30
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 198ab9ffc035604ce4cfb3528dbebfb7746d746de1a429089028102003e35480
|
4
|
+
data.tar.gz: e32b5a1de30aeb1bb715f0ea6417478f16f9ba9f229268a55ad3fd4ae9bc67ab
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
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
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
|
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
|
-
|
509
|
-
|
510
|
-
|
511
|
-
|
512
|
-
|
513
|
-
|
514
|
-
|
515
|
-
|
516
|
-
|
517
|
-
|
518
|
-
|
519
|
-
|
520
|
-
|
521
|
-
|
522
|
-
настройки «текст под изображением» или «текст поверх
|
523
|
-
изображения», поскольку при иных настройках размещение символов на
|
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
|
data/lib/imageinspector.rb
CHANGED
@@ -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
|
-
|
329
|
-
|
330
|
-
|
331
|
-
|
332
|
-
|
333
|
-
|
334
|
-
|
335
|
-
|
336
|
-
|
337
|
-
|
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
|
|
data/lib/pdfbeads/pdfbuilder.rb
CHANGED
@@ -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
|
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
|
-
|
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
|
-
|
408
|
+
tmp_str = $2.encode( "utf-16be", "utf-8" )
|
404
409
|
else
|
405
|
-
|
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
|
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
|
-
|
898
|
-
|
899
|
-
|
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
|
-
|
971
|
-
|
972
|
-
|
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!
|
data/lib/pdfbeads/pdfdoc.rb
CHANGED
File without changes
|
data/lib/pdfbeads/pdffont.rb
CHANGED
File without changes
|
data/lib/pdfbeads/pdflabels.rb
CHANGED
File without changes
|
data/lib/pdfbeads/pdfpage.rb
CHANGED
@@ -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
|
-
|
167
|
-
|
168
|
-
|
166
|
+
curimg.define( 'JP2','mode','real' )
|
167
|
+
curimg.define( 'JP2','numrlvls',4 )
|
168
|
+
curimg.define( 'JP2','rate',0.015625 )
|
169
169
|
when 'JPG'
|
170
|
-
|
170
|
+
curimg.quality = 50
|
171
171
|
else
|
172
|
-
|
173
|
-
|
172
|
+
curimg.compression = ZipCompression
|
173
|
+
curimg.quality = 95
|
174
174
|
end
|
175
|
-
|
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
|
-
|
210
|
-
|
211
|
-
|
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
|
-
|
235
|
-
|
236
|
-
|
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,
|
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,
|
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
|
data/lib/pdfbeads/pdftoc.rb
CHANGED
File without changes
|
data/lib/pdfbeads.rb
CHANGED
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.
|
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:
|
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.
|
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.
|
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/
|
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/
|
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,
|
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
|
-
|
110
|
-
|
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: []
|