combine_pdf 1.0.24 → 1.0.26
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +8 -0
- data/README.md +10 -10
- data/lib/combine_pdf/pdf_public.rb +3 -3
- data/lib/combine_pdf/version.rb +1 -1
- data/test/automated +24 -24
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: fc482ee9da31ce7fc01e92da3936e44407e4879c7058817bb4a57ba0fc0a4165
|
4
|
+
data.tar.gz: 1dd52423ee639783510a9ad9aa347e9597e2e14d38a11914d05a03b5116006f2
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f6ac66c289762c5f2b6473f450e8808e79d9ca9f927b68f083204a93b7f213a433a6fc4076cd3241ff1a17ac7c08297087ab1bf76e58b0dad12e7a0eebc34628
|
7
|
+
data.tar.gz: a39c619af345d61d7d40ba0d0b0a32438caace2b05512273afe1f21b737de6324dcc483f34234c5123c9ed0508a0db481b4bf90ffc06fce2484922f2c6c7abe0
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,13 @@
|
|
1
1
|
# Change Log
|
2
2
|
|
3
|
+
#### Change log v.1.0.26 (2023-12-22)
|
4
|
+
|
5
|
+
**Performance**: possible performance bump. Credit to @denislavski (Denislav Naydenov) for opening PR #235.
|
6
|
+
|
7
|
+
#### Change log v.1.0.25 (2023-12-19)
|
8
|
+
|
9
|
+
**Fix**: possible improve memory usage. Credit to @denislavski (Denislav Naydenov) for opening PR #233 and suggesting this change.
|
10
|
+
|
3
11
|
#### Change log v.1.0.24 (2023-10-19)
|
4
12
|
|
5
13
|
**Fix**: possible `nil` in loop. Credit to @jkowens for PR #231 and adding a quick fix using a simple guard.
|
data/README.md
CHANGED
@@ -7,23 +7,23 @@
|
|
7
7
|
|
8
8
|
CombinePDF is a nifty model, written in pure Ruby, to parse PDF files and combine (merge) them with other PDF files, watermark them or stamp them (all using the PDF file format and pure Ruby code).
|
9
9
|
|
10
|
-
##
|
10
|
+
## Unmaintained - Help Wanted(!)
|
11
11
|
|
12
|
-
|
12
|
+
I decided to stop maintaining this gem and hope someone could take over the PR reviews and maintenance of this gem (or simply open a successful fork).
|
13
13
|
|
14
|
-
|
15
|
-
gem install combine_pdf
|
16
|
-
```
|
14
|
+
I wrote this gem because I needed to solve an issue with bates-numbering existing PDF documents.
|
17
15
|
|
18
|
-
|
16
|
+
However, since 2014 I have been maintaining the gem for free and for no reason at all, except that I enjoyed sharing it with the community.
|
19
17
|
|
20
|
-
I
|
18
|
+
I love this gem, but I cannot keep maintaining it as I have my own projects to focus own and I need both the time and (more importantly) the mindspace.
|
21
19
|
|
22
|
-
|
20
|
+
## Install
|
23
21
|
|
24
|
-
|
22
|
+
Install with ruby gems:
|
25
23
|
|
26
|
-
|
24
|
+
```ruby
|
25
|
+
gem install combine_pdf
|
26
|
+
```
|
27
27
|
|
28
28
|
## Known Limitations
|
29
29
|
|
@@ -206,9 +206,9 @@ module CombinePDF
|
|
206
206
|
xref_location = loc
|
207
207
|
# xref_location = 0
|
208
208
|
# out.each { |line| xref_location += line.bytesize + 1}
|
209
|
-
out << "xref\n0 #{indirect_object_count}\n0000000000 65535 f
|
210
|
-
xref.each { |offset| out << (
|
211
|
-
out <<
|
209
|
+
out << "xref\n0 #{indirect_object_count}\n0000000000 65535 f "
|
210
|
+
xref.each { |offset| out << ("%010d 00000 n ".freeze % offset) }
|
211
|
+
out << 'trailer'.freeze
|
212
212
|
out << "<<\n/Root #{false || "#{catalog[:indirect_reference_id]} #{catalog[:indirect_generation_number]} R"}"
|
213
213
|
out << "/Size #{indirect_object_count}"
|
214
214
|
out << "/Info #{@info[:indirect_reference_id]} #{@info[:indirect_generation_number]} R"
|
data/lib/combine_pdf/version.rb
CHANGED
data/test/automated
CHANGED
@@ -16,51 +16,51 @@ require 'combine_pdf'
|
|
16
16
|
# Pry.start
|
17
17
|
|
18
18
|
pdf = CombinePDF.load "../../test\ pdfs/filled_form.pdf"
|
19
|
-
pdf.save '01_check_radio_buttuns.pdf'
|
19
|
+
pdf.save '../tmp/01_check_radio_buttuns.pdf'
|
20
20
|
pdf = CombinePDF.load "../../test\ pdfs/filled_form.pdf"
|
21
21
|
pdf << CombinePDF.load("../../test\ pdfs/empty_form.pdf")
|
22
22
|
pdf << CombinePDF.load("../../test\ pdfs/filled_form.pdf")
|
23
|
-
pdf.save '02_check_form_unification_middle_is_empty.pdf'
|
23
|
+
pdf.save '../tmp/02_check_form_unification_middle_is_empty.pdf'
|
24
24
|
|
25
25
|
pdf = CombinePDF.load "../../test\ pdfs/check_form_data__objstreams_w_versions.pdf"
|
26
|
-
pdf.save '02_01_check_form_data_ordering_issue.pdf'
|
26
|
+
pdf.save '../tmp/02_01_check_form_data_ordering_issue.pdf'
|
27
27
|
|
28
28
|
|
29
29
|
pdf = CombinePDF.load '../../test pdfs/share-font-background.pdf'
|
30
30
|
pdf2 = CombinePDF.load '../../test pdfs/share-font-foreground.pdf'
|
31
31
|
i = 0
|
32
32
|
pdf.pages.each { |pg| pg << pdf2.pages[i] }
|
33
|
-
pdf.save '03_check_font_conflict.pdf'
|
33
|
+
pdf.save '../tmp/03_check_font_conflict.pdf'
|
34
34
|
|
35
35
|
pdf = CombinePDF.load '../../test pdfs/nil_1.pdf'
|
36
36
|
pdf2 = CombinePDF.load '../../test pdfs/nil_2.pdf'
|
37
37
|
pdf << pdf2
|
38
|
-
pdf.save '03_01_nil_value_conflict.pdf'
|
38
|
+
pdf.save '../tmp/03_01_nil_value_conflict.pdf'
|
39
39
|
|
40
40
|
pdf = CombinePDF.load '../../test pdfs/space_after_streram_keyword.pdf'
|
41
|
-
pdf.save '03_02_extra_space_after_stream_keyword.pdf'
|
41
|
+
pdf.save '../tmp/03_02_extra_space_after_stream_keyword.pdf'
|
42
42
|
|
43
43
|
pdf = CombinePDF.load '../../test pdfs/nested_difference.pdf'
|
44
|
-
pdf.save '03_03_nested_difference.pdf'
|
44
|
+
pdf.save '../tmp/03_03_nested_difference.pdf'
|
45
45
|
|
46
46
|
pdf = CombinePDF.load '../../test pdfs/names_go_haywire_0.pdf'
|
47
47
|
pdf << CombinePDF.load('../../test pdfs/names_go_haywire_1.pdf')
|
48
|
-
pdf.save '04_check_view_and_names_reference.pdf'
|
48
|
+
pdf.save '../tmp/04_check_view_and_names_reference.pdf'
|
49
49
|
|
50
50
|
pdf = CombinePDF.load('../../test pdfs/outlines/self_merge_err.pdf')
|
51
|
-
pdf.save '05_x1_scribus_test.pdf'
|
51
|
+
pdf.save '../tmp/05_x1_scribus_test.pdf'
|
52
52
|
pdf = CombinePDF.load('../../test pdfs/outlines/self_merge_err.pdf')
|
53
53
|
pdf << CombinePDF.load('../../test pdfs/outlines/self_merge_err.pdf')
|
54
|
-
pdf.save '05_x2_scribus_test.pdf'
|
54
|
+
pdf.save '../tmp/05_x2_scribus_test.pdf'
|
55
55
|
pdf = CombinePDF.load "../../test pdfs/outlines/named_dest.pdf";nil
|
56
|
-
pdf.save '05_check_named_dest_links.pdf' # this will take a while
|
56
|
+
pdf.save '../tmp/05_check_named_dest_links.pdf' # this will take a while
|
57
57
|
pdf = CombinePDF.load "../../test pdfs/outlines/named_dest.pdf";nil
|
58
58
|
pdf << CombinePDF.load('../../test pdfs/outlines/named_dest.pdf'); nil
|
59
|
-
pdf.save '05_1_timeless_check_named_dest_links.pdf' # never ends... :-(
|
59
|
+
pdf.save '../tmp/05_1_timeless_check_named_dest_links.pdf' # never ends... :-(
|
60
60
|
|
61
61
|
pdf = CombinePDF.load '../../test pdfs/outline_small.pdf'
|
62
62
|
pdf << CombinePDF.load('../../test pdfs/outline_small.pdf')
|
63
|
-
pdf.save '06_check_links_to_second_copy.pdf'
|
63
|
+
pdf.save '../tmp/06_check_links_to_second_copy.pdf'
|
64
64
|
|
65
65
|
lists = %w(../../test\ pdfs/outlines/self_merge_err.pdf ../../test\ pdfs/outlines/big_toc.pdf ../../test\ pdfs/outlines/bigger_toc.pdf ../../test\ pdfs/outlines/named_dest_no_toc.pdf ../../test\ pdfs/outlines/named_dest_no_toc2.pdf ../../test\ pdfs/outlines/named_dest.pdf ../../test\ pdfs/outlines/named_dest2.pdf)
|
66
66
|
|
@@ -77,7 +77,7 @@ lists.each do |n|
|
|
77
77
|
end
|
78
78
|
pdf = CombinePDF.new
|
79
79
|
lists.each { |n| pdf << CombinePDF.load(n) }
|
80
|
-
pdf.save('07_named destinations.pdf')
|
80
|
+
pdf.save('../tmp/07_named destinations.pdf')
|
81
81
|
|
82
82
|
pdf = CombinePDF.new
|
83
83
|
lists.each { |n| pdf << CombinePDF.load(n) }
|
@@ -91,15 +91,15 @@ pdf.number_pages(start_at: 1,
|
|
91
91
|
number_location: [:top, :bottom],
|
92
92
|
opacity: 0.75)
|
93
93
|
|
94
|
-
pdf.save('07_named destinations_numbered.pdf')
|
94
|
+
pdf.save('../tmp/07_named destinations_numbered.pdf')
|
95
95
|
|
96
|
-
CombinePDF.load("../../test\ pdfs/Scribus-unknown_err.pdf").save '08_1-unknown-err-empty-str.pdf'
|
97
|
-
CombinePDF.load("../../test\ pdfs/Scribus-unknown_err2.pdf").save '08_2-unknown-err-empty-str.pdf'
|
98
|
-
CombinePDF.load("../../test\ pdfs/Scribus-unknown_err3.pdf").save '08_3-unknown-err-empty-str.pdf'
|
99
|
-
CombinePDF.load("../../test\ pdfs/xref_in_middle.pdf").save '08_4-xref-in-middle.pdf'
|
100
|
-
CombinePDF.load("../../test\ pdfs/xref_split.pdf").save '08_5-xref-fragmented.pdf'
|
96
|
+
CombinePDF.load("../../test\ pdfs/Scribus-unknown_err.pdf").save '../tmp/08_1-unknown-err-empty-str.pdf'
|
97
|
+
CombinePDF.load("../../test\ pdfs/Scribus-unknown_err2.pdf").save '../tmp/08_2-unknown-err-empty-str.pdf'
|
98
|
+
CombinePDF.load("../../test\ pdfs/Scribus-unknown_err3.pdf").save '../tmp/08_3-unknown-err-empty-str.pdf'
|
99
|
+
CombinePDF.load("../../test\ pdfs/xref_in_middle.pdf").save '../tmp/08_4-xref-in-middle.pdf'
|
100
|
+
CombinePDF.load("../../test\ pdfs/xref_split.pdf").save '../tmp/08_5-xref-fragmented.pdf'
|
101
101
|
|
102
|
-
CombinePDF.load("../../test\ pdfs/nil_object.pdf").save('09_nil_in_parsed_array.pdf')
|
102
|
+
CombinePDF.load("../../test\ pdfs/nil_object.pdf").save('../tmp/09_nil_in_parsed_array.pdf')
|
103
103
|
|
104
104
|
encrypted = [ "../../test\ pdfs/pdf-reader/encrypted_version4_revision4_128bit_aes_user_pass_apples_enc_metadata.pdf",
|
105
105
|
"../../test\ pdfs/AESv2\ encrypted.pdf",
|
@@ -110,7 +110,7 @@ encrypted = [ "../../test\ pdfs/pdf-reader/encrypted_version4_revision4_128bit_a
|
|
110
110
|
encrypted.length.times do |i|
|
111
111
|
fname = File.basename encrypted[i]
|
112
112
|
begin
|
113
|
-
CombinePDF.load(encrypted[i]).save "10_#{i}_#{fname}"
|
113
|
+
CombinePDF.load(encrypted[i]).save "../tmp/10_#{i}_#{fname}"
|
114
114
|
rescue => e
|
115
115
|
puts e.class.name, e.message
|
116
116
|
if(i == 0)
|
@@ -126,10 +126,10 @@ IO.binwrite '11_prawn.pdf', (Prawn::Document.new { text 'Hello World!' }).render
|
|
126
126
|
page = CombinePDF.parse((Prawn::Document.new { text 'Hello World!' }).render)
|
127
127
|
pdf = CombinePDF.new
|
128
128
|
pdf << page
|
129
|
-
pdf.save '11_parsed_from_prawn.pdf'
|
129
|
+
pdf.save '../tmp/11_parsed_from_prawn.pdf'
|
130
130
|
pdf = CombinePDF.new
|
131
131
|
pdf << page << page
|
132
|
-
pdf.save('11_AcrobatReader_is_unique_page.pdf')
|
132
|
+
pdf.save('../tmp/11_AcrobatReader_is_unique_page.pdf')
|
133
133
|
|
134
134
|
puts GC.stat.inspect
|
135
135
|
# unify = [
|
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.
|
4
|
+
version: 1.0.26
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Boaz Segev
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2023-
|
11
|
+
date: 2023-12-22 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: ruby-rc4
|