combine_pdf 0.2.5 → 0.2.6
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 +4 -4
- data/CHANGELOG.md +8 -0
- data/lib/combine_pdf/parser.rb +7 -4
- data/lib/combine_pdf/pdf_protected.rb +2 -0
- data/lib/combine_pdf/pdf_public.rb +5 -9
- data/lib/combine_pdf/version.rb +1 -1
- metadata +3 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 63c084e190f8c5f47aaa3db6cd32064a7e7dcfb2
|
4
|
+
data.tar.gz: dbd7e1efe7b372abae318839eb80658913664b29
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a374e9be84a6397294a09b1fc76ae0a346ee9bce8abf1d8750742417494ecacf2b49ed843c060c13716046121d5c1ca3b570bf7fc18c828a99ce5cb857a043fc
|
7
|
+
data.tar.gz: bf343d5749131896f4fe1dc2882bd62eb0696eb20c9021048e0b1d8f15837b580a0b50a4db083e752a3e73aa5bcbc88909f78c5d46b7f5ddb1e38cb264919e17
|
data/CHANGELOG.md
CHANGED
@@ -2,6 +2,14 @@
|
|
2
2
|
|
3
3
|
***
|
4
4
|
|
5
|
+
Change log v.0.2.6
|
6
|
+
|
7
|
+
**fixed**: Hasan Iskandar fixed issue #30 - Output file cannot be saved from Adobe Reader with "Save As optimizes for Fast Web View" preference enabled. Thank you Hasan.
|
8
|
+
|
9
|
+
**update**: More parsing error detection; Updated the endstream EOL marker indentifier for safer indentification.
|
10
|
+
|
11
|
+
***
|
12
|
+
|
5
13
|
Change log v.0.2.5
|
6
14
|
|
7
15
|
**feature**: circumvents an issue with 'wkhtmltopdf', where sometimes the `endobj` keyword would be missing, causing malformed PDF data. The parser will now attempt to auto-fix any `endobj` missing keywords.
|
data/lib/combine_pdf/parser.rb
CHANGED
@@ -65,10 +65,13 @@ module CombinePDF
|
|
65
65
|
@scanner.pos = 0
|
66
66
|
if @scanner.scan /\%PDF\-[\d\-\.]+/
|
67
67
|
@version = @scanner.matched.scan(/[\d\.]+/)[0].to_f
|
68
|
+
@scanner.skip_until /[\n\r]+/
|
69
|
+
# @scanner.skip /[^\d]*/
|
68
70
|
end
|
69
|
-
|
70
71
|
@parsed = _parse_
|
71
72
|
|
73
|
+
raise "Unknown PDF parsing error - maleformed PDF file?" unless (@parsed.select {|i| !i.is_a?(Hash)}).empty?
|
74
|
+
|
72
75
|
if @root_object == {}
|
73
76
|
xref_streams = @parsed.select {|obj| obj.is_a?(Hash) && obj[:Type] == :XRef}
|
74
77
|
xref_streams.each do |xref_dictionary|
|
@@ -175,8 +178,8 @@ module CombinePDF
|
|
175
178
|
raise "Parsing Error: PDF file error - a stream object wasn't properly colsed using 'endstream'!" unless str
|
176
179
|
# need to remove end of stream
|
177
180
|
if out.last.is_a? Hash
|
178
|
-
out.last[:raw_stream_content] = str[0...-10] #cuts only one EON char (\n or \r)
|
179
|
-
|
181
|
+
# out.last[:raw_stream_content] = str[0...-10] #cuts only one EON char (\n or \r)
|
182
|
+
out.last[:raw_stream_content] = str.gsub(/[\n\r]?[\n\r]endstream\z/, "")
|
180
183
|
else
|
181
184
|
warn "Stream not attached to dictionary!"
|
182
185
|
out << str[0...-10].force_encoding(Encoding::ASCII_8BIT)
|
@@ -323,7 +326,7 @@ module CombinePDF
|
|
323
326
|
if @scanner.matched[-1] == 'r'
|
324
327
|
if @scanner.skip_until(/<</)
|
325
328
|
data = _parse_
|
326
|
-
@root_object
|
329
|
+
@root_object ||= {}
|
327
330
|
@root_object[data.shift] = data.shift while data[0]
|
328
331
|
end
|
329
332
|
##########
|
@@ -163,8 +163,10 @@ module CombinePDF
|
|
163
163
|
def to_pdf options = {}
|
164
164
|
#reset version if not specified
|
165
165
|
@version = 1.5 if @version.to_f == 0.0
|
166
|
-
#set
|
167
|
-
@info[:CreationDate] = Time.now.strftime "D:%Y%m%d%H%M%S%:::z'00"
|
166
|
+
#set info for merged file
|
167
|
+
@info[:ModDate] = @info[:CreationDate] = Time.now.strftime "D:%Y%m%d%H%M%S%:::z'00"
|
168
|
+
@info[:Subject] = options[:subject] if options[:subject]
|
169
|
+
@info[:Producer] = options[:producer] if options[:producer]
|
168
170
|
#rebuild_catalog
|
169
171
|
catalog = rebuild_catalog_and_objects
|
170
172
|
# add ID and generation numbers to objects
|
@@ -193,13 +195,7 @@ module CombinePDF
|
|
193
195
|
out << out.pop + "trailer"
|
194
196
|
out << "<<\n/Root #{false || "#{catalog[:indirect_reference_id]} #{catalog[:indirect_generation_number]} R"}"
|
195
197
|
out << "/Size #{indirect_object_count.to_s}"
|
196
|
-
|
197
|
-
PRIVATE_HASH_KEYS.each {|key| @info.delete key} # make sure the dictionary is rendered inline, without stream
|
198
|
-
@info[:CreationDate] = @info[:ModDate] = Time.now.strftime "D:%Y%m%d%H%M%S%:::z'00"
|
199
|
-
@info[:Subject] = options[:subject] if options[:subject]
|
200
|
-
@info[:Producer] = options[:producer] if options[:producer]
|
201
|
-
out << "/Info #{object_to_pdf @info}"
|
202
|
-
end
|
198
|
+
out << "/Info #{@info[:indirect_reference_id]} #{@info[:indirect_generation_number]} R"
|
203
199
|
out << ">>\nstartxref\n#{xref_location.to_s}\n%%EOF"
|
204
200
|
# when finished, remove the numbering system and keep only pointers
|
205
201
|
remove_old_ids
|
data/lib/combine_pdf/version.rb
CHANGED
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: 0.2.
|
4
|
+
version: 0.2.6
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Boaz Segev
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-
|
11
|
+
date: 2015-10-08 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: ruby-rc4
|
@@ -102,10 +102,9 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
102
102
|
version: '0'
|
103
103
|
requirements: []
|
104
104
|
rubyforge_project:
|
105
|
-
rubygems_version: 2.4.5
|
105
|
+
rubygems_version: 2.4.5.1
|
106
106
|
signing_key:
|
107
107
|
specification_version: 4
|
108
108
|
summary: Combine, stamp and watermark PDF files in pure Ruby.
|
109
109
|
test_files:
|
110
110
|
- test/console
|
111
|
-
has_rdoc:
|