combine_pdf 1.0.9 → 1.0.10

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: f416a0cbf333fe7e6d49c844a9ff6bbc2c735077bb325d5702019b86c01e0cc7
4
- data.tar.gz: d5af83b8d3bbb89456edb98fd8961d6de10405d06f15b80297576bc16692a7a5
3
+ metadata.gz: 7fced5e9fb501777c32a0c483d00c9ae0ff3875406cd6367eb8a1ac5193a5ba3
4
+ data.tar.gz: '08bdd4f49d69a25a2d83b0a28dc13d6e07c2e100f986404a516f1995f11db2b9'
5
5
  SHA512:
6
- metadata.gz: ed94ad7367e9521a5753656148fe654a225c33427b66c89724ea9ea175799b8f20467bb3adb201770ce61848ca1c22e767ac626cfeaa708bde18609645a4ed9a
7
- data.tar.gz: eccf69bbd4de266e6b9e7de1f7a0a6ecbf615eb14921940808725c4407181f1e62e89215033a9af15b29659041d7b1b0b97f45a9086adedff38e0312d7206b73
6
+ metadata.gz: b55bfcb34ebc64b3fc9749dfb119bd719d873d814fa340443bf346aeab233de151c6d57f2c90cf25d50053c3880b0d3f946fa028ef353b4356e02537ef729467
7
+ data.tar.gz: e1307d1b99aa5c174b2bde19311213fcd69248ba2fcb622e1497b1981e06fd026f7493c33fc30e38861460849c25f5072644223a241e7cf9e4b1489170c93cd4
@@ -2,9 +2,13 @@
2
2
 
3
3
  ***
4
4
 
5
+ #### Change log v.1.0.10
6
+
7
+ **Fix**: Fixed an issue related to issue #131 where parsing would fail if the `xref` section appears to be misplaced within the PDF. Credit to @bharat303 (Bharat Godhani) for exposing this issue.
8
+
5
9
  #### Change log v.1.0.9
6
10
 
7
- **Fix**: Fixed issue #136 where the `#fix_rotation` function would rotate the page to the wrong direction. Credit to @dmkash for exposing this issue
11
+ **Fix**: Fixed issue #136 where the `#fix_rotation` function would rotate the page to the wrong direction. Credit to @dmkash for exposing this issue.
8
12
 
9
13
  #### Change log v.1.0.8
10
14
 
@@ -80,6 +80,7 @@ module CombinePDF
80
80
  # puts @parsed
81
81
 
82
82
  unless (@parsed.select { |i| !i.is_a?(Hash) }).empty?
83
+ # p @parsed.select
83
84
  raise ParsingError, 'Unknown PDF parsing error - malformed PDF file?'
84
85
  end
85
86
 
@@ -385,17 +386,6 @@ module CombinePDF
385
386
  out.last[:Dest] = unify_string(out.last[:Dest].to_s) if out.last[:Dest] && out.last[:Dest].is_a?(Symbol)
386
387
  # puts "!!!!!!!!! Error with :indirect_reference_id\n\nObject #{out.last} :indirect_reference_id = #{out.last[:indirect_reference_id]}" unless out.last[:indirect_reference_id].is_a?(Numeric)
387
388
  ##########################################
388
- ## Parse a comment
389
- ##########################################
390
- elsif str = @scanner.scan(/\%/)
391
- # is a comment, skip until new line
392
- loop do
393
- # break unless @scanner.scan(/[^\d\r\n]+/)
394
- break if @scanner.check(/([\d]+[\s]+[\d]+[\s]+obj[\s]+\<\<)|([\n\r]+)/) || @scanner.eos? # || @scanner.scan(/[^\d]+[\r\n]+/) ||
395
- @scanner.scan(/[^\d\r\n]+/) || @scanner.pos += 1
396
- end
397
- # puts "AFTER COMMENT: #{@scanner.peek 8}"
398
- ##########################################
399
389
  ## Parse an Object Reference
400
390
  ##########################################
401
391
  elsif @scanner.scan(/R/)
@@ -414,32 +404,57 @@ module CombinePDF
414
404
  elsif @scanner.scan(/null/)
415
405
  out << nil
416
406
  ##########################################
407
+ ## Parse file trailer
408
+ ##########################################
409
+ elsif @scanner.scan(/trailer/)
410
+ if @scanner.skip_until(/<</)
411
+ data = _parse_
412
+ (@root_object ||= {}).clear
413
+ @root_object[data.shift] = data.shift while data[0]
414
+ end
415
+ ##########################################
417
416
  ## XREF - check for encryption... anything else?
418
417
  ##########################################
