combine_pdf 0.0.12 → 0.1.0

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
2
  SHA1:
3
- metadata.gz: a8c0bc3044a3d626227cd92230f5469ab88daac5
4
- data.tar.gz: 1fbf45c126ddf79754f2660f9802d489d8583031
3
+ metadata.gz: 20e1c50aa5948f3a2ba3ad9c170ba08bc3e8ec38
4
+ data.tar.gz: 75ed75edadc4fcdee63ab579419f83f8685a8c47
5
5
  SHA512:
6
- metadata.gz: 39080aa09fef9475249937e92d0eb5c425a840c6663762ef2c896ad6326fc717e35bfcc1f698f9aa882cae6e05d47bb5caad8c0073b2e96043a49a9856a7f044
7
- data.tar.gz: 95cd39ba719bd65323c84da9f5d86195faa9e68874158c40e4c872c060d328bc0a3b212d1b79841efc3240b8d09b6c505a28b57dd62aad7c2cc306b2c105b9df
6
+ metadata.gz: 8b70a1624d699441aab808da4ee0461796d643607622a42c2ecd58342bebd8ee8f1edcc633962e93b36dba82c0ba89400f29b06f7e115d3e21eaf0803130f032
7
+ data.tar.gz: 8e5d4f16d65cd2306149dc69012aae66d5295f54d18760a335cf32fd68c3d9bd2563689bee87e44724c260653d232ddb2db93ef7e91d4c27265a48da96e7b616
@@ -32,11 +32,9 @@ load "combine_pdf/combine_pdf_pdf.rb"
32
32
 
33
33
 
34
34
 
35
- # This is a pure ruby library to merge PDF files.
35
+ # This is a pure ruby library to combine/merge, stmap/overlay and number PDF files.
36
36
  #
37
- # In the future, this library will also allow stamping and watermarking PDFs (it allows this now, only with some issues).
38
- #
39
- # PDF objects can be used to combine or to inject data.
37
+ # You can also use this library for writing basic text content into new or existing PDF files (For authoring new PDF files look at the Prawn ruby library).
40
38
  #
41
39
  # here is the most basic application for the library, a one-liner that combines the PDF files and saves them:
42
40
  # (CombinePDF.new("file1.pdf") << CombinePDF.new("file2.pdf") << CombinePDF.new("file3.pdf")).save("combined.pdf")
@@ -59,7 +57,7 @@ load "combine_pdf/combine_pdf_pdf.rb"
59
57
  # pdf.save "combined.pdf"
60
58
  # as demonstrated above, these can be chained for into a one-liner.
61
59
  #
62
- # you can also only selected pages.
60
+ # you can also choose to add only specific pages.
63
61
  #
64
62
  # in this example, only even pages will be added:
65
63
  # pdf = CombinePDF.new
@@ -77,15 +75,14 @@ load "combine_pdf/combine_pdf_pdf.rb"
77
75
  # in this example, a company logo will be stamped over each page:
78
76
  # company_logo = CombinePDF.new("company_logo.pdf").pages[0]
79
77
  # pdf = CombinePDF.new "content_file.pdf"
80
- # pdf.pages.each {|page| page << company_logo} # notice the << operator is on a page and not a PDF object.
78
+ # pdf.pages.each {|page| page << company_logo}
81
79
  # pdf.save "content_with_logo.pdf"
82
80
  # Notice the << operator is on a page and not a PDF object. The << operator acts differently on PDF objects and on Pages.
83
81
  #
84
- # The << operator defaults to secure injection by renaming references to avoid conflics. For overlaying pages using compressed data that might not be editable (due to limited filter support), you can use:
85
- # pdf.pages(nil, false).each {|page| page << stamp_page}
86
- #
82
+ # The << operator defaults to secure injection by renaming references to avoid conflics.
87
83
  #
88
- # Notice that page objects are Hash class objects and the << operator was added to the Page instances without altering the class.
84
+ # Less recommended, but available - for overlaying pages using compressed data that might not be editable (due to limited filter support), you can use:
85
+ # pdf.pages(nil, false).each {|page| page << stamp_page}
89
86
  #
90
87
  # == Page Numbering
91
88
  # adding page numbers to a PDF object or file is as simple as can be:
