ilovepdf 1.0.1 → 1.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 +4 -4
- data/README.md +12 -0
- data/lib/ilovepdf.rb +4 -0
- data/lib/ilovepdf/errors.rb +2 -0
- data/lib/ilovepdf/helper.rb +13 -0
- data/lib/ilovepdf/ilovepdf.rb +7 -4
- data/lib/ilovepdf/task.rb +32 -14
- data/lib/ilovepdf/tool/extract.rb +18 -0
- data/lib/ilovepdf/tool/pagenumber.rb +2 -2
- data/lib/ilovepdf/tool/pdfa.rb +3 -2
- data/lib/ilovepdf/tool/validate_pdfa.rb +31 -0
- data/lib/ilovepdf/version.rb +1 -1
- data/samples/extract_advanced.rb +23 -0
- data/samples/extract_basic.rb +15 -0
- data/samples/imagepdf_advanced.rb +25 -0
- data/samples/imagepdf_basic.rb +14 -0
- data/samples/pdfa_advanced.rb +4 -1
- data/samples/pdfa_basic.rb +0 -3
- data/samples/validatepdfa_advanced.rb +18 -0
- data/samples/validatepdfa_basic.rb +16 -0
- metadata +11 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 0211e131cc78ddb6b8820c6e0945ab437fb261ee
|
4
|
+
data.tar.gz: 06818cd4287dba2b14133892f1fce8d936ad650f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8735a92025a4918ea8ab6dbbaa81242c0a3e00e699eabed76b044c544376e3d19f1378dd70bd1beda9a71638cd2286e67bd61ad98d55c735b18f41e189d9eac4
|
7
|
+
data.tar.gz: 181d5b26c2d02fcffd22f07b0035bf7c458696144d2f3a1375581717ba733411628c84d9682e345a6da1366dd21c07b0a540306e20a361ed14c241846463f88f
|
data/README.md
CHANGED
@@ -1,5 +1,6 @@
|
|
1
1
|
iLovePDF Api - Ruby Library
|
2
2
|
--------------------------
|
3
|
+
[](https://travis-ci.org/ilovepdf/ilovepdf-php)
|
3
4
|
[](https://badge.fury.io/gh/ilovepdf%2Filovepdf-ruby)
|
4
5
|
[](https://opensource.org/licenses/MIT)
|
5
6
|
|
@@ -22,6 +23,8 @@ Develop and automate PDF processing tasks like:
|
|
22
23
|
* Stamp a Watermark
|
23
24
|
* Repair PDF
|
24
25
|
* PDF to PDF/A
|
26
|
+
* Validate PDF/A
|
27
|
+
* Extract
|
25
28
|
|
26
29
|
Each one with several settings to get your desired results.
|
27
30
|
|
@@ -103,6 +106,15 @@ end
|
|
103
106
|
| packaged_filename | This allows you to specify the filename of the compressed file in case there is more than 1 file to be downloaded | |
|
104
107
|
| output_filename | The final name of the processed file | |
|
105
108
|
|
109
|
+
#### Methods to query after performing the **execute** API method:
|
110
|
+
* result: It has stored the last **Ilovepdf::Response**
|
111
|
+
|
112
|
+
#### Methods to query after performing the **download** API method:
|
113
|
+
* download_info: Returns a [struct](https://ruby-doc.org/core-2.2.0/Struct.html) with the following info
|
114
|
+
* :output_filename
|
115
|
+
* :output_file
|
116
|
+
* :output_filetype
|
117
|
+
|
106
118
|
### Tool attributes
|
107
119
|
|
108
120
|
All tools have specific attributes you can access and modify.
|
data/lib/ilovepdf.rb
CHANGED
@@ -9,6 +9,7 @@ require 'rest-client'
|
|
9
9
|
# Base classes
|
10
10
|
require "ilovepdf/errors"
|
11
11
|
require "ilovepdf/response"
|
12
|
+
require "ilovepdf/helper"
|
12
13
|
require "ilovepdf/ilovepdf"
|
13
14
|
require "ilovepdf/file"
|
14
15
|
require "ilovepdf/task"
|
@@ -20,12 +21,15 @@ require 'ilovepdf/tool/merge'
|
|
20
21
|
require 'ilovepdf/tool/officepdf'
|
21
22
|
require 'ilovepdf/tool/pagenumber'
|
22
23
|
require 'ilovepdf/tool/pdfa'
|
24
|
+
require 'ilovepdf/tool/validate_pdfa'
|
23
25
|
require 'ilovepdf/tool/pdfjpg'
|
24
26
|
require 'ilovepdf/tool/repair'
|
25
27
|
require 'ilovepdf/tool/rotate'
|
26
28
|
require 'ilovepdf/tool/split'
|
27
29
|
require 'ilovepdf/tool/unlock'
|
28
30
|
require 'ilovepdf/tool/watermark'
|
31
|
+
require 'ilovepdf/tool/protect'
|
32
|
+
require 'ilovepdf/tool/extract'
|
29
33
|
|
30
34
|
module Ilovepdf
|
31
35
|
class << self
|
data/lib/ilovepdf/errors.rb
CHANGED
data/lib/ilovepdf/ilovepdf.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
module Ilovepdf
|
2
2
|
class Ilovepdf
|
3
|
-
attr_accessor :api_version, :token, :encrypt_key
|
3
|
+
attr_accessor :api_version, :token, :encrypt_key, :debug, :timeout, :long_timeout
|
4
4
|
|
5
5
|
START_SERVER = 'https://api.ilovepdf.com'.freeze
|
6
6
|
API_VERSION = 'v1'.freeze
|
@@ -13,10 +13,13 @@ module Ilovepdf
|
|
13
13
|
def initialize(public_key=nil, secret_key=nil)
|
14
14
|
set_api_keys(public_key, secret_key)
|
15
15
|
api_version = API_VERSION
|
16
|
+
self.timeout = 10
|
17
|
+
self.long_timeout = nil
|
16
18
|
end
|
17
19
|
|
18
20
|
def new_task(tool_name)
|
19
|
-
|
21
|
+
camelized_name = Helper.camelize_str(tool_name.to_s)
|
22
|
+
task_klass = ::Ilovepdf::Tool.const_get(camelized_name) rescue false
|
20
23
|
unless task_klass
|
21
24
|
raise ::Ilovepdf::Error.new("Unknown tool '#{tool_name}'. Available tools: #{self.class.all_tool_names.to_s}")
|
22
25
|
end
|
@@ -24,7 +27,7 @@ module Ilovepdf
|
|
24
27
|
end
|
25
28
|
|
26
29
|
def self.all_tool_names
|
27
|
-
::Ilovepdf::Tool.constants.map(
|
30
|
+
::Ilovepdf::Tool.constants.map{|tool_name| Helper.underscore_str(tool_name.to_s)}
|
28
31
|
end
|
29
32
|
|
30
33
|
def self.raise_exceptions=(value)
|
@@ -62,7 +65,7 @@ module Ilovepdf
|
|
62
65
|
def send_request(http_method, endpoint, extra_opts={})
|
63
66
|
to_server = worker_server ? worker_server : START_SERVER
|
64
67
|
|
65
|
-
timeout_to_use = LONG_JOB_ENDPOINTS.include?(endpoint.to_sym) ?
|
68
|
+
timeout_to_use = LONG_JOB_ENDPOINTS.include?(endpoint.to_sym) ? self.long_timeout : self.timeout
|
66
69
|
extra_opts[:body] ||= {}
|
67
70
|
extra_opts[:headers] ||= {}
|
68
71
|
|
data/lib/ilovepdf/task.rb
CHANGED
@@ -3,7 +3,10 @@ module Ilovepdf
|
|
3
3
|
attr_accessor :task_id, :tool, :packaged_filename, :output_filename,
|
4
4
|
:ignore_errors, :ignore_password, :try_pdf_repair
|
5
5
|
|
6
|
-
|
6
|
+
attr_reader :result
|
7
|
+
|
8
|
+
API_PARAMS = []
|
9
|
+
DOWNLOAD_INFO = [:output_filename, :output_file, :output_filetype]
|
7
10
|
|
8
11
|
def initialize(public_key, secret_key)
|
9
12
|
super(public_key, secret_key)
|
@@ -38,8 +41,29 @@ module Ilovepdf
|
|
38
41
|
files.last
|
39
42
|
end
|
40
43
|
|
41
|
-
def download(path=nil)
|
42
|
-
download_file
|
44
|
+
def download(path=nil, create_directory: false)
|
45
|
+
download_file
|
46
|
+
|
47
|
+
if path
|
48
|
+
path = Pathname.new(path).to_s if path.is_a?(Pathname)
|
49
|
+
path.chop! if path.end_with? '/'
|
50
|
+
else
|
51
|
+
path = '.'
|
52
|
+
end
|
53
|
+
|
54
|
+
destination = "#{path}/#{download_info.output_filename}"
|
55
|
+
FileUtils.mkdir_p(path) if create_directory
|
56
|
+
::File.open(destination, 'wb'){|file| file.write(download_info.output_file) }
|
57
|
+
true
|
58
|
+
end
|
59
|
+
|
60
|
+
def blob
|
61
|
+
download_file
|
62
|
+
download_info.output_file
|
63
|
+
end
|
64
|
+
|
65
|
+
def download_info
|
66
|
+
@download_info ||= Struct.new(*DOWNLOAD_INFO).new
|
43
67
|
end
|
44
68
|
|
45
69
|
# [API Methods] Actions on task
|
@@ -49,7 +73,7 @@ module Ilovepdf
|
|
49
73
|
end
|
50
74
|
|
51
75
|
def execute
|
52
|
-
perform_process_request
|
76
|
+
@result = perform_process_request
|
53
77
|
end
|
54
78
|
|
55
79
|
def delete!
|
@@ -87,7 +111,7 @@ module Ilovepdf
|
|
87
111
|
@files = new_array_of_files
|
88
112
|
end
|
89
113
|
|
90
|
-
def download_file
|
114
|
+
def download_file
|
91
115
|
response = perform_filedownload_request
|
92
116
|
content_disposition = response.headers[:content_disposition]
|
93
117
|
|
@@ -98,15 +122,9 @@ module Ilovepdf
|
|
98
122
|
filename = match_data[1].gsub('"', '')
|
99
123
|
end
|
100
124
|
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
else
|
105
|
-
path = '.'
|
106
|
-
end
|
107
|
-
destination = "#{path}/#{filename}"
|
108
|
-
::File.open(destination, 'wb'){|file| file.write(response.raw_body) }
|
109
|
-
file = response.raw_body
|
125
|
+
download_info.output_filename = filename
|
126
|
+
download_info.output_file = response.raw_body
|
127
|
+
download_info.output_filetype = ::File.extname(filename)
|
110
128
|
true
|
111
129
|
end
|
112
130
|
|
@@ -0,0 +1,18 @@
|
|
1
|
+
module Ilovepdf
|
2
|
+
module Tool
|
3
|
+
class Extract < ::Ilovepdf::Task
|
4
|
+
API_PARAMS = [:detailed]
|
5
|
+
attr_accessor *API_PARAMS
|
6
|
+
|
7
|
+
def initialize(public_key, secret_key)
|
8
|
+
self.tool = :extract
|
9
|
+
super(public_key, secret_key)
|
10
|
+
end
|
11
|
+
|
12
|
+
def detailed
|
13
|
+
@detailed ||= false
|
14
|
+
end
|
15
|
+
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -9,8 +9,8 @@ module Ilovepdf
|
|
9
9
|
|
10
10
|
attr_accessor *API_PARAMS
|
11
11
|
|
12
|
-
VERTICAL_POSITION_VALUES = ['bottom', 'top']
|
13
|
-
HORIZONTAL_POSITION_VALUES = ['left', '
|
12
|
+
VERTICAL_POSITION_VALUES = ['bottom', 'middle' ,'top']
|
13
|
+
HORIZONTAL_POSITION_VALUES = ['left', 'center', 'right']
|
14
14
|
FONT_FAMILY_VALUES = [ 'Arial', 'Arial Unicode MS', 'Verdana', 'Courier',
|
15
15
|
'Times New Roman', 'Comic Sans MS',
|
16
16
|
'WenQuanYi Zen Hei', 'Lohit Marathi'
|
data/lib/ilovepdf/tool/pdfa.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
module Ilovepdf
|
2
2
|
module Tool
|
3
3
|
class Pdfa < ::Ilovepdf::Task
|
4
|
-
API_PARAMS = [:conformance]
|
4
|
+
API_PARAMS = [:conformance, :allow_downgrade]
|
5
5
|
attr_accessor *API_PARAMS
|
6
6
|
|
7
7
|
CONFORMANCE_VALUES = ['pdfa-1b', 'pdfa-1a', 'pdfa-2b', 'pdfa-2u',
|
@@ -11,6 +11,7 @@ module Ilovepdf
|
|
11
11
|
def initialize(public_key, secret_key)
|
12
12
|
self.tool = :pdfa
|
13
13
|
super(public_key, secret_key)
|
14
|
+
self.allow_downgrade = true
|
14
15
|
end
|
15
16
|
|
16
17
|
def conformance= new_val
|
@@ -19,7 +20,7 @@ module Ilovepdf
|
|
19
20
|
end
|
20
21
|
|
21
22
|
def conformance
|
22
|
-
@conformance ||= '
|
23
|
+
@conformance ||= 'pdfa-2b'
|
23
24
|
end
|
24
25
|
end
|
25
26
|
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
module Ilovepdf
|
2
|
+
module Tool
|
3
|
+
class ValidatePdfa < ::Ilovepdf::Task
|
4
|
+
API_PARAMS = [:conformance]
|
5
|
+
attr_accessor *API_PARAMS
|
6
|
+
|
7
|
+
CONFORMANCE_VALUES = ['pdfa-1b', 'pdfa-1a', 'pdfa-2b', 'pdfa-2u',
|
8
|
+
'pdfa-2a', 'pdfa-3b', 'pdfa-3u', 'pdfa-3a'
|
9
|
+
]
|
10
|
+
|
11
|
+
def initialize(public_key, secret_key)
|
12
|
+
self.tool = :validatepdfa
|
13
|
+
super(public_key, secret_key)
|
14
|
+
end
|
15
|
+
|
16
|
+
def conformance= new_val
|
17
|
+
raise Errors::ArgumentEnumError.new(CONFORMANCE_VALUES) unless CONFORMANCE_VALUES.include? new_val
|
18
|
+
@conformance = new_val
|
19
|
+
end
|
20
|
+
|
21
|
+
def conformance
|
22
|
+
@conformance ||= 'pdfa-2b'
|
23
|
+
end
|
24
|
+
|
25
|
+
private
|
26
|
+
def download_file
|
27
|
+
raise ::Ilovepdf::Errors::UnsupportedFunctionalityError.new('This tool does not download files (Check in the sample files how to use it)')
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
data/lib/ilovepdf/version.rb
CHANGED
@@ -0,0 +1,23 @@
|
|
1
|
+
require "bundler/setup"
|
2
|
+
require 'ilovepdf'
|
3
|
+
|
4
|
+
# You can call task class directly
|
5
|
+
my_task = Ilovepdf::Tool::Extract.new("PUBLIC_KEY", "SECRET_KEY");
|
6
|
+
|
7
|
+
# File object keeps information about its server_filename and the properties you can set
|
8
|
+
file = my_task.add_file '/path/to/file/document.pdf'
|
9
|
+
|
10
|
+
# By setting this parameter to true,
|
11
|
+
# we'll have detailed contents extraction into a CSV-formatted file
|
12
|
+
my_task.detailed = true
|
13
|
+
|
14
|
+
# and set name for output file.
|
15
|
+
# the task will set the correct file extension for you.
|
16
|
+
my_task.output_filename = 'csv_filename'
|
17
|
+
|
18
|
+
# Process files
|
19
|
+
response = my_task.execute
|
20
|
+
|
21
|
+
# and finally download the file. If no path is set, it will be downloaded on your current working directory
|
22
|
+
# It will download a text file with Linux line endings
|
23
|
+
my_task.download
|
@@ -0,0 +1,15 @@
|
|
1
|
+
require "bundler/setup"
|
2
|
+
require 'ilovepdf'
|
3
|
+
|
4
|
+
# You can call task class directly
|
5
|
+
my_task = Ilovepdf::Tool::Extract.new("PUBLIC_KEY", "SECRET_KEY");
|
6
|
+
|
7
|
+
# File object keeps information about its server_filename and the properties you can set
|
8
|
+
file = my_task.add_file '/path/to/file/document.pdf'
|
9
|
+
|
10
|
+
# Process files
|
11
|
+
response = my_task.execute
|
12
|
+
|
13
|
+
# and finally download the file. If no path is set, it will be downloaded on your current working directory
|
14
|
+
# It will download a text file with Linux line endings
|
15
|
+
my_task.download
|
@@ -0,0 +1,25 @@
|
|
1
|
+
require "bundler/setup"
|
2
|
+
require 'ilovepdf'
|
3
|
+
|
4
|
+
# You can call task class directly
|
5
|
+
my_task = Ilovepdf::Tool::Imagepdf.new("PUBLIC_KEY", "SECRET_KEY");
|
6
|
+
|
7
|
+
# File object keeps information about its server_filename and the properties you can set
|
8
|
+
file = my_task.add_file '/path/to/file/photo.png'
|
9
|
+
file2 = my_task.add_file '/path/to/file/image.tiff'
|
10
|
+
|
11
|
+
# Merge After: Default is true. If it is false then it will download a zip file with a pdf for each image
|
12
|
+
my_task.merge_after = false
|
13
|
+
|
14
|
+
# and set name for output file.
|
15
|
+
# the task will set the correct file extension for you.
|
16
|
+
my_task.output_filename = 'pdf_filename'
|
17
|
+
|
18
|
+
# and name for splitted document (inside the zip file)
|
19
|
+
my_task.packaged_filename = 'zip_filename'
|
20
|
+
|
21
|
+
# Process files
|
22
|
+
response = my_task.execute
|
23
|
+
|
24
|
+
# and finally download the file. If no path is set, it will be downloaded on your current working directory
|
25
|
+
my_task.download
|
@@ -0,0 +1,14 @@
|
|
1
|
+
require "bundler/setup"
|
2
|
+
require 'ilovepdf'
|
3
|
+
|
4
|
+
# You can call task class directly
|
5
|
+
my_task = Ilovepdf::Tool::Imagepdf.new("PUBLIC_KEY", "SECRET_KEY");
|
6
|
+
|
7
|
+
# File object keeps information about its server_filename and the properties you can set
|
8
|
+
file = my_task.add_file '/path/to/file/photo.png'
|
9
|
+
|
10
|
+
# Process files
|
11
|
+
response = my_task.execute
|
12
|
+
|
13
|
+
# and finally download the file. If no path is set, it will be downloaded on your current working directory
|
14
|
+
my_task.download
|
data/samples/pdfa_advanced.rb
CHANGED
@@ -8,7 +8,10 @@ my_task = Ilovepdf::Tool::Pdfa.new("PUBLIC_KEY", "SECRET_KEY");
|
|
8
8
|
file = my_task.add_file '/path/to/file/document.pdf'
|
9
9
|
|
10
10
|
# Set conformance
|
11
|
-
|
11
|
+
my_task.conformance = 'pdfa-2a'
|
12
|
+
|
13
|
+
# don't allow downgrading in case your conformance level fails
|
14
|
+
file.allow_downgrade = false
|
12
15
|
|
13
16
|
# and set name for output file.
|
14
17
|
# the task will set the correct file extension for you.
|
data/samples/pdfa_basic.rb
CHANGED
@@ -7,9 +7,6 @@ my_task = Ilovepdf::Tool::Pdfa.new("PUBLIC_KEY", "SECRET_KEY");
|
|
7
7
|
# File object keeps information about its server_filename and the properties you can set
|
8
8
|
file = my_task.add_file '/path/to/file/document.pdf'
|
9
9
|
|
10
|
-
# Set conformance
|
11
|
-
file.conformance = 'pdfa-1b'
|
12
|
-
|
13
10
|
# Finally is time to process the files. i.e We'll send them to Ilovepdf servers :)
|
14
11
|
response = my_task.execute
|
15
12
|
|
@@ -0,0 +1,18 @@
|
|
1
|
+
require "bundler/setup"
|
2
|
+
require 'ilovepdf'
|
3
|
+
|
4
|
+
# You can call task class directly
|
5
|
+
my_task = Ilovepdf::Tool::ValidatePdfa.new("PUBLIC_KEY", "SECRET_KEY");
|
6
|
+
|
7
|
+
# File object keeps information about its server_filename and the properties you can set
|
8
|
+
file = my_task.add_file '/path/to/file/document.pdf'
|
9
|
+
|
10
|
+
file.conformance = 'pdfa-2a'
|
11
|
+
|
12
|
+
# Finally is time to process the files. i.e We'll send them to Ilovepdf servers :)
|
13
|
+
response = my_task.execute
|
14
|
+
|
15
|
+
response.body['validations'].each do |results|
|
16
|
+
file = my_task.files.find{|file| file.server_filename == results['server_filename']}
|
17
|
+
puts "File with name '#{file.filename}' has the following status: #{results['status']}"
|
18
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
require "bundler/setup"
|
2
|
+
require 'ilovepdf'
|
3
|
+
|
4
|
+
# You can call task class directly
|
5
|
+
my_task = Ilovepdf::Tool::ValidatePdfa.new("PUBLIC_KEY", "SECRET_KEY");
|
6
|
+
|
7
|
+
# File object keeps information about its server_filename and the properties you can set
|
8
|
+
file = my_task.add_file '/path/to/file/document.pdf'
|
9
|
+
|
10
|
+
# Finally is time to process the files. i.e We'll send them to Ilovepdf servers :)
|
11
|
+
response = my_task.execute
|
12
|
+
|
13
|
+
response.body['validations'].each do |results|
|
14
|
+
file = my_task.files.find{|file| file.server_filename == results['server_filename']}
|
15
|
+
puts "File with name '#{file.filename}' has the following status: #{results['status']}"
|
16
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ilovepdf
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0
|
4
|
+
version: 1.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Leonardo Collazo
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-
|
11
|
+
date: 2017-06-15 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rest-client
|
@@ -146,10 +146,12 @@ files:
|
|
146
146
|
- lib/ilovepdf.rb
|
147
147
|
- lib/ilovepdf/errors.rb
|
148
148
|
- lib/ilovepdf/file.rb
|
149
|
+
- lib/ilovepdf/helper.rb
|
149
150
|
- lib/ilovepdf/ilovepdf.rb
|
150
151
|
- lib/ilovepdf/response.rb
|
151
152
|
- lib/ilovepdf/task.rb
|
152
153
|
- lib/ilovepdf/tool/compress.rb
|
154
|
+
- lib/ilovepdf/tool/extract.rb
|
153
155
|
- lib/ilovepdf/tool/imagepdf.rb
|
154
156
|
- lib/ilovepdf/tool/merge.rb
|
155
157
|
- lib/ilovepdf/tool/officepdf.rb
|
@@ -161,10 +163,15 @@ files:
|
|
161
163
|
- lib/ilovepdf/tool/rotate.rb
|
162
164
|
- lib/ilovepdf/tool/split.rb
|
163
165
|
- lib/ilovepdf/tool/unlock.rb
|
166
|
+
- lib/ilovepdf/tool/validate_pdfa.rb
|
164
167
|
- lib/ilovepdf/tool/watermark.rb
|
165
168
|
- lib/ilovepdf/version.rb
|
166
169
|
- samples/compress_advanced.rb
|
167
170
|
- samples/compress_basic.rb
|
171
|
+
- samples/extract_advanced.rb
|
172
|
+
- samples/extract_basic.rb
|
173
|
+
- samples/imagepdf_advanced.rb
|
174
|
+
- samples/imagepdf_basic.rb
|
168
175
|
- samples/merge_advanced.rb
|
169
176
|
- samples/merge_basic.rb
|
170
177
|
- samples/pdfa_advanced.rb
|
@@ -179,6 +186,8 @@ files:
|
|
179
186
|
- samples/try_catch_errors.rb
|
180
187
|
- samples/unlock_advanced.rb
|
181
188
|
- samples/unlock_basic.rb
|
189
|
+
- samples/validatepdfa_advanced.rb
|
190
|
+
- samples/validatepdfa_basic.rb
|
182
191
|
- samples/watermark_advanced.rb
|
183
192
|
- samples/watermark_basic.rb
|
184
193
|
- uploads/sample_pdf.pdf
|