419
- elsif @scanner.scan(/(startxref)|(xref)/)
420
- ##########
421
- ## get root object to check for encryption
422
- @scanner.scan_until(/(trailer)|(\%EOF)/)
423
- fresh = true
424
- if @scanner.matched[-1] == 'r'
425
- if @scanner.skip_until(/<</)
426
- data = _parse_
427
- (@root_object ||= {}).clear
428
- @root_object[data.shift] = data.shift while data[0]
429
- end
430
- ##########
431
- ## skip untill end of segment, maked by %%EOF
432
- @scanner.skip_until(/\%\%EOF/)
433
- ##########
434
- ## If this was the last valid segment, ignore any trailing garbage
435
- ## (issue #49 resolution)
436
- break unless @scanner.exist?(/\%\%EOF/)
437
-
418
+ elsif @scanner.scan(/xref/)
419
+ # skip first xref line
420
+ @scanner.scan(/[\s]+[\d]+[\s]+[\d]+[\s]+/)
421
+ while @scanner.scan(/[\d]+[\s][\d]+[\s]+[nf][\s]+/)
422
+ # skip all xref lines
423
+ nil
438
424
  end
439
-
425
+ ##########################################
426
+ ## XREF location can be ignored
427
+ ##########################################
428
+ elsif @scanner.scan(/startxref/)
429
+ @scanner.scan(/[\s]+[\d]+[\s]+/)
430
+ ##########################################
431
+ ## Skip Whitespace
432
+ ##########################################
440
433
  elsif @scanner.scan(/[\s]+/)
441
434
  # Generally, do nothing
442
435
  nil
436
+ ##########################################
437
+ ## EOF?
438
+ ##########################################
439
+ elsif @scanner.scan(/\%\%EOF/)
440
+ ##########
441
+ ## If this was the last valid segment, ignore any trailing garbage
442
+ ## (issue #49 resolution)
443
+ break unless @scanner.exist?(/\%\%EOF/)
444
+ ##########################################
445
+ ## Parse a comment
446
+ ##########################################
447
+ elsif str = @scanner.scan(/\%/)
448
+ # is a comment, skip until new line
449
+ loop do
450
+ # break unless @scanner.scan(/[^\d\r\n]+/)
451
+ break if @scanner.check(/([\d]+[\s]+[\d]+[\s]+obj[\s]+\<\<)|([\n\r]+)/) || @scanner.eos? # || @scanner.scan(/[^\d]+[\r\n]+/) ||
452
+ @scanner.scan(/[^\d\r\n]+/) || @scanner.pos += 1
453
+ end
454
+ # puts "AFTER COMMENT: #{@scanner.peek 8}"
455
+ ##########################################
456
+ ## Fix wkhtmltopdf - missing 'endobj' keywords
457
+ ##########################################
443
458
  elsif @scanner.scan(/obj[\s]*/)
444
459
  # Fix wkhtmltopdf PDF authoring issue - missing 'endobj' keywords
445
460
  unless fresh || (out[-4].nil? || out[-4].is_a?(Hash))
@@ -460,6 +475,9 @@ module CombinePDF
460
475
  out << keep.pop
461
476
  end
462
477
  fresh = false
478
+ ##########################################
479
+ ## Unknown, warn and advance
480
+ ##########################################
463
481
  else
464
482
  # always advance
465
483
  # warn "Advancing for unknown reason... #{@scanner.string[@scanner.pos - 4, 8]} ... #{@scanner.peek(4)}" unless @scanner.peek(1) =~ /[\s\n]/
@@ -1,3 +1,3 @@
1
1
  module CombinePDF
2
- VERSION = '1.0.9'.freeze
2
+ VERSION = '1.0.10'.freeze
3
3
  end
@@ -95,6 +95,7 @@ pdf.save('07_named destinations_numbered.pdf')
95
95
  CombinePDF.load("./Ruby/test\ pdfs/Scribus-unknown_err.pdf").save '08_1-unknown-err-empty-str.pdf'
96
96
  CombinePDF.load("./Ruby/test\ pdfs/Scribus-unknown_err2.pdf").save '08_2-unknown-err-empty-str.pdf'
97
97
  CombinePDF.load("./Ruby/test\ pdfs/Scribus-unknown_err3.pdf").save '08_3-unknown-err-empty-str.pdf'
98
+ CombinePDF.load("./Ruby/test\ pdfs/xref_in_middle.pdf").save '08_4-xref-in-middle.pdf'
98
99
 
99
100
  CombinePDF.load("/Users/2Be/Ruby/test\ pdfs/nil_object.pdf").save('09_nil_in_parsed_array.pdf')
100
101
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: combine_pdf
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.9
4
+ version: 1.0.10
5
5
  platform: ruby
6
6
  authors:
7
7
  - Boaz Segev
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-02-07 00:00:00.000000000 Z
11
+ date: 2018-05-30 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: ruby-rc4