@@ -406,14 +406,20 @@ module CombinePDF
406
406
  out = []
407
407
  scanner = StringScanner.new text
408
408
  until scanner.eos? do
409
- if scanner.scan /[#{rtl_characters}]/
410
- out.unshift scanner.matched
411
- end
412
- if scanner.scan /[^#{rtl_characters}]+/
409
+ if scanner.scan /[#{rtl_characters} ]/
413
410
  out.unshift scanner.matched
411
+ elsif scanner.scan /[^#{rtl_characters}]+/
412
+ if out.empty? && scanner.matched.match(/[\s]$/) && !scanner.eos?
413
+ warn "MOVING SPACE: #{scanner.matched}"
414
+ white_space_to_move = scanner.matched.match(/[\s]+$/).to_s
415
+ out.unshift scanner.matched[0..-1-white_space_to_move.length]
416
+ out.unshift white_space_to_move
417
+ else
418
+ out.unshift scanner.matched
419
+ end
414
420
  end
415
421
  end
416
- out.join
422
+ out.join.strip
417
423
  end
418
424
  end
419
425
 
@@ -15,7 +15,7 @@ module CombinePDF
15
15
  #
16
16
  # this Hash lists the private Hash keys that the CombinePDF library uses to
17
17
  # differentiate between complex PDF objects.
18
- PRIVATE_HASH_KEYS = [:indirect_reference_id, :indirect_generation_number, :raw_stream_content, :is_reference_only, :referenced_object, :indirect_without_dictionary, :linked_fonts]
18
+ PRIVATE_HASH_KEYS = [:indirect_reference_id, :indirect_generation_number, :raw_stream_content, :is_reference_only, :referenced_object, :indirect_without_dictionary]
19
19
  #@private
20
20
  #:nodoc: all
21
21
 
@@ -130,6 +130,8 @@ module CombinePDF
130
130
  names_dictionary.each do |old_key, new_key|
131
131
  stream[:raw_stream_content].gsub! _object_to_pdf(old_key), _object_to_pdf(new_key) ##### PRAY(!) that the parsed datawill be correctly reproduced!
132
132
  end
133
+ # patch back to PDF defaults, for OCRed PDF files.
134
+ stream[:raw_stream_content] = "q\nq\nq\nDeviceRGB CS\nDeviceRGB cs\n0 0 0 rg\n0 0 0 RG\n0 Tr\n%s\nQ\nQ\nQ\n" % stream[:raw_stream_content]
133
135
  end
134
136
 
135
137
  new_page
@@ -48,9 +48,6 @@ module CombinePDF
48
48
  # The << operator defaults to secure injection by renaming references to avoid conflics. For overlaying pages using compressed data that might not be editable (due to limited filter support), you can use:
49
49
  # pdf.pages(nil, false).each {|page| page << stamp_page}
50
50
  #
51
- #
52
- # Notice that page objects are Hash class objects and the << operator was added to the Page instances without altering the class.
53
- #
54
51
  # == Page Numbering
55
52
  # adding page numbers to a PDF object or file is as simple as can be:
56
53
  # pdf = CombinePDF.new "file_to_number.pdf"
@@ -281,8 +278,11 @@ module CombinePDF
281
278
  return self #return self object for injection chaining (pdf << page << page << page)
282
279
  end
283
280
 
284
- # LATIN ONLY - NO UNICODE SUPPORT YET
285
281
  # add page numbers to the PDF
282
+ #
283
+ # For unicode text, a unicode font(s) must first be registered. the registered font(s) must supply the
284
+ # subset of characters used in the text. UNICODE IS AN ISSUE WITH THE PDF FORMAT - USE CAUSION.
285
+ #
286
286
  # options:: a Hash of options setting the behavior and format of the page numbers:
287
287
  # - :number_format a string representing the format for page number. defaults to ' - %s - ' (allows for letter numbering as well, such as "a", "b"...).
288
288
  # - :number_location an Array containing the location for the page numbers, can be :top, :buttom, :top_left, :top_right, :bottom_left, :bottom_right. defaults to [:top, :buttom].
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: combine_pdf
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.12
4
+ version: 0.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Boaz Segev