combine_pdf 0.2.31 → 0.2.32
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/.gitignore +2 -0
- data/CHANGELOG.md +8 -0
- data/README.md +18 -3
- data/lib/combine_pdf.rb +1 -0
- data/lib/combine_pdf/decrypt.rb +2 -2
- data/lib/combine_pdf/exceptions.rb +4 -0
- data/lib/combine_pdf/parser.rb +3 -2
- data/lib/combine_pdf/renderer.rb +3 -1
- data/lib/combine_pdf/version.rb +1 -1
- metadata +4 -3
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA1:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 965be3f2286760e04ed715a9514a1205b27aaf3e
|
|
4
|
+
data.tar.gz: ee3098114904a30410990bd6bd0b715aae32f81d
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: c55779f6471f54dfd815b61dc77f62d92774f7d5dd29877af2806c7c6de5ef9eb224f8ec6b97f1f535d020227fc4026ce058098e634f974bf631ea244a622af8
|
|
7
|
+
data.tar.gz: 9c352999dc4fa5c694e6a14f1a6ab9b02b9615af55c8991915d89283ddfad416ff0c8b5f6efe4b19df165718b37b01a138aeac21f0d693dc491426af0e4f59cf
|
data/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,14 @@
|
|
|
2
2
|
|
|
3
3
|
***
|
|
4
4
|
|
|
5
|
+
Change log v.0.2.32 (un-released)
|
|
6
|
+
|
|
7
|
+
**Update**: Better errors when encryption related exceptions occur. Credit to Paul Shumeika ( @pshumeika ).
|
|
8
|
+
|
|
9
|
+
**Fix**: Fixed an issue where empty pages with NULL contents value would cause CombinePDF to raise an exception when rendering. Credit to @holtmaat and Jason DeLeon (@progmem) (both in submitted different PRs regarding the issue).
|
|
10
|
+
|
|
11
|
+
***
|
|
12
|
+
|
|
5
13
|
Change log v.0.2.31
|
|
6
14
|
|
|
7
15
|
**Broke**: Broke the fix for issue #65 so that Radio buttons data might be lost... working on a fix.
|
data/README.md
CHANGED
|
@@ -103,7 +103,7 @@ pdf.save "file_with_numbering.pdf"
|
|
|
103
103
|
|
|
104
104
|
Numbering can be done with many different options, with different formating, with or without a box object, and even with opacity values - see documentation.
|
|
105
105
|
|
|
106
|
-
## Loading and
|
|
106
|
+
## Loading and Parsing PDF data
|
|
107
107
|
|
|
108
108
|
Loading PDF data can be done from file system or directly from the memory.
|
|
109
109
|
|
|
@@ -120,14 +120,28 @@ pdf_data = prawn_pdf_document.render # Import PDF data from Prawn
|
|
|
120
120
|
pdf = CombinePDF.parse(pdf_data)
|
|
121
121
|
```
|
|
122
122
|
|
|
123
|
-
|
|
123
|
+
Using `parse` is also effective when loading data from a remote location, circumventing the need for unnecessary temporary files. For example:
|
|
124
|
+
|
|
125
|
+
```ruby
|
|
126
|
+
require 'combine_pdf'
|
|
127
|
+
require 'net/http'
|
|
128
|
+
|
|
129
|
+
url = "https://example.com/my.pdf"
|
|
130
|
+
pdf = CombinePDF.parse Net::HTTP.get_response(URI.parse(url)).body
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
## Rendering PDF data
|
|
134
|
+
|
|
135
|
+
Similarly, to loading and parsing, rendering can also be performed either to the memory or to a file.
|
|
136
|
+
|
|
137
|
+
You can output a string of PDF data using `.to_pdf`. For example, to let a user download the PDF from either a [Rails application](http://rubyonrails.org) or a [Plezi application](http://www.plezi.io):
|
|
124
138
|
|
|
125
139
|
```ruby
|
|
126
140
|
# in a controller action
|
|
127
141
|
send_data combined_file.to_pdf, filename: "combined.pdf", type: "application/pdf"
|
|
128
142
|
```
|
|
129
143
|
|
|
130
|
-
|
|
144
|
+
In [Sinatra](http://www.sinatrarb.com):
|
|
131
145
|
|
|
132
146
|
```ruby
|
|
133
147
|
# in your path's block
|
|
@@ -136,6 +150,7 @@ body combined_file.to_pdf
|
|
|
136
150
|
headers 'content-type' => "application/pdf"
|
|
137
151
|
```
|
|
138
152
|
|
|
153
|
+
|
|
139
154
|
If you prefer to save the PDF data to a file, you can always use the `save` method as we did in our earlier examples.
|
|
140
155
|
|
|
141
156
|
Some PDF files contain optional content sections which cannot always be merged reliably. By default, an exception is
|
data/lib/combine_pdf.rb
CHANGED
data/lib/combine_pdf/decrypt.rb
CHANGED
|
@@ -25,7 +25,7 @@ module CombinePDF
|
|
|
25
25
|
def initialize(objects = [], root_dictionary = {})
|
|
26
26
|
@objects = objects
|
|
27
27
|
@encryption_dictionary = actual_object(root_dictionary[:Encrypt])
|
|
28
|
-
raise 'Cannot decrypt an encrypted file without an encryption dictionary!' unless @encryption_dictionary
|
|
28
|
+
raise EncryptionError, 'Cannot decrypt an encrypted file without an encryption dictionary!' unless @encryption_dictionary
|
|
29
29
|
@root_dictionary = actual_object(root_dictionary)
|
|
30
30
|
@padding_key = [0x28, 0xBF, 0x4E, 0x5E, 0x4E, 0x75, 0x8A, 0x41,
|
|
31
31
|
0x64, 0x00, 0x4E, 0x56, 0xFF, 0xFA, 0x01, 0x08,
|
|
@@ -181,7 +181,7 @@ module CombinePDF
|
|
|
181
181
|
def raise_encrypted_error(object = nil)
|
|
182
182
|
object ||= @encryption_dictionary.to_s.split(',').join("\n")
|
|
183
183
|
warn "Data raising exception:\n #{object.to_s.split(',').join("\n")}"
|
|
184
|
-
raise 'File is encrypted - not supported.'
|
|
184
|
+
raise EncryptionError, 'File is encrypted - not supported.'
|
|
185
185
|
end
|
|
186
186
|
|
|
187
187
|
def change_references_to_actual_values(hash_with_references = {})
|
data/lib/combine_pdf/parser.rb
CHANGED
|
@@ -77,13 +77,14 @@ module CombinePDF
|
|
|
77
77
|
|
|
78
78
|
raise 'Unknown PDF parsing error - maleformed PDF file?' unless (@parsed.select { |i| !i.is_a?(Hash) }).empty?
|
|
79
79
|
|
|
80
|
-
if @root_object == {}
|
|
80
|
+
if @root_object == {}.freeze
|
|
81
81
|
xref_streams = @parsed.select { |obj| obj.is_a?(Hash) && obj[:Type] == :XRef }
|
|
82
82
|
xref_streams.each do |xref_dictionary|
|
|
83
83
|
@root_object.merge! xref_dictionary
|
|
84
84
|
end
|
|
85
85
|
end
|
|
86
|
-
|
|
86
|
+
|
|
87
|
+
raise 'root is unknown - cannot determine if file is Encrypted' if @root_object == {}.freeze
|
|
87
88
|
|
|
88
89
|
if @root_object[:Encrypt]
|
|
89
90
|
# change_references_to_actual_values @root_object
|
data/lib/combine_pdf/renderer.rb
CHANGED
|
@@ -80,6 +80,8 @@ module CombinePDF
|
|
|
80
80
|
('[' + (object.collect { |item| object_to_pdf(item) }).join(' ') + ']').force_encoding(Encoding::ASCII_8BIT)
|
|
81
81
|
end
|
|
82
82
|
|
|
83
|
+
EMPTY_PAGE_CONTENT_STREAM = {is_reference_only: true, referenced_object: { indirect_reference_id: 0, raw_stream_content: '' }}
|
|
84
|
+
|
|
83
85
|
def format_hash_to_pdf(object)
|
|
84
86
|
# if the object is only a reference:
|
|
85
87
|
# special conditions apply, and there is only the setting of the reference (if needed) and output
|
|
@@ -107,7 +109,7 @@ module CombinePDF
|
|
|
107
109
|
end
|
|
108
110
|
end
|
|
109
111
|
# remove extra page references.
|
|
110
|
-
object[:Contents].delete(
|
|
112
|
+
object[:Contents].delete(EMPTY_PAGE_CONTENT_STREAM) if object[:Type] == :Page && object[:Contents].is_a?(Array)
|
|
111
113
|
# correct stream length, if the object is a stream.
|
|
112
114
|
object[:Length] = object[:raw_stream_content].bytesize if object[:raw_stream_content]
|
|
113
115
|
|
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.32
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Boaz Segev
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2016-
|
|
11
|
+
date: 2016-11-24 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: ruby-rc4
|
|
@@ -72,6 +72,7 @@ files:
|
|
|
72
72
|
- lib/combine_pdf/api.rb
|
|
73
73
|
- lib/combine_pdf/basic_writer.rb
|
|
74
74
|
- lib/combine_pdf/decrypt.rb
|
|
75
|
+
- lib/combine_pdf/exceptions.rb
|
|
75
76
|
- lib/combine_pdf/filter.rb
|
|
76
77
|
- lib/combine_pdf/fonts.rb
|
|
77
78
|
- lib/combine_pdf/page_methods.rb
|
|
@@ -103,7 +104,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
103
104
|
version: '0'
|
|
104
105
|
requirements: []
|
|
105
106
|
rubyforge_project:
|
|
106
|
-
rubygems_version: 2.5.
|
|
107
|
+
rubygems_version: 2.5.2
|
|
107
108
|
signing_key:
|
|
108
109
|
specification_version: 4
|
|
109
110
|
summary: Combine, stamp and watermark PDF files in pure Ruby.
|